加壳与脱壳理论详解

摘要:
加壳与脱壳理论详解在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP。实现上述功能,这些软件称为加壳软件。下面是我们常常会碰到的加壳方式及简单的脱壳措施,供大家参考:脱壳的基本原则就是单步跟踪,只能往前,不能往后。因为不同软件甚至不同版本加的壳,脱壳处理的方法都不相同。

加壳与脱壳理论详解

在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。自然界中植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的 “ 壳中带籽 ” 的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为 “ 壳 ” 了。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。 从功能上抽象,软件的壳和自然界中的壳相差无几。无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密 …… 。当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。 软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的 OEP (入口点,防止被破解)。关于 “ 壳 ” 以及相关软件的发展历史请参阅吴先生的《一切从 “ 壳 ” 开始》。

(一)壳的概念

作者编好软件后,编译成 exe 可执行文件。
1. 有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2. 需要把程序搞的小一点,从而方便使用。于是,需要用到一些软件,它们能将 exe 可执行文件压缩,
3. 在黑客界给木马等软件加壳脱壳以躲避杀毒软件。实现上述功能,这些软件称为加壳软件。

(二)加壳软件最常见的加壳软件

ASPACK,UPX, PEcompact 不常用的加壳软件 WWPACK32 ;PE-PACK; PETITE NEOLITE

(三)侦测壳和软件所用编写语言的软件

因为脱壳之前要查他的壳的类型。
1. 侦测壳的软件 fileinfo.exe 简称 fi.exe (侦测壳的能力极强)。
2. 侦测壳和软件所用编写语言的软件 language.exe (两个功能合为一体,很棒),推荐 language2000 中文版(专门检测加壳类型)。
3. 软件常用编写语言 Delphi , VisualBasic ( VB ) --- 最难破, VisualC ( VC )。

(四)脱壳软件

软件加壳是作者写完软件后,为了保护自己的代码或维护软件产权等利益所常用到的手段。目前有很多加壳工具,当然有盾,自然就有矛,只要我们收集全常用脱壳工具,那就不怕他加壳了。软件脱壳有手动脱和自动脱壳之分,下面我们先介绍自动脱壳,因为手动脱壳需要运用汇编语言,要跟踪断点等,不适合初学者,但我们在后边将稍作介绍。

加壳一般属于软件加密,现在越来越多的软件经过压缩处理,给汉化带来许多不便,软件汉化爱好者也不得不学习掌握这种技能。现在脱壳一般分手动和自动两种,手动就是用 TRW2000 、 TR 、 SOFTICE 等调试工具对付,对脱壳者有一定水平要求,涉及到很多汇编语言和软件调试方面的知识。而自动就是用专门的脱壳工具来脱,最常用某种压缩软件都有他人写的反压缩工具对应,有些压缩工具自身能解压,如 UPX ;有些不提供这功能,如: ASPACK ,就需要 UNASPACK 对付,好处是简单,缺点是版本更新了就没用了。另外脱壳就是用专门的脱壳工具来对付,最流行的是 PROCDUMP v1.62 ,可对付目前各种压缩软件的压缩档。在这里介绍的是一些通用的方法和工具,希望对大家有帮助。我们知道文件的加密方式,就可以使用不同的工具、不同的方法进行脱壳。下面是我们常常会碰到的加壳方式及简单的脱壳措施,供大家参考: 脱壳的基本原则就是单步跟踪,只能往前,不能往后。脱壳的一般流程是:查壳 -> 寻找 OEP->Dump-> 修复 找 OEP 的一般思路如下: 先看壳是加密壳还是压缩壳,压缩壳相对来说容易些,一般是没有异常,找到对应的 popad 后就能到入口,跳到入口的方式一般为。 我们知道文件被一些压缩加壳软件加密,下一步我们就要分析加密软件的名称、版本。因为不同软件甚至不同版本加的壳,脱壳处理的方法都不相同。

常用脱壳工具

1. 文件分析工具(侦测壳的类型): Fi , GetTyp , peid , pe-scan ,
2.OEP 入口查找工具: SoftICE , TRW , ollydbg , loader , peid
3.dump 工具: IceDump , TRW , PEditor , ProcDump32 , LordPE
4.PE 文件编辑工具 PEditor , ProcDump32 , LordPE
5. 重建 Import Table 工具: ImportREC , ReVirgin
6.ASProtect 脱壳专用工具: Caspr ( ASPr V1.1-V1.2 有效), Rad (只对 ASPr V1.1 有效), loader , peid

( 1 ) Aspack : 用的最多,但只要用 UNASPACK 或 PEDUMP32 脱壳就行了

( 2 ) ASProtect+aspack :次之,国外的软件多用它加壳,脱壳时需要用到 SOFTICE+ICEDUMP ,需要一定的专业知识,但最新版现在暂时没有办法。

( 3 ) Upx : 可以用 UPX 本身来脱壳,但要注意版本是否一致,用 -D 参数

