吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15934|回复: 248
收起左侧

[原创] 某数据恢复软件的破解过程

    [复制链接]
yll20024 发表于 2022-6-12 23:56
本帖最后由 yll20024 于 2022-6-13 00:04 编辑

目标软件:Wise Data Recovery,免费版只能恢复2GB数据。

QQ截图20220612213047.png

主程序拖入PEID,查壳,发现并没有加壳

QQ截图20220612234238.png

这次还是通过暂停+查看调用堆栈的方式破解程序。

拖入OD,F9运行,打开注册框,用户名、邮箱、注册码随便输入,点击注册

QQ截图20220612213507.png

当出现“注册码无效....”对话框时暂停程序

QQ截图20220612213630.png

此时Alt+K,查看调用堆栈,发现OD显示的调用堆栈不大正常(调用堆栈显示的不全,emmm,我也不知道怎么回事,希望大佬们指导)

QQ截图20220612215957.png

我们还可以在堆栈窗口,往下翻,会发现“注册码无效....”,紧接着下面有个返回到 WiseData.00C44534 来自 WiseData.00BC0070

QQ截图20220612215402.png

选中,按回车,来到判断注册是否成功的函数,往上看在0xC444F1的地方有个je,这个就是关键跳。

33.png


在0xC444F1下断点,运行程序,再次点击注册,程序会在这里断下,可以看到,此时跳转是没有实现的,继续运行就会显示“注册码无效...”,把它改成jmp,使跳转恒成立,F9运行程序,仍然显示“注册码无效...”,说明后面应该还有判断。

QQ截图20220612224424.png

再点击一次注册按钮,停在0xC444F1后F8单步执行,发现第二个判断在0xC44586,现在这个跳转已实现,继续运行将显示“注册码无效...”,所以这个je要右键->二进制->NOP填充

QQ截图20220612221703.png

F9运行程序,好家伙,联网验证。。。。

QQ截图20220612224719.png

我们继续用调用堆栈法,出现这个对话框,暂停程序,在堆栈窗口往下翻,找到“很抱歉...”,下面有返回到 WiseData.00C4541B 来自 WiseData.00BC0070,回车,来到网络验证函数

QQ截图20220612224934.png

很显然,这是一个switch分支结构,往上翻

QQ截图20220612225114.png

发现分支1(起始地址0xC451DA)是注册成功要执行的代码,我们可以把分支表上面的jmp dword ptr ds:[eax*4+0xC451B9],改成jmp 0xC451DA,所有分支都跳到0xC451DA

QQ截图20220612225322.png

F9运行程序,再点一次注册,WTF????虽然显示注册成功,但实际还是免费版。。。。

QQ截图20220612225729.png

没办法,只能从分支1开始单步执行,看看到底哪里出了问题

。。。。。。。。。此处省略10000字。。。。。。。。。

经过反复调试发现,当分支1执行完后会跳转到0xC45429处,从0xC45429往下执行,在0xC45450处有个je,这个跳转是实现了的,实现了就不会解除限制,所以要把它用NOP填充才能解除限制。

QQ截图20220612230458.png

综上,把上面所有修改复制到可执行文件,再运行发现运行不了,有文件校验。。。。

QQ截图20220612231107.png

仍然用调用堆栈法破解。把修改后的文件载入OD,F9运行,出现这个错误框后暂停程序,Alt+K查看调用堆栈。

QQ截图20220612231611.png



在如图所示位置右键->查看调用(至于为什么是这个位置,需要逐一右键->查看调用,找到可疑的je或jnz,并修改测试),在CALL上面有个je,现在错误框显示了,说明这个CALL被调用了,也就是说je没有实现,如果我们把je改成jmp就会跳过CALL,错误框就不会显示。

QQ截图20220612231918.png



把修改复制到可执行文件,成功绕过了文件校验。

QQ截图20220612232406.png

现在还有一个问题,就是每次运行程序都要注册一次,比较麻烦。。。。

推测程序在启动时应该读取了注册表,通过注册表中的信息判断注册信息是否有效,如果注册信息无效就会变成免费版。载入修改好的程序,对注册表函数下断点

QQ截图20220612232851.png

不断按F9,直到堆栈窗口出现“User Name”

QQ截图20220612233009.png

Alt+K查看调用堆栈,在如图所示位置右键->显示调用

QQ截图20220612233113.png

来到启动时读取注册表并判断注册信息是否有效的函数,可以看到,程序启动时读取了用户名、邮箱、验证码

QQ截图20220612233238.png

取消注册表函数断点,单步运行,发现0xC45DFF处有个大的跳转,如果跳转实现,就是免费版,把这个jnz用NOP填充,成功得到永久免费版。

QQ截图20220612233951.png


QQ截图20220612232406.png

原版程序:https://pan.baidu.com/s/1VtZ6nrRSGdpS7BVbv7DP2Q 提取码:tw7j

补充知识:switch代码在汇编层面是怎么实现的(不考虑分支数量大于256的情况)

