前面我們曾經錄製了apc應用層的注入,我們把peload.pe以位元組集的形式載入到我們的注入程式,在這裡在qqvip群提供這個檔案,我們先看看注入流程:
apc記憶體注入流程
1、開啟程序
2、讀入dll檔案及獲取主要彙編指令
3、建立檔案對映物件
4、將檔案對映物件對映到當前程式記憶體空間
5、 寫入記憶體
(1)寫彙編指令
(2)寫注入的dll
6、關閉檔案對映物件
7、建立記憶體對映物件 核心
8、獲取getmodulehandlea位址
9、建立遠端執行緒並掛起
10、把apc物件加入到指定執行緒的apc佇列中
11、恢復執行緒控制代碼
12、關閉對映物件控制代碼
13、關閉程序控制代碼
易語言apc記憶體注入原始碼:
.版本 2
.子程式 apc_記憶體注入, , 公開
.引數 程序id, 整數型
.引數 dll路徑, 文字型
.區域性變數 程序控制代碼, 整數型
.區域性變數 dll檔案, 位元組集
.區域性變數 dll檔案長度, 整數型
.區域性變數 主要彙編指令長度, 整數型
.區域性變數 對映物件控制代碼, 整數型
.區域性變數 對映物件開始位址, 整數型
.區域性變數 核心對映物件基址, 整數型
.區域性變數 核心對映物件的大小, 整數型
.區域性變數 getmodulehandlea位址, 整數型
.區域性變數 執行緒控制代碼, 整數型
' 1、開啟程序
程序控制代碼 = openprocess (2035711, 假, 程序id)
' 2、讀入dll檔案及獲取主要彙編指令
dll檔案 = 讀入檔案 (dll路徑)
dll檔案長度 = 取位元組集長度 (dll檔案)
主要彙編指令長度 = 取位元組集長度 (#pe檔案)
' 3、建立檔案對映物件
' 4、將檔案對映物件對映到當前程式記憶體空間
對映物件開始位址 = mapviewoffile (對映物件控制代碼, 2, 0, 0, dll檔案長度 + 主要彙編指令長度)
' 5、 寫入記憶體
' (1)寫彙編指令
' (2)寫注入的dll
rtlmovememory_位元組集 (對映物件開始位址, #pe檔案, 主要彙編指令長度)
rtlmovememory_位元組集 (對映物件開始位址 + 主要彙編指令長度, dll檔案, dll檔案長度)
' 6、關閉檔案對映物件
unmapviewoffile (對映物件開始位址)
' 7、建立記憶體對映物件 核心
zwmapviewofsection (對映物件控制代碼, 程序控制代碼, 核心對映物件基址, 0, 0, 0, 核心對映物件的大小, 1, 0, 64)
' 8、獲取getmodulehandlea位址
getmodulehandlea位址 = getprocaddress (getmodulehandlea (「kernel32.dll」), 「getmodulehandlea」, )
' 9、建立遠端執行緒並掛起
執行緒控制代碼 = createremotethread (程序控制代碼, 0, 0, getmodulehandlea位址, 0, 4, 0)
' 10、把apc物件加入到指定執行緒的apc佇列中
queueuserapc (核心對映物件基址, 執行緒控制代碼, 核心對映物件基址 + 主要彙編指令長度)
' 11、恢復執行緒控制代碼
resumethread (執行緒控制代碼)
' 12、關閉對映物件控制代碼
closehandle (對映物件控制代碼)
' 13、關閉程序控制代碼
closehandle (程序控制代碼)
本課是apc記憶體注入的演示,我們在封裝acp記憶體注入時,只需要兩個引數,乙個是程序id,乙個是注入的dll的路徑。
注入dll說明:
1、易語言編寫的dll必須採用 黑月編譯,
2、採用黑夜編譯的時候,必須選擇 彙編模式編譯,
apc注入dll原始碼:
.版本 2
.程式集 程式集1
.子程式 _啟動子程式, 整數型, , 請在本子程式中放置動態鏈結庫初始化**
test ()
_臨時子程式 () ' 在初始化**執行完畢後呼叫測試**
返回 (0) ' 返回值被忽略。
.子程式 _臨時子程式
' 本名稱子程式用作測試程式用,僅在開發及除錯環境中有效,編譯發布程式前將被系統自動清空,請將所有用作測試的臨時**放在本子程式中。 ***注意不要修改本子程式的名稱、引數及返回值型別。
.子程式 test, , 公開
資訊框 (「我是apc注入的dll,當你看到我的時候我已經被注入到了其他程序記憶體裡了!」, 0, , )
注入呼叫
.版本 2
.子程式 _按鈕1_被單擊
apc_記憶體注入 (到整數 (編輯框1.內容), 編輯框2.內容)
原始碼參考:易語言apc記憶體注入 易語言APC應用層注入
步驟 1 開啟需要注入的程序 2 獲取dll檔案路徑的長度 3 申請記憶體位址 4 將dll路徑寫入記憶體 5 獲取loadlibrarya在kernel32.dll中的位址 6 獲取系統執行緒快照控制代碼,4在快照中包含所有的執行緒 7 初始化執行緒結構大小 8 驗證檢索與執行緒相關的第乙個執行緒...
程式設計實現APC注入dll到程序
執行緒被喚醒時apc中的註冊函式會被執行,因此使用queueuserapc向apc佇列插入函式即可完成注入 include include include bool apcinject char char dword getprocessidbyprocessname char bool getal...
易語言 記憶體修改框架
原始碼 id 程序 名取id plantsvszombies.exe 除錯輸出 id 基位址 記憶體.讀整數 id,進製 十六到十 6a9ec0 除錯輸出 基位址 一級偏移 記憶體.讀整數 id,基位址 進製 十六到十 768 除錯輸出 基位址 監視熱鍵 陽光增加,f8鍵 陽光 記憶體.讀整數 id...