我几乎用了好几分钟来考虑我该不该写写这段文字,最后我水平有限的理由终于还是被已经写好的标题所屈服,所以我并不怕你笑我。
我没有google过其他资料然后才写此文的,只因一时兴起,错误之处请指正。
在过去两年,我曾写过4次壳,这里我把一些经验写出来,希望有写壳的少走弯路。不废话了,切入主题。
我的第一代壳:
当时我还在某学校练高中2年纪,那时候我就着手写我的第一个壳,当时我对这方面完全不了解,手头上几乎只有几篇介绍pe文件格式的文章,当时我壳的构架是基于win 32调试机制的,也就是很像现在的arm和encryptpe,不过当时完全不知道有两个东东。于是呼,在我当时使用的开发工具delphi 7新建一个工程就开始了,名字我想不起来了,似乎现在资料都还保存在我一台笔记本硬盘里面,永远封存起来了。由于当时Code能力也烂到了极点,也就是注定这壳很快会夭折,不怕你笑话,当时我还不知道如何利用类这个东西,所以在数据格式的管理上简直是原始到了不可言语的地步,当时基于调试api的构架初看起来很好,对code的操作能力很大,我甚至还设计了好多种代码处理原形,不过正如我前面提到的,不久后,这壳夭折了。失败原应是因为过于追求界面部分,还有code能力差,到后来发现构架并不是想象中的那么好。最终此壳只加密成功过一个很小的程序。
总结一下构架方面,并不是说这样的构架很差,而似乎它还有天生的优点,比如子进程不能直接调试,需要合并进程,对代码操作能力好。从加壳处理方面来说操作性也很好,因为你可以写一个标准的loader程序,然后把被加密的程序当作附加数据来处理。缺点是你必须考虑services程序的这个事实,还有就是加密dll是这种构架的天生弱点。
很快,在时代的步伐下,我各方面进步了,至少自我感觉进步了。我决定重新写一款壳,这壳是我在主动退学后在美丽的家乡居住的时候想到的。关于退学的事我除了说我退学了之外并不想说此时的具体原因。
我的第二代壳:
由于第一代壳的失败,我决定花更多时间来搜集资料,但也不至于没有天理的把自己扔到网页堆里,很快我开始动工了,这壳用的构架是基于寄生被加密pe的构架,也就是在原来的pe上添加一个新区段,然后修改入口,都在这里面完成loader工作,当时我就考虑到vm将会在壳里有所作为,但我并没有意识到我特差的代码能力将使其无所作为,而且当时我还设计了另外一种伪执行模式,是一种简单高效的假vm执行引擎,但是当我使用大量内联汇编尚未达到想要的效果的时候,我开始重新考虑我的代码能力,很快的,这壳流产了。
失败原因也是特差的代码能力,和不够好的构架,我很高兴我有这么多自由时间来完成这样无聊而无结果的工作,这又一次告诉我需要提高自己个方面能力。
关于这样寄生的构架,我并不推荐,初看起来很简单,你不需要考虑新建一个pe所要考虑的各各方面, 你仍然可以做你所有能做的事情,但是你不得不考虑到如何将代码完美的寄生到目标里面去,你也许还会为此写一个code link engine,你会想让代码是多么的灵活,根据不同的选项生成特定的代码,似乎听起来非常的不错,但是当你进一步为你的壳加入新功能的时候,你会发现代码维护越来越困难。直到你开始抱怨。
我的第三代壳:
不久后,我开始在一个小城市和家乡之间来回穿梭,但是即使这样,我仍然有足够的时间,于是呼,我开始写我的第三带壳。也就是后来的pe123。
前两次的失败或多或少让我学到了不少东西, 这款壳的构架是基于新建PE的,加密时是直接拷贝代码方式,也就是代码先在加壳程序里写好,然后直接复制到目标程序,开始一切都很好,很快的,我完成了一系列代码筐架,然后对于那些不够好的代码我只能说,因为当时我已开始使用另外一门开发语言c++,所以对于delphi我只能说我在尚未学好它时已经开始放弃使用它,这是一大遗憾,但是当时总总迹象表明,我必须得放弃它。对于c++我还想说一点,我并没有看多少讲这样那样的学习教程的书,因为那些书上的和教育局书上的差不多一个样,除了个别精品之外,全是叫你用你那并不富裕的记忆记这样那样的语法,所以我选择了另外一总学习方式,参考别人代码,写自己的代码,遇到难题google.扯远了。
pe123我并不以为是一特别失败的壳,即使他很不成熟,而基于这样的构架,很明显是比较有优点的,你可以固定入口,所有代码你不需要重新连接,重新定位,也就是说你不需要写一个类似上面提到的link code engine这样的东西,你可以把代码写好,然后直接复制进去用。然后对于加壳方式我并提倡这样复制粘贴的方式。因为你迟早会发现你同样会陷入管理代码的泥潭而无法自拔。
我的第4代壳:
由于后来我除了写小工具外,几乎不用delphi了,所以本来不够用的代码能力已经无法将这个壳继续延续下去了,所以我一天夜里终于还是打开了vs2005新建了一个名为PeCancer的工程。我的第4个壳开始了。
对于delphi代码能力的不尽人意再一次提醒我在c++上面再也不能重复那样的路子,于是整个PeCancer的开发成了我的一个学习过程,他的大部分代码已经被我写过第二次,刚开始我的壳采用的是那个什么什么b*m*壳的方式的高级版本,也就是拥有一个shell dll,+shell loader的构架,当然也是新建PE,这种构架的好处在于,你将充分享受shell dll为你带来的代码维护便利,你不用担心你的这个函数的代码会不会放错位置,这个函数的调用会不会出问题,你还可以充分享受c++强大的调试能力给你带来的便利,只要你代码遇到问题,那么只要你生成了pdb文件,你可以立刻定位到相映的原代码上,而且shell和加密程序代码完全分开,这样你维护代码将非常轻松,后来我将这个构架又更改了一下,改成了shell dll+shell loader dll模式,放弃了shell loader也靠复制粘贴的依赖,更加易于代码的管理,这样以来,壳的shell部分也拥有任何c++程序可以拥有的模式,比如debug,release,你可以更容易的调试管理,这是我经历前几次调试痛苦之后而产生的想法,因为壳不比其他程序,shell代码位置肯定是要变动的,也就是说这样基本不可能源代码实时调试,至少当前来说。但是你可以通过asm+精确的源代码定位来弥补这个缺陷。
虽然至今我尚未公开过PeCancer的任何版本,但是我想我已经摆脱了加壳技术问题的噩梦,公开他的第一个版本也是迟早问题,我曾经想过开源,因为我没有太多时间来管理,但是被fly一语惊醒,开源的另一个意思就是放弃。但我不想放弃,因为我已经不想写我的第5代壳了。
总结一下上面所说,我说用到的构架中,最后一种是我最推荐的。当然我并没有去调查有没有其他构架,所以仅推荐而已。
有机会我再写一篇关于一些现在加壳所流行的技术,来阐述加壳的人是如何千方百计的刁难脱壳者的。
分享到:
相关推荐
在电气工程领域,设备的金属外壳和与其连接的金属构架的接地是极其重要的安全措施。这个主题,"040电气设备金属外壳及与电气设备外壳连接的金属构架接地安全技术交底",主要涉及到电力系统中的保护接地概念、接地的...
电气设备外壳及与电气设备外壳连接的金属构架的接地安全技术是确保电力系统安全运行的重要环节,旨在防止电击事故的发生,保护人员和设备的安全。以下是对这一主题的详细阐述: 1. I 类电气设备的接地规定:这类...
关于软件构架的设计思路,可供参考
三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层构架终极版三层...
本参考资料——"参考资料-J310-1(空冷器构架安装记录).zip"包含了关于J310-1型号空冷器构架安装的详细记录,旨在为相关工程技术人员提供参考。 【描述】: "参考资料-J310-1(空冷器构架安装记录).zip"这份压缩包...
从文件内容中提到的“英本交于内部资料”,我们可能推断这是一个内部文档,它应该包含了关于ICS版本Android多媒体构架详细的技术信息。虽然这部分内容并没有提供详细的技术细节,但它表明这份资料是为内部人员提供的...
ORACLE 数据库构架图.JPG;ORACLE 数据库构架图.JPG
在探讨系统架构设计之前,我们需要先了解一些基本的概念,这些概念对于理解整个系统架构至关重要。 1. **模块(Module)**:模块是软件工程中最基本的组成部分之一,它是由一组语句组成的,具有明确的功能和接口,...
本资料集包含了一系列关于大型网站构架的重要知识点,旨在帮助Web开发者提升技术水平,理解并掌握复杂网站架构的设计与优化。 首先,负载均衡是大型网站构架中的核心概念。它通过将网络流量或计算任务分配到多个...
本书对第1版某些内容进行了深入介绍,并增添了一些新内容:ATAM、质量需求、构架重构、用UML对构架编档和CBAM等。此外,本书还对一些新案例进行了分析,以帮助理解软件构架如何适应商业需求。 本书是卡内基·梅隆...
在电子行业中,电力设施的建设与维护至关重要,其中变电构架的设计是核心部分之一。本文将深入探讨变电构架中的横梁悬挑结构和桁架系统,这两种设计元素对于确保电力系统的稳定运行和安全至关重要。 首先,我们来...
此为5-最后 本书比较全面的描述了大规模软件构架的关键技术,揭示了大规模软件构架的内涵…本书共7章…第1章简要总结了面向对象技术;第2章给出了分布式处理技术的内涵、开放式分布处理ODP的参考模型和体系结构;...
在讨论系统构架设计之前,我们需要了解一些基本概念,这些概念是理解系统构架设计的基础。 1. 模块:模块是系统的基本组成部分,是一个独立的、可维护的、可重用的代码单元。 2. 组件:组件是模块的集合,是一个...
本资料包“软件构架课程报告和期末复习资料”提供了对这个重要主题的深入理解和学习资源。 首先,文档《软件构架_课程报告.doc》很可能涵盖了课程中的核心概念和理论。这可能包括常见的软件架构模式,如层次结构、...
学习MFC构架时,你需要理解上述各个组件的工作原理,并掌握如何在实际项目中应用它们。例如,通过文档/视图结构设计数据模型和用户界面,使用消息映射处理用户交互,利用控件和对话框构建GUI,通过ODBC进行数据库...
以下是一个详细的个人FTP构架教程。 **一、FTP服务器的选择** 在开始构架之前,你需要选择一个合适的FTP服务器软件。常见的有: 1. **vsftpd**: 开源且安全,适用于Linux系统,轻量级且易于配置。 2. **FileZilla...
"公司员工构架PPT图表下载"这个标题表明了资源的内容,即一个关于公司组织结构的PPT模板,适用于展示和分析企业的人力资源布局。 描述中的"员工构架PPT图表适用于人事统计主题设计应用"进一步强调了这个PPT模板的...
很详细的创建Sql构建.. --创建构架 CREATE SCHEMA Work; GO.... /************************************/ /******测试构架的可访问路径**********/ /************************************/