( 4 ) Armadill : 可以用 SOFTICE+ICEDUMP 脱壳,比较烦

( 5 ) Dbpe : 国内比较好的加密软件,新版本暂时不能脱,但可以破解

( 6 ) NeoLite : 可以用自己来脱壳

( 7 ) Pcguard : 可以用 SOFTICE+ICEDUMP+FROGICE 来脱壳

( 8 ) Pecompat : 用 SOFTICE 配合 PEDUMP32 来脱壳,但不要专业知识

( 9 ) Petite : 有一部分的老版本可以用 PEDUMP32 直接脱壳,新版本脱壳时需要用到 SOFTICE+ICEDUMP ,需要一定的专业知识 。

(10) WWpack32 : 和 PECOMPACT 一样其实有一部分的老版本可以用 PEDUMP32 直接脱壳,不过有时候资源无法修改,也就无法汉化,所以最好还是用 SOFTICE 配合 PEDUMP32 脱壳

我们通常都会使用 Procdump32 这个通用脱壳软件,它是一个强大的脱壳软件,他可以解开绝大部分的加密外壳,还有脚本功能可以使用脚本轻松解开特定外壳的加密文件。另外很多时候我们要用到 exe 可执行文件编辑软件 ultraedit 。我们可以下载它的汉化注册版本,它的注册机可从网上搜到。 ultraedit 打开一个中文软件,若加壳,许多汉字不能被认出 ultraedit 打开一个中文软件,若未加壳或已经脱壳,许多汉字能被认出 ultraedit 可用来检验壳是否脱掉,以后它的用处还很多,请熟练掌握例如,可用它的替换功能替换作者的姓名为你的姓名注意字节必须相等,两个汉字替两个,三个替三个,不足处在 ultraedit 编辑器左边用 00 补。

常见的壳脱法:

1.aspack 壳 脱壳可用 unaspack 或 caspr 1.unaspack ,使用方法类似 lanuage ,傻瓜式软件,运行后选取待脱壳的软件即可 . 缺点:只能脱 aspack 早些时候版本的壳,不能脱高版本的壳 2.caspr 第一种:待脱壳的软件(如 aa.exe )和 caspr.exe 位于同一目录下,执行 windows 起始菜单的运行,键入 caspr aa.exe 脱壳后的文件为 aa.ex_ ,删掉原来的 aa.exe ,将 aa.ex_ 改名为 aa.exe 即可。使用方法类似 fi 优点:可以脱 aspack 任何版本的壳,脱壳能力极强缺点: Dos 界面。第二种:将 aa.exe 的图标拖到 caspr.exe 的图标上 *** 若已侦测出是 aspack 壳,用 unaspack 脱壳出错,说明是 aspack 高版本的壳,用 caspr 脱即可。

2.upx 壳 脱壳可用 upx 待脱壳的软件(如 aa.exe )和 upx.exe 位于同一目录下,执行 windows 起始菜单的运行,键入 upx -d aa.exe 。

3.PEcompact 壳 脱壳用 unpecompact 使用方法类似 lanuage 傻瓜式软件,运行后选取待脱壳的软件即可。

4.procdump 万能脱壳但不精,一般不要用 使用方法:运行后,先指定壳的名称,再选定欲脱壳软件,确定即可脱壳后的文件大于原文件由于脱壳软件很成熟,手动脱壳一般用不到。一 . 关于免杀的来源
为了让我们的木马在各种杀毒软件的威胁下活的更久 .

什么叫免杀和查杀

可分为二类 :
1. 文件免杀和查杀 : 不运行程序用杀毒软件进行对该程序的扫描,所得结果。
2. 内存的免杀和查杀 : 判断的方法 1> 运行后 , 用杀毒软件的内存查杀功能 .
2> 用 OD 载入 , 用杀毒软件的内存查杀功能 .

什么叫特征码

1. 含意 : 能识别一个程序是一个病毒的一段不大于 64 字节的特征串 .
2. 为了减少误报率 , 一般杀毒软件会提取多段特征串 , 这时 , 我们往往改一处就可达到
免杀效果 , 当然有些杀毒软件要同时改几处才能免杀 .( 这些方法以后详细介绍 )
3. 下面用一个示意图来具体来了解一下特征码的具体概念

特征码的定位与原理

1. 特征码的查找方法 : 文件中的特征码被我们填入的数据(比如 0 )替换了,那杀毒软
件就不会报警,以此确定特征码的位置

2. 特征码定位器的工作原理 : 原文件中部分字节替换为 0 ,然后生成新文件,再根据杀
毒软件来检测这些文件的结果判断特征码的位置

认识特征码定位与修改的工具

1.CCL( 特征码定位器 )
2.OOydbg ( 特征码的修改 )
3.OC 用于计算从文件地址到内存地址的小工具 .
4.UltaEdit-32( 十六进制编辑器 , 用于特征码的手工准确定位或修改 )

特征码修改方法

