首页
论坛
课程
招聘
[原创]关于dll注入方法
2013-5-7 19:24 76540

[原创]关于dll注入方法

2013-5-7 19:24
76540
大家做内挂,都用什么注入方式?小弟不才,只能想到下面这些方法,不知道还有没有更好的注入方法?
希望高手补充一下。

方法1,键盘钩子,鼠标钩子,消息钩子.
  挂.Dll:
        if ghNextHookKey = 0 then
            ghNextHookKey := SetWindowsHookEx(WH_KEYBOARD, @KeyHook, HInstance, 0);
        if ghNextHookMouse = 0 then
            ghNextHookMouse := SetWindowsHookEx(WH_MOUSE, @MouseHook, HInstance, 0);
            
        缺点:TP,np,zp,hp,gpk,HS, xtrap,.....通常都对这些驱动处理了。
              只有没有加保护的游戏可以用,或者加了保护但没开相应功能也可以用。
            
方法2,对Game.exe加壳,用壳来LoadLibraryA。
  最简单的方法,找个upx的代码,修改一下,在:
    popa
    Jmp game.exe.OEP,  
    之前,LoadLibraryA,挂.dll.
   
    缺点: 游戏Launcher.exe通常都验证了 game.exe的MD5.
      或者Game.exe的自身壳做了Crc校验。
      关键的校验代码没有加vm,尚可过。如果加了vm,就..........
      
  
方法3,用PE编辑工具PE_Editor,给game.exe加个节表,从而启动 挂.Dll。

        缺点同上。
       
方法4,修改d3d9.dll,做个Jmp。
  【方法】
  游戏肯定会用 d3d9.dll这个库。
  用OD直接打开d3d9.dll, 在入口修改:
    jmp  镜像地址.XXXXXXX
   
    镜像地址.XXXXXXX-10:
      asdf.dll
    镜像地址.XXXXXXX:  
      pushad
      mov eax, XXXXXXX
      sub eax,10
      push eax      
      call LoadLibraryA
      popa
      //补齐代码
      jmp  回去
   
    OD另存D3d9.dll,然后替换之。
   
    缺点,不同操作系统D3d9.dll都不同,而且D3d9.dll的版本非常多,需要一个一个的改。
   

方法5,修改系统dll的某个函数,比如 User32.dll,或者kernel.dll的某个Call。
  方法同上。
  
  缺点:某些游戏保护系统把kernel复制一份,没用操作系统的kernel,很讨厌。比如tp就这么干了。
  

方法6,用驱动,启动个服务,给每个进程插入一个Dll。
        DWORD FindProcess(LPCTSTR str)
        {
                DWORD id = 0;
                PROCESSENTRY32 processEntry;
                HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
       
                processEntry.dwSize = sizeof(PROCESSENTRY32);
       
                BOOL bRet = Process32First(hProcessSnap, &processEntry);
       
                while (bRet)
                {               
                        if ( !wcscmp(processEntry.szExeFile, str) )
                        {
                                id = processEntry.th32ProcessID;
                                break;
                        }
                        bRet = Process32Next(hProcessSnap, &processEntry);
                }
       
                return id;
        }
       
        void DllHook()
        {
                //在这里写加载代码
                FindProcess("game.exe");
                //这里写 LoadLibraryA,加载自己Dll
                  
               
        }
       
        void OnUnload(IN PDRIVER_OBJECT DriverObject)
        {
                //在这里写卸载驱动的代码
        }
       
        NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
        {
       
                DriverObject->DriverUnload = OnUnload;
       
                DllHook();
       
                return STATUS_SUCCESS;
        }

  缺点:经常蓝了,很烦。
  
方法7,远程注入。
       
        function InstallRemoteDll(ExeName,DllName :PChar ):DWord ;
        var
          si : TSTARTUPINFO  ;
                pi : TPROCESSINFORMATION  ;
          mc_RemoteStr : PChar ;
          dwWriteByte : DWord;
          pfn_LoadLib : TThreadStartRoutine ;
          dwT1 : dword;
        begin
          result :=0 ;
          //启动进程
          ZeroMemory( @si, sizeof(si) ) ;
          si.cb  := sizeof(si) ;
          ZeroMemory( @pi, sizeof(pi) );
          if CreateProcess(ExeName,'',nil,nil,FALSE,CREATE_SUSPENDED,nil,nil,si,pi) then
            result:=pi.dwProcessId ;
          /////分配远程内存;
          mc_RemoteStr:=VirtualAllocEx(pi.hProcess,nil,length(DllName)+1,MEM_COMMIT,PAGE_READWRITE);
          if not WriteProcessMemory(pi.hProcess,mc_RemoteStr,DllName,Length(DllName)+1,dwWriteByte) then
            result :=1;
          //插入DLL
          pfn_LoadLib := TThreadStartRoutine(GetProcAddress(GetModuleHandle('Kernel32'),'LoadLibraryA')) ;
          CreateRemoteThread(pi.hProcess,nil,0,@pfn_LoadLib ,mc_RemoteStr,0,dwT1) ;
       
        end;
       
        缺点:这个方式也是大多数Protect屏蔽的对象。

