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/cn.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灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP