【免殺】C2免殺技術(五)動態API

一、什么是動態API

在C2免殺領域中,“動態API” 主要指的是繞過靜態檢測的一種技術手段,其本質是運行時動態解析和調用Windows API函數,而不是在程序編譯階段就明確引用這些API。這種方式可以有效躲避靜態分析工具和殺軟的簽名識別。

為什么使用動態API?

靜態殺軟和EDR會掃描程序中是否包含可疑API(比如 CreateRemoteThreadVirtualAllocExWriteProcessMemory 等),一旦在導入表(IAT)或代碼段中發現這些函數,就可能被標記為惡意。通過動態API調用,這些函數不會直接出現在導入表中,也不會以明文字符串形式出現,提高了免殺能力。

什么是IAT導入表?

在Windows可執行文件(如 .exe.dll)中,導入表(IAT,Import Address Table) 是PE結構中的一個關鍵部分,它告訴操作系統這個程序運行時需要哪些外部模塊(DLL)和函數(API),并在加載時將它們的地址填入到程序中可調用的位置。一句話定義:IAT 是Windows程序用于調用外部DLL函數的一張“函數地址表”,由操作系統在加載時填充。?

舉個直觀的例子,假設你的程序要使用 Windows 的 MessageBoxA 函數,它位于 user32.dll 中。編譯后 (靜態導入),在PE文件頭的導入表中,會列出DLL名、函數名;加載時操作系統的PE加載器會加載user32.dll,查找MessageBoxA函數的內存地址,并把這個地址寫入到你的程序的IAT表項。然后你的代碼中對MessageBoxA的調用,實際上是跳轉到這個表項。

因此,殺軟和EDR能直接查看IAT,看你的程序調用了哪些函數(如上圖),一旦發現這些敏感API,程序可能立即被標記為惡意; 通過動態API可以繞過IAT暴露。

二、免殺效果展示

這里用C++寫一個簡單的喝水提醒的程序,代碼如下:

#include <windows.h>
#include <iostream>
#include <thread>
#include <chrono>void remindToDrinkWater() {while (true) {// 等待1小時(3600秒)//std::this_thread::sleep_for(std::chrono::hours(1));std::this_thread::sleep_for(std::chrono::seconds(10));// 彈出消息框提醒喝水MessageBoxA(NULL, "該喝水了!", "喝水提醒", MB_OK | MB_ICONINFORMATION);}
}int main() {// 啟動提醒喝水的線程std::thread reminderThread(remindToDrinkWater);// 主線程保持運行reminderThread.join();return 0;
}

運行測試,功能正常

再復制一份,加上動態API解析和調用代碼

#include <windows.h>
#include <thread>
#include <chrono>
#include <iostream>typedef int (WINAPI* MessageBoxAFunc)(HWND, LPCSTR, LPCSTR, UINT);void remindToDrinkWater() {// 獲取 user32.dll 的模塊句柄HMODULE hUser32 = LoadLibraryA("user32.dll");if (!hUser32) {std::cerr << "無法加載 user32.dll" << std::endl;return;}// 動態獲取 MessageBoxA 函數地址MessageBoxAFunc pMessageBoxA = (MessageBoxAFunc)GetProcAddress(hUser32, "MessageBoxA");if (!pMessageBoxA) {std::cerr << "無法獲取 MessageBoxA 函數地址" << std::endl;return;}while (true) {std::this_thread::sleep_for(std::chrono::seconds(10)); // 測試用:每10秒提醒一次pMessageBoxA(NULL, "該喝水了!", "喝水提醒", MB_OK | MB_ICONINFORMATION);}
}int main() {std::thread reminder(remindToDrinkWater);reminder.join();  // 等待線程結束(實際永遠運行)return 0;
}

運行測試,功能正常

將兩個程序均編譯出來

使用StudyPE+對比一下兩者的導入表,發現右邊使用動態API技術的程序比左邊少了user32.dll,所以IAT不可能存在MessageBoxA函數

放到360下檢測

運行測試,正常

三、結尾

