【破文作者】sLtYJ[D.4s][DFCG]
【作者邮箱】sltyj@263.net
【作者主页】龙族联盟论坛 DFCG官方论坛
【使用工具】OD,PEiD
【操作系统】Windows XP
【软件名称】出租车管理 1.2
【下载地址】http://bj.onlinedown.net/soft/27925.htm
【软件大小】1.41 MB
【程序语言】Borland Delphi 6.0 - 7.0
【软件简介】
一个小而全的出租车管理软件,能实现车辆,车票,驾驶员,缴费的查询等
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【内容】
首先用Peid 检测程序程序,无壳!显示编写语言是Borland Delphi 6.0 - 7.0,随即拿出DEDE来进行反编译...
另人郁闷的是居然出错,可能作者动了手脚吧~~只好用OD直接来了,下断BP GetWindowTextA,点击注册后被OD断下,经过
一番寻找,终于找到关键点,下面是小弟的一点肤浅分析,有错误的地方还请各位前辈多多指点!谢过!
005271CF . 55 PUSH EBP ; //来到这里
005271D0 . 68 05745200 PUSH 00527405
005271D5 . 64:FF30 PUSH DWORD PTR FS:[EAX]
005271D8 . 64:8920 MOV FS:[EAX],ESP
005271DB . 8D85 F4FDFFFF LEA EAX,[EBP-20C]
005271E1 . 8B55 FC MOV EDX,[EBP-4] ; user32.77D13A50
005271E4 . 8B92 08030000 MOV EDX,[EDX+308] ; user32.77D154B4
005271EA . B9 FF000000 MOV ECX,0FF
005271EF . E8 94D3EDFF CALL 00404588 ; //计算特征码的长度 我的等于17位 十六进制就是11
005271F4 . BF FF000000 MOV EDI,0FF
005271F9 . 8D85 F4FEFFFF LEA EAX,[EBP-10C]
005271FF > C600 20 MOV BYTE PTR [EAX],20
00527202 . 40 INC EAX
00527203 . 4F DEC EDI
00527204 .^ 75 F9 JNZ SHORT 005271FF
00527206 . 8B45 FC MOV EAX,[EBP-4] ; user32.77D13A50
00527209 . 8B80 08030000 MOV EAX,[EAX+308] ; //得到特征码 d 00A7AC54
0052720F . E8 98D3EDFF CALL 004045AC
00527214 . 85C0 TEST EAX,EAX ; //比较
00527216 . 7E 6A JLE SHORT 00527282
00527218 . 8945 F4 MOV [EBP-C],EAX
0052721B . BF 01000000 MOV EDI,1 ; //EDI=1 准备作为记位器
00527220 . 8DB5 F5FDFFFF LEA ESI,[EBP-20B]
00527226 . 8D9D F5FEFFFF LEA EBX,[EBP-10B]
0052722C > 803E 2D CMP BYTE PTR [ESI],2D ; //判断得到的特征码是否为"-"
0052722F . 74 2F JE SHORT 00527260 ; //是就跳过
00527231 . 8D85 F0FDFFFF LEA EAX,[EBP-210]
00527237 . 8A16 MOV DL,[ESI]
00527239 . E8 96D2EDFF CALL 004044D4 ; //得到数字的十六进制值
0052723E . 8B85 F0FDFFFF MOV EAX,[EBP-210]
00527244 . E8 0F1EEEFF CALL 00409058 ; //将得到的十六进制还原为数字 结果放入EAX
00527249 . 8BC8 MOV ECX,EAX ; //ECX=EAX
0052724B . 83C1 43 ADD ECX,43 ; //ECX=ECX+43
0052724E . 8BC7 MOV EAX,EDI ; //EAX=EDI(数字位数)
00527250 . 51 PUSH ECX ; //压入ECX
00527251 . B9 06000000 MOV ECX,6 ; //ECX=6
00527256 . 99 CDQ ; //将EAX的32位值扩展64位,需要EDX(这里EDX清零)
00527257 . F7F9 IDIV ECX ; //EAX=EAX/ECX 就是将数字位数除于6,余数进EDX
00527259 . 59 POP ECX ; //弹出ECX
0052725A . 03CA ADD ECX,EDX ; //ECX=ECX+EDX
0052725C . 880B MOV [EBX],CL ; //ECX的值转化成字符-→就是注册码
0052725E . EB 09 JMP SHORT 00527269
00527260 > B8 5A000000 MOV EAX,5A ; //EAX=5A
00527265 . 2BC7 SUB EAX,EDI ; //EAX=EAX-EDI(数字位数)
00527267 . 8803 MOV [EBX],AL ; //得到的十六进制值转为字符
00527269 > 8BC7 MOV EAX,EDI
0052726B . B9 06000000 MOV ECX,6 ; ECX=6
00527270 . 99 CDQ
00527271 . F7F9 IDIV ECX ; //EAX=EAX/ECX 就是将数字位数除于6,余数进EDX
00527273 . 85D2 TEST EDX,EDX ; //检查余数是否为零
00527275 . 75 03 JNZ SHORT 0052727A ; //不是,跳...
00527277 . C603 2D MOV BYTE PTR [EBX],2D ; //余数为零,给注册码加上"-"符号
0052727A > 47 INC EDI ; //EDI=EDI+1 作为记位器
0052727B . 43 INC EBX ; //组合已得到的注册码
0052727C . 46 INC ESI
0052727D . FF4D F4 DEC DWORD PTR [EBP-C] ; //计数器减1
00527280 .^ 75 AA JNZ SHORT 0052722C ; //比较是否计算完成
00527282 > 8D85 E8FDFFFF LEA EAX,[EBP-218]
00527288 . 8D95 F4FEFFFF LEA EDX,[EBP-10C] ; //d 12F1C4 可看到注册码 在次亦可制作内存注册机
0052728E . E8 BDD2EDFF CALL 00404550
00527293 . 8B85 E8FDFFFF MOV EAX,[EBP-218]
00527299 . 8D95 ECFDFFFF LEA EDX,[EBP-214]
0052729F . E8 1019EEFF CALL 00408BB4
005272A4 . 8B95 ECFDFFFF MOV EDX,[EBP-214] ; comctl32.77315889
005272AA . 8D85 F4FEFFFF LEA EAX,[EBP-10C]
005272B0 . B9 FF000000 MOV ECX,0FF
005272B5 . E8 CED2EDFF CALL 00404588
005272BA . 8D95 E4FDFFFF LEA EDX,[EBP-21C]
005272C0 . 8B45 FC MOV EAX,[EBP-4] ; user32.77D13A50
005272C3 . 8B80 00030000 MOV EAX,[EAX+300]
005272C9 . E8 D244F4FF CALL 0046B7A0
005272CE . 8B85 E4FDFFFF MOV EAX,[EBP-21C] ; //d 00ABA26C 得到假码 刚才输的是676767676767
005272D4 . 50 PUSH EAX ; //放入EAX
005272D5 . 8D85 E0FDFFFF LEA EAX,[EBP-220]
005272DB . 8D95 F4FEFFFF LEA EDX,[EBP-10C]
005272E1 . E8 6AD2EDFF CALL 00404550
005272E6 . 8B95 E0FDFFFF MOV EDX,[EBP-220] ; user32.77D13B33
005272EC . 58 POP EAX ; //弹出假码 676767676767
005272ED . E8 06D4EDFF CALL 004046F8
005272F2 0F85 BC000000 JNZ 005273B4 ; //比较 不一样 跳 (爆破点)
005272F8 . B2 01 MOV DL,1
005272FA . A1 60164400 MOV EAX,[441660]
005272FF . E8 C8A4F1FF CALL 004417CC
00527304 . 8945 F8 MOV [EBP-8],EAX
00527307 . 33C0 XOR EAX,EAX
00527309 . 55 PUSH EBP
0052730A . 68 77735200 PUSH 00527377
0052730F . 64:FF30 PUSH DWORD PTR FS:[EAX]
00527312 . 64:8920 MOV FS:[EAX],ESP
00527315 . BA 02000080 MOV EDX,80000002
0052731A . 8B45 F8 MOV EAX,[EBP-8] ; //下面的操作就是将注册信息写入注册表
0052731D . E8 86A5F1FF CALL 004418A8
00527322 . B1 01 MOV CL,1
00527324 . BA 1C745200 MOV EDX,0052741C ; ASCII "Software\\Microsoft\\Windows\\CurrentVersion"
00527329 . 8B45 F8 MOV EAX,[EBP-8]
0052732C . E8 BBA6F1FF CALL 004419EC
00527331 . 84C0 TEST AL,AL
00527333 . 74 24 JE SHORT 00527359
00527335 . 8D85 DCFDFFFF LEA EAX,[EBP-224]
0052733B . 8D95 F4FEFFFF LEA EDX,[EBP-10C]
00527341 . E8 0AD2EDFF CALL 00404550
00527346 . 8B8D DCFDFFFF MOV ECX,[EBP-224]
0052734C . BA 50745200 MOV EDX,00527450 ; ASCII "ProductMac"
00527351 . 8B45 F8 MOV EAX,[EBP-8]
00527354 . E8 2FA8F1FF CALL 00441B88
00527359 > 33C0 XOR EAX,EAX
0052735B . 5A POP EDX
0052735C . 59 POP ECX
0052735D . 59 POP ECX
0052735E . 64:8910 MOV FS:[EAX],EDX
00527361 . 68 7E735200 PUSH 0052737E
00527366 > 8B45 F8 MOV EAX,[EBP-8]
00527369 . E8 0AA5F1FF CALL 00441878
0052736E . 8B45 F8 MOV EAX,[EBP-8]
00527371 . E8 06C1EDFF CALL 0040347C
00527376 . C3 RETN
--------------------------------------------------------------------------------
【总结】
总得来说,此软件的算法还是比较简单的!就是依次取得机器的特征码,然后进行运算,最后结果转化为字符!如此循环....组合后得到最后的注册码!水平有限,有什么不对的地方请各位指正,谢谢!:)
--------------------------------------------------------------------------------
【爆破地址】
005272F2 JNZ--→NOP
--------------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)