jjdg 发表于 2007-10-13 19:52:01

我爱我车 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 编辑 ]

Nisy 发表于 2007-10-13 22:00:39

不错不错 往往成功只在坚持一下的忍耐中 算法兄弟已经分析的很清楚了 支持下 送个精华 ~~

tigerisme 发表于 2007-10-13 23:06:00

不错,我也来学习兄弟的好文章/:good
注册机有益处现象,最好能修正一下/:001

[ 本帖最后由 tigerisme 于 2007-10-13 23:13 编辑 ]

jjdg 发表于 2007-10-14 01:21:08

呵呵
惭愧惭愧!
这个问题的确是疏忽了!
因为开始以为大家都是按软件给出来的机器码输入,不会出什么问题,所以就没考虑那么多!
没想到老大和我开了个玩笑,把问题引出来了,看来做事不能马马虎虎啊!
谢谢测试!
注册机已经加入了除错代码,请老大再玩玩它!
^_^

[ 本帖最后由 jjdg 于 2007-10-14 04:06 编辑 ]

小子贼野 发表于 2007-10-21 19:32:09

原帖由 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 编辑 ]

yingfeng 发表于 2007-10-21 20:35:09

学习了一下,/:good

楼主终于尝到肉了,呵呵

tigerisme 发表于 2007-10-21 22:10:44

原帖由 jjdg 于 2007-10-14 01:21 发表 https://www.chinapyg.com/images/common/back.gif
呵呵
惭愧惭愧!
这个问题的确是疏忽了!
因为开始以为大家都是按软件给出来的机器码输入,不会出什么问题,所以就没考虑那么多!
没想到老大和我开了个玩笑,把问题引出来了,看来做事不能马马虎虎啊!
谢谢测 ...
/:017 /:017 玩笑而已,那种机器码是不会出现的

lzq1973 发表于 2007-10-23 05:57:17

学习了,辛苦~~

speedboy 发表于 2009-10-8 22:36:29

vb的程序就爱出错。
页: [1]
查看完整版本: 我爱我车 1.4 算法快速分析