免殺效果通常受多方面影響,沒有哪一種技術或者手段能夠通吃,通常需要多種手段結合才能最終實現免殺;其次,實戰中面臨的環境也不一樣,不同的殺軟效果也不一樣,具體問題還需具體分析。本系列文章以技術的實現為主,驗證時講究點到為止,以此表達一項技術的有效性。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83602.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python爬蟲實戰:研究JavaScript壓縮方法實現逆向解密

一、引言 在數字化信息爆炸的時代,網絡數據已成為驅動各行業發展的核心資產。Python 憑借其豐富的庫生態和簡潔的語法,成為網絡爬蟲開發的首選語言。然而,隨著互聯網安全防護機制的不斷升級,網站普遍采用 JavaScript 壓縮與混淆技術保護其核心邏輯和數據傳輸,這使得傳統爬…

HTTP 請求走私(HTTP Request Smuggling)

HTTP 請求走私&#xff08;HTTP Request Smuggling&#xff09;是一種通過利用前端代理&#xff08;如負載均衡器、CDN&#xff09;和后端服務器在 解析 HTTP 請求時存在不一致性 的漏洞&#xff0c;從而實現 注入惡意請求 的攻擊技術。 一、基本原理 HTTP 請求走私主要依賴兩…

【Google機器學習實踐指南(線性回歸篇)

&#x1f50d; Google機器學習實踐指南&#xff08;線性回歸篇&#xff09; Google機器學習實戰(3)-單變量線性回歸核心解析&#xff0c;掌握房價預測模型 一、建模流程全景圖 ▲ 四大核心步驟&#xff1a; 數據可視化→特征工程→模型訓練→預測推理 二、房價預測實戰 1. …

python打卡day16

NumPy 數組基礎 因為前天說了shap&#xff0c;這里涉及到數據形狀尺寸問題&#xff0c;所以需要在這一節說清楚&#xff0c;后續的神經網絡我們將要和他天天打交道。 知識點&#xff1a; numpy數組的創建&#xff1a;簡單創建、隨機創建、遍歷、運算numpy數組的索引&#xff1a…

ubuntu 20.04 更改國內鏡像源-阿里源 確保可用

鏡像源是跟linux版本一一對應的,查詢自己系統的版本號&#xff1a; 命令&#xff1a;lsb_release -a macw:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal macw:~$…

基于OpenCV的SIFT特征和FLANN匹配器的指紋認證

文章目錄 引言一、概述二、代碼解析1. 圖像顯示函數2. 核心認證函數2.1 創建SIFT特征提取器2.2 檢測關鍵點和計算描述符&#xff08;源圖像&#xff09;2.3 檢測關鍵點和計算描述符&#xff08;模板圖像&#xff09;2.4 創建FLANN匹配器2.5 使用K近鄰匹配 3. 匹配點篩選4. 認證…

四品種交易策略

策略概述 策略思路: 交易品種:同時交易四個品種,每個品種使用總資金的10%。 合約選擇:使用連續合約(data0)發出交易信號,實際交易 主力合約(data1)和下一個主力合約(data2)。 資金管理:總資金用A_CurrentEquity表示,交易手數據此計算。 止損執行:盤中達到止損…

MySQL事務的一些奇奇怪怪知識

Gorm事務有error卻不返回會發生什么 Gorm包是大家比較高頻使用。正常的用法是&#xff0c;如果有失敗返回error&#xff0c;整體rollback&#xff0c;如果不返回error則commit。下面是Transaction的源碼&#xff1a; // Transaction start a transaction as a block, return …

時序數據庫、實時數據庫與實時數倉:如何為實時數據場景選擇最佳解決方案?

隨著物聯網、金融交易、在線游戲等場景對實時數據處理需求的增長&#xff0c;市場上涌現出多種專門針對實時數據處理的數據庫解決方案。然而&#xff0c;面對時序數據庫、實時數據庫和實時數據倉庫這三種看似相似的技術&#xff0c;許多技術決策者常常感到困惑&#xff1a;它們…

Spring3+Vue3項目中的知識點——JWT

全稱&#xff1a;JOSN Web Token 定義了一種簡潔的、自包含的格式&#xff0c;用于通信雙方以json數據格式的安全傳輸信息 組成&#xff1a; 第一部分&#xff1a;Header&#xff08;頭&#xff09;&#xff0c;記錄令牌類型、簽名算法等。 第二部分&#xff1a;Payload&am…

