步驟
1、開啟需要注入的程序
2、獲取dll檔案路徑的長度
3、申請記憶體位址
4、將dll路徑寫入記憶體
5、獲取loadlibrarya在kernel32.dll中的位址
6、獲取系統執行緒快照控制代碼,4在快照中包含所有的執行緒
7、初始化執行緒結構大小
8、驗證檢索與執行緒相關的第乙個執行緒的資訊
9、判斷父程序id等於 引數的程序id
10、開啟執行緒
11、不等於說明開啟執行緒成功,開始核心注入
(1)指向乙個我們提供的apc函式指標
(2)執行緒控制代碼
(3)指定乙個被傳到apc引數指向的函式的值
12、關閉程序控制代碼
13、關閉執行緒區域性
易語言apc應用層注入原始碼:
.版本 2
.子程式 apc注入_r3, 邏輯型, , apc應用層注入
.引數 程序id, 整數型
.引數 dll檔案, 文字型
.區域性變數 dll檔案大小, 整數型
.區域性變數 記憶體位址, 整數型
.區域性變數 loadlibrarya位址, 整數型
.區域性變數 快照控制代碼, 整數型
.區域性變數 執行緒資訊, threadentry32
' 1、開啟需要注入的程序
程序控制代碼 = openprocess (2035711, 假, 程序id)
.如果真 (程序控制代碼 = 0)
資訊框 (「開啟程序失敗!」, 0, , )
返回 (假)
.如果真結束
' 2、獲取dll檔案路徑的長度
dll檔案大小 = 取文字長度 (dll檔案) + 1
' 3、申請記憶體位址
記憶體位址 = virtualallocex (程序控制代碼, 0, dll檔案大小, 4096, 64)
.如果真 (記憶體位址 = 0)
資訊框 (「申請記憶體位址失敗!」, 0, , )
返回 (假)
.如果真結束
' 4、將dll路徑寫入記憶體
writeprocessmemory (程序控制代碼, 記憶體位址, 到位元組集 (dll檔案), dll檔案大小, 0)
' 5、獲取loadlibrarya在kernel32.dll中的位址
loadlibrarya位址 = getprocaddress (getmodulehandlea (「kernel32」), 「loadlibrarya」)
.如果真 (loadlibrarya位址 = 0)
資訊框 (「獲取loadlibrarya失敗!」, 0, , )
返回 (假)
.如果真結束
' 6、獲取系統執行緒快照控制代碼,4在快照中包含所有的執行緒
快照控制代碼 = createtoolhelp32snapshot (4, 0)
.如果真 (快照控制代碼 = 0)
資訊框 (「獲取系統執行緒快照控制代碼失敗!」, 0, , )
返回 (假)
.如果真結束
' 7、初始化執行緒結構大小
執行緒資訊.dwsize = 28
' 8、驗證檢索與執行緒相關的第乙個執行緒的資訊,
.如果真 (thread32first (快照控制代碼, 執行緒資訊))
.迴圈判斷首 ()
' 9、判斷父程序id等於 引數的程序id
.如果真 (執行緒資訊.th32ownerprocessid = 程序id)
' 10、開啟執行緒,
執行緒控制代碼 = openthread (2032639, 0, 執行緒資訊.th32threadid)
.如果真 (執行緒控制代碼 ≠ 0)
' 11、不等於說明開啟執行緒成功,開始核心注入
' (1)指向乙個我們提供的apc函式指標
' (2)執行緒控制代碼
' (3)指定乙個被傳到apc引數指向的函式的值
.如果真 (queueuserapc (loadlibrarya位址, 執行緒控制代碼, 記憶體位址) = 0)
資訊框 (「queueuserapc失敗!」, 0, , )
返回 (假)
.如果真結束
.如果真結束
closehandle (執行緒控制代碼)
.如果真結束
.迴圈判斷尾 (thread32next (快照控制代碼, 執行緒資訊))
.如果真結束
closehandle (快照控制代碼)
closehandle (程序控制代碼)
返回 (真)
成注入dll的編寫和演示。
注入流程
1、獲取程序id
2、注入dll路徑
3、注入dll函式名稱
4、執行apc注入
5、載入dll
6、這裡我們可以使用啟動執行緒的方法反覆呼叫注入函式
apc注入dll 原始碼
.版本 2
.支援庫 ethread
.程式集 程式集1
.子程式 _啟動子程式, 整數型, , 請在本子程式中放置動態鏈結庫初始化**
啟動執行緒 (&thdll, , )
_臨時子程式 () ' 在初始化**執行完畢後呼叫測試**
返回 (0) ' 返回值被忽略。
.子程式 _臨時子程式
' 本名稱子程式用作測試程式用,僅在開發及除錯環境中有效,編譯發布程式前將被系統自動清空,請將所有用作測試的臨時**放在本子程式中。 ***注意不要修改本子程式的名稱、引數及返回值型別。
.子程式 thdll, , 公開
資訊框 (「我是apc注入進去的dll」, 0, , )
啟動執行緒呼叫注入函式原始碼:
.版本 2
.支援庫 spec
.支援庫 ethread
.區域性變數 函式位址
.區域性變數 記憶體位址
.區域性變數 執行緒id
.區域性變數 執行緒控制代碼
執行緒控制代碼 = createthread (0, 0, 函式位址, 記憶體位址, 0, 執行緒id)
.如果真 (等待執行緒 (執行緒控制代碼, 100))
關閉執行緒控制代碼 (執行緒控制代碼)
釋放記憶體 (記憶體位址)
.如果真結束
易語言APC記憶體注入到遊戲測試
前面我們曾經錄製了apc應用層的注入,我們把peload.pe以位元組集的形式載入到我們的注入程式,在這裡在qqvip群提供這個檔案,我們先看看注入流程 apc記憶體注入流程 1 開啟程序 2 讀入dll檔案及獲取主要彙編指令 3 建立檔案對映物件 4 將檔案對映物件對映到當前程式記憶體空間 5 寫...
表示層 應用層
表示層 功能 為異種機通訊提供一種公共語言,以便能進行互操作。這種型別的服務之所以需要,是因為不同的計算機體系結構使用的資料表示法不同。例如,ibm主機使用ebcdic編碼,而大部分pc機使用的是ascii碼。在這種情況下,便需要表示層來完成這種轉換。應用層 包含了通常要使用的協議 http協議 超...
應用層協議
應用層協議定義了執行在不同端系統上的應用程式程序如何相互傳遞訊息。特別是定義了 交換的訊息型別,如請求訊息和響應訊息。各種訊息型別的語法,如訊息中的各個字段及其詳細描述。欄位的語義,即包含在字段中的資訊的含義。程序何時 如何傳送訊息及對訊息進行響應的規則。有些應用層協議是由rfc文件定義的,因此它們...