特征码修改包括文件特征码修改和内存特征码修改,因为这二种特征码的修改方法
是通用的。所以就对目前流行的特征码修改方法作个总节。

方法一 : 直接修改特征码的十六进制法
1. 修改方法 : 把特征码所对应的十六进制改成数字差 1 或差不多的十六进制 .

2. 适用范围 : 一定要精确定位特征码所对应的十六进制 , 修改后一定要测试一下能
否正常使用 .

方法二 : 修改字符串大小写法
1. 修改方法 : 把特征码所对应的内容是字符串的 , 只要把大小字互换一下就可以了 .
2. 适用范围 : 特征码所对应的内容必需是字符串 , 否则不能成功 .

方法三 : 等价替换法
1. 修改方法 : 把特征码所对应的汇编指令命令中替换成功能类拟的指令 .
2. 适用范围 : 特征码中必需有可以替换的汇编指令 . 比如 JN,JNE 换成 JMP 等 .
如果和我一样对汇编不懂的可以去查查 8080 汇编手册 .

方法四 : 指令顺序调换法
1. 修改方法 : 把具有特征码的代码顺序互换一下 .
2. 适用范围 : 具有一定的局限性 , 代码互换后要不能影响程序的正常执行

方法五 : 通用跳转法
1. 修改方法 : 把特征码移到零区域 ( 指代码的空隙处 ), 然后一个 JMP 又跳回来执行 .
2. 适用范围 : 没有什么条件 , 是通用的改法 , 强烈建议大家要掌握这种改法 .

木马免杀的综合修改方法

文件免杀方法:

1. 加冷门壳
2. 加花指令
3. 改程序入口点
4. 改木马文件特征码的 5 种常用方法
5. 还有其它的几种免杀修改技巧

内存免杀方法:

修改内存特征码:
方法 1> 直接修改特征码的十六进制法
方法 2> 修改字符串大小写法
方法 3> 等价替换法
方法 4> 指令顺序调换法
方法 5> 通用跳转法
木马的免杀 [ 学用 CLL 定位文件和内存特怔码 ]

1. 首先我们来看下什么叫文件特征码 .
一般我们可以这样认为,一个木马程序在不运行的情况下,用杀毒软件查杀,若报警为病毒,说明存在该查毒软件的文件特征码的。
2. 特征码的二种定位方法 .
手动定位和自动定位
3. 文件特征码的定位技巧 .
通常用手动确定大范围,用自动精确定位小范围 .
下面分别用瑞星和卡巴为例,实例演示并结合手动定位和自动定位二种方法来准确定位文件特征码。要定位的对像以下载者为例。

用卡巴来定位文件特征码

⑴ . 手动定位:
1 打开 CLL

2 选择设置中的 总体参数 ,,,,,选中文件特征码手动定位,,,,以及路径

3 选中设置中的 手动参数,,,,,选择替换方式 选中,,,总共生成规定个数的文件,,,生成个数为 1000

4 选择文件中的 特征码检测,,文件特征码检测,,,打开程序(要定位特证码的程序)

5 在弹出的 PE 窗口中 直接点确定 ,之后弹出的窗口在点确定

6 然后等 CLL 生成完毕之后用杀毒软件进行查杀

7 在 CLL 中选 操作,结果定位,选中刚刚用来存放检测结果的文件夹

8 在 CLL 中选

文件免杀之加花指令法

. 花指令相关知识:

其实是一段垃圾代码,和一些乱跳转,但并不影响程序的正常运行。加了花指令后,使一些杀毒软件无法正确识别木马程序,从而达到免杀的效果。

. 加花指令使木马免杀制作过程详解:

第一步:配置一个不加壳的木马程序。
第二步: OD 载入这个木马程序,同时记下入口点的内存地址。
第三步:向下拉滚动条,找到零区域(也就是可以插入代码的都是 0 的空白地方)。并记下零区域的起始内存地址。
第四步:从这个零区域的起始地址开始一句一句的写入我们准备好的花指令代码。
第五步:花指令写完后,在花指令的结束位置加一句: JMP  刚才 OD 载入时的入口点内存地址。
第六步:保存修改结果后,最后用 PEditor 这款工具打开这个改过后的木马程序。在入口点处把原来的入口地址改成刚才记下的零区域的起始内存地址,并按应用更改。使更改生效。

. 加花指令免杀技术总节:

1. 优点:通用性非常不错,一般一个木马程序加入花指令后,就可以躲大部分的杀毒软件,不像改特征码,只能躲过某一种杀毒软件。
2. 缺点:这种方法还是不能过具有内存查杀的杀毒软件,比如瑞星内存查杀等。
3. 以后将加花指令与改入口点,加壳,改特征码这几种方法结合起来混合使用效果将非常不错。

. 加花指令免杀要点:

由于黑客网站公布的花指令过不了一段时间就会被杀软辨认出来,所以需要你自己去搜集一些不常用的花指令,另外目前还有几款软件可以自动帮你加花,方便一些不熟悉的朋友,例如花指令添加器等。

