我爱我车 1.4 算法快速分析
【破文标题】我爱我车 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: ;送入注册名
0043FE76 .8B48 F8 MOV ECX,DWORD PTR DS: ;注册名位数
0043FE81 .8B86 E0010000 MOV EAX,DWORD PTR DS: ;送入注册码
0043FE87 .8B48 F8 MOV ECX,DWORD PTR DS: ;注册码位数
到下面的时候注意寄存器
0043FEBA .E8 59010500 CALL unpacked.00490018 ;关键call
0043FEBF .8B86 D8010000 MOV EAX,DWORD PTR DS: ; |机器码: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:,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:
0047E4D1|.FF75 08 PUSH DWORD PTR SS:
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: ;机器码
0047E4EA|.8B7D 08 MOV EDI,DWORD PTR SS: ;注册码?
0047E4ED|.59 POP ECX
0047E4EE|>66:0FB60F /MOVZX CX,BYTE PTR DS:
0047E4F2|.0FB6C1 |MOVZX EAX,CL
0047E4F5|.47 |INC EDI
0047E4F6|.894D 0C |MOV DWORD PTR SS:,ECX
0047E4F9|.F680 81874E00>|TEST BYTE PTR DS:,4
0047E500|.74 16 |JE SHORT unpacked.0047E518
0047E502|.8A07 |MOV AL,BYTE PTR DS:
0047E504|.84C0 |TEST AL,AL
0047E506|.75 06 |JNZ SHORT unpacked.0047E50E
0047E508|.8365 0C 00 |AND DWORD PTR SS:,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:,EDX
0047E518|>66:0FB61E |MOVZX BX,BYTE PTR DS:
0047E51C|.0FB6C3 |MOVZX EAX,BL
0047E51F|.46 |INC ESI
0047E520|.F680 81874E00>|TEST BYTE PTR DS:,4
0047E527|.74 13 |JE SHORT unpacked.0047E53C
0047E529|.8A06 |MOV AL,BYTE PTR DS:
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:,BX
0047E540|.75 09 |JNZ SHORT unpacked.0047E54B
0047E542|.66:837D 0C 00 |CMP WORD PTR SS:,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:
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:=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 编辑 ] 不错不错 往往成功只在坚持一下的忍耐中 算法兄弟已经分析的很清楚了 支持下 送个精华 ~~ 不错,我也来学习兄弟的好文章/:good
注册机有益处现象,最好能修正一下/:001
[ 本帖最后由 tigerisme 于 2007-10-13 23:13 编辑 ] 呵呵
惭愧惭愧!
这个问题的确是疏忽了!
因为开始以为大家都是按软件给出来的机器码输入,不会出什么问题,所以就没考虑那么多!
没想到老大和我开了个玩笑,把问题引出来了,看来做事不能马马虎虎啊!
谢谢测试!
注册机已经加入了除错代码,请老大再玩玩它!
^_^
[ 本帖最后由 jjdg 于 2007-10-14 04:06 编辑 ] 原帖由 tigerisme 于 2007-10-13 23:06 发表 https://www.chinapyg.com/images/common/back.gif
不错,我也来学习兄弟的好文章/:good
注册机有益处现象,最好能修正一下/:001
edit2.Text:=inttostr(strtoint(edit1.Text) xor $130125F);
Delphi版~
看了老半天,都有点晕了,到最后才发现和用户名一点关系都没有/:L
[ 本帖最后由 小子贼野 于 2007-10-21 19:37 编辑 ] 学习了一下,/:good
楼主终于尝到肉了,呵呵 原帖由 jjdg 于 2007-10-14 01:21 发表 https://www.chinapyg.com/images/common/back.gif
呵呵
惭愧惭愧!
这个问题的确是疏忽了!
因为开始以为大家都是按软件给出来的机器码输入,不会出什么问题,所以就没考虑那么多!
没想到老大和我开了个玩笑,把问题引出来了,看来做事不能马马虎虎啊!
谢谢测 ...
/:017 /:017 玩笑而已,那种机器码是不会出现的 学习了,辛苦~~ vb的程序就爱出错。
页:
[1]