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