易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 5112|回复: 0

逆向分享NP之注入npggNT.des 学习高手思路

[复制链接]

2

主题

0

回帖

0

积分

编程入门

Rank: 1

魔鬼币
0
发表于 2010-7-26 19:16:26 | 显示全部楼层 |阅读模式
我们知道NP启动后会向所有进程注入模块npggNT.des,这个过程包括:向目标进程注入执行代码及数据,创建远程线程,远程线程执行,装入


npggNT.des。之后的事我们都知道了:npggNT.des挂钩关键系统函数。在得到NP注入代码前,这个注入过程我想对于象我这样的菜鸟来说是非常  

神秘的,于是就产生了种种幻想,装入npggNT.des是不是使用更底层的系统函数?还是NP自己构建的LoadLibrary?又或是使用COPY来的系统函  

数代码?但是这两天分析的结果令我大跌眼睛它竟然是使用LoadLibraryA装入npggNT.des的,这怎么可能??但事实上真         

来看看代码就知道了。   
   
    1,主要代码(这里是npggNT.des装入的主要执行过程,要看完整的二进制代码请看附件NPRemotThread.asm,编译后反汇编看)  

代码:  
00C10000    59              pop    ecx                              
00C10001    58              pop    eax                              
00C10002    51              push    ecx                              ;这里是一般函数都会做的寄存器压栈,好像没什么好说  
00C10003    53              push    ebx
00C10004    55              push    ebp
00C10005    56              push    esi
00C10006    57              push    edi
00C10007    2BC9            sub    ecx, ecx                        ; ecx清零  
00C10009    E8 00000000    call    00C1000E
00C1000E    5B              pop    ebx                              ; ebx=00C100E ->自定位函数入口地址  
00C1000F    64:8B51 30      mov    edx, fs:[ecx+30]                ; [ecx+30]=[30]
00C10013    83C3 F2        add    ebx, -0E                        ; EBX-E=00C10000 ->线程起始地址  
00C10016    85C0            test    eax, eax
00C10018    53              push    ebx                              ; ebx指向线程起始地址  
00C10019    50              push    eax                              ; 0
00C1001A    E8 23000000    call    00C10042

00C10042    64:FF31        push    dword ptr fs:[ecx]              ; fs:[ecx]=fs:[0]->SEH安装  
00C10045    64:8921        mov    fs:[ecx], esp
00C10048    89A3 93000000  mov    [ebx+93], esp                    ; SMC [ebx+93]=[00C10093]->保存SEH返回的ESP  
00C1004E    78 2C          js      short 00C1007C
00C10050    394A 0C        cmp    [edx+C], ecx                    ; [edx+c]=[7FFDC00C]=00241EA0
00C10053    75 30          jnz    short 00C10085

00C10085    68 0000807C    push    7C800000                        ; kernel32.dll 的HANDLE ->这里NP硬编码了kernel32.dll的  

句柄  
00C1008A    53              push    ebx                              ; 线程起始地址  
00C1008B    50              push    eax                              ; 0
00C1008C    FC              cld
00C1008D    E8 16010000    call    00C101A8

00C101A8    E8 00000000    call    00C101AD
00C101AD    5F              pop    edi                              ; EDI=00C101AD ->函数入口地址  
00C101AE    8B5424 0C      mov    edx, [esp+C]                    ; EDX=kernel32.dll HANDLE
00C101B2    81C7 EF010000  add    edi, 1EF                        ; EDI=00C1039C ->npggNT.des路径  
00C101B8    8D77 E4        lea    esi, [edi-1C]                    ; ESI=00C10380
00C101BB    6A 04          push    4
00C101BD    59              pop    ecx                              ; ECX=4
00C101BE    AD              lods    dword ptr [esi]
00C101BF    8B28            mov    ebp, [eax]                      ; 这里非常精彩,后面会详细分析  
00C101C1    03EA            add    ebp, edx                        ;  
00C101C3    896E FC        mov    [esi-4], ebp                    ;  
00C101C6  ^ E2 F6          loopd  short 00C101BE
00C101C8    8B5F FE        mov    ebx, [edi-2]                    ; [edi-2]=[00C1039A]=3A440002
00C101CB    0B5F FA        or      ebx, [edi-6]                    ; [edi-6]=[00C10396]=00090100 EBX=3A4D0102
00C101CE    8B47 F4        mov    eax, [edi-C]                    ; [edi-C]=[00C10390]=00000003
00C101D1    66:894F FA      mov    [edi-6], cx                      ; word ptr [edi-6]=[00C10396]=cx=0
00C101D5    F6C7 08        test    bh, 8                            ; bh=01 and 8 =0001b and 1000b =0
00C101D8    0F85 CA000000  jnz    00C102A8
00C101DE    8B07            mov    eax, [edi]                      ; [edi]=[00C1039C]=475C3A44->npggNT.des路径  
00C101E0    F6C7 02        test    bh, 2                            ; bh=01 and 2 =0001b and 0010b=0
00C101E3    75 10          jnz    short 00C101F5
00C101E5    8BF0            mov    esi, eax                        ; esi->npggNT.des路径开始个字节  
00C101E7    85C0            test    eax, eax                        ; 判断路径是不是为空  
00C101E9    74 02          je      short 00C101ED
00C101EB    8BF7            mov    esi, edi                        ; esi=00C1039C
00C101ED    84DB            test    bl, bl                          ; bl=02
00C101EF    56              push    esi                              ; \
00C101F0    78 3D          js      short 00C1022F                  ;  eax=GetModuleHandleA("D:\\...\\npggNT.des")
00C101F2    FF57 E4        call    [edi-1C]                        ; /
00C101F5    F6C3 02        test    bl, 2                            ; bl=02
00C101F8    75 4B          jnz    short 00C10245                  ; bl 不等于零 跳转实现  

