jjdg 发表于 2007-10-23 01:22:43

另类爆破--通用量规辅助设计程序爆破实录

【文章标题】: 另类爆破--通用量规辅助设计程序1.22爆破实录
【文章作者】: jjdg
【作者邮箱】: [email protected]
【软件名称】: 通用量规辅助设计程序
【下载地址】: http://reg.banma.com/Detail.aspx?id=/8d77fb86-40c5-48e1-a717-cc883d11bb0d/
【加壳方式】: UPX
【保护方式】: 壳+注册码
【使用工具】: OD
【操作平台】: XP
【软件介绍】: 可以进行普通螺纹、梯形螺纹、光滑极限、高度深度的
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
      今天上网逛的时候看见了这个程序,要价100RMB哦!一看大小才1M多,以为是个“软柿子”,本想搞个注册机,谁知道硬的很啊!只有爆破了!
1.程序就一个文件,下载解压后,PEID查壳:UPX的!直接脱了!

2.OD载入运行,直接进入程序注册,乱输个注册码,有错误提示:注册码错误,请重输!
    右键查找字符串,ASCII和UNICODE都找了,愣是找不到!郁闷!
    使用API断点插件,设置对话框断点也没有拦住!
3.幸好还有VBExplorer!因为作者说了,这个软件是VB6的!
    所以打开VBExplorer,很容易地找到了“现在注册”那个按钮的地址:004EF8E6
004EF8E6   > \55            PUSH EBP                                 ;注册按钮
在004EF8E6下断点,果然断下,一路F8向下,
004EFC24   .E8 FB29F1FF   CALL <JMP.&MSVBVM60.__vbaVarTstEq>       ;进去看看
004EFC29   .66:85C0       TEST AX,AX
004EFC2C   .0F84 34020000 JE lg.004EFE66                           ;跳了就注册失败
反复几次测试后发现,004EFC2C跳了注册失败!不跳就注册成功!可惜程序重启又是未注册了!

曾经在004EFC24这里F7进去,可最后跟了半天,EAX的值是通过一个内存变量赋值的,所以在004EFC24里面想办法这个方案失败!

4.当光标停在下面这行的时候,
004EF8E6   > \55            PUSH EBP                                 ;注册按钮
堆栈里面显示
   跳转来自 00405193
于是猜测追过去看看!
00405130   .816C24 04 630>SUB DWORD PTR SS:,63
00405138   .E9 1B840E00   JMP lg.004ED558                        ;直接结束
0040513D   .816C24 04 670>SUB DWORD PTR SS:,67
00405145   .E9 75840E00   JMP lg.004ED5BF
0040514A   .816C24 04 FFF>SUB DWORD PTR SS:,0FFFF
00405152   .E9 EA840E00   JMP lg.004ED641
00405157   .816C24 04 FFF>SUB DWORD PTR SS:,0FFFF
0040515F      E9 D2950E00   JMP lg.004EE736                        ;
00405164   .816C24 04 FFF>SUB DWORD PTR SS:,0FFFF
0040516C   .E9 209F0E00   JMP lg.004EF091
00405171   .816C24 04 FFF>SUB DWORD PTR SS:,0FFFF
00405179   .E9 EEA30E00   JMP lg.004EF56C
0040517E   .816C24 04 FFF>SUB DWORD PTR SS:,0FFFF
00405186   .E9 04A50E00   JMP lg.004EF68F                        ;提示注册成功
0040518B   .816C24 04 5F0>SUB DWORD PTR SS:,5F
00405193   .E9 4EA70E00   JMP lg.004EF8E6                        ;注册名必须输入 !<--来到这里!
00405198   .816C24 04 FFF>SUB DWORD PTR SS:,0FFFF
004051A0   .E9 69AE0E00   JMP lg.004F000E                        ;提示运行错误
004051A5   .816C24 04 5B0>SUB DWORD PTR SS:,5B
004051AD   .E9 B9B90E00   JMP lg.004F0B6B                        ;提示未注册
004051B2   .816C24 04 670>SUB DWORD PTR SS:,67
004051BA   .E9 9ABA0E00   JMP lg.004F0C59                        ;程序直接结束
004051BF   .816C24 04 4B0>SUB DWORD PTR SS:,4B
004051C7   .E9 F4BA0E00   JMP lg.004F0CC0                        ;提示对话框
004051CC   .816C24 04 770>SUB DWORD PTR SS:,77
004051D4   .E9 69BB0E00   JMP lg.004F0D42                        ;提示对话框
004051D9   .816C24 04 370>SUB DWORD PTR SS:,37
004051E1   .E9 DEBB0E00   JMP lg.004F0DC4                        ;提示对话框

一看这里居然有这么多JMP,于是猜测其中会不会有一个直接跳向“已注册”呢?
重启程序,逐一进行测试,没一个管用!

怎么办呢?

想起作者在软件介绍里面说软件有时间限制,于是把时间往后调了1年,结果一启动就弹出过期对话框,即使把时间改回去也照样跳出过期对话框,可以用rtcmsg断了下来,停在
004EEEDD   .E8 3037F1FF   CALL <JMP.&MSVBVM60.#595>                ;对话框在这里
004EEEE2   .8D95 F4FEFFFF LEA EDX,DWORD PTR SS:

