分享 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 写起来感觉不是特别好
参考文献:《逆向工程核心原理》
我天。。你这个配色我眼睛疼 高级模式有 代码文字控件,你这也太绿了。。 你代码背景色和文字颜色真难看 楼主绿 不好看啊 1940801011 发表于 2017-4-25 18:34
楼主绿 不好看啊
不好意思 小伙子看来你喜欢给自己绿啊?哈哈 绿瞎眼===== 绿色背景,眼已瞎 这排版和配色确实耀眼。。。
页:
[1]
2