. 常见花指令代码

1 . VC++ 5.0

PUSH EBP              
MOV EBP,ESP            
PUSH -1push 515448PUSH 6021A8        
MOV EAX,DWORD PTR FS:[0]      
PUSH EAX              
MOV DWORD PTR FS:[0],ESP      
ADD ESP,-6C            
PUSH EBX              
PUSH ESI              
PUSH EDI  

jmp 跳转到程序原来的入口点

2 .c ++

push ebp
mov ebp,esp
push -1push 111111push 222222mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax

jmp 跳转到程序原来的入口点

3 .跳转

somewhere:        
   nop          /"胡乱 "跳转的开始 ...
    jmp  下一个 jmp 的地址      /在附近随意跳
    jmp ...        /...
   jmp  原入口的地址      /跳到原始 oep
--------------------------------------------------新入口 : push ebp
   mov ebp,esp
   inc ecx
   push edx
   nop
   pop edx
   dec ecx
   pop ebp
   inc ecx
   loop somewhere    / 跳转到上面那段代码地址去!

4 . Microsoft Visual C++ 6.0

push ebp
mov ebp,esp
PUSH -1PUSH 0PUSH 0MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,68PUSH EBX
PUSH ESI
PUSH EDI
POP EAX
POP EAX
POP EAX
ADD ESP,68POP EAX
MOV DWORD PTR FS:[0],EAX
POP EAX
POP EAX
POP EAX
POP EAX
MOV EBP,EAX
JMP  原入口

5

在 mov ebp,eax
后面加上
PUSH EAX
POP EAX

6.

push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,403D7D
push eax
retn
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>push ebp
mov ebp,esp
push -1push 00411222push 00411544mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6C
push ebx
push esi
push edi
add byteptr ds:[eax],al
jo  入口
jno  入口
call  下一地址

7.

push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loop  任意地址
nop
nop
———————————————
nop
nop
jmp  下一个 jmp 的地址      /在附近随意跳
nop
jmp  下一个 jmp 的地址      /在附近随意跳
nop
jmp  下一个 jmp 的地址      /在附近随意跳
jmp  入口

文件免杀之加壳与改入口点法

. 壳的相关知识:

1. 壳的分类:压缩壳和加密壳
2. 壳的作用:保护和文件免杀

. 加壳免杀的几个弱点

1. 不能躲过像瑞星这类具有内存查杀功能的杀毒软件。
2. 一般不能躲过卡巴的查杀
因为卡巴采用了一种叫虚拟机技术。首先把加了多层壳的木马程序在虚拟机环境下运行一下,这样木马程序就会现出本来面目,这样无论你加了多少层壳,在运行后程序还是要暴露自已的。所以大家在加壳测试过程中也会发现,能过其它的多种杀毒软件,但卡巴始终很难过,其原因就是卡巴的虚拟技术在作怪。

. 是不是现在的加壳免杀已失去意义

每种免杀技术都有他的缺点和优点,比如加壳,首先要找到比较生僻的壳 , 而且可能以后很快被查杀 . 同时也不能过内存查杀 , 也很难过卡巴 . 但它操作方便 , 通用性好加一个壳 , 可能过好几个杀毒软件 . 又比如修改特征码 . 首先操作比较烦 , 要定位 , 要修改 , 改好后还要测试是否能正常使用 . 同时针对性非常强 . 只能针对某一种杀毒软件的免杀 , 各种杀毒软件的特征码都不一样 , 所以要躲过多种杀毒软件查杀 , 就要分别定位 , 修改每种杀毒软件的特征码 . 这样是相当麻烦的 . 但它可以通过修改特征码来躲过瑞星内存和卡巴的查杀 .
所以以后免杀技术会把加壳 , 加花指令 , 改入口点 , 改特征码这几种方法结合起来使用 . 对付瑞星的内存查杀 , 我们可以修改内存特征码 , 对付卡巴的虚拟机技术 . 我们可以修改卡巴的特征码 . 在加上加冷门壳 , 加花指令 , 改入口点 . 综合这些方法就可以打造金钢不死之身 !

. 加壳免杀实例演示部分

1. 加生僻壳免杀 : 实例演示
2. 加伪装壳免杀 : 实例演示
3. 多重加壳免杀 : (用木马彩衣进行多重加壳)

. 改入口点免杀法 :

1. 改入口点免杀原理 : 杀毒软件一般都检测病毒还原之后的代码 , 而且一般都把代码段开始的前 40 个字节作为特征值 . 入口点改变了 , 说明也就破坏了特征码 , 这样就达到免杀的效果 .
2. 改入口点免杀方法一 : 入口地址加 1 法 .
操作步骤 :
第一步 : 配置一个无壳的木马服务端 .
第二步 : 用 PEditor 打开木马程序服务端 . 在入口点处的地址加 1. 然后点应用更改就可以了 .
评论 : 该方法对不同木马程序 , 有不同的效果 , 其它杀毒软件一般都可以躲过 , 但有些程序改过后还是被卡巴查杀 . 同时也不能过内存查杀 , 但以后结合加花指令 , 加壳等等方法 , 效果将非常不错 .

