Windows 网络编程:加壳与脱壳 【2019-03-11第一篇】

图片来自简书作者發姨

一、手动加壳

壳是一种较为特殊的软件。壳分为两类,一类是压缩壳,另一类是加密壳。当然,还有介于两者之间的混合壳。下面先来手动为一个可执行文件加一层外壳,需要准备的工具有C32ASM、LordPE、添加节表工具和OD。

首先用LordPE查看可执行文件,并对需要的几个数据做一个简单的记录,如图1所示。


图片1来自简书作者發姨

在LordPE中,需要查看几个对于我们需要的数据,包括PE文件的入口RVA、映像地址和代码节的相关数据。有了这些数据以后就可以通过C32ASM对代码进行加密了。用C32ASM以十六进制的方式打开可执行文件,然后从代码节的文件偏移开始选择,也就是从1000h的位置开始选择,一直选到4fffh的位置。然后单击右键,在弹出的快捷菜单上选择“修改数据”命令,在“修改数据”对话框中选择“异或”算法来对代码节进行加密,如图2所示。


图片2来自简书作者發姨

使用0x88来对代码节进行异或加密,单击“确定”按钮后代码节被修改。保存以后使用添加节表的软件对可执行文件添加一个新的节,如图3所示。


图片来自简书作者發姨

添加新的节区以后使用OD对可执行文件添加一些代码,用OD打开可执行程序,来到00408000地址处,添加如下代码:


图片3来自简书作者發姨

以上代码的作用是将上面修改的代码节内容还原,然后进行保存。用LordPE修改该可执行文件的入口和代码节的属性,如图4、图5和图6所示。


图片4来自简书作者發姨


图片5来自简书作者發姨


图片6来自简书作者發姨

运行修改过的可执行文件,可以正常运行。

下面整理一下思路,以方便我们写代码。最开始用LordPE查看了将要用到的一些PE信息,然后用C32ASM对代码节进行了简单的异或加密,接下来新添加了一个节并在新节中写入了还原代码节的解密指令,最后用LordPE修改了文件的入口地址、代码节属性和新添加节的属性。对照一下前后两个文件的不同之处,如图7所示。


图片7来自简书作者發姨

从图中可以看出这两个PE文件的差别,相信大家对此已经没有不理解的地方了。下面开始手动打造一个这样简单的加壳软件。

二、编写简单的加壳工具

其实不按照上面的步骤进行也可以,只要步骤是合理的就可以了。我们主要有4个函数需要实现,分别是获取PE信息GetPeInfo()、添加新节AddSection()、加密代码节Encode()和写入解密代码WriteDecode()。我们主要看两个函数的代码,分别是Encode()和WriteDecode()。


图片来自简书作者發姨

00408000 > 60   PUSHAD

00408001 B8 00104000 MOV EAX,HelloWor.00401000

00408006 8030 88  XOR BYTE PTR DS:[EAX],88

00408009 40   INC EAX

0040800A 3D 464B4000 CMP EAX,HelloWor.00404B46

0040800F ^ 75 F5  JNZ SHORT HelloWor.00408006

00408011 61   POPAD

00408012 B8 41104000 MOV EAX,HelloWor.00401041

00408017 FFE0   JMP EAX

在虚拟地址和汇编指令的中间部分就是汇编指令对应的机器码,将其取出并定义为C语言的数组,定义如下:


图片来自简书作者發姨

这个机器码在解密的过程中要根据实际的PE信息进行修改,修改的位置有3处,分别是代码节的起始虚拟地址、代码节的结束虚拟地址和程序的原始入口点,代码如下:


图片来自简书作者發姨

这就是解密代码,大家可以找个用VC写的程序来进行测试。在这里使用Release版的helloworld测试通过。

这个壳属于袖珍版的壳,严格来说,算不上是一个壳,但是这个壳在免杀领域是有用的,也就是把定位到的特征码进行加密,然后再写入解密代码从而隐藏特征码。一个真正的壳会对导入表、导出表、资源、TLS、附加数据等相关的部分进行处理。加密壳会加入很多反调试的功能,而且还会让壳和可执行文件融合在一起,达到“骨肉相连”的程度来增加脱壳的难度。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,774评论 0 27
  • 壳是一段执行于原始代码前的代码。原始程序的代码在家可的过程中可能被压缩、加密等,当加壳后的文件执行时,壳这段代码先...
    plutoG7阅读 1,779评论 0 6
  • 完美的免杀方法到目前为止,要实现恶意软件的“FUD”,加密恶意代码被认为是个不错的选择,不过有几点要注意:1.恶意...
    极客圈阅读 1,099评论 0 2
  • Return-Oriented-Programming(ROP FTW) Author: Saif El-Sher...
    RealSys阅读 3,294评论 0 2
  • 楔子 丰庆五十四年,腊月十七,边关来报,年大将军战死沙场,其子年凌接任三军统帅,死守八方城。 景王府 ...
    叁水LeonardoBing阅读 1,620评论 0 5