zoukankan      html  css  js  c++  java
  • 论用C++做壳

    标 题: 论用C++做壳
    作 者: dogwang
    时 间: 2006-03-03,17:16:15
    链 接: http://bbs.pediy.com/showthread.php?t=22079

    在坛子里面混了很久了,这里面90%都是破解,很少有加壳的文章.我自己对加壳很感兴趣,所以就自己动手做了个壳,当然这其中也得到了其他人的一定帮助,我想把我的经验分享一下.

    1. 加壳语言.
    现在的壳多数都是汇编的.但本人汇编水平一般,连olly都使不好,所以只能放弃汇编.我见过delphi和VB做的壳.VB做的那个真的不错,有机会上传到这里,让大家看看.

    本人是C/C++的忠实用户,而且C和汇编很接近了,所以选择了C++做壳.

    2. 加壳原理
    加壳原理我想大家都很清楚,无非是wrap oep, remove reloc, 然后在最后价格stub.修改oep.

    话说起来轻悄,就像造原子弹,中学生都知道e=m*c2就ok了,但我们都造不出来.我的观点是加壳就想造汽车,原来的程序就是发动机,而解密就是把汽车拆了,取出发动机.所以我们还是要仔细考虑如何加壳.

    3. 具体的步骤
    (1) 我是认真研究了bigboot的文章,参考了bambam才下的手.不过大家如果要学习bambam,就从找bambam的bug开始吧,他里面一共有4个重大bug,如果能找出来,你就可以自己做壳了.

    (2) 先做个dll,做stub.为什么不用exe?bigboot说compiler crash,我说是exe自己就可能crash.这个exe不是正常加载的,release中又没有reloc,他不crash可能吗? 所以我们用dll做stub. stub的入口要指定,否则没法修改oep.stub就是你自己的程序,所以想干什么都可以,也就是说在程序启动时,天下是你的.

    这里面要注意的是:
    (a) 你stub加载的地址不是40000,也不是1000000,所以所有的恢复工作都有个便宜量,这个偏移量就是你的入口地址.
    (b) stub中可以使用任何函数,如果要用其他的dll,最好使用隐形链接.因为后面要修改reloc.
    (c) stub一定是release的,debug的话程序容易乱.
    (d) 跳回是就是 push oep+dwOffSet, ret就ok了.唯一的汇编,呵呵.

    (3) 给app加壳
    这个需要个exe(手动加壳太土了吧,呵呵).他干的工作就是最糙的工作---变化指针. 加壳的过程就是指针不断变化,修改...

    关于具体操作的过程bigboot说了很多,我就不多说了,说了也不如他的权威,但有几个问题需要大家主要.

    (a) base reloc,看起来是在directory中,其实是reloc section中,对于stub的base reloc一定要都修改好,否则就乱了. 原程序的删除也可以,藏起来最好.

    (b) iid,这个东西一定要处理.我的建议是,原来的iid可以藏起来,或者删了(exe). 而且要换成stub的iid. 换的过程中,不能copy,要加上一个offset.怎么算这个offset我就不多说了.

    (c) iat,删!

    (d) 对齐,这个问题看起来很容易,处理不好你就看见了"不是标准win32程序".我也很奇怪,很多exe自己不对齐的,我为什么要给他对齐呢?

    (e)都ok了,就改oep吧,别忘了offset,负责就崩了.

    4. 总结
    (a) C是完全可以用来加壳的,汇编虽然底层,但c也不弱.对于复杂的应用,可以考虑c,因为汇编太繁琐了.

    (b) bigboot的文章是经典,我读了10多边,才完全理解(是不是有点笨?)

    (c) 调试壳是痛苦的,因为出了问题,多数是解释不清楚的.这点不想解密,至少保证程序没问题. olly很不错,但我断点都下不好. peview和petool都不错.建议使用.

    (d) 世面上加密的书. 看雪的说很不错,写的很全面,尤其是iid写的很清楚.其实加壳对iid的处理比iat要复杂多. 飞天诚信的那本写的很仔细,但只能帮助大家理解pe格式,而不是加壳,因为他加壳的工作都是他们自己工具实现的,没法参考.

    (e) anti-crack:我现在没使用任何anti技术,现在所谓anti就是anti-olly,呵呵.因为stub是自己的,所以可以综合使用anti技术了.

    5. 展望
    1.现在就能加win32的,那.net呢?
    2.VM技术似乎很先进,能不能有人指点一下?

  • 相关阅读:
    hdu 1427 速算24点
    HDFS Safemode问题
    surfaceDestroyed什么时候被调用
    C# DataTable的詳細使用方法
    HDU 2460 Network(双连通+树链剖分+线段树)
    撰写架构设计文档的心得体会
    win7下jdk安装环境变量配置
    Android提高第二篇之SurfaceView的基本使用
    UVa 490
    bnu 34982 Beautiful Garden(暴力)
  • 原文地址:https://www.cnblogs.com/luckywolfzyy/p/11384981.html
Copyright © 2011-2022 走看看