微服務架構詳解

微服務架構詳解:從概念到實踐(附代碼案例) 目錄 微服務架構詳解:從概念到實踐(附代碼案例) 一、微服務架構概述 1.1 什么是微服務? 1.2 微服務的核心思想 二、微服務架構的優勢與挑戰 2.1 優勢 2.2 挑戰 三、微服務架構的核心組件 3.1 服務注冊與發現 示例代…

linux下編寫shell腳本一鍵編譯源碼

0 前言 進行linux應用層編程時&#xff0c;經常會使用重復的命令對源碼進行編譯&#xff0c;然后把編譯生成的可執行文件拷貝到工作目錄&#xff0c;操作非常繁瑣且容易出錯。本文編寫一個簡單的shell腳本一鍵編譯源碼。 1 linux下編寫shell腳本一鍵編譯源碼 shell腳本如下&…

學習!FastAPI

目錄 FastAPI簡介快速開始安裝FastApiFastAPI CLI自動化文檔 Reqeust路徑參數Enum 類用于路徑參數路徑參數和數值校驗 查詢參數查詢參數和字符串校驗 請求體多個請求體參數嵌入單個請求體參數 CookieHeader表單文件直接使用請求 ResponseResponse Model多個關聯模型 響應狀態碼…

DAY 4 缺失值的處理

\1. 打開數據 import pandas as pd data pd.read_csv(rdata.csv) data\2. 查看數據 # 打印數據集的基本信息&#xff08;列名、非空值數量、數據類型等&#xff09; print("data.info() - 數據集的基本信息&#xff08;列名、非空值數量、數據類型等&#xff09;&#…

Java面試實戰:從Spring Boot到分布式緩存的深度探索

Java面試實戰&#xff1a;從Spring Boot到分布式緩存的深度探索 場景介紹 在一家著名的互聯網大廠&#xff0c;面試官老王正對求職者“水貨程序員”明哥進行Java技術面試。明哥帶著一點緊張和自信&#xff0c;迎接這場技術“拷問”。 第一輪&#xff1a;基礎問題 老王&#…

UART、SPI、IIC復習總結

一、UART 1、UART和USART的異同&#xff1f; 相同點 基本功能&#xff1a;都是用于串行通信的數據收發設備&#xff0c;能夠實現數據在不同設備之間的傳輸。在異步通信模式下&#xff0c;二者的工作方式相似&#xff0c;都使用起始位、數據位、校驗位&#xff08;可選&#…

PostGIS實現矢量數據轉柵格數據【ST_AsRaster】

ST_AsRaster函數應用詳解&#xff1a;將矢量數據轉換為柵格數據 [文章目錄] 一、函數概述 二、函數參數與分組說明 三、核心特性與注意事項 四、示例代碼 五、應用場景 六、版本依賴 七、總結 一、函數概述 ST_AsRaster是PostGIS中用于將幾何對象&#xff08;如點、線…

Linux 線程(上)

前言&#xff1a;大家早上中午晚上好&#xff01;&#xff01;今天來學習一下linux系統下所謂的線程吧&#xff01;&#xff01;&#xff01; 一、重新理解進程&#xff0c;什么是進程&#xff1f; 1.1 圖解 其中黑色虛線部分一整塊就是進程&#xff0c;注意&#xff1a;一整…

Java API學習筆記

一.類 1. String 類 不可變性&#xff1a;String對象創建后不可修改&#xff0c;每次操作返回新對象 String str "Hello"; str.length(); str.charAt(0); str.substring(1, 4); str.indexOf("l"); str.equals("hel…

醫療信息系統安全防護體系的深度構建與理論實踐融合

一、醫療數據訪問系統的安全挑戰與理論基礎 1.1 系統架構安全需求分析 在醫療信息系統中&#xff0c;基于身份標識的信息查詢功能通常采用分層架構設計&#xff0c;包括表現層、應用層和數據層。根據ISO/IEC 27001信息安全管理體系要求&#xff0c;此類系統需滿足數據保密性…