冥界3大法王 发表于 2014-3-13 12:59

OD反调试遭遇战 《不完全解决纪实报告文学》:一个菜鸟是这样脱离魔掌的


http://www.52pojie.cn/thread-241803-1-1.html
虽然上次的那个我们用内存补丁彻底注册成功了,
本着深入学习的目的,我们要把它本身的自校验 跟 反调试器部分K掉
然后呢,让这软件:我们故意不注册,让它上面的显示试用时间每次自动+1天
娱乐中,学习嘛~~{:301_978:}

1.开OD断在这里

776D9E49    8BFF            mov   edi, edi
776D9E4B    55            push    ebp
776D9E4C    8BEC            mov   ebp, esp
776D9E4E    FF75 0C         push    dword ptr
776D9E51    FF75 08         push    dword ptr
776D9E54    E8 FD000000   call    776D9F56
776D9E59    6A 01         push    0x1
776D9E5B    FF75 08         push    dword ptr
776D9E5E    E8 7D60FEFF   call    776BFEE0
776D9E63    50            push    eax
776D9E64    E8 3CD00000   call    776E6EA5
776D9E69    CC            int3

2.由于我们先前知道,它使用的IsDebuggerPresent
API侦测我们的OD
3.shift+f9
我来能来到
00403CAD    E8 D4876F00   call    <jmp.&KERNEL32.IsDebuggerPresent>

跟入后不久 会看到一PUSH
你会找到
00403CAD    E8 D4876F00   call    00AFC486
00403CB2    85C0            test    eax, eax
00403CB4    74 11          je      short 00403CC7

4.类似上面 je      short 00403CC7这样的几句,因为返回值eax必须=0 才能侦测不到我们的OD
所以全改成JMP
call nop掉
地址忘了,一会补充吧,反正是三句啦
5.来到
00403DBA   /EB 03         jmp   short 00403DBF
00403DBC   |8B5D F8         mov   ebx, dword ptr
00403DBF   \66:C745 D4 0C00 mov   word ptr , 0xC
00403DC5    A1 DC87C800   mov   eax, dword ptr
00403DCA    B2 01         mov   dl, 0x1
00403DCC    8B00            mov   eax, dword ptr
00403DCE    E8 09D32C00   call    006D10DC
00403DD3    8B0D DC87C800   mov   ecx, dword ptr                       ; 4444.00CE4350
00403DD9    8B01            mov   eax, dword ptr
00403DDB    8B0D E880C800   mov   ecx, dword ptr                       ; 4444._FormMainEudic
00403DE1    8B15 64CEB400   mov   edx, dword ptr                       ; 4444.00B4CEBC
00403DE7    E8 E8B52C00   call    006CF3D4                                     ; 出来个 关闭程序的玩意 ,当然F7了(开始走迷宫了{:301_978:})
00403DEC    E8 7B301C00   call    005C6E6C
00403DF1    48            dec   eax
00403DF2    7E 68         jle   short 00403E5C
00403DF4    66:C745 D4 3C00 mov   word ptr , 0x3C
6.006CF3D4    55            push    ebp
006CF3D5    8BEC            mov   ebp, esp
006CF3D7    83C4 F4         add   esp, -0xC
006CF3DA    53            push    ebx
006CF3DB    56            push    esi
006CF3DC    57            push    edi
006CF3DD    894D F8         mov   dword ptr , ecx
006CF3E0    8BDA            mov   ebx, edx
006CF3E2    8945 FC         mov   dword ptr , eax
006CF3E5    8B45 FC         mov   eax, dword ptr
006CF3E8    8378 48 00      cmp   dword ptr , 0x0
006CF3EC    75 11         jnz   short 006CF3FF
006CF3EE    8B15 10C76B00   mov   edx, dword ptr                       ; 4444.006BC768
006CF3F4    8BC3            mov   eax, ebx
006CF3F6    E8 91A1EFFF   call    005C958C
006CF3FB    84C0            test    al, al
006CF3FD    75 04         jnz   short 006CF403
006CF3FF    33C0            xor   eax, eax
006CF401    EB 02         jmp   short 006CF405
006CF403    B0 01         mov   al, 0x1
006CF405    8B55 FC         mov   edx, dword ptr
006CF408    8882 D5000000   mov   byte ptr , al
006CF40E    33C0            xor   eax, eax
006CF410    8945 F4         mov   dword ptr , eax
006CF413    33F6            xor   esi, esi
006CF415    55            push    ebp
006CF416    68 2AF56C00   push    006CF52A
006CF41B    64:FF36         push    dword ptr fs:
006CF41E    64:8926         mov   dword ptr fs:, esp
006CF421    8BC3            mov   eax, ebx
006CF423    FF50 F4         call    dword ptr
006CF426    8945 F4         mov   dword ptr , eax
006CF429    8B45 F8         mov   eax, dword ptr
006CF42C    8B55 F4         mov   edx, dword ptr
006CF42F    8910            mov   dword ptr , edx
006CF431    33C0            xor   eax, eax
006CF433    55            push    ebp
006CF434    68 57F46C00   push    006CF457
006CF439    64:FF30         push    dword ptr fs:
006CF43C    64:8920         mov   dword ptr fs:, esp
006CF43F    8B4D FC         mov   ecx, dword ptr
006CF442    83CA FF         or      edx, 0xFFFFFFFF
006CF445    8B45 F4         mov   eax, dword ptr
006CF448    8B18            mov   ebx, dword ptr
006CF44A    FF53 38         call    dword ptr                          ; 是一个关闭
当然 还得F7,不然完蛋
006CF44A    FF53 38         call    dword ptr                            ; 是一个关闭,又一个,还是F7

0044DDB4    E8 DB8A6900   call    00AE6894
0044DDB9    66:C745 E4 0C00 mov   word ptr , 0xC
0044DDBF    8BCE            mov   ecx, esi
0044DDC1    33D2            xor   edx, edx
0044DDC3    8B07            mov   eax, dword ptr
0044DDC5    E8 860AFEFF   call    0042E850
0044DDCA    8345 F0 12      add   dword ptr , 0x12
0044DDCE    8B17            mov   edx, dword ptr                            ; 到这时,右下角托盘看到图标了
0044DDD0    81C2 28050000   add   edx, 0x528
0044DDD6    52            push    edx
0044DDD7    E8 28C7FEFF   call    0043A504
0044DDDC    59            pop   ecx

0044DE24    85C0            test    eax, eax
0044DE26    74 1B         je      short 0044DE43                                 ; 这可能是最后一个了?
0044DE28    66:C745 E4 3000 mov   word ptr , 0x30
0044DE2E    8B4D F8         mov   ecx, dword ptr
0044DE31    51            push    ecx
0044DE32    E8 519AFEFF   call    00437888
0044DE37    59            pop   ecx
0044DE38    66:C745 E4 1800 mov   word ptr , 0x18
0044DE3E    8B4D F8         mov   ecx, dword ptr
0044DE41    EB 03         jmp   short 0044DE46
0044DE43    8B4D F8         mov   ecx, dword ptr
0044DE46    8B07            mov   eax, dword ptr
0044DE48    8988 90050000   mov   dword ptr , ecx
0044DE4E    8B17            mov   edx, dword ptr
0044DE50    33C0            xor   eax, eax
0044DE52    8982 98050000   mov   dword ptr , eax
0044DE58    8B17            mov   edx, dword ptr
0044DE5A    33C9            xor   ecx, ecx
0044DE5C    898A B4050000   mov   dword ptr , ecx
0044DE62    8B07            mov   eax, dword ptr
0044DE64    8988 B0050000   mov   dword ptr , ecx
0044DE6A    8B07            mov   eax, dword ptr
0044DE6C    8988 AC050000   mov   dword ptr , ecx
0044DE72    8B07            mov   eax, dword ptr
0044DE74    8988 A8050000   mov   dword ptr , ecx
0044DE7A    8B07            mov   eax, dword ptr
0044DE7C    8988 A4050000   mov   dword ptr , ecx
0044DE82    8B07            mov   eax, dword ptr
0044DE84    8988 A0050000   mov   dword ptr , ecx
0044DE8A    8B07            mov   eax, dword ptr
0044DE8C    8988 9C050000   mov   dword ptr , ecx
0044DE92    8B17            mov   edx, dword ptr
0044DE94    C682 C0050000 0>mov   byte ptr , 0x0
0044DE9B    8B4D D4         mov   ecx, dword ptr
0044DE9E    64:890D 0000000>mov   dword ptr fs:, ecx
0044DEA5    8B07            mov   eax, dword ptr
0044DEA7    84DB            test    bl, bl
0044DEA9    74 05         je      short 0044DEB0                                 ; 所以这个得JMP
0044DEAB    E8 25BF6A00   call    00AF9DD5                                       ; 又出来报错框了,
0044DEB0    5F            pop   edi
0044DEB1    5E            pop   esi
0044DEB2    5B            pop   ebx
0044DEB3    8BE5            mov   esp, ebp
0044DEB5    5D            pop   ebp
0044DEB6    C3            retn

00403DF2   /7E 68         jle   short 00403E5C
00403DF4   |66:C745 D4 3C00 mov   word ptr , 0x3C
00403DFA   |8D45 F4         lea   eax, dword ptr
00403DFD   |E8 FE000000   call    00403F00
00403E02   |8BD0            mov   edx, eax
00403E04   |FF45 E0         inc   dword ptr
00403E07   |B8 01000000   mov   eax, 0x1
00403E0C   |E8 BB301C00   call    005C6ECC
00403E11   |8D55 F4         lea   edx, dword ptr
00403E14   |52            push    edx
00403E15   |BA 8731B000   mov   edx, 00B03187                                  ; ASCII "/min"
00403E1A   |8D45 F0         lea   eax, dword ptr
00403E1D   |E8 8A576F00   call    00AF95AC
00403E22   |FF45 E0         inc   dword ptr
00403E25   |8D55 F0         lea   edx, dword ptr
00403E28   |58            pop   eax
00403E29   |E8 BA5A6F00   call    00AF98E8
00403E2E   |84C0            test    al, al
00403E30   |8D45 F0         lea   eax, dword ptr
00403E33   |0F95C1          setne   cl
00403E36   |83E1 01         and   ecx, 0x1
00403E39   |BA 02000000   mov   edx, 0x2
00403E3E   |51            push    ecx
00403E3F   |FF4D E0         dec   dword ptr
00403E42   |E8 CD596F00   call    00AF9814
00403E47   |FF4D E0         dec   dword ptr
00403E4A   |8D45 F4         lea   eax, dword ptr
00403E4D   |BA 02000000   mov   edx, 0x2
00403E52   |E8 BD596F00   call    00AF9814
00403E57   |59            pop   ecx
00403E58   |85C9            test    ecx, ecx
00403E5A   |75 64         jnz   short 00403EC0                                 ; 那这个也就很关键了
00403E5C   \6A 00         push    0x0
00403E5E    BA 9631B000   mov   edx, 00B03196                                  ; UNICODE "StartMin"
00403E63    8D45 E8         lea   eax, dword ptr
00403E66    83C9 FF         or      ecx, 0xFFFFFFFF
00403E69    E8 1A596F00   call    00AF9788
00403E6E    FF45 E0         inc   dword ptr
00403E71    BA 8C31B000   mov   edx, 00B0318C                                  ; UNICODE "FORM"


00403E7F    E8 04596F00   call    00AF9788                                           ; 下面 那句又死了,所以,这里我们得进去看下是否还有机会翻身?
00403E84    FF45 E0         inc   dword ptr
00403E87    8B10            mov   edx, dword ptr
00403E89    8B43 5C         mov   eax, dword ptr
00403E8C    59            pop   ecx
00403E8D    E8 F6530800   call    Fastinifile::TFastIniFile::ReadBoolean         ; 又出来一个报错
00403E92    84C0            test    al, al
00403E94    BA 02000000   mov   edx, 0x2

总之一句话,就是多注意CALL   跳转RET 还有 是否有坏蛋的API,
程序往东,我们就往西,总跟它别着较儿来,我们的希望就有了

这个程序 被我们搞的,从活到死,又有死到生,又到出生入死,
从 随便改一个代码运行时 提示词库坏==〉到运行时报错==〉又到右上角托盘显示小图标==〉再到初始化进入界面,
难道不值得记录下么???
说明我们离彻底 成功不远了{:301_978:}

caijunqill 发表于 2014-3-13 13:09

新手 学习学习 感谢楼主分享{:301_987:}

吾爱破处 发表于 2014-3-13 13:12

加油,加油,楼主加油,新手学习下

xiaomaoshou 发表于 2014-3-13 13:50

支持。。。。值得学习

www52pojiecn 发表于 2014-3-13 13:58

谢谢啦,跟进
页: [1]
查看完整版本: OD反调试遭遇战 《不完全解决纪实报告文学》:一个菜鸟是这样脱离魔掌的