00C10245    F6C7 02        test    bh, 2                            ; bh=01
00C10248    75 2F          jnz    short 00C10279                  ; bh=01 and 2=0001b and 0010b=0 跳转未实现  
00C1024A    85F6            test    esi, esi                        ; esi=00C1039C->npggNT.des所在路径  
00C1024C    74 2B          je      short 00C10279                  ; 不为零  
00C1024E    F6C7 01        test    bh, 1                            ; bh=01 and 1=0001b and 0001b=1
00C10251    74 04          je      short 00C10257
00C10253    85C0            test    eax, eax                        ; eax是执行GetModuleHandleA("D:\\...\\npggNT.des")的结果  
00C10255    75 22          jnz    short 00C10279                  ; 确定npggNT.des未被加载  
00C10257    FF4F F8        dec    dword ptr [edi-8]                ; [00C10394]=00000001-1=0 jmp回来-1=-1  
00C1025A    78 1D          js      short 00C10279                  ; 不为负 为负跳  
00C1025C    84DB            test    bl, bl                          ; bl=02
00C1025E    56              push    esi                              ; \
00C1025F    78 05          js      short 00C10266                  ;  eax=LoadLibraryA("D:\\...\\npggNT.des")  
00C10261    FF57 E8        call    [edi-18]                        ; /
00C10264  ^ EB F1          jmp    short 00C10257

00C10279    85C0            test    eax, eax                       00C10279    85C0            test    eax, eax                        ; eax ; eax为为模模块块npggNT.desnpggNT.des的句柄的句柄   
00C1027B    75 07          jnz    short 00C10284
00C1027D    B8 B6F3C2E1    mov    eax, E1C2F3B6
00C10282    EB 64          jmp    short 00C102E8
00C10284    8B4F F4        mov    ecx, [edi-C]                    ; [edi-C]=[00C10390]=00000003
00C10287    F6C7 04        test    bh, 4                            ; bh=01 and 4=0001b and 0100b=0
00C1028A    74 04          je      short 00C10290
00C1028C    03C1            add    eax, ecx
00C1028E    EB 18          jmp    short 00C102A8
00C10290    85C9            test    ecx, ecx                        ; ecx=3
00C10292    75 0B          jnz    short 00C1029F
00C10294    8D8F 04010000  lea    ecx, [edi+104]
00C1029A    8039 00        cmp    byte ptr [ecx], 0
00C1029D    74 49          je      short 00C102E8
00C1029F    84DB            test    bl, bl                          ; bl=02
00C102A1    51              push    ecx                              ; \
00C102A2    50              push    eax                              ;  eax=GetProcAddress(HandleOfNpggNT.des,03)
00C102A3  ^ 78 CB          js      short 00C10270
00C102A5    FF57 F0        call    [edi-10]                        ; /
00C102A8    85C0            test    eax, eax                        ; eax=458A1830->npggNT.des function #03
00C102AA    75 07          jnz    short 00C102B3
00C102AC    B8 B7F3C2E1    mov    eax, E1C2F3B7
00C102B1    EB 35          jmp    short 00C102E8
00C102B3    8AD7            mov    dl, bh                          ; dl=bh=01
00C102B5    0FB74F FC      movzx  ecx, word ptr [edi-4]            ; ecx=word ptr [edi-4]=[00C10398]=0009=00000009
00C102B9    8BD8            mov    ebx, eax                        ; ebx=eax=npggNT.des.func#03
00C102BB    8BEC            mov    ebp, esp                        ; esp=00E1FF8C
00C102BD    E3 24          jecxz  short 00C102E3                  ; ecx=9
00C102BF    8DBF 0C030000  lea    edi, [edi+30C]                  ; [edi+30C]=[00C1039C+30C]->00C106A8
00C102C5    8D748F FC      lea    esi, [edi+ecx*4-4]              ; [edi+ecx*4-4]=[00C1039C+9*4-4]->00C106C8
00C102C9    FD              std
00C102CA    E8 58000000    call    00C10327                        ; 该函数用来装入某些数据 然后判断  
00C102CF    A8 80          test    al, 80                          ; al=01
00C102D1  /75 18          jnz    short 00C102EB
00C102D3  |A8 40          test    al, 40
00C102D5  |75 19          jnz    short 00C102F0
00C102D7  |A8 20          test    al, 20
00C102D9  |75 26          jnz    short 00C10301
00C102DB  |A8 10          test    al, 10
00C102DD  |75 2B          jnz    short 00C1030A
00C102DF  |AD              lods    dword ptr [esi]                  ; [esi]=[00C106C8]=0
00C102E0  |50              push    eax
00C102E1  ^|E2 FC          loopd  short 00C102DF
00C102E3  |FC              cld
00C102E4  |FFD3            call    ebx                              ; ebx=458A1830->npggNT.des.func#03 ->这里npggNT.des就开  