3. 改入口点免杀方法二 : 变换入口地址法 .
操作步骤 :
第一步 : 用 OD 载入无壳木马程序服务端 .
第二步 : 把入口点的开始二句代码 ( 大都为 push ebp mov ebp,esp). 移到零区域也是就空白区域地方 . 并记下零区域的内存地址 . 同时在后面加一句跳转命令 :JMP 到第三条指令的地址 .
第三步 : 然后修正并保存 , 最后用 PEditor 打开该程序 . 把入口点改成刚才在零区域记下的内存地址 .
评论 : 该方法效果比方法一要好 . 经测试 , 用方法一改过后被卡巴查出来 , 用方法二就查不出来 . 以后可以结合加花指令 , 加壳 , 改特征码 , 打造金钢不死之身 !

采用以上的方法可以躲过不少杀毒软件的追杀,并且方便快速,又很简单,所以是免杀里非常主要的手段,但是一定要检查文件是不是能够正常运行。

免杀新技术[ 虚拟机加密免杀 ] 和 [ 壳中改籽 ]

虚拟机加密免杀

最新免杀技术 —— 虚拟机加密代码应用并非传统的修改特征码,也不是修改入口点 + 花指令,更不是
加壳压缩!是最新的一种免杀技术!借于这种技术你可以千变万化,是免杀对新手来说更为简单!
大家对虚拟机 vmprotect 是否有所了解,这个是最新的加密工具!可以加密 PE 文件中任何一句或一段代码
自然可以给我们用来免杀了!
免杀工具: vmprotect1.07 或 1.06 PEID UPX
免杀步骤:原理说明:加密区段代码使杀毒软件无法识别!你可以找特征码,找到后加密特征码的代码!
PEID 查看入口点:假如这里的入口点是 0007DB74 基址是 00400000
3. 用虚拟机 vmprotect 打开要免杀的文件,添加地址 0047DB74=00400000+0007DB74 基址 + 入口点
4. 选代码区域 -> 转存 ->F9 保存
5. 测试运行 -> 可以成功运行
6. 用 UPX 压缩一下,缩小体积, OK 免杀成功
总结:虚拟机加密代码是比较新的免杀技术,可以和其他免杀技术有机的集合在一起,让你的木马变成金刚不坏 . 大家要多多掌握。

壳中改籽技术免杀

这种免杀很少有人用,所以免杀效果非常好,各大黑客网站也很少见到介绍,这里我把别人做黑洞免杀的文章发到这里,供大家研究 . 估计是浩天写的文章
先讲一下为什么这种技术叫 “ 壳中改籽 ” 。配置一个黑洞的服务端,然后用 PEiD.exe 来查看它是用什么加的壳,查到是 UPX 加的变态壳,程序的区段都给隐藏了,那么先得给黑洞服务端脱壳。用 upxfix.exe 打开它,然后在 Decompress method 里面选择 5 ,点击 fix ,这样就修复了。再用 PEiD.exe 查一下,看现在可以看到区段了吧。
为什么我一再提到这个区段呢?其实它就是文章的重点,也就是壳里面的籽。继续脱壳,用 UPXShell 打开修复好的黑洞服务端,点击解压缩,完成后我们可以看到程序由原来的 201 kb 变成了 506 KB ,大了一倍多。
有人可能要问为什么一定要给它脱壳呢?直接修改不可以吗?其实主要是因为黑洞的服务端里还有一个用做键盘记录的 dll 文件,它也要做免杀处理。用 Resscope1.92 打开黑洞的服务端,这个可是绝好的 exe 资源编辑器啊,先选择 dllfile 里面的 getkey ,然后点击文件 → 导出资源,这样 dll 文件就导出来了。它也是用 upx 加的变态壳,因为区段被加密了,所以我们也要给它脱壳,再加壳。脱壳的过程和先前脱黑洞服务端一样先用 upxfix.exe 打开它,但是这里注意在 Decompress method 里面,不要选择 5 ,而是选择 2 修复,不然的话就脱不了壳了。
接着用 UPXShell 解压缩,现在 dll 文件的大小由原来的 11 kb 变成了 18.5 kb ,然后再用 UPXShell 重新给它加上壳。

三、修改 upx 壳里面的籽

UPX 加过壳的 dll 文件,用 PEiD.exe 打开查看,这里有几个数据需要我们记录,等下和修改后的文件做比较用。
先分别把程序入口点: 000C220 、文件偏移量: 00002620 ,记录下来,然后点击查看 EP 区段,在区段查看上面再点右键选择 cave 查找器,把 upx 壳区段 upx1 的 RVA : 0000C3B5 、 偏移: 000027B5 等参数也记录下来。

