程序界面如图1所示:
首先用PEID查壳发现程序无壳,语言为:Borland Delphi 6.0 - 7.0,如图2所示
直接用W32DASM加载主程序,查看串式参考,找到如下内容:
双击注册成功和失败的提示,来到相应代码处
用OD载入程序,输入命令bp 006091A9下断,找到该断点处,分析附近代码
006090A5 . /0F85 FE000000 JNZ jyWuYeMa.006091A9 ; -----------------注册判断的地方,下面是注册成功时保存注册码等信息
006090AB . |33C0 XOR EAX,EAX
006090AD . |55 PUSH EBP
006090AE . |68 95916000 PUSH jyWuYeMa.00609195
006090B3 . |64:FF30 PUSH DWORD PTR FS:[EAX]
006090B6 . |64:8920 MOV DWORD PTR FS:[EAX],ESP
006090B9 . |B2 01 MOV DL,1
006090BB . |A1 302B4700 MOV EAX,DWORD PTR DS:[472B30]
006090C0 . |E8 D79BE6FF CALL jyWuYeMa.00472C9C
006090C5 . |8BD8 MOV EBX,EAX
006090C7 . |BA 02000080 MOV EDX,80000002
006090CC . |8BC3 MOV EAX,EBX
006090CE . |E8 A59CE6FF CALL jyWuYeMa.00472D78
006090D3 . |B1 01 MOV CL,1
006090D5 . |8B15 2C5B6700 MOV EDX,DWORD PTR DS:[675B2C] ; jyWuYeMa.00608EBC
006090DB . |8BC3 MOV EAX,EBX
006090DD . |E8 DA9DE6FF CALL jyWuYeMa.00472EBC
006090E2 . |8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
006090E5 . |8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
006090E8 . |8B80 04030000 MOV EAX,DWORD PTR DS:[EAX+304]
006090EE . |E8 A15AE4FF CALL jyWuYeMa.0044EB94
006090F3 . |8B4D D8 MOV ECX,DWORD PTR SS:[EBP-28]
006090F6 . |BA 64926000 MOV EDX,jyWuYeMa.00609264 ; ASCII "UserName"
006090FB . |8BC3 MOV EAX,EBX
006090FD . |E8 569FE6FF CALL jyWuYeMa.00473058
00609102 . |8D55 D0 LEA EDX,DWORD PTR SS:[EBP-30]
00609105 . |8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00609108 . |8B80 F4020000 MOV EAX,DWORD PTR DS:[EAX+2F4]
0060910E . |E8 815AE4FF CALL jyWuYeMa.0044EB94
00609113 . |8B45 D0 MOV EAX,DWORD PTR SS:[EBP-30]
00609116 . |E8 45BFDFFF CALL jyWuYeMa.00405060
0060911B . |50 PUSH EAX
0060911C . |E8 6B18FFFF CALL <JMP.&PunUnitLib.SavePass>
00609121 . |8BD0 MOV EDX,EAX
00609123 . |8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
00609126 . |E8 75BCDFFF CALL jyWuYeMa.00404DA0
0060912B . |8B4D D4 MOV ECX,DWORD PTR SS:[EBP-2C]
0060912E . |BA 78926000 MOV EDX,jyWuYeMa.00609278 ; ASCII "SignCode"
00609133 . |8BC3 MOV EAX,EBX
00609135 . |E8 1E9FE6FF CALL jyWuYeMa.00473058
0060913A . |8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0060913D . |E8 1EBFDFFF CALL jyWuYeMa.00405060
00609142 . |50 PUSH EAX
00609143 . |E8 4418FFFF CALL <JMP.&PunUnitLib.SavePass>
00609148 . |8BD0 MOV EDX,EAX
0060914A . |8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
0060914D . |E8 4EBCDFFF CALL jyWuYeMa.00404DA0
00609152 . |8B4D CC MOV ECX,DWORD PTR SS:[EBP-34]
00609155 . |BA 8C926000 MOV EDX,jyWuYeMa.0060928C ; ASCII "RegCode"
0060915A . |8BC3 MOV EAX,EBX
0060915C . |E8 F79EE6FF CALL jyWuYeMa.00473058
00609161 . |8BC3 MOV EAX,EBX
00609163 . |E8 D8ABDFFF CALL jyWuYeMa.00403D40
00609168 . |6A 00 PUSH 0
0060916A . |68 94926000 PUSH jyWuYeMa.00609294
0060916F . |E8 F017FFFF CALL <JMP.&PunUnitLib.ShowMess>
00609174 . |A1 8C646700 MOV EAX,DWORD PTR DS:[67648C]
00609179 . |C700 02000000 MOV DWORD PTR DS:[EAX],2
0060917F . |A1 48626700 MOV EAX,DWORD PTR DS:[676248]
00609184 . |8B00 MOV EAX,DWORD PTR DS:[EAX]
00609186 . |E8 7D75E6FF CALL jyWuYeMa.00470708
0060918B . |33C0 XOR EAX,EAX
0060918D . |5A POP EDX
0060918E . |59 POP ECX
0060918F . |59 POP ECX
00609190 . |64:8910 MOV DWORD PTR FS:[EAX],EDX
00609193 . |EB 20 JMP SHORT jyWuYeMa.006091B5
00609195 .^|E9 86B0DFFF JMP jyWuYeMa.00404220
0060919A . |8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0060919D . |E8 B63CE6FF CALL jyWuYeMa.0046CE58
006091A2 . |E8 A5B4DFFF CALL jyWuYeMa.0040464C
006091A7 . |EB 0C JMP SHORT jyWuYeMa.006091B5
006091A9 > \6A 03 PUSH 3 ; -------------跳转到这里就提示注册失败哦
006091AB . 68 B8926000 PUSH jyWuYeMa.006092B8
006091B0 . E8 AF17FFFF CALL <JMP.&PunUnitLib.ShowMess>
破解很简单,直接修改006090A5 处 JNZ jyWuYeMa.006091A9 为 JZ jyWuYeMa.006091A9 或者nop,随意输入注册码即可注册成功。。。
F9将程序运行起来,随意输入一个注册码,点击注册后程序中断在了006090A5 处,F8单步一下看看,出现如下错误提示
重新输入一个注册码,将右侧寄存器处双击z位数值,由0改为1,此时006090A5 处的跳转失效
F9运行程序,可以看到如下注册成功提示
OK,破解完啦,现在保存一下吧
右击刚刚修改的地方,如图所示,对修改后的程序进行保存
注册后不会再有45天的使用限制哦
我们再来看看软件的过期检测部分吧
0066F457 . /74 18 JE SHORT jyWuYeMa.0066F471
0066F459 . |A1 8C646700 MOV EAX,DWORD PTR DS:[67648C]
0066F45E . |8338 00 CMP DWORD PTR DS:[EAX],0
0066F461 . |7F 0E JG SHORT jyWuYeMa.0066F471
0066F463 . |6A 01 PUSH 1
0066F465 . |68 24F56600 PUSH jyWuYeMa.0066F524 ; 软件已过期,如需继续使用,请联系供应商...
0066F46A . |E8 F5B4F8FF CALL <JMP.&PunUnitLib.ShowMess>
0066F46F . |EB 4A JMP SHORT jyWuYeMa.0066F4BB
0066F471 > \A1 28616700 MOV EAX,DWORD PTR DS:[676128]
如果不注册的话,只要将0066F457处JE SHORT jyWuYeMa.0066F471改为jmp SHORT jyWuYeMa.0066F471也是可以去掉45天限制的,但是程序中还存在着很多使用上的限制,例如:
0066B928 |. /75 0E JNZ SHORT jyWuYeMa.0066B938
0066B92A |. |6A 00 PUSH 0
0066B92C |. |68 C4B96600 PUSH jyWuYeMa.0066B9C4 ; 对不起,此功能只有注册用户才具有!
0066B931 |. |E8 2EF0F8FF CALL <JMP.&PunUnitLib.ShowMess>
0066B936 |. |EB 65 JMP SHORT jyWuYeMa.0066B99D
0066B938 |> \8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
那样的话是要改很多像0066B928 这样的地方的
感谢软软提醒我程序里面有暗桩!
看来程序并非启动时不做验证,肯定做了,不过偶太懒了。。。不想找,你可以下个readfile的断或者注册表的断找找看
直接搜索字符串让我大吃一斤。。。将近十几处的暗桩呢。。。
仅以其中一个说明:
00610394 /75 0E JNZ SHORT wuyeMan.006103A4--------------------------------------⊙﹏⊙b汗太明显了。。。直接改为jmp或者jz即可
00610396 |6A 00 PUSH 0
00610398 |68 1C046100 PUSH wuyeMan.0061041C ; 对不起,此功能只有注册用户才具有!
0061039D |E8 B6A2FDFF CALL <JMP.&PunUnitLib.ShowMess>
006103A2 |EB 50 JMP SHORT wuyeMan.006103F4
006103A4 \8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
其余的暗桩跟上面是一样的哦
补丁如下:
效果如图:
呵呵,收工
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)