首页
社区
课程
招聘
[原创]dll注入基本姿势C语言
发表于: 2017-4-25 17:13 6476

[原创]dll注入基本姿势C语言

2017-4-25 17:13
6476

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.写进远程进程缓冲区将dll 

    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 写起来感觉不是特别好
参考文献:《逆向工程核心原理》


[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 1564
活跃值: (2132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
以收藏
2017-4-25 18:39
0
雪    币: 124
活跃值: (671)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如果注入器是32位的要把64位的dll注入64位的exe会出问题,是不是因为注入器获取到的loaddll地址和64位的程序不同
2017-4-25 23:40
0
雪    币: 1441
活跃值: (299)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4
南宫蜂王 如果注入器是32位的要把64位的dll注入64位的exe会出问题,是不是因为注入器获取到的loaddll地址和64位的程序不同
本来注入的时候,LoadLibrary的地址就应该是要注入进程的地址,您可以尝试在64位环境下尝试一下
2017-4-26 13:24
0
游客
登录 | 注册 方可回帖
返回
//