关键的时刻到了, reloc.exe 闪亮登场。因为 reloc 是一款命令下的工具,所以为了操作方便,我建议大家写一个 bat 文件和 reloc 放在同一目录。我们开始记录的数据现在派上用场了,编辑 bat 文件格式如下:
reloc 待修改程序 $ 程序入口 $ 文件偏移量 $ 壳的区段入口 $ 区段偏移 参数
那么对应我们的黑洞键盘记录 dll 文件所记录的数据,这个 bat 就应该这样写:
reloc 键盘记录 .dll $C220 $2620 $C3B5 $27B5 5
数据前面的零不要写到 bat 里面,另外最后面的这个参数大家注意,其实它是设置修改时的偏移量的,一般 dll 文件选择 5 , exe 文件选择 5-9 之间的数,一般选择 6 就好了。
设置完了,我们运行这个 bat 文件,开始修改。完毕之后我分别用国内和国外最强的杀毒软件江民、诺盾和卡巴斯基对键盘记录 .dll 进行扫描,它们均未发现病毒,我们的木马成功躲了过去。用 PEiD.exe 重新打开,可以发现 PEiD 已经无法分别键盘记录 .dll 是什么壳了,把原来记录的几个数据和现在对比一下发现程序入口和文件偏移量没有,而壳区段入口和区段偏移却改变。
飘舞的风在上一期的文章里面说道: “ peidv0.92 是通过每个程序的开头几十个字节来比较是那种壳。 ” ,看来不仅仅如此, peidv0.92 还把壳的区段入口开头的几十个字节也作为了用来判断壳的类型的特征代码,杀毒软件也是如此,这样简单修改一下我们的木马就免杀了。
着把这个已经修改好的 dll 文件,导回到黑洞的服务端 , 方法和导出 dll 是一样的,我就不再讲述了,然后把它用 UPXShell 再次加壳,加壳后的大小为 200 kb 。
现在可以开始我们的第二次免杀之旅了,同样用 PEiD.exe 把程序入口、文件偏移量、壳的区段入口、区段偏移,等数据记录下来,写入 bat 文件。
我的 bat 是这样写的:
reloc 1.exe $88620 $30A20 $887A3 $30BA3 6
我前面已经讲过了,修改 exe 文件的时候,参数选择 5-9 之间的数,一般选择 6 就好了。现在运行 bat 文件,黑洞服务端的免杀就全部完成了。用 PEiD.exe 查看,显示的是 “ Nothing found ”看来 PEiD 已经不认识它了,再用江民、诺盾和卡巴斯基查杀,均显示无病毒,呵呵,欺骗成功。

四、结语

经过这么简单的修改以后效果是非常好的,相信以后这样的免杀技术将会成为主流技术,因为它简单实用。
分析它实现免杀的原理,不难看出换一个角度思考问题的重要性,从壳的修改转到壳中籽的修改,不能不说这是一种创新,
它使木马的免杀之路变宽了。最后谢谢 “朋友的家 ” 提供一款这样优秀的工具。如果大家能够把这种技术和我前面提到的另外三种结合起来使用,相信它将是无懈可击的免杀新技术之 OD 一半定位法

不知道是那位牛人想出来把这方法用到木马免杀上,这个方法让很多不会用偏移定位特怔码的朋友也能够很容易掌握到特怔码的位置,实在是很高明又很简单的免杀好方法 . 这里我就根据他的方法详细介绍 OD 一半定位法
所谓 OD 一半定位法很简单,就是用 OD 载入需要做免杀处理的文件,用 NOP 填充一半的代码然后保存,接着用杀毒软件查毒,如果有毒就在把另外一半用 NOP 填充,如果没报毒就证明特怔码就在刚刚填充的那一半,然后又对那一半进行 1/2 的 NOP 填充,这样不断缩小范围,很容易就找到需要修改的代码部分。如果是做内存免杀就把 NOP 填充好的文件用 OD 打开进行内存杀毒。怎么样?是不是很容易掌握的方法?
不过需要注意的是新手用这个方法最好每做一步都把 NOP 填充的开头和结局部分的地址用纪事本保存,免得一旦忘记又从头来 .
如果特怔码不止一处,你就要大致定位到有特怔码这一大段,然后把这一段的一半用 NOP 填充并且保存,接着打开保存的文件对另外一半继续刚刚开始的步骤,这样很快就能够定位出几处特证码所在的位置 .
还是那句话,熟练就好,另外需要注意填充后查出的病毒名字有没有改变,如果改变就证明你填充的那段存在特怔码,这样可以省掉不少时间。

文件免杀之文件特征码修改五大法宝

方法一 : 修改字符串大小写法

1. 修改方法 : 把特征码所对应的内容是字符串的 , 只要把大小字互换一下就可以了 .
2. 适用范围 : 特征码所对应的内容必需是字符串 , 否则不能成功 .