始工作了始工作了   
00C102E6  |8BE5            mov    esp, ebp
00C102E8  |C2 0C00        retn    0C

00C10092    BC 9CFFE100    mov    esp, 0E1FF9C                    ;还记得这里么?忘了请回头看C10048处代码  
00C10097    64:8F05 0000000>pop    dword ptr fs:[0]                ;SEH异常返回这里  
00C1009E    59              pop    ecx
00C1009F    8A4C24 02      mov    cl, [esp+2]
00C100A3    5A              pop    edx
00C100A4    8AF1            mov    dh, cl
00C100A6    59              pop    ecx
00C100A7    5F              pop    edi
00C100A8    5E              pop    esi
00C100A9    5D              pop    ebp
00C100AA    5B              pop    ebx
00C100AB    F6C6 40        test    dh, 40
00C100AE    75 16          jnz    short 00C100C6
00C100B0    F6C6 20        test    dh, 20
00C100B3    74 07          je      short 00C100BC

00C100BC    F6C2 04       00C100BC    F6C2 04        test    dl, 4 test    dl, 4  
00C100BF    5A              pop    edx
00C100C0    58              pop    eax
00C100C1    58              pop    eax
00C100C2    74 2E          je      short 00C100F2

00C100F2    6A 00          push    0
00C100F4    8BC4            mov    eax, esp
00C100F6    51              push    ecx
00C100F7    8BCC            mov    ecx, esp
00C100F9    56              push    esi
00C100FA    6A FE          push    -2
00C100FC    52              push    edx
00C100FD    68 00800000    push    8000
00C10102    50              push    eax
00C10103    51              push    ecx
00C10104    6A FF          push    -1
00C10106    52              push    edx
00C10107    E8 AAFFFFFF    call    00C100B6
00C1010C    E8 04000000    call    00C10115
00C10111    03D0            add    edx, eax
00C10113    FFE2            jmp    edx                            ; ntdll.ZwFreeVirtualMemory ->这个函数执行完毕后,这段代  

码就消失了  
00C10115    8B15 043C927C  mov    edx, [7C923C04]
00C1011B    C3              retn

数据:  
00C10374  47 65 74 4D 6F 64 75 6C 65 48 61 6E 28 2C 80 7C  GetModuleHan(,?
00C10384  58 2F 80 7C 14 2A 80 7C B0 2C 80 7C 03 00 00 00  X/?*???...
00C10394  01 00 00 01 09 00 02 00 44 3A 5C 47 61 6D 65 5C  .....D:\Game\
00C103A4  BE AA CC EC B6 AF B5 D8 43 61 62 61 6C 20 4F 6E  惊天动地Cabal On  
00C103B4  6C 69 6E 65 5C 47 61 6D 65 47 75 61 72 64 5C 6E  line\GameGuard\n
00C103C4  70 67 67 4E 54 2E 64 65 73                      pggNT.des

      **********************************************************************************************************      **********************************************************************************************************  
      2,精彩地方分析  

      看完上面代码后,不知你有没有失望的感觉。但我是有的,因为以前一直觉得神秘的东西一下子变得不神秘,而且不是自己想象中那样,  

真的有点失望。但是代码里面也有一些精彩的地方值得学习。  
游客,如果您要查看本帖隐藏内容请回复
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表