C_and_CPP 板


LINE

原文吃光光 內容並非我原創,我只是讀了很多資料和網站,融會貫通後,把這些做法統整 ---本文開始--- DLL Injecton是將DLL注入到另一個宿主程式內,介以改變這個程式的行為, 就像給程式打了一劑迷幻藥,讓他對你言聽計從(誤)。 DLL本身無法直接執行,需要其他程式動態載入, 但透過DLL Injection可以讓DLL有如附身在其他process上, 利用其他process的資源來執行自己的程式碼。 一般程式的進入點是main()函式,DLL也有進入點,叫做DLLMain, 當DLL被載入記憶體時,系統會呼叫DLLMain()函式。 這個手法可以用於程式偵錯、修改遊戲內的數值(生命、物品無限等等), 但也有惡意用途,比如說將後門程式寄生於系統服務上。 DLL Injection可以分為四個步驟 1. 附著於宿主process上(Attach to process) 2. 在宿主process記憶體空間內劃出一塊給DLL(Allocate Memory within the process) 3. 將DLL的路徑資料寫入到該空間(Copy the path of DLL into the process memory) 4. 引導宿主process執行DLL的程式碼,DLLMain()中的程式碼 一、附著於宿主process上 電腦中的process都是各自獨立,原則上,一個process不能越界存取他人的記憶體空間。 如果我們今天要做一些越界的事情,此時就可以透過OpenProcess()來取得許可。 取得許可後,我們才能對宿主程式動一些手腳。 hHandle = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, procID ); hHandle為宿主的句柄,接下來都會用到 二、在宿主process記憶體空間內劃出一塊給DLL 在我們控制宿主之前,我們需要一塊記憶體空間來存放DLL的路徑資料, 以合法掩護非法(大誤)。 VirtualAllocEx()正是我們需要的函式。令DLL的絕對路徑為dllPath。 LPVOID WINAPI VirtualAllocEx( HANDLE hProcess, //目標process的handle LPVOID lpAddress, //分配起始位置,可以為NULL SIZE_T dwSize, //分配的size, Strlen(dllPath) DWORD flAllocationType, DWORD flProtect); 這個函式的回傳值是該塊空間的指標,請務必用變數去接,第3-4步會用到 三、將DLL的路徑資料寫入到該空間 BOOL WINAPI WriteProcessMemory( HANDLE hProcess, //目標process的handle LPVOID lpBaseAddress, //第二步VirtualAllocEx回傳的指標 LPCVOID lpBuffer, //dllPath SIZE_T nSize, // Strlen(dllPath) SIZE_T *lpNumberOfBytesWritten); //這邊填NULL即可 四、引導宿主執行DLL的程式碼 我們已經將DLL的路徑寫在宿主的記憶體中了, 接下來需要在宿主裡面建立一個執行緒來跑DLL的程式碼, 由CreateRemoteThread()來建立執行緒。 我們需要LoadLibraryA()這個函式當作引導,dllPath當作參數。 先找出LoadLibraryA()在宿主中的位置 loadLibAddr = GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryA"); //建立執行緒時,要交給執行緒的函式就在loadLibAddr 接下來 HANDLE WINAPI CreateRemoteThread( HANDLE hProcess, //目標process的handle LPSECURITY_ATTRIBUTES lpThreadAttributes, //這邊填NULL SIZE_T dwStackSize, //這邊填0 LPTHREAD_START_ROUTINE lpStartAddress, //loadLibAddr LPVOID lpParameter, //第二步VirtualAllocEx的回傳值 DWORD dwCreationFlags, //這邊填0 LPDWORD lpThreadId //這邊填NULL ); 回頭看HpyHacking大大所提出的問題 DLL的程式碼可改為 #include "dll.h" #include <windows.h> BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD ul_reason_for_call,LPVOID lpvReserved) { switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: { int *p = (int *)0x22fedc; *p = 500; /* 0x22fedc是我用Cheat Engine找出的位置 /*每個人找出來的值不一定相同 /* 我是在XP SP3的VM上測試 break; } /* Return TRUE on success, FALSE on failure */ return TRUE; } 執行結果:http://imgur.com/MG85RYK 附上我自己寫的Injector:https://github.com/vaio89/DLLInjector Reference: 安靖、周彬彬、范文慶(2011)。精通Windows API函數、介面、程式設計實例。台北:松岡 Petzold (1998). Programming Windows(5th ed.). Microsoft Press http://blog.opensecurityresearch.com/2013/01/windows-dll-injection-basics.html https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms684175(v=vs.85).aspx https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms682583(v=vs.85).aspx https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms684320(v=vs.85).aspx https://msdn.microsoft.com/zh-tw/library/windows/desktop/aa366890(v=vs.85).aspx https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms681674(v=vs.85).aspx https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms682437(v=vs.85).aspx -- 我就看你們ppt多會嘴 法院見 我就看你們ptxt多會嘴 法院見 我就看你們ppt多會嘴 法院見 我就看你們ptt多會嘴 法院見 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.91.97
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1495236553.A.3BC.html ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 07:30:43 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 07:51:37 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 07:53:46 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 08:25:12 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 08:34:54 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 08:38:11 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 08:40:47 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 08:43:21 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 08:47:29
1F:推 hpyhacking: 由衷感謝大大這麼詳細的解說OAO 05/20 09:32
2F:推 oscar60111: 推 05/20 14:17
3F:推 handsome616: 好文必推 05/20 14:33
4F:推 hpyhacking: 所以現在要接著injector這樣 05/20 14:58
對,Injector也是幫你做那四步。 昨天沒睡好,晚點把Injector的程式碼整理好再放上來 +ω+ ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 15:34:46 ※ 編輯: vaio8937 (118.160.91.97), 05/20/2017 15:36:46
5F:推 hpyhacking: 你慢慢來沒關係RRR!!!!!我今天也是碰不到電腦, 05/20 15:51
6F:→ hpyhacking: 只能在手機上查資料ps難怪那麼早起床XD 05/20 15:51
7F:推 TobyH4cker: 第四步是讓宿主調用LoadLibrary來加載我們的DLL 05/20 18:52
8F:→ tinlans: 看到句柄差點以為你文章從對岸幹來的 XD 05/21 18:09
9F:→ tinlans: 玩這個在 Windows 7 以上很容易被 ASLR 整到,不過可以關 05/21 18:31
※ 編輯: vaio8937 (61.58.73.6), 05/22/2017 00:16:12 本來是想寫handle啦 但我有看過,國內前輩書上也是翻譯成句柄(Ex:王國榮VB6的書) 所以就參考前輩的翻譯 ASLR的話就比較麻煩,base address完全打亂 現在如果要玩DLL注入或buffer overflow,我會盡量用XP的VM ※ 編輯: vaio8937 (61.58.73.6), 05/22/2017 00:32:42 ※ 編輯: vaio8937 (61.58.73.6), 05/22/2017 00:33:59
10F:推 hpyhacking: 再次謝謝你QQ 05/23 00:49
11F:推 eye5002003: lua模組功能可以完全滿足你的需求(可以決定連哪個dll) 05/23 20:28







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP