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:}
新手 学习学习 感谢楼主分享{:301_987:} 加油,加油,楼主加油,新手学习下 支持。。。。值得学习 谢谢啦,跟进
页:
[1]