当分支数(case+default)<=4时,实现方式类似于多分支if..else,使用连续的cmp xxx,je xxx;cmp xxx,je xxx.....实现。


当分支数>4时使用跳转表实现,编译器会将case语句按升序排好,然后全加上或减去一个数,使第一个case的值为0(比如case 1,case 2,case 3会全部减1变成case 0,case 1,case 2)。当执行switch语句时,先把传入的数和case的最大值比较,如果比最大值大会跳转到default,否则根据跳转表跳转。跳转表是一维数组,每个元素都是一个地址,占4字节。跳转表的0号元素对应case 0代码的首地址,1号元素对应case 1代码的首地址....以此类推,程序会使用jmp dword ptr [table首址+传入的值*4]跳转到对应代码去执行。


如果case不连续(比如case 0,case 3,case 5),则跳转表中的对应项填default代码的首地址。





QQ截图20220612213214.png
QQ截图20220612221114.png

免费评分

参与人数 51吾爱币 +56 热心值 +42 收起 理由
ysq151 + 1 + 1 我很赞同!
jimoban + 1 + 1 用心讨论,共获提升!
qwolf + 1 + 1 ++
Essqmyy + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
DChen + 1 用心讨论,共获提升!
wq1350012567 + 1 + 1 牛逼
破竹而入 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hoeel + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
DengViper + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
cmw5533 + 1 谢谢@Thanks!
cqu1929 + 1 + 1 我很赞同!
死磕丶 + 1 我很赞同!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
云与晨曦 + 1 鼓励转贴优秀软件安全工具和文档!
assa + 1 + 1 谢谢@Thanks!
deTrident + 1 + 1 用心讨论,共获提升!
xueh2002 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zwc123xyz + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Addy718 + 1 谢谢@Thanks!
yunmengze + 1 + 1 我很赞同!
wasdzjh + 1 + 1 收藏一波,以后实践
2509964984qs + 1 + 1 谢谢@Thanks!
cmj799 + 1 谢谢@Thanks!
fusheng55555 + 1 谢谢@Thanks!
chachage + 1 + 1 用心讨论,共获提升!
jackyflyer + 1 + 1 鼓励转贴优秀软件安全工具和文档!
crl7-key + 1 + 1 谢谢@Thanks!
caleb110 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lizy169 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
ins9510 + 1 + 1 谢谢@Thanks!
小朋友呢 + 2 + 1 我很赞同!
yippee + 1 + 1 我很赞同!
w169725079 + 1 谢谢@Thanks!
wapj258 + 1 用心讨论,共获提升!
bedmoon + 1 我很赞同!
fufu1234568 + 1 用心讨论,共获提升!
opqw258 + 1 + 1 教程很好,为学习而行,但我是小白,想用也用不来
oxxo119 + 1 + 1 谢谢@Thanks!
salge + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
pizazzboy + 1 + 1 热心回复!
卑鄙的你 + 1 + 1 谢谢@Thanks!
bullshit + 1 + 1 谢谢@Thanks!
萌新与小白 + 1 + 1 热心回复!
Sinus + 1 + 1 鼓励转贴优秀软件安全工具和文档!
cheng050231 + 1 + 1 谢谢@Thanks!
恋爱选举巧克力 + 1 + 1 我很赞同!
blindcat + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
杨辣子 + 1 + 1 用心讨论,共获提升!
xiwangzhijian + 1 + 1 我很赞同!
wxxbc + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

madehenfan 发表于 2022-11-26 15:12
感谢分享 学习知识
 楼主| yll20024 发表于 2022-7-1 20:31
sh2k8 发表于 2022-6-29 14:38
按着楼主的办法操作了一下,不断按F9看到堆栈出现注册表Username这个不会,能具体说下怎么操作吗?先下了注 ...

出现Username后说明程序断在了操作注册表的函数上,而这个函数是系统函数,它肯定是由软件的某个函数调用的,通过逐一查看调用堆栈,来到0xC45DB3处,程序现在停在系统函数内,在这个位置下断点,然后取消注册表断点,F9运行程序,执行完系统函数就能在0xC45DB3断下来
titaz 发表于 2022-6-13 12:42
rxlrxl012 发表于 2022-6-13 12:50
牛  只能膜拜了
wxxbc 发表于 2022-6-13 12:54
大佬牛啊,感谢分享
mokjf 发表于 2022-6-13 13:55
精彩精彩,写得很详细,不过我想请教一下,如果我电脑中毒了,重装系统后,再用这个软件恢复,能恢复出数据吗,还有我恢复出来的是不是中毒了的文件
xiwangzhijian 发表于 2022-6-13 14:13
果然强大!
头像被屏蔽
jideco 发表于 2022-6-13 14:17
提示: 作者被禁止或删除 内容自动屏蔽
ZSY1206 发表于 2022-6-13 14:23
,请问一下,小白的我,如何使用呢?
ZhuanZhuYuIT 发表于 2022-6-13 14:32
膜拜大佬
zhangsanvip01 发表于 2022-6-13 14:33
好难呀,看着就感觉好复杂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 14:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表