吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5853|回复: 10
收起左侧

[分享] 【翻译】R4ndom破解教程全文翻译(For新手):第十八章

[复制链接]
sighout 发表于 2016-9-19 15:09
【翻译】R4ndom破解教程全文翻译(For新手):第十八章
翻译都是我理解的方式进行描述,可能和原文不一致。
本教程中文版只在吾爱破解论坛 首发。
转载请注明来自吾爱破解论坛@52pojie.cn
正文开始
试用时间和内存断点
解释:使用时间通常来说是一个程序提供一段时间让用户使用,超过这段时间后程序将不再工作或者减少功能工作,一般会给出30天的试用。当一个逆向工程师在破解这一类的程序时会去找到注册码,如果我们比较懒的话,就找到程序中的试用时间,让这个时间无限话。
教程中,为了保护作者和软件,我下载的软件在CNET网站上的下载次数只有2次,估计是作者已经不再提供维护和支持了,本程序的原名为:Secrre Data-Hide a File into an image.exe,而我将它改为:SecureData.exe。而且不含附带的DLL文件,因此该程序并不能真正的工作。但是足够本教程的教学。
打开程序后会弹出窗口
1.png
显示了可以试用的次数,点击OK后来到主界面
2.png
点击About
3.png
输入Key后,点击Register出现
4.png
好了,目前我们已经知道程序的大致流程了
让我们用OD来打开程序
5.png
搜索字串后,我们可以看到
6.png
我们没有看到和试用信息一样的字串,但是注意红色框
试用期
逆向工程师必须要知道的一个重要信息,在程序中必须要保存试用期的次数或者天数,这样来说试用期一定是保存在什么地方,通常情况下是保存到文件或者硬件中。
大多数时候,保存这个数据的地方很容易找到,只是逆向工程师会把自己往复杂的方向去想。最简单的方法就是看字串和搜索注册表或者文件路径。比如:
Software\\AppName\\Key
或者
AppName\DataFileName.ini or AppName\DataFileName.dat
多数会采用引用window 系统变量,如%WINDOWS%,这表示在Windows目录。
当然,如果程序不是很大,你还可以一个Call一个Call的看。或者注意一下windows APICreateFileExARegSetValueExA等等,确保数据是保存到文件还是保存到注册表中。而本程序使用了2套做法,在硬盘上创建了文件并且将它隐藏。
看会字串搜索结果
7.png
这里不会讲解注册表的树形结构,我们直接打开注册表,使用Window +R键,输入Regedit,打开注册表
8.png
然后打开HEKY_LOCAL_MACHINE,找到字串Windows Data Count,然后可以看到
9.png
我们看到Data Flag显示为7,我们把这个值改为100
10.png
然后保存后显示
11.png
现在重新打开程序
12.png
看上去修改成功了,这比想象中容易
分析程序
另一种方式就是我们通过修改程序代码达到同样的效果。这样做的好处就是不用每次快到时间就去修改注册表。记住,当我们运行程序的时候请记住还剩下的次数,让我们去看看这个地方程序到底做了什么,首先这个字串开始于406078
13.png
这是一大段程序,我们可以看到这是windows程序的初始化消息
14.png
这里先把一个ID0x41D的窗口句柄作为GetDlgItem的参数,让我们用Resource Hacker看看资源
15.png
查看GetDlgItem的用法后,我们把断点设在40604C处,然后重启程序,来到我们的断点处,单步分析,发现GetDlgItem的返回值保存到EDI中。
下一条是把内存418FC4的数据放到ESP+C中,跟踪这个地址我们看到数据是403980.如果你继续跟踪就会发现这是一个Callback。我们假设这是一个对话框。
16.png
再往下两行,把内存41E084保存到eax中,而这个值为8,这个值和试用次数是匹配的。这就是我们要找的。
最后,我们在去看看字串
17.png
这个看上去是C语言中格式化,如果你熟悉C/C++语言的话。
printf(“My IQ is a whopping %d”, 18);
我们就看看这个%d是在那里被赋值的,来到
18.png
然后程序跑起来,我们看到试用信息,点击ok按钮后来到主界面。
打补丁
你先想到的是为什么不直接在地址406072的地方把试用次数改大,比如
MOV EAX, DWORD PTR DS:[41E084]
改为:
MOV EAX, 99
但是不能这样做,这样做虽然程序会显示试用次数很大,但是其他地方会检测到数据小于1时,程序将不再工作,所以我们必须要找到程序去改变这个值的地方,在程序修改后我们再进行打补丁(修改)。
所以我们要在这里设置硬件断点
19.png
就是这个内存被写入的时候断下来
20.png
现在我们只剩下6次试用次数了,我们设置了硬件断点,不论在任何地方对这个地址执行写操作,我们都会断下来。
重启程序,OD会断在我们设置的硬件断点处
21.png
22.png
看图片顶部,我们可以看到注册表不是创建一个键值,而是打开。然后判断是否能打开,如果不能打开则跳到坏消息处。这就说明需要管理员进行操作,如果不出错405A96call就会把值读取出来保存到ESP+C中,如果有第二个则保存到ESP+8
23.png
我已经分析了代码并给了注释,建议你自己分析代码
我们发现这个值(6)已经搬到了405AAD内存里面了
24.png
最后,我们在检查一下其他值,然后关闭注册表控制。
25.png
那么问题来了,哪个位置是做补丁最好的地方呢?回看代码,发现在405ADD被赋值后就没做过任何变化了。如果我们把405AAD修改为MOV DWORD PTR DS:[41E084], FF,这会导致程序代码不正常。因为会被删除下两条命令。
26.png
那么就在前面405A9F处进行修改吧
27.png
然后我们可以看到步过这个命令后,内存41E084的值变成FF
28.png
然后跑起来,试用信息为:
29.png
现在我们的程序不管打开多少次,这里总显示为255了。
虽然说去掉NAG弹窗,直接进行破解是最好的,但是我会结束这次的教程。不去做破解的原因有21是通过逆向,你知道程序工作原理以及设计程序时避免这样的检测。2有时你不能破解一个程序,对你来说是下一个好事。
最后附上原始教程与使用软件
ReadMe.txt (48 Bytes, 下载次数: 20)

免费评分

参与人数 7热心值 +7 收起 理由
Vancir + 1 谢谢@Thanks!
yeyulang + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
q7795935 + 1 用心讨论,共获提升!非常好用。
落寒枫 + 1 我很赞同!
盗水者 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wipj + 1 全力支持将翻译到底
Hmily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

siuhoapdou 发表于 2016-9-19 16:42
詳細的圖文教學~~謝謝sighout大大的分享
 楼主| sighout 发表于 2016-9-19 16:48
ryan86128 发表于 2016-9-19 21:22
 楼主| sighout 发表于 2016-9-19 22:01
ryan86128 发表于 2016-9-19 21:22
感謝LZ 全部都載下來慢慢看 絕對支持!!

一起加油
盗水者 发表于 2016-9-19 22:24
慢慢研读
czc476 发表于 2016-9-19 22:27
分析的很详细,小白也能看懂,谢谢楼主的分享
q7795935 发表于 2016-9-20 18:26

感謝LZ !好人啊。通俗易懂 又有用。赞
yeyulang 发表于 2016-9-23 14:58
终于找到能看得懂的,谢谢分享学习!!
szs6008 发表于 2016-12-3 12:30
先谢楼主的无私分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 22:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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