安全路透社
当前位置:安全路透社 > 安全客 > 正文

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

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

翻译:pwn_361

预估

,或登陆

概述


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


工具需求


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/


原文链接:http://resources.infosecinstitute.com/software-security-anti-patching

未经允许不得转载:安全路透社 » 【技术分享】软件安全——反补丁技术

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册