前几天要打印证件,在网上找了一下,没有一个是破解能用的,找了个证件通,调试完了,但是功能不太好,又去找了一个,就是证卡图文批量印制王,最新版的好象是5.35的,没调人家新的,找了4.0的调试了一下,够用就行吧。因为以前调的,随用随扔,好久没向看雪发东西了,发点也报答一下论坛对我的培养啊,呵呵。下面基本上是调试的手记,不逻辑大侠们见到了别笑。
调试完后回过头来看这个软件有3个方面的限制,1、开软件就升级,烦人;2、注册成功;3、是本以为找到注册码,注册成功了,还是在打印预览里面出现水印,出现了功能限制。以为即然成功了,还出现水印,那可能调试了一个不完整的版本;下面就是作了这三方面的工作。这些话调试前都不知道哦,呵呵。
1、去掉软件一启动就检测升级打开软件主页
在所有模块调用里下这个函数断点,ShellExecute,此函数是调用打开网页的函数。
此入断下,00454B62 E8 01502400 call <jmp.&SHELL32.ShellExecuteA>
走到段首分析,代码如下:
00454A84 55 push ebp
00454A85 8BEC mov ebp,esp
00454A87 83C4 BC add esp,-44
00454A8A 8945 CC mov dword ptr ss:[ebp-34],eax
00454A8D B8 5C786B00 mov eax,BatchCar.006B785C
00454A92 E8 350C2200 call BatchCar.006756CC
00454A97 8D45 C4 lea eax,dword ptr ss:[ebp-3C00454A9A E8 25F7FAFF call BatchCar.004041C4
00454A9F 8D45 BC lea eax,dword ptr ss:[ebp-44]
00454AA2 E8 1DF7FAFF call BatchCar.004041C4
00454AA7 8B15 78C66C00 mov edx,dword ptr ds:[6CC678] ; BatchCar.006DA671
00454AAD C602 2D mov byte ptr ds:[edx],2D
00454AB0 66:C745 E0 0800 mov word ptr ss:[ebp-20],8
00454AB6 BA 87726B00 mov edx,BatchCar.006B7287 ; yyyy/mm/dd
00454ABB 8D45 FC lea eax,dword ptr ss:[ebp-4]
00454ABE E8 35152400 call BatchCar.00695FF8
00454AC3 FF45 EC inc dword ptr ss:[ebp-14]
00454AC6 8D55 FC lea edx,dword ptr ss:[ebp-4]
00454AC9 A1 7CC66C00 mov eax,dword ptr ds:[6CC67C]
00454ACE E8 A1172400 call BatchCar.00696274
00454AD3 FF4D EC dec dword ptr ss:[ebp-14]
00454AD6 8D45 FC lea eax,dword ptr ss:[ebp-4]
00454AD9 BA 02000000 mov edx,2
00454ADE E8 61172400 call BatchCar.00696244
00454AE3 66:C745 E0 1400 mov word ptr ss:[ebp-20],14
00454AE9 BA 92726B00 mov edx,BatchCar.006B7292 ; 2007-12-30
00454AEE 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00454AF1 E8 02152400 call BatchCar.00695FF8
00454AF6 FF45 EC inc dword ptr ss:[ebp-14]
00454AF9 8B00 mov eax,dword ptr ds:[eax]
00454AFB E8 D0CE2000 call BatchCar.006619D0
00454B00 DD5D C4 fstp qword ptr ss:[ebp-3C]
00454B03 FF4D EC dec dword ptr ss:[ebp-14]
00454B06 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00454B09 BA 02000000 mov edx,2
00454B0E E8 31172400 call BatchCar.00696244
00454B13 E8 70B92000 call BatchCar.00660488
00454B18 DD5D BC fstp qword ptr ss:[ebp-44]
00454B1B DD45 C4 fld qword ptr ss:[ebp-3C]
00454B1E DC5D BC fcomp qword ptr ss:[ebp-44]
00454B21 DFE0 fstsw ax
00454B23 9E sahf
00454B24 EB 41 jnb short BatchCar.00454B67 //分析后,将此处改成 jmp
00454B26 66:C745 E0 2000 mov word ptr ss:[ebp-20],20
00454B2C BA 9D726B00 mov edx,BatchCar.006B729D ; 请升级到更新的版本!
00454B31 8D45 F4 lea eax,dword ptr ss:[ebp-C]
00454B34 E8 BF142400 call BatchCar.00695FF8
00454B39 FF45 EC inc dword ptr ss:[ebp-14]
00454B3C 8B00 mov eax,dword ptr ds:[eax]
00454B3E E8 E9F11B00 call BatchCar.00613D2C
00454B43 FF4D EC dec dword ptr ss:[ebp-14]
00454B46 8D45 F4 lea eax,dword ptr ss:[ebp-C]
00454B49 BA 02000000 mov edx,2
00454B4E E8 F1162400 call BatchCar.00696244
00454B53 6A 01 push 1
00454B55 6A 00 push 0
00454B57 6A 00 push 0
00454B59 68 B1726B00 push BatchCar.006B72B1 ; http://www.deft7.com
00454B5E 6A 00 push 0
00454B60 6A 00 push 0
00454B62 E8 01502400 call <jmp.&SHELL32.ShellExecuteA>
00454B67 8B4D D0 mov ecx,dword ptr ss:[ebp-30]
00454B6A 64:890D 0000000>mov dword ptr fs:[0],ecx
00454B71 8BE5 mov esp,ebp
00454B73 5D pop ebp
00454B74 C3 retn 00618E3B 837B 30 00 cmp dword ptr ds:[ebx+30],0
006573F1 E8 4AB8FFFF call BatchCar.00652C40
005DD4BC E8 43C10B00 call <jmp.&KERNEL32.GetVersion>
2、在查找所有模块调用用,下这个函数MessageBoxA的断点,在下面这段断下了,然后到段首分析。 00607878 55 push ebp
00607879 8BEC mov ebp,esp
0060787B 83C4 AC add esp,-54
0060787E 53 push ebx
0060787F 56 push esi
00607880 57 push edi
00607881 8BF9 mov edi,ecx
00607883 8BF2 mov esi,edx
00607885 8945 FC mov dword ptr ss:[ebp-4],eax
00607888 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
0060788B E8 16240900 call <jmp.&USER32.GetActiveWindow>
00607890 8945 F4 mov dword ptr ss:[ebp-C],eax
00607893 6A 02 push 2
00607895 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00607898 50 push eax
00607899 A1 4CC56C00 mov eax,dword ptr ds:[6CC54C]
0060789E 8B00 mov eax,dword ptr ds:[eax]
006078A0 FFD0 call eax
006078A2 8945 EC mov dword ptr ss:[ebp-14],eax
006078A5 6A 02 push 2
006078A7 8B45 FC mov eax,dword ptr ss:[ebp-4]
006078AA 8B40 30 mov eax,dword ptr ds:[eax+30]
006078AD 50 push eax
006078AE A1 4CC56C00 mov eax,dword ptr ds:[6CC54C]
006078B3 8B00 mov eax,dword ptr ds:[eax]
006078B5 FFD0 call eax
006078B7 8945 E8 mov dword ptr ss:[ebp-18],eax
006078BA 8B45 EC mov eax,dword ptr ss:[ebp-14]
006078BD 3B45 E8 cmp eax,dword ptr ss:[ebp-18]
006078C0 74 60 je short BatchCar.00607922
006078C2 C745 BC 2800000>mov dword ptr ss:[ebp-44],28
006078C9 8D45 BC lea eax,dword ptr ss:[ebp-44]
006078CC 50 push eax
006078CD 8B45 EC mov eax,dword ptr ss:[ebp-14]
006078D0 50 push eax
006078D1 A1 54C56C00 mov eax,dword ptr ds:[6CC554]
006078D6 8B00 mov eax,dword ptr ds:[eax]
006078D8 FFD0 call eax
006078DA 8D45 AC lea eax,dword ptr ss:[ebp-54]
006078DD 50 push eax
006078DE 8B45 FC mov eax,dword ptr ss:[ebp-4]
006078E1 8B40 30 mov eax,dword ptr ds:[eax+30]
006078E4 50 push eax
006078E5 E8 DC240900 call <jmp.&USER32.GetWindowRect>
006078EA 6A 1D push 1D
006078EC 6A 00 push 0
006078EE 6A 00 push 0
006078F0 8B4D CC mov ecx,dword ptr ss:[ebp-34]
006078F3 8B55 C4 mov edx,dword ptr ss:[ebp-3C]
006078F6 2BCA sub ecx,edx
006078F8 D1F9 sar ecx,1
006078FA 79 03 jns short BatchCar.006078FF
006078FC 83D1 00 adc ecx,0
006078FF 03CA add ecx,edx
00607901 51 push ecx
00607902 8B55 C8 mov edx,dword ptr ss:[ebp-38]
00607905 8B45 C0 mov eax,dword ptr ss:[ebp-40]
00607908 2BD0 sub edx,eax
0060790A D1FA sar edx,1
0060790C 79 03 jns short BatchCar.00607911
0060790E 83D2 00 adc edx,0
00607911 03D0 add edx,eax
00607913 52 push edx
00607914 6A 00 push 0
00607916 8B45 FC mov eax,dword ptr ss:[ebp-4]
00607919 8B40 30 mov eax,dword ptr ds:[eax+30]
0060791C 50 push eax
0060791D E8 54260900 call <jmp.&USER32.SetWindowPos>
00607922 33C0 xor eax,eax
00607924 E8 7369FFFF call BatchCar.005FE29C
00607929 8945 F0 mov dword ptr ss:[ebp-10],eax
0060792C E8 8768FFFF call BatchCar.005FE1B8
00607931 8945 E4 mov dword ptr ss:[ebp-1C],eax
00607934 8B45 FC mov eax,dword ptr ss:[ebp-4]
00607937 E8 78EEFFFF call BatchCar.006067B4
0060793C 84C0 test al,al
0060793E 74 06 je short BatchCar.00607946
00607940 81CB 00001000 or ebx,100000
00607946 33C9 xor ecx,ecx
00607948 55 push ebp
00607949 68 CD796000 push BatchCar.006079CD
0060794E 64:FF31 push dword ptr fs:[ecx]
00607951 64:8921 mov dword ptr fs:[ecx],esp
00607954 53 push ebx
00607955 57 push edi
00607956 56 push esi
00607957 8B45 FC mov eax,dword ptr ss:[ebp-4]
0060795A 8B40 30 mov eax,dword ptr ds:[eax+30]
0060795D 50 push eax
0060795E E8 11250900 call <jmp.&USER32.MessageBoxA> //此处nop掉,就不出现要求注册窗口了。但是不是真正的注册
00607963 8945 F8 mov dword ptr ss:[ebp-8],eax
00607966 33C0 xor eax,eax
00607968 5A pop edx
00607969 59 pop ecx
0060796A 59 pop ecx
0060796B 64:8910 mov dword ptr fs:[eax],edx
0060796E 68 D4796000 push BatchCar.006079D4
00607973 8B45 EC mov eax,dword ptr ss:[ebp-14]
00607976 3B45 E8 cmp eax,dword ptr ss:[ebp-18]
00607979 74 38 je short BatchCar.006079B3
0060797B 6A 1D push 1D
0060797D 6A 00 push 0
0060797F 6A 00 push 0
00607981 8B4D B8 mov ecx,dword ptr ss:[ebp-48]
00607984 8B55 B0 mov edx,dword ptr ss:[ebp-50]
00607987 2BCA sub ecx,edx
00607989 D1F9 sar ecx,1
0060798B 79 03 jns short BatchCar.00607990
0060798D 83D1 00 adc ecx,0
00607990 03CA add ecx,edx
00607992 51 push ecx
00607993 8B55 B4 mov edx,dword ptr ss:[ebp-4C]
00607996 8B45 AC mov eax,dword ptr ss:[ebp-54]
00607999 2BD0 sub edx,eax
0060799B D1FA sar edx,1
0060799D 79 03 jns short BatchCar.006079A2
0060799F 83D2 00 adc edx,0
006079A2 03D0 add edx,eax
006079A4 52 push edx
006079A5 6A 00 push 0
006079A7 8B45 FC mov eax,dword ptr ss:[ebp-4]
006079AA 8B40 30 mov eax,dword ptr ds:[eax+30]
006079AD 50 push eax
006079AE E8 C3250900 call <jmp.&USER32.SetWindowPos>
006079B3 8B45 F0 mov eax,dword ptr ss:[ebp-10]
006079B6 E8 9569FFFF call BatchCar.005FE350
006079BB 8B45 F4 mov eax,dword ptr ss:[ebp-C]
006079BE 50 push eax
006079BF E8 3A250900 call <jmp.&USER32.SetActiveWindow>
006079C4 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
006079C7 E8 F467FFFF call BatchCar.005FE1C0
006079CC C3 retn
查找参考字符串吧,把下面的都找了。 Ultra 字符串参考,项目 100
地址=004084CB
反汇编=mov edx,BatchCar.0069C58B
文本字符串=reg
Ultra 字符串参考,项目 102
地址=00408527
反汇编=push BatchCar.0069C58F
文本字符串=reg
Ultra 字符串参考,项目 104
地址=004085A4
反汇编=mov edx,BatchCar.0069C5E3
文本字符串=reg
Ultra 字符串参考,项目 105
地址=004085FC
反汇编=mov edx,BatchCar.0069C5E7
文本字符串=reg
Ultra 字符串参考,项目 185
地址=0040AC1A
反汇编=mov edx,BatchCar.0069CCC4
文本字符串=已注册,谢谢!。(&thanks)
Ultra 字符串参考,项目 186
地址=0040AC74
反汇编=mov edx,BatchCar.0069CCDE
文本字符串=请注册,谢谢!。(&thanks)
Ultra 字符串参考,项目 202
地址=0040B1B0
反汇编=mov edx,BatchCar.0069CD6C
文本字符串=请您注册
0041333A BA 2AD46900 mov edx,BatchCar.0069D42A ; reg
Ultra 字符串参考,项目 354
地址=00417A82
反汇编=mov eax,BatchCar.0069D5B0
文本字符串=谢谢您第
Ultra 字符串参考,项目 355
地址=00417A9D
反汇编=mov edx,BatchCar.0069D5B9
文本字符串=次使用本软件!您用的是限制版!请您注册!
Ultra 字符串参考,项目 356
地址=00417AF9
反汇编=mov edx,BatchCar.0069D5E0
文本字符串=点击[是]进行注册?点击[否]继续试用!
Ultra 字符串参考,项目 442
地址=0041EF5C
反汇编=mov edx,BatchCar.0069D9EC
文本字符串= 您已经注册,多谢您支持正版!如果使用过程中发现有不如意的地方,请发email把您的建议告诉作者,如果您利用本软件设计出很受欢迎的模板,请您把您设计的模板和底图发给作者。如果您能提供合理化的建议或提供优秀的模板给作者,将会得到作者免费的升级服务。请常到作 ...
Ultra 字符串参考,项目 1126
地址=004550A3
反汇编=mov eax,BatchCar.006B75BC
文本字符串=谢谢您第
Ultra 字符串参考,项目 1127
地址=004550BE
反汇编=mov edx,BatchCar.006B75C7
文本字符串= 次使用,付费后把序列号复制再粘贴到电子邮件发给作者!
Ultra 字符串参考,项目 1128
地址=004551B8
反汇编=mov edx,BatchCar.006B761D
文本字符串=123
Ultra 字符串参考,项目 1129
地址=004551CA
反汇编=mov edx,BatchCar.006B7605
文本字符串=请输入注册码
Ultra 字符串参考,项目 1130
地址=004551DC
反汇编=mov edx,BatchCar.006B75FE
文本字符串=注册
Ultra 字符串参考,项目 1132
地址=00455280
反汇编=push BatchCar.006B7621
文本字符串=reg
Ultra 字符串参考,项目 1133
地址=004552D4
反汇编=mov edx,BatchCar.006B7629
文本字符串=您已经注册,谢谢您的支持。&thanks
Ultra 字符串参考,项目 1134
地址=0045545B
反汇编=mov edx,BatchCar.006B775A
文本字符串=您注册不成功!请联系作者解决.
Ultra 字符串参考,项目 1136
地址=00455550
反汇编=mov edx,BatchCar.006B77EC
文本字符串=返回注册
Ultra 字符串参考,项目 1137
地址=004555E9
反汇编=mov edx,BatchCar.006B77F5
文本字符串=regist.txt
Ultra 字符串参考,项目 184
地址=0040AB62
反汇编=push BatchCar.0069CCC0
文本字符串=reg
Ultra 字符串参考,项目 2
地址=00403C9A
反汇编=mov edx,BatchCar.0069BE66
文本字符串=注册后消失www.deft7.com!
Ultra 字符串参考,项目 4466
地址=005C15A8
反汇编=push BatchCar.005C1678
文本字符串=floppy
Ultra 字符串参考,项目 4620
地址=00606D29
反汇编=push BatchCar.00606FF4
文本字符串=registerautomation 把找的字符串作一下重点调选,如下:
地址=0040AC1A 反汇编=mov edx,BatchCar.0069CCC4 文本字符串=已注册,谢谢!。(&thanks)Ultra 字符串参考,项目 186
地址=0040AC74 反汇编=mov edx,BatchCar.0069CCDE 文本字符串=请注册,谢谢!。(&thanks)Ultra 字符串参考,项目 202
跟随到了下面这一段:
0040ABFB E8 44B62800 call BatchCar.00696244
0040AC00 59 pop ecx
0040AC01 84C9 test cl,cl
0040AC03 74 59 je short BatchCar.0040AC5E // 这就是关键跳,不跳就行,有很多方法,改je,test ,pop都行,这样就爆掉了。可是在打印预览的时候有水印,本来不想跟了,那还是继续跟吧。运行以下,注册987654321,没什么效果。分析以下上面的几个call ,那么0040ABFB E8 44B62800 call BatchCar.00696244就是一关键,F7进入吧。单步走。
0040AC05 A1 D8CA6C00 mov eax,dword ptr ds:[_MainForm]
0040AC0A C680 BC0E0000 0>mov byte ptr ds:[eax+EBC],1
0040AC11 66:C785 38FCFFF>mov word ptr ss:[ebp-3C8],560
0040AC1A BA C4CC6900 mov edx,BatchCar.0069CCC4 ; 已注册,谢谢!。(&thanks)
0040AC1F 8D85 48FDFFFF lea eax,dword ptr ss:[ebp-2B8]
0040AC25 E8 CEB32800 call BatchCar.00695FF8
0040AC2A FF85 44FCFFFF inc dword ptr ss:[ebp-3BC]
0040AC30 8B10 mov edx,dword ptr ds:[eax]
0040AC32 8B8D 24FCFFFF mov ecx,dword ptr ss:[ebp-3DC]
0040AC38 8B81 5C040000 mov eax,dword ptr ds:[ecx+45C]
0040AC3E E8 8D441D00 call BatchCar.005DF0D0
0040AC43 FF8D 44FCFFFF dec dword ptr ss:[ebp-3BC]
0040AC49 8D85 48FDFFFF lea eax,dword ptr ss:[ebp-2B8]
0040AC4F BA 02000000 mov edx,2
0040AC54 E8 EBB52800 call BatchCar.00696244
0040AC59 E9 C6050000 jmp BatchCar.0040B224
0040AC5E 8B0D D8CA6C00 mov ecx,dword ptr ds:[_MainForm]
0040AC64 C681 BC0E0000 0>mov byte ptr ds:[ecx+EBC],0
0040AC6B 66:C785 38FCFFF>mov word ptr ss:[ebp-3C8],56C
0040AC74 BA DECC6900 mov edx,BatchCar.0069CCDE ; 请注册,谢谢!。(&thanks)
0040AC79 8D85 3CFDFFFF lea eax,dword ptr ss:[ebp-2C4]
0040AC7F E8 74B32800 call BatchCar.00695FF8
0040AC84 FF85 44FCFFFF inc dword ptr ss:[ebp-3BC]
0040AC8A 8B10 mov edx,dword ptr ds:[eax]
0040AC8C 8B85 24FCFFFF mov eax,dword ptr ss:[ebp-3DC]
0040AC92 8B80 5C040000 mov eax,dword ptr ds:[eax+45C]
0040AC98 E8 33441D00 call BatchCar.005DF0D0 接着0040AC03 74 59 je short BatchCar.0040AC5E 地址讲,下面是进入call的地方。上面的跳,应该说是影响zf标志位的是pop ecx,那位分析一下ecx。
00696244 55 push ebp
00696245 8BEC mov ebp,esp
00696247 51 push ecx
00696248 53 push ebx
00696249 56 push esi
0069624A 8BF2 mov esi,edx
0069624C 8945 FC mov dword ptr ss:[ebp-4],eax
0069624F 837D FC 00 cmp dword ptr ss:[ebp-4],0
00696253 74 19 je short BatchCar.0069626E
00696255 8B45 FC mov eax,dword ptr ss:[ebp-4]
00696258 E8 23BBFDFF call BatchCar.00671D80 //这个过去后,ecx 变了,所以这个是要进入的call重新来过,后进入到这里,看下面的Call讲解。
0069625D F7C6 01000000 test esi,1
00696263 74 09 je short BatchCar.0069626E
00696265 FF75 FC push dword ptr ss:[ebp-4]
00696268 E8 D7E1FDFF call BatchCar.00674444
0069626D 59 pop ecx
0069626E 5E pop esi
0069626F 5B pop ebx
00696270 59 pop ecx
00696271 5D pop ebp
00696272 C3 retn 接着00696258 E8 23BBFDFF call BatchCar.00671D80 讲,下面是进入call后的代码。F8单步走,
00671D80 8B10 mov edx,dword ptr ds:[eax] //这里的eax是12fbf8,而[eax] 里的内容就是00ed64d4,把它放到edx,而00ed64d4的ASCII码就是刚才输的假码987654321,那么在内存地址窗口跟随吧。跟随后下硬件访问断点dword。重新开始文件吧。
00671D82 85D2 test edx,edx
00671D84 74 1C je short BatchCar.00671DA2
00671D86 C700 00000000 mov dword ptr ds:[eax],0
00671D8C 8B4A F8 mov ecx,dword ptr ds:[edx-8]
00671D8F 49 dec ecx
00671D90 7C 10 jl short BatchCar.00671DA2
00671D92 F0:FF4A F8 lock dec dword ptr ds:[edx-8]
00671D96 75 0A jnz short BatchCar.00671DA2
00671D98 50 push eax
00671D99 8D42 F8 lea eax,dword ptr ds:[edx-8]
00671D9C E8 5BDCFFFF call BatchCar.0066F9FC
00671DA1 58 pop eax
00671DA2 C3 retn 接着00671D80 8B10 mov edx,dword ptr ds:[eax],重新过来后,运行,第一次不是要的地方,第二次也不是,下面就是要的地方了。解释如下: 0067217C 53 push ebx
0067217D 56 push esi
0067217E 57 push edi
0067217F 89C6 mov esi,eax
00672181 89D7 mov edi,edx
00672183 39D0 cmp eax,edx
00672185 0F84 8F000000 je BatchCar.0067221A
0067218B 85F6 test esi,esi
0067218D 74 68 je short BatchCar.006721F7
0067218F 85FF test edi,edi
00672191 74 6B je short BatchCar.006721FE
00672193 8B46 FC mov eax,dword ptr ds:[esi-4]
00672196 8B57 FC mov edx,dword ptr ds:[edi-4]
00672199 29D0 sub eax,edx
0067219B 77 02 ja short BatchCar.0067219F
0067219D 01C2 add edx,eax
0067219F 52 push edx
006721A0 C1EA 02 shr edx,2
006721A3 74 26 je short BatchCar.006721CB
006721A5 8B0E mov ecx,dword ptr ds:[esi] //这里存的是假码
006721A7 8B1F mov ebx,dword ptr ds:[edi] //这里面存的就是注册码,可以在此做注册机了。 我的EDI 下地址00ED64B8下的内容为 ASCII "33508403125860" ,做注册机的时候,应该在第87次运行处下断。不过如果不做假的注册,就不好找注册点了。不继续追了。就这样吧,今天已经很晚了。所以,用注册机之前,先注册一下假的,再用注册机吧。后面附上附件了。不过不知道怎么了,即使注册成功了,还是在打印的时候有水印。
006721A9 39D9 cmp ecx,ebx
006721AB 75 58 jnz short BatchCar.00672205
006721AD 4A dec edx
006721AE 74 15 je short BatchCar.006721C5
006721B0 8B4E 04 mov ecx,dword ptr ds:[esi+4]
006721B3 8B5F 04 mov ebx,dword ptr ds:[edi+4]
006721B6 39D9 cmp ecx,ebx
006721B8 75 4B jnz short BatchCar.00672205
006721BA 83C6 08 add esi,8
006721BD 83C7 08 add edi,8
006721C0 4A dec edx
006721C1 ^ 75 E2 jnz short BatchCar.006721A5
006721C3 EB 06 jmp short BatchCar.006721CB
006721C5 83C6 04 add esi,4
006721C8 83C7 04 add edi,4
006721CB 5A pop edx
006721CC 83E2 03 and edx,3
006721CF 74 22 je short BatchCar.006721F3
006721D1 8B0E mov ecx,dword ptr ds:[esi]
006721D3 8B1F mov ebx,dword ptr ds:[edi]
006721D5 38D9 cmp cl,bl
006721D7 75 41 jnz short BatchCar.0067221A
006721D9 4A dec edx
006721DA 74 17 je short BatchCar.006721F3
006721DC 38FD cmp ch,bh
006721DE 75 3A jnz short BatchCar.0067221A
006721E0 4A dec edx
006721E1 74 10 je short BatchCar.006721F3
006721E3 81E3 0000FF00 and ebx,0FF0000
006721E9 81E1 0000FF00 and ecx,0FF0000
006721EF 39D9 cmp ecx,ebx
006721F1 75 27 jnz short BatchCar.0067221A
006721F3 01C0 add eax,eax
006721F5 EB 23 jmp short BatchCar.0067221A
006721F7 8B57 FC mov edx,dword ptr ds:[edi-4]
006721FA 29D0 sub eax,edx
006721FC EB 1C jmp short BatchCar.0067221A
006721FE 8B46 FC mov eax,dword ptr ds:[esi-4]
00672201 29D0 sub eax,edx
00672203 EB 15 jmp short BatchCar.0067221A
00672205 5A pop edx
00672206 38D9 cmp cl,bl
00672208 75 10 jnz short BatchCar.0067221A
0067220A 38FD cmp ch,bh
0067220C 75 0C jnz short BatchCar.0067221A
0067220E C1E9 10 shr ecx,10
00672211 C1EB 10 shr ebx,10
00672214 38D9 cmp cl,bl
00672216 75 02 jnz short BatchCar.0067221A
00672218 38FD cmp ch,bh
0067221A 5F pop edi
0067221B 5E pop esi
0067221C 5B pop ebx
0067221D C3 retn EDI 00ED64B8 ASCII "33508403125860"
3、继续,看一下到底是不是一个功能不完整的软件。
查字符串,见到下面的这些,进入堆栈,又出栈的,可是查来查去不好查。另想思路。
00403C9A BA 66BE6900 mov edx,BatchCar.0069BE66 ; 注册后消失www.deft7.com! 还是在查找所有模块的调用吧,在这个函数ExtTextOutA处下断吧,这个函数是用当前选择的字体、背景颜色和正文颜色来绘制一个字符串。有一下四个,分别下了断点。运行,第一个断下,没有什么,取消这个断点,继续运行,打印预览。
004718CC E8 BD802200 call <jmp.&GDI32.ExtTextOutA>
00471BE4 E8 A57D2200 call <jmp.&GDI32.ExtTextOutA> //在此处断下,堆栈里出现了这个,0012FB0C 08F3BC8C |String = "www.flyear.com注册后消失!"这里就应该是上面进栈后出现的了。可以在内存窗口跟一下,内容为:0A605C50 2E777777 www.
0A605C54 65796C66 flye
0A605C58 632E7261 ar.c
0A605C5C A2D76D6F om注
0A605C60 F3BAE1B2 册后
0A605C64 A7CAFBCF 消失
0A605C68 0000A1A3 !..
不过没跟。向上找了。下面接着讲。
005F3EF1 E8 985A0A00 call <jmp.&GDI32.ExtTextOutA> //这个用不到了,呵呵。
005F3FA4 E8 E5590A00 call <jmp.&GDI32.ExtTextOutA> //这个也用不到了,呵呵。 接着上面的讲,找段首,这一段为,
00471AFF 55 push ebp
00471B00 68 8B1C4700 push BatchCar.00471C8B
00471B05 64:FF30 push dword ptr fs:[eax]
00471B08 64:8920 mov dword ptr fs:[eax],esp
00471B0B 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471B0E 8B40 C8 mov eax,dword ptr ds:[eax-38]
00471B11 8B80 1C020000 mov eax,dword ptr ds:[eax+21C]
00471B17 80B8 8D020000 0>cmp byte ptr ds:[eax+28D],0
00471B1E 0F84 C5000000 je BatchCar.00471BE9 //分析一下,这个就是关键跳了。改吧,怎么改都行,反正跳了就行。
00471B24 8D4D FC lea ecx,dword ptr ss:[ebp-4]
00471B27 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471B2A 8B40 C8 mov eax,dword ptr ds:[eax-38]
00471B2D 8B80 54020000 mov eax,dword ptr ds:[eax+254]
00471B33 8BD3 mov edx,ebx
00471B35 8B30 mov esi,dword ptr ds:[eax]
00471B37 FF56 0C call dword ptr ds:[esi+C]
00471B3A 8B45 FC mov eax,dword ptr ss:[ebp-4]
00471B3D E8 F6042000 call BatchCar.00672038
00471B42 85C0 test eax,eax
00471B44 0F8E 9F000000 jle BatchCar.00471BE9
00471B4A 6A 00 push 0
00471B4C 8D4D F8 lea ecx,dword ptr ss:[ebp-8]
00471B4F 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471B52 8B40 C8 mov eax,dword ptr ds:[eax-38]
00471B55 8B80 54020000 mov eax,dword ptr ds:[eax+254]
00471B5B 8BD3 mov edx,ebx
00471B5D 8B30 mov esi,dword ptr ds:[eax]
00471B5F FF56 0C call dword ptr ds:[esi+C]
00471B62 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00471B65 E8 CE042000 call BatchCar.00672038
00471B6A 50 push eax
00471B6B 8D4D F4 lea ecx,dword ptr ss:[ebp-C]
00471B6E 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471B71 8B40 C8 mov eax,dword ptr ds:[eax-38]
00471B74 8B80 54020000 mov eax,dword ptr ds:[eax+254]
00471B7A 8BD3 mov edx,ebx
00471B7C 8B30 mov esi,dword ptr ds:[eax]
00471B7E FF56 0C call dword ptr ds:[esi+C]
00471B81 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00471B84 E8 A7062000 call BatchCar.00672230
00471B89 50 push eax
00471B8A 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471B8D 83C0 B4 add eax,-4C
00471B90 50 push eax
00471B91 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471B94 8B40 A4 mov eax,dword ptr ds:[eax-5C]
00471B97 50 push eax
00471B98 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471B9B 66:8B50 E8 mov dx,word ptr ds:[eax-18]
00471B9F 52 push edx
00471BA0 FF70 E4 push dword ptr ds:[eax-1C]
00471BA3 FF70 E0 push dword ptr ds:[eax-20]
00471BA6 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471BA9 8B40 C8 mov eax,dword ptr ds:[eax-38]
00471BAC 8B80 24020000 mov eax,dword ptr ds:[eax+224]
00471BB2 E8 05C8FFFF call BatchCar.0046E3BC
00471BB7 50 push eax
00471BB8 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471BBB 66:8B50 B0 mov dx,word ptr ds:[eax-50]
00471BBF 52 push edx
00471BC0 FF70 AC push dword ptr ds:[eax-54]
00471BC3 FF70 A8 push dword ptr ds:[eax-58]
00471BC6 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471BC9 8B40 C8 mov eax,dword ptr ds:[eax-38]
00471BCC 8B80 24020000 mov eax,dword ptr ds:[eax+224]
00471BD2 E8 A9C7FFFF call BatchCar.0046E380
00471BD7 50 push eax
00471BD8 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471BDB 8B40 C4 mov eax,dword ptr ds:[eax-3C]
00471BDE E8 E5251800 call BatchCar.005F41C8
00471BE3 50 push eax
00471BE4 E8 A57D2200 call <jmp.&GDI32.ExtTextOutA>
00471BE9 8B45 08 mov eax,dword ptr ss:[ebp+8]
00471BEC 8B40 C8 mov eax,dword ptr ds:[eax-38]
00471BEF 8BB0 1C020000 mov esi,dword ptr ds:[eax+21C]
00471BF5 80BE 8C020000 0>cmp byte ptr ds:[esi+28C],0
00471BFC 74 5D je short BatchCar.00471C5B 关键跳:
00471B1E /0F84 C5000000 je BatchCar.00471BE9 这样就破解成功了。
什么流氓软件,注册成功了,还不去掉水印,希望调试了这个软件的时期版本,不要影响人家啊。现在可能是5.35了。干脆上面的那个注册的跳一起爆掉,就不用作内存注册机了。总结,分析思路有这么几种,小生怕怕好象总结的,命令查找、字符串查找、函数查找,函数查找要熟悉这种语言了,就象上面分析的。即使再怎么加密,处理,如果你熟悉这种语言,那么软件被破,轻而易举的事。所以,要想分析,熟悉几种语言是十分有必要的。再就是小生我怕怕没提的那个内存跟踪是一种很好的技能。
分析到此结束,希望对大家分析有所帮助。
这个软件的原版是在华军软件下载的。大家可以到那里下载调试。
附上补丁吧!!本人邮箱123186685@QQ.com,原与大家讨论。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)