c语言编程dll程序,[原创]dll注入基本姿势C语言

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进程返回资源句柄HANDLE hProcess = NULL;

hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid)具体参数请参考 msdn

2.利用 VirtualAllocEx()为Dll申请内存

LPVOID lpMolloc = VirtualAllocEx(hProcess,NULL,dwSize,MEM_COMMIT,PAGE_READWRITE);

3.写进远程进程缓冲区将dllWriteProcessMemory(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.83kb,115次下载)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值