方法二 : 直接修改特征码的十六进制法
1. 修改方法 : 把特征码所对应的十六进制改成数字差 1 或差不多的十六进制 .
2. 适用范围 : 一定要精确定位特征码所对应的十六进制 , 修改后一定要测试一下能否正常使用 .

方法三 : 指令顺序调换法
1. 修改方法 : 把具有特征码的代码顺序互换一下 .
2. 适用范围 : 具有一定的局限性 , 代码互换后要不能影响程序的正常执行。

方法四 : 通用跳转法
1. 修改方法 : 把特征码移到零区域 ( 指代码的空隙处 ), 然后一个 JMP 又跳回来执行 .
2. 适用范围 : 没有什么条件 , 是通用的改法 , 强烈建议大家要掌握这种改法 .

方法五 : 等价替换法
1. 修改方法 : 把特征码所对应的汇编指令命令中替换成功能类似的指令 .
2. 适用范围 : 特征码中必需有可以替换的汇编指令 . 替换后指令功能要不变比如 JN,JNE 换成 JMP ,这里要对汇编要比较熟悉,读懂指令后可以替换功能相同的指令。也可以去查 8080 汇编手册 [ 计算机专栏里有 ]

实战特怔码免杀

第一步:首先用内存定位法来准确定位瑞星内存特征码的具体位置
第一阶段:自动参数中,生成文件间隔秒数设为 4 ,最小替换字节数设为 100 字节。(主要用于大体定位内存特征码)
第二阶段:自动参数中,生成文件间隔秒数设为 4. 最小替换字节数设为 4 字节。(主要用于准确定位内存特征码)
第二步:修改特征码
OD 打开文件,找到特怔码所在位置,并且判断适合用那种方法修改,如果对方法不太熟悉,并且特怔码不止一处,那就需要你改一处就保存并且在虚拟机里试验能否正常运行 [ 虚拟机可是做免杀的必备工具,强烈建议你安装,因为你不可能就在自己的机器上运行木马吧?在说也不可能在你机器上同时安装 N 种杀软,那你机器不慢死,更重要还可以用来试验别人提供的软件有没有木马 ]
木马免杀技术之独门绝技

绝技一:快速搞定瑞星文件查杀
操作步骤:
第一步:用 OD 载入,来到程序的入口点。
第二步:把入口点的第一句 PUSH   EBP  改成 POP   EBP  然后保存就可以躲过瑞星的表面查杀。

绝技二:快速定位与修改瑞星内存特征码
原理:因为目前的内存查杀杀毒软件,只有瑞星才能威胁到我们的木马。也就是说只要搞定瑞星的内存查杀,那我们的木马在内存就畅通无阻了 . 但由于技术原因 , 目前瑞星的内存特征码在 90% 以上把字符串作为病毒特征码 ,
这样对我们的定位和修改带来了方便 .

操作步骤 :
第一步 : 首先用特征码定位器大致定位出瑞星内存特征码位置 .
第二步 : 然后用 UE 打开 , 找到这个大致位置 , 看看 , 哪些方面对应的是字符串 , 用 0 替换后再用内存查杀进行查杀 . 直到找到内存特征码后 , 只要把字符串的大小写互换就能达到内存免杀效果 .

绝技三 : 如何快速躲过诺顿的查杀
诺顿的查杀特点 : 大家有时候会发现 , 通过改特征码 , 加花指令 , 改内存特征码 , 等等 , 卡巴 , 江民 , 金山 , 瑞星都过了 , 但无论如何都过不了诺顿 , 这时候是不是感到很纳闷 . 其实诺顿特征码的定义和其它杀毒软件不一样 , 其它杀毒软件的特征码都在代码段而只有它把特征码定义在 PE 头文件里面 . 而在头文件里面 , 一般都用字符串作为病
毒特征码 , 知道了原理 , 就有下面的二种方法来应付 .

方法一 : 只要把头文件的字符串的大小字互换一下就可以搞定了 .
方法二 : 有二款压缩软件 WinUpack 和北斗星 , 经过他们的压缩 , 会把我们的木马程序的头文件改的面目全非 . 所以把我们的木马做好其它的杀毒软件的免杀后 , 再用这二款压缩软件的压缩就可以躲过诺顿的查杀 .

绝技四 : 一个不太通用的免杀方法
免杀方法一 : 把入口点第三句开始的几行 (20 字节内 ) 汇编代码移到零区域去执行 , 也达到一定的免杀效果 .

绝技五 : 用 VC++ 加了花指令后入口点下移法
操作过程 : 加花指令后 , 可以把入口点下移好一位 , 这样可以进一步达到免杀效果 .

. 木马免杀综合方案

修改内存特征码 --->

1> 入口点加 1 免杀法 1> 加压缩壳 1>---> 再加壳或多重加壳
2> 变化入口地址免杀法 2> 加生僻壳 --->2> 加壳的伪装 .
3> 加花指令法免杀法 3> 加压缩壳 3>---> 打乱壳的头文件
4> 修改文件特征码免杀法
以上免杀方法可以自由组合成多种不同的免杀方案。

