- UID
- 16062
注册时间2006-6-19
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
【破文标题】我爱我车 1.4 算法快速分析
【破文作者】jjdg
【作者邮箱】[email protected]
【作者主页】
【破解工具】OD
【破解平台】XP
【软件名称】我爱我车 1.4
【软件大小】985KB
【原版下载】http://www.newhua.com/soft/36834.htm
【保护方式】壳+注册码
【软件简介】软件详细信息
全程跟踪记录您爱车的保养、维修、贷款、保险、油耗及其它日常费用记录。全新XP界面,傻瓜式操作!
> 1、可同时操作管理多辆爱车。
> 2、预设多种常用的保养维修及零部件等分类项目。
> 3、详细记录每次保养、维修费用及所用零部件。
> 4、详细记录贷款、保险及验车、停车等费用。
> 5、详细记录每次加油情况,并自动计算百公里油耗。
> 6、备忘录提醒,可按日期或里程数设置提醒条件。
> 7、打印功能,并可导出数据为Excel或文本文件功能。
> 8、自动计算各类平均费用:如每天、每公里及每日公里数等数据。
> 9、可设置日期范围来显示数据。
> 10、强大的报表和图表功能,帮助您更好地分析费用支出。
> 11、方便的备注式写字板功能,记录一些重要事项。在工具菜单中。
> 12、可以导入油耗计算工具的油耗记录,省却您重新录入的麻烦。在工具菜单中。
> 13、方便地备份和恢复数据。每次退出程序时自动备份数据库。在系统菜单中。
> 14、程序可在线升级,注册用户可永久免费升级。
【破解声明】仅供菜鸟学习 高手莫笑
------------------------------------------------------------------------
【破解过程】 很久没有吃“扣肉”了,看见一些兄弟天天发破解,馋的没办法!可惜运气太背,找到的竟是些硬骨头,不是遇到脱不了的强壳,就是碰上bt到OD都载入不了的大猛,今天总算捡到个“软柿子”拿出来和大家一起捏一捏!^_^
1.下载、安装就不废话了,PEID查壳:ASPack 2.11 -> Alexey Solodovnikov
这个没什么说的,爱怎么脱怎么脱!
2.运行一下,点“注册”,随便输入,点“保存信息”,弹出提示“非法注册码,请支持正版软件,谢谢!”
感觉不错哦! 可能是扣肉吧!(^_^ 兴奋了)
3.OD载入脱壳后的文件,右键查找ASCII,找到“非法注册码”
0043FECB . E8 EFE50300 CALL unpacked.0047E4BF ; \unpacked.0047E4BF
0043FED0 . 83C4 18 ADD ESP,18
0043FED3 . 85C0 TEST EAX,EAX
0043FED5 . 74 31 JE SHORT unpacked.0043FF08 ;不跳走就挂了!
0043FED7 . 6A 30 PUSH 30
0043FED9 . 6A 00 PUSH 0
0043FEDB . 68 18184D00 PUSH unpacked.004D1818 ; 非法注册码,请支持正版软件,谢谢!
往上找,在0043FE50 . 6A FF PUSH -1 些断点,
运行程序,注册,
输入信息:
注册名:jjdg
注册码:123123123
在0043FE50断下,
F8单步,留意寄存器内容的变化,
0043FE70 . 8B86 DC010000 MOV EAX,DWORD PTR DS:[ESI+1DC] ; 送入注册名
0043FE76 . 8B48 F8 MOV ECX,DWORD PTR DS:[EAX-8] ; 注册名位数
0043FE81 . 8B86 E0010000 MOV EAX,DWORD PTR DS:[ESI+1E0] ; 送入注册码
0043FE87 . 8B48 F8 MOV ECX,DWORD PTR DS:[EAX-8] ; 注册码位数
到下面的时候注意寄存器
0043FEBA . E8 59010500 CALL unpacked.00490018 ; 关键call
0043FEBF . 8B86 D8010000 MOV EAX,DWORD PTR DS:[ESI+1D8] ; |机器码:0207423487
0043FEC5 . 50 PUSH EAX ; |Arg2 = 00BA7898 ASCII "0207423487"
EAX 00BA7898 ASCII "0207423487" <---这是我电脑的机器码
ECX 00BA7AC8 ASCII "0107390956" <---这是什么呢?不会是真的注册码吧?这么容易?
EDX 00BA7AC9 ASCII "107390956"
EBX 00000001
ESP 0012F4D4
EBP 0012F504
ESI 0012FA14 ASCII "0EK"
EDI 0012FA14 ASCII "0EK"
EIP 0043FEC5 unpacked.0043FEC5
不管那么多,先把0107390956复制下来,试一试再说!果然,注册不了,看来没有这么简单哦!
在0043FECB . E8 EFE50300 CALL unpacked.0047E4BF ; \unpacked.0047E4BF
按F7进去看看,
0047E4BF /$ 55 PUSH EBP <---来到这里!
0047E4C0 |. 8BEC MOV EBP,ESP
0047E4C2 |. 833D 6C864E00>CMP DWORD PTR DS:[4E866C],0
0047E4C9 |. 53 PUSH EBX
0047E4CA |. 56 PUSH ESI
0047E4CB |. 57 PUSH EDI
0047E4CC |. 75 12 JNZ SHORT unpacked.0047E4E0
0047E4CE |. FF75 0C PUSH DWORD PTR SS:[EBP+C]
0047E4D1 |. FF75 08 PUSH DWORD PTR SS:[EBP+8]
0047E4D4 |. E8 671A0000 CALL unpacked.0047FF40
0047E4D9 |. 59 POP ECX
0047E4DA |. 59 POP ECX
0047E4DB |. E9 89000000 JMP unpacked.0047E569
0047E4E0 |> 6A 19 PUSH 19
0047E4E2 |. E8 62590000 CALL unpacked.00483E49
0047E4E7 |. 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C] ; 机器码
0047E4EA |. 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8] ; 注册码?
0047E4ED |. 59 POP ECX
0047E4EE |> 66:0FB60F /MOVZX CX,BYTE PTR DS:[EDI]
0047E4F2 |. 0FB6C1 |MOVZX EAX,CL
0047E4F5 |. 47 |INC EDI
0047E4F6 |. 894D 0C |MOV DWORD PTR SS:[EBP+C],ECX
0047E4F9 |. F680 81874E00>|TEST BYTE PTR DS:[EAX+4E8781],4
0047E500 |. 74 16 |JE SHORT unpacked.0047E518
0047E502 |. 8A07 |MOV AL,BYTE PTR DS:[EDI]
0047E504 |. 84C0 |TEST AL,AL
0047E506 |. 75 06 |JNZ SHORT unpacked.0047E50E
0047E508 |. 8365 0C 00 |AND DWORD PTR SS:[EBP+C],0
0047E50C |. EB 0A |JMP SHORT unpacked.0047E518
0047E50E |> 33D2 |XOR EDX,EDX
0047E510 |. 47 |INC EDI
0047E511 |. 8AF1 |MOV DH,CL
0047E513 |. 8AD0 |MOV DL,AL
0047E515 |. 8955 0C |MOV DWORD PTR SS:[EBP+C],EDX
0047E518 |> 66:0FB61E |MOVZX BX,BYTE PTR DS:[ESI]
0047E51C |. 0FB6C3 |MOVZX EAX,BL
0047E51F |. 46 |INC ESI
0047E520 |. F680 81874E00>|TEST BYTE PTR DS:[EAX+4E8781],4
0047E527 |. 74 13 |JE SHORT unpacked.0047E53C
0047E529 |. 8A06 |MOV AL,BYTE PTR DS:[ESI]
0047E52B |. 84C0 |TEST AL,AL
0047E52D |. 75 04 |JNZ SHORT unpacked.0047E533
0047E52F |. 33DB |XOR EBX,EBX
0047E531 |. EB 09 |JMP SHORT unpacked.0047E53C
0047E533 |> 33C9 |XOR ECX,ECX
0047E535 |. 46 |INC ESI
0047E536 |. 8AEB |MOV CH,BL
0047E538 |. 8AC8 |MOV CL,AL
0047E53A |. 8BD9 |MOV EBX,ECX
0047E53C |> 66:395D 0C |CMP WORD PTR SS:[EBP+C],BX
0047E540 |. 75 09 |JNZ SHORT unpacked.0047E54B
0047E542 |. 66:837D 0C 00 |CMP WORD PTR SS:[EBP+C],0
0047E547 |. 74 16 |JE SHORT unpacked.0047E55F
0047E549 |.^ EB A3 \JMP SHORT unpacked.0047E4EE
0047E54B |> 6A 19 PUSH 19
0047E54D |. E8 58590000 CALL unpacked.00483EAA
0047E552 |. 66:3B5D 0C CMP BX,WORD PTR SS:[EBP+C]
0047E556 |. 59 POP ECX
0047E557 |. 1BC0 SBB EAX,EAX
0047E559 |. 83E0 02 AND EAX,2
0047E55C |. 48 DEC EAX
0047E55D |. EB 0A JMP SHORT unpacked.0047E569
0047E55F |> 6A 19 PUSH 19 ; /Arg1 = 00000019
0047E561 |. E8 44590000 CALL unpacked.00483EAA ; \unpacked.00483EAA
0047E566 |. 59 POP ECX
0047E567 |. 33C0 XOR EAX,EAX
0047E569 |> 5F POP EDI
0047E56A |. 5E POP ESI
0047E56B |. 5B POP EBX
0047E56C |. 5D POP EBP
0047E56D \. C3 RETN
F8继续,
好大个循环!
还是没有看见注册码的影子哦!
F8来到0047E55C |. 48 DEC EAX,
EAX变为FFFFFFFF,从前面知道,如果EAX不等于0,那么
0043FED5 . 74 31 JE SHORT unpacked.0043FF08 就不会实现,
程序就会注册失败!
看来,如何得到EAX=0是关键!
往上看,
可以发现只要0047E547 |. /74 16 |JE SHORT unpacked.0047E55F 的跳转实现,
就可以通过0047E567 |. 33C0 XOR EAX,EAX 令EAX=0,
好!
现在重点来分析0047E4EE到0047E549这一循环段,
程序在0047E4EE逐位送入前面看到的“注册码”,
并且在0047E518逐位送入机器码的每个字符的ascii,
然后进行比较,决定0047E540 |. /75 09 |JNZ SHORT unpacked.0047E54B 是否跳转,
那么这应该就是关键所在了!
手动强制0047E540不跳几次后,
0047E547 |. /74 16 |JE SHORT unpacked.0047E55F 跳转已实现
于是一路来到0047E567,然后RETN返回,
F9一下,程序弹出对话框,“注册成功”
现在总结一下,这个程序在进行注册的过程中,并没有出现明码形式的注册码,而是采用将“注册码”与机器码逐位比较的方式进行验证,所以,内存注册机就没办法了!
解决注册的思路是:只要那个“注册码”与机器码相同就可以了!
那么,那个注册码是从哪里产生的呢?
再来注册一次追一下!
这次注册码我用123123!
F8单步到0043FE9E可以发现,
EAX=0001E0F3
在上面点右键-修改,可以看见:
十六进制:0001E0F3
有符号:123123
无符号:123123
F8一下,
此时,EAX=0131F2AC,
还是右键-修改,
十六进制:0131F2AC
有符号:20050604
无符号:20050604
F8到0043FEC6 的时候,
堆栈 SS:[0012F088]=00BA7488, (ASCII "0020050604")
EAX=00BA7398, (ASCII "0207423487")
继续,可以发现,在刚刚提到的那个循环里面是0020050604和0207423487在做比较,
怎么样?
这个软件的注册码算法,现在大家都清楚了吧?
总结一下,就只一句话:将输入的注册码转换为16进制后,与特征值130125F 进行xor运算,然后再转换为10进制,只要和机器码相等就注册成功!
所以,只要将这个过程反转,就可以求出正确的注册码了!
大家用XP自带的计算器就可以算了!
既然已经走到这一步了,不写出注册机似乎对不起各位和自己!
下面还是我最常用的VB代码,
新建一个工程,放2个文本框即可!
Private Sub Text1_Change()
jqm = Val(Text1.Text)
tzz = &H130125F
zcm = jqm Xor tzz
Text2.Text = zcm
End Sub
试试注册机怎么样?
ok!注册成功!
------------------------------------------------------------------------
【破解总结】没什么好总结的!
主要是这么久一直为“硬骨头”所累没有东西和各位PYG的兄弟分享实在惭愧,今天好容易找到个“扣肉”当然要和大家一起分享分享!
------------------------------------------------------------------------
【版权声明】本文原创于PYG论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年10月13日
[ 本帖最后由 jjdg 于 2007-10-14 01:47 编辑 ] |
|