[注意] 招人!base上海,课程运营、市场多个坑位等你投递!

收藏
点赞0
打赏
分享
最新回复 (110)
雪    币: 533
活跃值: 活跃值 (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
凉风 活跃值 2013-5-7 20:28
2
0
可以考虑把代码复制到进程里面,这不算注入了。
雪    币: 255
活跃值: 活跃值 (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 活跃值 1 2013-5-7 20:49
3
0
LSP劫持网络注入,IME输入法注入
或者自己写个驱动,创建线程Notify,发现是目标进程创建的,就LoadDll,还省得Open和Attach了
雪    币: 175
活跃值: 活跃值 (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
komany 活跃值 2013-5-7 22:54
4
0
还有一种也是远程注入,用win32汇编,直接往里面写代码。因为汇编比较容易计算要注入的代码长度,注意重定位就行了
雪    币: 1781
活跃值: 活跃值 (46)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 活跃值 8 2013-5-8 09:12
5
0
安博士保护系统,就是这么弄的,把dll搞成一个dat,然后让game.exe加载这个dat,
创建一片内存NewMem,然后复制进去,然后导入IAT,更新重定位表,指定OEP运行。

我们的dll就算写成dat,game.exe是不会主动加载的,还是需要提前注入一个dll,去做:NewMem,重定位,指定OEP等等事情。

问题是也需要提前注入另外一个dll啊。所以这种方法不是第一步要做的事情。
雪    币: 1781
活跃值: 活跃值 (46)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 活跃值 8 2013-5-8 09:15
6
0
网络消息注入,就是我说的第一种方法里面的消息注入,类似的。

IME注入,无非就是我说的【方法一】键盘鼠标消息钩子,或者是【方法六】驱动服务。
雪    币: 1781
活跃值: 活跃值 (46)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 活跃值 8 2013-5-8 09:17
7
0
这个就是【方法七】
雪    币: 478
活跃值: 活跃值 (577)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 活跃值 25 2013-5-8 11:37
8
0
最简单稳定的方法:
驱动创建Image Notify,动态修改进程内存IAT,DLL加载完成再恢复回去,毫无痕迹。。
雪    币: 241
活跃值: 活跃值 (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
exediy 活跃值 1 2013-5-8 12:13
9
0
NP GAMEMON会重载....然后他的壳的关系 会直接报错......
其实最干净的办法是内存映射.然后设置EIP....没有加载模块的过程.所以链表什么信息都没有.
映射可以在驱动下也可以在应用层.

然后是模块劫持....XP下的还有注册表.方法太多太多了...
雪    币: 255
活跃值: 活跃值 (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 活跃值 1 2013-5-8 12:16
10
0
LSP劫持注入跟消息无关,输入法注入也无关消息钩子
2种完全不同的方式,分别是利用网络传输协议和输入法加载的机制来注入dll
雪    币: 1781
活跃值: 活跃值 (46)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 活跃值 8 2013-5-8 17:44
11
0
XP下的还有注册表.

注册表如何把一个dll插入到进程中。大牛,不吝赐教啊,膜拜
雪    币: 1781
活跃值: 活跃值 (46)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 活跃值 8 2013-5-8 17:46
12
0
输入法加载的原理详解,洗耳恭听,提前膜拜下
雪    币: 80
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
榨sui悲伤 活跃值 2013-5-24 09:47
13
0
CONTEXT 结构  修改eip
雪    币: 129
活跃值: 活跃值 (82)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
艾米哈柏 活跃值 2013-5-30 04:44
14
0
支持~~~~
雪    币: 244
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
V仔 活跃值 2013-5-30 05:50
15
0
值得收听
雪    币: 237
活跃值: 活跃值 (129)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chinester 活跃值 2013-5-30 07:34
16
0
D3D9.DLL 那个.可以写个马甲....
雪    币: 34
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
最爱小铅 活跃值 2013-5-30 16:36
17
0
收藏了,谢楼主
雪    币: 12
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rhffv 活跃值 2013-5-31 15:33
18
0
初来咋到,发现都是大牛
雪    币: 238
活跃值: 活跃值 (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
anticode 活跃值 2013-5-31 22:47
19
0
感谢楼主无私分享。
雪    币: 4
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
吴凯 活跃值 2013-5-31 23:07
20
0
被科普  感谢楼主了~
雪    币: 137
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小林先生 活跃值 2013-5-31 23:58
21
0
我喜欢劫持游戏的dll
雪    币: 206
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhangla 活跃值 2013-6-1 16:18
22
0
奋力追赶学习中。谢谢。
雪    币: 290
活跃值: 活跃值 (752)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
囧囧 活跃值 2013-6-1 16:34
23
0
顶六一顶
雪    币: 157
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huhete 活跃值 2013-6-7 20:00
24
0
保存,以后慢慢看
雪    币: 1031
活跃值: 活跃值 (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Rookietp 活跃值 2013-6-8 10:44
25
0
本帖回复高产,学习啦。
游客
登录 | 注册 方可回帖
返回