T_MAC仔 发表于 2017-4-25 17:52

分享 dll注入基本姿势C语言

1.实验环境 win7 32 2.工具 VS2010 (默认编译选项)+ procexp.exe (优秀进程查看工具)DLl注入背景:      将代码写入其他正在运行的进程空间优点:    可以修改特定程序的bug,完善功能(对于无源码的程序) 等等基本方式:   1.消息勾取 (利用SetwindowsHooklEx())   2.创建远程线程   3.利用注册表(LoadApp_initDllsappInit_dlls)   4.手工修改PE文件方式加载DLL 1.消息勾取    此方法具体讲解及代码请参考           《《基础dll注入 ,基于C语言》》 上篇文章2.创建远程线程方法:
   1.先利用OpenProcess()打开制定PID进程返回资源句柄

1
2
HANDLE hProcess = NULL;
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid)具体参数请参考 msdn
   2.利用 VirtualAllocEx()为Dll申请内存   

1
   LPVOID lpMolloc = VirtualAllocEx(hProcess,NULL,dwSize,MEM_COMMIT,PAGE_READWRITE);
   3.写进远程进程缓冲区将dll

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    WriteProcessMemory(hProcess, lpMolloc, (LPVOID)szDllPath, dwSize, 0)
4.获取loadlibrary() 地址
hMod = GetModuleHandle((LPCSTR)"kernel32.dll");
    pThreadProc = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod,"LoadLibraryA");
5.创建远程线程即(Loadbreary(".dll")) 加载已经写进内存的dll
hThread = CreateRemoteThread(hProcess,NULL,0, pThreadProc,lpMolloc,0,NULL);
3.利用注册表
   在注册表HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT \CURRENT\VERSION\WINDOWS 目录下
   将appInit_dlls中添加为dll路径
    LoadApp_initDlls 中修改值为1
    重启后利用procexp.exe 工具的find 功能查看即可(只要加载啦user32.dll的进程都会加载自己定义的dll)
   
注意点:
1.加载的dll是我们自己写的,去实现特定功能的(附件里面将提供给大家一份共研究的)
2.LoadLibrary()函数地址的获取
      真正的Loadlibrary() 函数地址应该是从远程进程中获取,但是由于系统核心dll 每次加载进内存的地址一样(os 提供的特定地址) ,所以可以这样写。而不从远程中获取
源码放在附件里面,有疑惑的同学可以一块讨论   
看雪好像不支持markdown 写起来感觉不是特别好
参考文献:《逆向工程核心原理》

fisher 发表于 2017-4-25 18:02

我天。。你这个配色我眼睛疼

Call_Bug 发表于 2017-4-25 18:07

高级模式有 代码文字控件,你这也太绿了。。

qq838524191 发表于 2017-4-25 18:14

你代码背景色和文字颜色真难看

1940801011 发表于 2017-4-25 18:34

楼主绿 不好看啊

T_MAC仔 发表于 2017-4-25 19:21

1940801011 发表于 2017-4-25 18:34
楼主绿 不好看啊

不好意思

vaxxuan 发表于 2017-4-25 19:26

小伙子看来你喜欢给自己绿啊?哈哈

52gta 发表于 2017-4-25 20:42

绿瞎眼=====

羚羊挂角 发表于 2017-4-26 12:31

绿色背景,眼已瞎

woshiaokeman 发表于 2017-4-27 20:53

这排版和配色确实耀眼。。。
页: [1] 2
查看完整版本: 分享 dll注入基本姿势C语言