. 常用免杀方案

1. 实例完全免杀方案一:
内存特征码修改+加 UPX 壳+秘密行动打乱壳的头文件。
所需工具: UPX 加壳工具,秘密行动
2. 完全免杀方案二:
内存特征码修改+加花指令+加压缩壳
3. 完全免杀方案三:
内存特征码修改+加压缩壳+加壳的伪装或多重加壳
4. 完全免杀方案四:
内存特征码修改+去头变换入口点地址+压缩壳
5. 完全免杀方案五:
内存特征码修改+修改各种杀毒软件特征码+压缩壳
6. 完全变态免杀方案六:
内存特征码修改+加花指令+去头变换入口点+加 UPX 壳+用秘密行动打乱壳的头
文件

. 解决加花指令后运行出错问题

分析其原因:我们加花指令时,一般都找代码段最后面的空白代码地方也就是所谓的零区域,然后把我们准备好的花指令填进去,然后一个跳转跳到入口点。但是我们木马的体积比较大,从入口点到最后面零区域的间隔比较远,所以从低部跳到头部由于间隔较远就非常容易出错。

新研究的免杀方法完美的解决了该问题:我把它取名为:中间过渡跳转法

实例演示:中间过渡跳转法来修改灰鸽子 V1.22 版或 VIP2.0 版。

中间过渡中转法实现原理:首先我们在代码段的中间位置 , 备份部分代码 , 然后把我们要添加的花指令写进去 , 写完后 , 再跳到零区域 , 在这个零区域填入刚才我们备份好的代码 . 填完后又要跳回填入花指令的生面 . 总之一句话 : 把花指令填在代码中间 , 被花指令覆盖的代码移到零区域去执行 , 然后又要跳回来 . 最后把入口点改成花指令的首地址 . 这样就算完事了。

该新的免杀技术优点 : 以前的花指令只能填到零区域 , 也就是说入口点一般都比较后面 , 所以有时会被卡巴查杀 , 但有了这种新方法后 , 程序入口点就变的非常灵活 , 可以定位在代码段的任何位置 , 每定位一个新的入口点就是一种新的免杀方案 . 而且这种方法对付卡巴也很有效 . 把入口点放到代码段的中间 , 是杀毒软件万万想不到的 , 所以免杀效果是最好的 . 同时他解决了由于跳转太远使程序无法运行的缺点。

免责声明:文章转载自《加壳与脱壳理论详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQLPLUS工具简介开启tp3.2.3的Admin模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

元数据MetaData

1.3.2 元数据 元数据是描述数据的数据。在CLR的上下文中,元数据表示由描述符组成的一套体系,这些操作符包括了在一个模块中被声明或引用的所有项。由于CLR模型是面向对象的,因此在元数据中描述的项是类和它们的成员,以及它们伴随着的特性、属性和关联。本节简单地介绍元数据,与原数据安全相关的内容会在后续章节中继续讲解,元数据的详细内容不在本书的论述范围之内。...

x86汇编指令(push,pop,call,ret)

举例这些指令做了什么? 1.push指令 pushl %eax将eax数值压入栈中,可分解为: subl $4, %esp ——> esp = esp - 4 movl %eax, (%esp) ——> *(int32_t *)esp = eax 2.popl指令 pop %eax将eax数值弹出栈,可分解为: movl (%esp),...

Intel 8086 常用汇编指令表

一、数据传输指令   它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.     MOV  传送字或字节.     MOVSX 先符号扩展,再传送.     MOVZX 先零扩展,再传送.     PUSH  把字压入堆栈.     POP  把字弹出堆栈.     PUSHA 把AX,CX,DX,BX,SP,BP,SI...

指令集 与 cpu

http://cache.baiducontent.com/c?m=9d78d513d9d437ab4f9d9e697c15c0116e4381132ba7a1020ca08448e2732d405016e3ac57530770a4d13b275fa0131aacb22173441e3df2de8d9f4aaaf3c87375cf3034074ddb1e0...

C表达式中的汇编指令

C 表达式中的汇编指令 asm 为 gcc 中的关键字,asm 表达式为在 C代码中嵌套汇编指令,该表达式只是单纯的替换出汇编代码,并不对汇编代码的含义进行解析。 asm 表达式有两种形式,第二种 asm-qualifiers 包含了 goto 语句。第一种形式为常见的用法,AssemblerTemplate 和 OutputOperands 必须存在,...

MIPS学习笔记(一)

写在前面   本文是根据"MIPS Assembly Language Programming CS50 Discussion and Project Book. Daniel J. Ellard"总结的。其中有大量的翻译文体以及个人的看法想法,当然,内容没有书上那么详尽。   这一章节会涉及MIPS的变量的声明、数据的输入输出、取地址、分支跳转语句(用以...