好友
阅读权限10
听众
最后登录1970-1-1
|
1.实验环境 win7 32 2.工具 VS2010 (默认编译选项)+ procexp.exe (优秀进程查看工具)DLl注入背景: 将代码写入其他正在运行的进程空间优点: 可以修改特定程序的bug,完善功能(对于无源码的程序) 等等基本方式: 1.消息勾取 (利用SetwindowsHooklEx()) 2.创建远程线程 3.利用注册表(LoadApp_initDlls appInit_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 写起来感觉不是特别好
参考文献:《逆向工程核心原理》
|
|
-
-
demo.rar
26.83 KB, 下载次数: 110, 下载积分: 吾爱币 -1 CB
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|