【技术分享】软件安全——反补丁技术

阅读量    30475 |   稿费 100

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

http://p9.qhimg.com/t01ee0eba7935ddb2ec.jpg

翻译:pwn_361

预估稿费:100RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

概述

在这篇文章中,我们主要讨论反补丁技术,可以用于软件保护,让我们探测到软件有没有被篡改或修改。


工具需求

1.目标软件(crackme.exe)

2. Ollydbg


目标软件

CrackMe类似于一个简单的身份验证工具,当你输入错误的注册码时,会弹框告诉你注册码错误。如下:

http://p7.qhimg.com/t01b3a72f352160cb64.png

http://p9.qhimg.com/t01664ea06ed32d2723.png


安全保护

分析一个软件时,逆向工程师最关心的就是注册码验证过程,或身份验证过程。

下面图片显示,我们的注册码检查过程看起来只是一串硬编码(s0me_r@nDoM_rEg_c0dE),和两个消息框。

http://p2.qhimg.com/t0116da768e1739438a.png

如果对这个软件不进行保护,通过修改该软件,绕过身份验证是非常容易的,直接将0x40107A位置的汇编修改成NOP即可。但是,在我们运用了反补丁技术后,这种方法就不行了。

为了核验保证验证过程代码的安全性,我们需要做一些适当的工作:

1. 确保验证过程的开始地址是安全的。

2. 确保验证过程的结束地址是安全的。

3. 确保整个验证过程是安全的(从开始地址到结束地址)。

4. 保护算法(可以是HASH或加密)。

根据上面的需要,列出以下必要的素材:

1. 开始地址:0x401052。

2. 结束地址:0x4010A6。

3. 需要保证安全的验证过程(从0x4010A6到0x401052,0x54[84d])。

4. 算法:为了简单演示,这里我们只用XOR(可以用其它的)。

现在,根据我们的需要,加入我们的算法代码,看起来是这样的:

http://p6.qhimg.com/t0111142309f4f633db.jpg

上面的图片中,我们采用了简单的异或算法,只用到了ADD和XOR,并用这个算法,计算从0x401052开始的0x54个字节的校验和(实际上是做了一个超级简的HASH计算,得到了一个值,如果验证过程被修改过,这个值也就不一样了),如果验证过程被修改,0x4010E7 地址就会被执行,并弹出CrackMe 错误通知。

当然,为了进行上面的效验工作,你需要调用效验算法(0x4010BE),最好将这个算法的代码放在CrackMe 的最开始。

http://p7.qhimg.com/t01f1125cf8d39e95d0.jpg

现在,我们测试加入的反补丁模块是否被执行。

首先,我们在没有修改身份认证过程的情况下,运行这个软件,没有什么影响,起动正常。

http://p3.qhimg.com/t0106a00135084ac632.jpg

现在我们修改一下身份验证过程,试图绕过验证过程,如果没有反补丁模块的话,肯定会直接弹出注册码正确的提示,但是我们已经加入了反补丁模块。

http://p9.qhimg.com/t0122f9b8ff0c8c3640.jpg

运行软件,会看到下面的信息,且软件不会被启动。

http://p3.qhimg.com/t016a17069e03378468.jpg

因此,这证明我们的反补丁方法完美地工作了。


结论

这篇文章展示了一种给逆向工程师增加困难的简单方法,当然算法比较简单,但是如果设计的更复杂一些,会让逆向更加困难。希望能让大家学到了一些新的和有用的东西。


下载链接

CrackMe:https://www.mediafire.com/?2wwymyj49ih946t

Ollydbg:http://www.ollydbg.de/

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多