飘云阁安全论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 30847|回复: 80

[分享] 软件如何防止逆向破解及代码虚拟机引擎的应用

    [复制链接]

该用户从未签到

发表于 2014-12-29 17:25:38 | 显示全部楼层 |阅读模式
写这篇文件现在看起来有点太落伍了,还是整理出来给大家一起交流下吧。

正文:

    我们调试过程序的朋友都知道,软件如果只是加壳,只要能调试高手就可以在不脱壳的情况下实现破解。比如飘云发布的 Themida 2.2.9.0 的破解版,就是利用winmm.dll劫持实现的通杀破解。所以加壳不等同于加密,如果只是用了壳保护,充其量只在于保护程序不被轻易修改资源。很多加壳软件都自带了对代码保护的功能,加壳并对关键代码也进行保护,这样才能真正发挥一个壳的威力。

【小科普】
关于什么是“和谐补丁”及“和谐补丁”如何使用:https://www.chinapyg.com/thread-74868-1-1.html
PYG官方DLL优雅破解补丁制作工具 10周年特别版:https://www.chinapyg.com/thread-72354-1-1.html
Themida 2.2.9.0 P.Y.G特别版+2.x.x.x通杀KeyFile:https://www.chinapyg.com/thread-74384-1-1.html


测试:

先放一个用 VMProtect 简单保护的弱算法,大家可以试一下破解难度。

00.jpg

用户名:Nisy
注册码:AGyQ2vFF

CrackMe 下载: CrackMe.rar (953.38 KB, 下载次数: 50)

应用:

    有了上述的共识,我们了解到,如果只是单纯的加壳,就算是加上三层、五层壳也是白搭。加壳不等于加密,防不了破解更防不了逆向。能增加破解和逆向难度的东西在于代码虚拟机引擎。目前比较稳定并可以免费下载到的代码虚拟机引擎有这样几款: VMProtect  和 Code Virtualizer (Themida 和 Winlicense 使用的代码虚拟机引擎),国内逆向过VMP的高手们开发的一些引擎如SE等。工具可以从看雪网站安全工具下载:http://tools.pediy.com/packers.htm

    我们这里只谈VMProtect,Themida的壳自带CV引擎及对应的宏,两者使用基本相同。下面我们来讲解这些工具应该如何使用才可以使强度最优。

01、将 VMProtectSDK.h 和 VMProtectSDK32.lib 放到我们工程文件并在头文件中包含该头文件。

11.jpg

02、VMP的宏有这样几类:加密代码、加密字符串、检测调试以及和注册相关的宏。VMP的宏语句块由类型宏和结束宏构成一组加密单元。

12.jpg
13.jpg

03、编译,此时这些宏对应的函数调用的为 VMProtectSDK32.dll 导出函数,真正发布版本不需要该DLL文件。
这个方案只是为了便于VMP引擎方便定位加密地址,对DLL的调用加密后将不复存在。我们用VMProtect来打开编译的exe文件,可以看到我们加了5处宏,有一处是加密的字符串。(一些和注册相关的字符串就可以用该宏来加密)

01.jpg

04、打开专家模式,我们看编译选项:

我们现在的保护选项仅在于代码保护,目的在于增加逆向的成本及难度,这里也可以全部选否,体积会更小一些。Vmprotect 自带了压缩功能,如果大家想用自带的压缩功能,那加密选项就可以全部选是了(最大级别保护)。

02.jpg

05、点击编译就完成了对代码的保护。

原文件116K,加密后779K(最大保护加密1180K)。
我们选用几款加密壳来加壳二次保护:Asprotect 加密后 953K,Aspack 加密后 692K。

00.jpg

同时把文件上传扫描:http://www.virscan.org/

VMP加密后的文件:扫描结果:17%的杀软(7/39)报告发现病毒
http://r.virscan.org/report/23bdfe2c9264fb1f57a13fa0c3c6005e
VMP最大级别保护:扫描结果:15%的杀软(6/39)报告发现病毒
http://r.virscan.org/report/21e623bc938b687713cd558326c6d3b2
VMP后用Asprtect加密后的文件:扫描结果:10%的杀软(4/39)报告发现病毒
http://r.virscan.org/report/2915815591b0e1c6f004fb4028edad72


当然这里不是在教大家做免杀,只是给大家一个二次加壳的思路。用以上方案将代码保护起来,安全强度起码可以抵挡住99.99%的调试者。当然如果保护的代码没有选对,没有选全,加了VMP也是徒劳。


VMProtect Ultimate 2.13.5注册版下载:https://www.chinapyg.com/thread-75087-1-1.html


总结:

这本是一个讨论如何让代码变的不容易被逆向和破解的帖子。如今除了这点还要用在防小人的身上。一直以来我都认为补丁文件是这个调试圈子里交流破解技术的一种途径,把心得送给喜欢钻研的人。所以我发的一些资源都是无壳无V的。当然不是所有人都赞成该观点。比如有人逆向了补丁后将该技术用于新版的破解并自称原创(如果真的是用了对方的方案,在补丁中提到对方不就可以避免争执了么)。这些我觉得都还好,不算什么剽窃,不过今年的一些事情让我觉得这个小圈子有些人好恶心,比如论坛的某补丁,有人就打算修改下名称,修改下补丁的作者信息然后来冒充原创,还好补丁里埋了很多暗桩,发现修改补丁则失效,导致其没有得逞。像这种修改别人的文件,为了自己利益去修改作者信息的行径实在是令人作呕。所以,以后防火防盗防小人,一些文件该V的也不得不V了。


