xxdoc 发表于 2007-1-19 11:33:36

用od追注册标志教学--和飘云的有什么不同,大家看了就知道!

用od追注册标志教学————(献给初学者)
                                                BY xiaoxiao一.前言
我这里的例子MP3 Cutter Joiner是2.0版,原文是1.8版。

在这里,你可以学会:
1.用“硬件断点”或“内存断点”反追“注册标志”;
2.“注册文件”保护方式的破解;
3.od的一些基本操作(废话,呵呵!)

二.正文
1.peid查壳,无壳,编译语言为delphi;
2.od载入程序,忽略所有异常;
3.
搜索字符参考,找到“sorry, you have converted 30 files. whether register?”,左键双击,我们来到地址004A3600 ,向上看,4A35DA,4A35EF都可以跳过这个提示 ,分析发现:如果地址的byte值不为0,则可跳过“文件数量比较”,也就是说,如果的byte值=1,很可能就表示是注册版,这就是
“注册标志位”。

4.
好了,那我们就在4a7db1设置个“硬件写入断点”,重新启动od,看看哪个地方会改写4a7db1的值。重启od,f9后断在了49866d,看上一行498666,MOV BYTE PTR DS:,0
正是在这里将0写入了,好,我们修改代码为:
MOV BYTE PTR DS:,1也就是写入1到而不写入0,这时因为498666的代码已经执行过了,所以我们还要手工将值设为1,改好后f9继续。

5.
发现程序并没有继续断下来,而且仍是未注册版,这是为什么?我们不是已经改为1了吗?
是不是程序后来又在某个地方修改了的值?我们用命令
d 4A7DB1看看,果然又被改为0了。好了,我们删除“硬件写入断点”,然后重启od。

6.
打开补丁窗口,右键->应用补丁(就是修改498666处代码);
我们在4A7DB1换用“内存写入断点”看看,f9,断在498666,继续f9,异常,shift+f9继续,出错了!没办法,我们又重新来!

7.
打开补丁窗口,右键->应用补丁,在4A7DB1用“内存写入断点”,f9,断在498666后改用f8(因为f9会出错),f8下走时在左下角窗口注意4A7DB1的值什么时候变为0,当f8过49877d处的call后,发现值变了,这说明就是在这个call里修改了“注册标志位”。那我们就在这里f2设断,然后重启od,补丁,f9,断在49877d后f7进去后,f8下走,f8过41c1c9处call后“注册标志位”的值被修改为0了,记住这个地方,然后重启od,补丁,f9,断下,f7进去,f8下走,到刚才那个地址41c1c9后,f7进去,f8下走,过41c41b处call后“注册标志位”的值被改为0,好,我们记住这里,又重前面的步骤,到41c41b后,f7进去,一直到408bf2后,看提示栏,ESI=004A7DB1 (MP3_Cutt.004A7DB1),这不正是我们的
“注册标志位”所在地吗?再看看函数ReadFile的参数,ESI正是函数ReadFile执行后存数据的地方,EAX是读数据的地方,可以得出,正是函数ReadFile改写了“注册标志位”,如果我们让函数ReadFile执行后数据不写入ESI(也就是“注册标志位”所处地方004A7DB1),不就ok了?好,我们修改push esi为push eax,也就是让它写到它读的地方去,改好后,f9运行,ok,我们注册成功了!

8.
从上面我们知道,程序是从某个文件读取数据(函数ReadFile)来判断注册与否,而这个文件是通过文件句柄传给函数ReadFile的,由编程知识知道,文件句柄是由函数CreateFileA获得的。
所以我们重启od,ctrl+n,找到CreateFileA,右键->在每个参考上设置断点,f9运行,断在408baa,看堆栈,可以看到文件名(SySMP3CutJoin.dat)和路径(H:\WINDOWS\system32),f8下走,返回到408baf后,看看eax的值(文件句柄),记下它,因为接下来,函数ReadFile会读取这个文件,所以下断点bp ReadFile,f9,断下,看堆栈hFile的值是否和刚才的句柄值一样?相同的话就是读刚才的文件了SySMP3CutJoin.dat了,堆栈提示call来自00408bf4,ctrl+g,我们去看看,这不就是刚才上面改写“注册标志位”的地方吗!再看看堆栈提示,大小BytesToRead=4,地址Buffer=004a7d90,我们的“注册标志位”大小=1byte,地址是4a7db1,这不是都不对吗?
我们f9继续,第2次断在ReadFile,看堆栈,句柄,Buffer,大小均符合,这次是真正在写“注册标志位”了,好,在f9就运行了!

9.
我们已经有了足够的信息来修改注册文件SySMP3CutJoin.dat了。
用编辑工具UE或WinHex等打开文件SySMP3CutJoin.dat,看,共有5byte,那我们要修改那一位呢?
由上面知道,ReadFile共读取SySMP3CutJoin.dat 2次,第1次大小为4byte,第2次大小为1,而第2次正好是改写“注册标志位”,所以我们修改第5个为01,保存,启动程序,呵呵,注册成功!

动画下载:   http://bbs.86sw.com/viewFile.asp?BoardID=3&ID=770

wan 发表于 2007-1-19 11:46:47

学习了...可惜我动画教程下载不到

xxdoc 发表于 2007-1-19 11:58:18

我本来想发到论坛上的,空间限制问题就发到菜鸟动画吧了,反正那里的站长也在本站!

wan 发表于 2007-1-19 13:40:40

原帖由 xxdoc 于 2007-1-19 11:58 发表
我本来想发到论坛上的,空间限制问题就发到菜鸟动画吧了,反正那里的站长也在本站!

嗯,感谢!有机会再下载动画详细学习一下:victory:

myselfsky 发表于 2007-1-19 21:54:52

呵呵,正在学习!

hankaifei 发表于 2007-1-20 09:40:05

学习了 不过有个动画就更不错了

凡人1234 发表于 2007-1-20 19:51:56

学习了,谢谢!!!

mojingtai 发表于 2007-1-21 15:00:31

谢谢,需要加强学习

Proudhao 发表于 2007-1-22 09:55:43

学习学习努力学习

aad 发表于 2007-1-28 11:03:20

学习了 不过有个动画就更不错了
页: [1] 2
查看完整版本: 用od追注册标志教学--和飘云的有什么不同,大家看了就知道!