漫谈软件加壳
上篇这两年偶尔帮几个朋友做下软件安全的建议 其中也用到了壳保护 离下班还有点时间 随便感慨一下
我收集了不少的壳 论坛公开的壳基本我都有保存 还有一些朋友送的正版壳和私家壳 平时也不怎么用 偶尔没事正好帮朋友出点加密上的建议 由于整体框架上没法帮忙 只好从壳保护上入手了
曾经弄好很多方案,记得最初的时候还请教过fly大哥Arm的CC,后来又换了若干套方案,其中外壳的选取上一直是非常头疼的。因为给共享软件加壳要照顾到所有的用户,而用户手里鬼知道他们用的是什么杀软,尤其是那些2B杀毒软件遇到搞不定的壳就直接报毒,尝试过eXpr、RLP、Enigma …… 都给反馈说报毒 最后总结出一个规律 由于后起之秀所占市场份额有限 导致用这些使用率不高的壳都不安全 实在是无语
这年头,想做到软件不被破解那是骗自己的,做软件加密其实就是防防新手罢了,没有脱壳机的中等强度以上的壳基本上就可选,ACProtec、Arm、Aspr、Obsidium、YP、RLP、Enigma …… 这些壳中,Aspr稳定性和兼容性很不错,但Volx老大的脚本太猛了。围护也不错,担心小杀软报毒,不能用;Arm其实可选,听某某同志说这个东西跟ACP一样,换汤不换药,于是暂不列为首选;PEP兼容性有待提高,虽然乌龟大师送了key,不过还是不敢用;EPE就不提了,对这个东东向来没好感;ZP 和 TTP 认识的朋友中有正版,但加出来的程序无缘故的增大1.5M,也不是什么大不了的程序,故也得舍弃;THM 稳定性都不错,2.0.3的版本强度也很高,兼顾到软件加密后的体积和THM的被关注度也只好暂时放弃。朋友送的修改壳都不敢用的,怕那个SB给上报杀软以后当病毒给做了;EXEC还是算了吧~,选来选去基本上就没有什么壳可以给共享软件加密了。
直接加壳碰壁后,多层壳更不可取,EXEC+THM+VMP都被海风大大给咔嚓了,导致我对直接加壳彻底的失去了信心。那就只好用用壳的SDK来忽悠忽悠了。帮朋友就跟自己正面对这个问题一样,硬盘上有大把的壳,到真正需要的时候就捉襟见肘了。高手们玩壳体验的是一个加解密的交流,我们保存的只是一份结果,现在急功近利的人多了,能沉下心来做技术的人少了,通过加壳再次体会到fly大哥所说的青黄不接了。
做软件安全单靠壳保护的年代已经逝去了,对高手来说心中无壳,天下自然无壳。最后的方案还是选择使用范围较广的中等强度壳,加点效检SDK什么的,挡住脚本后效果还是不错的。归根结底,设计软件安全还是VMP吧,防防新手即可,能猥亵则无敌。
下篇
壳是用来加软件的 这个都知道 不要加病毒木马啥的 需要加的话不若自己去写一个压缩壳呢
加商业软件 还是购买 ZP、TTP、THM、WL 的正版吧, 大型的商业软件还是用正版的好,当然不排除有些牛B的软件不用壳的,象Win优化大师、屏幕录像专家…… 前者的Cr版其实是免费的广告,后者是因为任何壳都用不了
从保护的角度来说,壳是用来忽悠的,加壳就是为了防止别人轻易的修改资源,当然注入后还是可以修改程序的版权的,壳就是为了消磨调试者时间的,是告诉调试者注入吧、SMC吧、Goldsun的XX法SMC吧之类的信息的。壳的强度在于SDK或者说VM的威力。制造出变形的字节码才是壳保护的核心。
PS:壳选择上THM\EXEC\ASPR\首推这些,稳定性和兼容性强度上都有保证,Aspr的效果还是不错的,至于如何使用还是回归到Volx的帖子上去学习如何使用吧。壳上还是用上SDK或者VM吧,直接用壳多半发挥不了壳的真正强度。
从软件安全的角度来说,壳是第一关,虽无大用,不用浪费。而软件整体的安全体系或者机制上才是根本,软件安全体系的严谨性决定了程序的寿命周期。不是别人说那个壳好,你就用哪个,如果不会用壳只能成为调试者的笑柄,如某精灵用了VM,可惜的是VM的代码是注册时对算法CALL的调用,而算法CALL程序内有三次调用
如今的共享软件,稍微复杂些的体系(或者可供参考的体系): 网络验证返回keyfile、程序的功能keyfile参与解码,例子有不少,破解方法简单的就是进行硬件码的移植;keyfile的多次分段验证,例子很多,200个字节份三四段来参与不同功能的验证,其目的是和调试者耗磨时间,看谁先累趴下为止,缺点就是遇上技术正在飞速提升的有精力和潜力的调试者,不大目的誓不罢休,程序照样会被瓦解;网络验证固然好,不过目前国软的网验基本上都是鸡肋,程序的验证点肯定是在本地,或者说程序肯定要进行比较得出是否为注册版,说白了网络验证其实就是本地验证的一种形变,网络验证的强大在于返回的流加密数据能够参与功能的解码,只是做本地验证的话,基本上没啥难度。最后就是效检:文件时间、文件大小、完整性(CRC)等等,都过时了,或者说不能直接套用别人的旧模式了,如何来发挥其效用,还是多动动脑筋吧,不能创新的人、追随潮流的人永远都只能被牵着鼻子走。看看THM的效检 :-)
归根结底,壳是用来保护程序的完整性的,或者是加密文件不希望被他们分析,或者是保护软件的注册机制不被轻易贡献。两种目的的核心还是在于程序的编码,即程序的代码,强度如何,代码即可搞定,对高手来说天下无壳,这句话理解上也有很多种,你可以理解成壳的保护强度完全可以融入到程序的代码中来,用代码来实现壳的某种思想或算法。而一套好的算法加上程序的效检完全可以阻挡住大部分调试者,比如效检部分从海风的CM中吸收些养料用到自身的程序中即可。程序的强度是在于自身的体系和作者的编程能力的,壳只是参考部分。在部分人眼里UPX是款好壳,首选壳。
为什么分析壳,如何学习脱壳,脱壳是在做什么。学习脱壳不是表面上的那些文章,不是几个断点+IR的修复就算是弄懂一个壳学会脱壳了。多看些文字背后的东西吧,深入的去分析一些东西,调试其实就是程序间的一种交流,当你把调试作为交流的时候而非浪得虚名的时候,那个时候你就真的不知不觉中变的很强大了,学习技术要深入进去,皮毛表层你是得不到更多的乐趣的。这几句话送给那些打算要参与到这个行列的朋友们,前途是险阻的,前途有是光明的
做共享软件的朋友,也送给你们一句话:国人太强大,不要把加解密看的太重,把精力更多的投入到软件的性能上去吧,只要你能够做到同类软件的佼佼者,不愁没市场的。有些朋友是因为要提高其软件的强度才来学习破解技术的,这很好,因为自己有编程的根基来理解上和源码在某些功能的实现上就会相对容易。但破解上讲求的是思维的碰撞,学习的是更多的方法和沟通,学习破解其实就是在设计加密体系,思考对方是如何设计的体系,回归到来完善自身构想的体系中去。去实现从文字的交流到程序间的交流的时候就迈入了一个更高的技术层面了,技术上忌讳急功近利,从哪里跌倒或被拦截住就从哪里爬起继续前进。 好文章 。拜读完了..呵呵
谢谢/:001 目前还处于壳的大门外向内观望/:001 EXEC+THM+VMP都被海风大大给咔嚓了
对高手来说心中无壳,天下自然无壳
/:good /:good 学习了,感谢传授经验!非常好! 经典文章...
学习啦.../:014 收藏一份!
think like a craker!that's right!/:good 谢谢学习了!支持
[ 本帖最后由 含蕊 于 2008-11-5 21:44 编辑 ] 要好好的看看 /:001
页:
[1]
2