好!
开始向上找,看哪里可以跳过这个对话框呢?
004EEE03   . /E9 FA010000   JMP lg.004EF002                        ;<--这里就可以!
004EEE08   > |BA 6C9A4000   MOV EDX,lg.00409A6C                      ;UNICODE "10/01/2107"
但是,发现
00409A6C=lg.00409A6C (UNICODE "10/01/2107")
跳转来自 004EEBD9, 004EECA5

继续!
在004EEBD9, 004EECA5下断点,确保这2处不跳的确可以解决过期的问题,可是程序标题栏上面的(未注册)还是在那里,继续往上看,
来到这一大段的起始处,
004EE736   > \55            PUSH EBP                                 
堆栈显示
跳转来自 0040515F

过去看看,
竟然是刚刚的那一大片JMP啊! 感觉好像有门啊!
在下面2行行断点
00405157   .816C24 04 FFF>SUB DWORD PTR SS:,0FFFF
0040515F      E9 D2950E00   JMP lg.004EE736                        ;注册
重启程序,运行,程序断在0040515F,
右下角有一行:0012F700   004EE60E返回到 lg.004EE60E
不错!
右键点过去,
004EE608   .FF90 FC060000 CALL DWORD PTR DS:    ;看来就是这个CALL了!
004EE60E   .3BC3          CMP EAX,EBX
老办法!看看如何可以跳过这个CALL!

找到下面地址
004EE151   . /0F8D 0E050000 JGE lg.004EE665                        ;go=ok
004EE157   . |68 BC010000   PUSH 1BC
004EE15C   . |68 30764000   PUSH lg.00407630
004EE161   . |56            PUSH ESI
004EE162   . |50            PUSH EAX
004EE163   . |E8 6043F1FF   CALL <JMP.&MSVBVM60.__vbaHresultCheckObj>
004EE168   . |E9 F8040000   JMP lg.004EE665                        ;go=ok
004EE16D   > |8B06          MOV EAX,DWORD PTR DS:               ;注意这里啊!

千万注意004EE16D啊!
这个跳转来自另外3个地方(004EDCBB, 004EDD35, 004EDED2),它们可以绕过004EE151和004EE168从而保证程序运行到004EE608那个CALL那里!

好!
在004EDCBB, 004EDD35, 004EDED2下断点!

重启运行!
强制这3处都不跳!
004EE151   . /0F8D 0E050000 JGE lg.004EE665   这个跳转自动实现了!
而且是直接进入程序,最叫人兴奋的是标题栏上面的(未注册)变成了(已注册给:)
把这3个跳转nop掉,保存一下,运行程序试试!
OK!
爆破成功了!

下面来谈一下如何补充(已注册给:)这个括弧里面的空白问题!
在强制注册成功的时候,如果大家仔细,肯定发现了lg.ini这个文件,打开rs文件夹里面的这个文件,会看到
注册名=
注册码=

既然软件把注册信息保存在这里,那么运行的时候它就一定会来读它,所以,注册名=后面的内容应该就是会显示在(已注册给:)里面中的内容了!
在注册名=后面写上jjdg,保存!(大家可以在注册名=那里写上自己的大名哦!)
运行程序,果然,标题栏上面的信息变成了(已注册给:jjdg)

到此,才能说这个程序完全爆破了!

--------------------------------------------------------------------------------
【经验总结】
其实没什么好总结的!
只是想说点感慨:破解是一个互相交流学习的过程,只有互相分享自己的发现才能进步地快!一个人走的再快,一次也只能走一步,如果2个人互相扶持,就迈出2步啊!所以,希望大家能够不藏私,热心地互相帮助指点!
奉献得越多,收获得越多!
jjdg

--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年10月23日 01:17:03

[ 本帖最后由 jjdg 于 2007-10-23 01:28 编辑 ]

pw2000 发表于 2007-10-23 10:07:39

谢谢分享,学习以下。

Nisy 发表于 2007-10-23 13:39:25

好文章 兄弟用心了 /:good

ThanksBoy 发表于 2007-10-23 22:52:52

好文章啊,,有点看不懂啊

不懂破解 发表于 2007-10-24 01:01:02

破解是一个互相交流学习的过程,只有互相分享自己的发现才能进步地快!一个人走的再快,一次也只能走一步,如果2个人互相扶持,就迈出2步啊!


感谢仔细学习中___

jijimao 发表于 2007-10-24 08:51:38

说得很详细,认真学习了!

xiaotao 发表于 2007-10-24 14:54:52

谢谢!讲解的很详细。这样的教材,正是我等菜鸟学习的好教材啊!
研究去了!

zhaoyafei19 发表于 2007-10-24 17:55:11

我安装了
不能使用

暗笛飞声 发表于 2007-10-30 14:06:25

学习一下,希望能看懂>

crackforchina 发表于 2007-10-31 15:49:40

破解是一个互相交流学习的过程,只有互相分享自己的发现才能进步地快!
页: [1] 2
查看完整版本: 另类爆破--通用量规辅助设计程序爆破实录