结合自己对VMP的使用经验,和工作中曾对VMP的心得,我给大家以下一些建议:

1. VMP不是万能的,加密出来的文件可以会有问题,加密后要自行测试。
2. 宏不一定要从函数头加密到函数尾。若只包含几行指令时就要格外小心了。
3. 宏语句块中若含有 return 或 jmp 出宏块的指令就要小心了;若包含了 goto 、 _try 指令的时候要小心了。
4. 若懂汇编,记得看一下VMP的开始点和结束点是否和你预期是吻合的。
5. 被VM的指令中调用的函数不会默认被VM进行保护。需要的就去V那个函数。
6. 大数据处理的循环指令不要V,否则天黑了可能还未执行完。
7. 对于破解,安全体系中有一处被击破就意味着程序可能被破解,所以要把该保护的地方都保护起来。
8. 如果功能代码调用了是否注册的函数,单VM这个函数是没有用的,返回值的使用处或判断返回值的代码也需要VM。
9. 注册或功能相关的字符串要藏好,切勿做成全局字符串。
10. 程序是否安全在于代码的编写者,单靠VM是不够的,编写者需要了解调试者的心里所思,要了解所写代码会变成怎么的指令。
11. 平常心态,凡是加密没有绝对的安全,想要相对安全就需要提高编程者自身的水平,要熟悉代码的底层实现。并且设置一个相对安全的机制,
12. 发布最终版不要带上 VMProtectSDK32.dll,显得多小白。


最后附上该测试程序的源码工程,另外VMP的宏可以查看官方的帮助文档。

CrackMe_SRC.rar (52.74 KB, 下载次数: 26, 售价: 10 枚飘云币)


补充文档

编译器将函数内联后VMP宏不匹配的解决方案
https://www.chinapyg.com/thread-76118-1-2.html


本文仅以VMP的使用为例来谈软件安全,以此抛砖引玉欢迎大家一起来谈下自己对软件防逆向防破解的一些心得。

原创与飘云阁论坛,转载请著名出处。  From:Nisy/PYG 写于2014年的尾巴 ...




评分

参与人数 11威望 +71 飘云币 +63 收起 理由
iamkalmia + 1 + 1
gavincao + 2 + 2
ygzhong076 + 4 PYG有你更精彩!
九层楼 + 4 很给力!
飞天 + 8 + 8 赞一个!
my1229 + 8 + 8 赞一个!
tree_fly + 20 + 20 受益匪浅,对VM有更深的认识。
coffeesoft + 8 + 8 向N大学习了
sndncel + 4 赞一个!老大的技术就是牛X
lucky_789 + 2 赞一个!

查看全部评分

  • TA的每日心情
    郁闷
    2021-7-15 14:58
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2014-12-29 17:53:24 | 显示全部楼层
    支持一个,感谢技术分享~~~
  • TA的每日心情
    开心
    2018-11-20 21:29
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2014-12-29 18:18:41 | 显示全部楼层
    学习了,谢谢N大。
  • TA的每日心情
    无聊
    2021-5-2 09:12
  • 签到天数: 467 天

    [LV.9]以坛为家II

    发表于 2014-12-29 18:57:09 | 显示全部楼层
    {:soso_e120:}支持姐姐,让冷大叔弹满屏
  • TA的每日心情
    开心
    2015-7-21 22:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-12-29 19:40:23 | 显示全部楼层
    膜拜N大,下载学习。
  • TA的每日心情
    开心
    2020-3-4 20:13
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2014-12-29 19:58:52 | 显示全部楼层
    支持下,不错的心得
  • TA的每日心情
    开心
    2021-11-7 09:20
  • 签到天数: 57 天

    [LV.5]常住居民I

    发表于 2014-12-29 20:31:14 | 显示全部楼层
    难得一见的好文章!如果软件作者都会这一手了,我们就没得玩了{:soso_e113:}
  • TA的每日心情
    开心
    前天 17:06
  • 签到天数: 532 天

    [LV.9]以坛为家II

    发表于 2014-12-29 20:38:49 | 显示全部楼层
    学习了,谢谢N大
  • TA的每日心情
    开心
    前天 17:06
  • 签到天数: 532 天

    [LV.9]以坛为家II

    发表于 2014-12-29 20:38:55 | 显示全部楼层
    学习了,谢谢N大
  • TA的每日心情
    擦汗
    2021-11-20 08:29
  • 签到天数: 1724 天

    [LV.Master]伴坛终老

    发表于 2014-12-29 20:57:13 | 显示全部楼层
    膜拜老大呀。。。。呵呵。。。。。。
    您需要登录后才可以回帖 登录 | 快速注册

    本版积分规则

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