论用C++做壳

本文探讨了使用C++进行加壳的方法,而非传统的汇编方式。作者指出C++与汇编接近,适合加壳,并详细介绍了加壳原理、加壳步骤,包括创建DLL作为Stub、处理Base Reloc、IID以及IAT等关键环节。调试壳的过程充满挑战,作者推荐了一些调试工具。文章最后讨论了加壳技术的未来方向,如.NET加壳和VM技术的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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说了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值