首页
社区
课程
招聘
数学助理V1.03破解,高手勿进
2004-5-22 00:47 5421

数学助理V1.03破解,高手勿进

2004-5-22 00:47
5421
最近几天学习脱ASPR1.23RC4壳,没有一点进展,无奈之中想找个软柿子捏捏,于是就有了这篇破文。
破解工具:OLLYDBG1.09d,PEID0.8
破解对象:数学助理 V1.03
下载地址:http://www.skycn.com/soft/16972.html
软件简介:
    本版本功能有:解一元一次方程,解一元二次方程,解二元一次方程组,解三元一次方程组,(输入输出数为整数或小数)解一元三次因式分解,解一元二次因式分解,解部分二元二次因式分解(输入输出系数为整数)。未注册前可试用《一元一次不等式之一》的功能,其它功能注册后可使用。
破解过程:
    程序运行后出现注册提示,有功能限制,点击限制使用的功能程序立即退出。随便填入注册码点击注册,程序退出。PEID查看是VB程序,于是用VBDED反编译,未果,没有什么有用的信息。
    用OD载入,下VB最常见的比较断点:__vbaVarTstEq、__vbaStrComp,程序都没有断下来,看来程序没有用这些比较函数或之前有长度判断。于是下断点:__vbaLenBStr,点注册后程序终于断下,但F8跟踪发现一直在MSVBVM60.DLL中打转。
6A3881D9   50               PUSH EAX
6A3881DA   33C0             XOR EAX,EAX
6A3881DC   8A06             MOV AL,BYTE PTR DS:[ESI]           --->读程序代码,
6A3881DE   46               INC ESI
6A3881DF   FF2485 58FA376A  JMP DWORD PTR DS:[EAX*4+6A37FA58]    --->解释执行
6A3881E6   59               POP ECX
6A3881E7   0BC9             OR ECX,ECX
6A3881E9   74 03            JE SHORT MSVBVM60.6A3881EE
6A3881EB   8B49 FC          MOV ECX,DWORD PTR DS:[ECX-4]
6A3881EE   51               PUSH ECX
6A3881EF   33C0             XOR EAX,EAX
6A3881F1   8A06             MOV AL,BYTE PTR DS:[ESI]
6A3881F3   46               INC ESI
6A3881F4   FF2485 58FA376A  JMP DWORD PTR DS:[EAX*4+6A37FA58]
    看来这是个Pcode编译的程序,程序代码都是由MSVBVM60.DLL解释执行的。于是祭出破Pcode程序的杀手锏WKTVBDE,结果出现非法操作。看来程序在防破解上还是下了功夫的。
    记得有位前辈说过:破解需要好的头脑+耐心+运气。今天就来试试我的运气好不好。再次用OD载入,Alt+M打开内存查看窗,在401000段下内存访问断点,不断F9运行,直到眼前一亮,在堆栈中看到了输入的注册码。
    以下F8不断走,在一些CALL中F7跟进去看看,会发现很多VB函数如__rtcR8ValFromBstr,是双精度转化函数,将注册码转化为双精度值。继续往下走,不断看到FSTP,TILD,估计会用到浮点比较。往下走,直到看到将输入的注册码压入浮点寄存器。小心F8走,看到CALL就F7一下看看,直到:
6A38104D   68 01000300         PUSH 30001
6A381052   50                  PUSH EAX
6A381053   51                  PUSH ECX
6A381054   52                  PUSH EDX
6A381055   FF15 700E396A       CALL DWORD PTR DS:[6A390E70]        ; OLEAUT32.VarCmp  比较函数,今天太幸运了!!!
    F7跟入此CALL,F8到
7716B5E3  MOV ECX,DWORD PTR SS:[EBP+8]
7716B5E6  FLD QWORD PTR DS:[ECX+8]            ; 输入码压入浮点寄存器st(0)
7716B5E9  MOV EDX,DWORD PTR SS:[EBP+C]
7716B5EC  FILD DWORD PTR DS:[EDX+8]           ; 正确码压入st(0)
7716B5EF  FCOMPP                              ; 比较
    再次启动,输入正确注册码,OK!

    总结:这程序防VBDED、WKTVBDE较好,但明码比较是败笔,只要在OLEAUT32.VarCmp函数上下断点,马上就来到比较的核心。VBPcode程序总是在VB的DLL中,跟踪时最好用WKTVBDE,否则就要看运气是不是有我今天这么好了。平时多看看VB的函数,了解对字符、数字的处理方法,对破解是很有帮助的。
    声明:破解此程序纯属运气,请勿效仿。

[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

收藏
免费 6
打赏
分享
最新回复 (1)
雪    币: 237
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
XF[BCG] 1 2004-5-22 08:16
2
0
你不知道,作者是用浮点进行比较,可是VB的比较都是通过DLL来解释的,所以...这就是为什么说VB是伪编译了!而不象C之类的是直接解释的。
游客
登录 | 注册 方可回帖
返回