加壳与脱壳应用及实现

合集下载

基于流的加壳与脱壳技术实现

基于流的加壳与脱壳技术实现

F I n — ej Yo g se g Hu a E g d ,u n —hn , Mi To ( n f gCo Do g n mmec l hc eh i l ne o L Sia 4 0 1 Chn) e ri ieT c nc t f aVe l a Ce r DF , h n4 20 , ia y
之后 , 附加 代 码 首 先 执 行 , 查 密 码 是 否 正 确 , 果 正 确 则 转 入 原 来 的 程 序 中执 行 。否 则 , 检 如 则退 出程 序 。
的 基 类 , 能 直 接 生 成 对 象 。在 具 体 的 应 用 中, 要 使 用 它 的 子 孙 类 :FlSr m 文件 流;Sr g t a : 符 串流 ;Me oyt a 内 不 主 T i ta e e T tnSr m 字 i e T m rS em r 存 流 ;R sucSra 资源 文件 流等 。本 文 就 是 利 用 内存 流 对 应 用 程 序 进 行 加 壳脱 壳 的 。T m rSra 类 的 有 关方 法 主要 有 : T eo ret m e Me oyt m e R a 法 实 现 将 数 据 从 内存 流 中读 出 ; ie 法 实 现 将 数 据 写 入 内存 流 中 ;ek方 法 从 内 存 流 中读 取 指 针 的移 动 ; oy rm ed方 Wr 方 t Se C pFo
软 件 加 密 技 术 是 软 件 保 护 的 重 要 手 段 。这 些 加 密 措 施 给 非 法 拷 贝 或非 法 使 用 造 成 一 定 的 障 碍 。 某 种 程 度 上 增 加 了 破解 难 度 。 在 因现 在 互 联 网 的普 及 , 种 破 解 软 件 可 以从 网上 轻 易 下 载 , 增 加 破 解 难 度 , 写 自己 的加 密程 序是 很 有 必要 的 。 现 在 加 密 程 序 的 各 为 编 重 要 手 段 之 一 就 是 对 程 序 加 壳 。 果 加 壳 程 序 使 用 压 缩 算 法 还 可 以 减少 程序 的体 积 。 止 破解 的人 非 法 修 改 程 序 。 文 介 绍 一 种 利 如 防 本 用 流 技 术 的加 壳 脱 壳 方 法 来 实 现 对 软 件 的 加 密 保 护 。

脱壳笔记——精选推荐

脱壳笔记——精选推荐

【脱壳一般流程】查壳(PEID、FI、PE-SCAN)--->寻找OEP(OD)--->脱壳/Dump(LordPE、PeDumper、OD自带的脱壳插件、PETools)--->修复(Import REConstructor)【工具介绍】1、查壳PEID--功能强大的侦壳工具,自带脱壳插件(但是,效果不怎么样)工作原理:核心是userdb.txt(大家看看就完全明白了)[通过壳的入口特征码进行辨认]使用方法:可以拖放、也可以把PEID添加到右键菜单里面去FI--功能强大的侦壳工具,DOS界面。

使用方法:可以拖放、可以使用DO S命令行2、寻找OEPollydbg的四个区域左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值.右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Ef lag的值,对于寄存器,指令执行后发生改变的寄存器会用红色突出显示.cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态.左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息.右下角的是当前堆栈情况,还有注释啊.几个经常使用的快捷键F2:在需要的地方下断点(INT3型断点)F3:选择打开程序F4:运行到所选择的那一行F7:单步进入F8:单步跟踪F9:执行程序(运行程序)其中要特别讲一下3个F9的区别和作用:根据Ollydbg.hlp的中文翻译Shif t+F9 -与F9相同,但是如果被调试程序发生异常而中止,调试器会首先尝试执行被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。

Ctrl+F9 - 执行直到返回,跟踪程序直到遇到返回,在此期间不进入子函数也不更新CPU数据。

因为程序是一条一条命令执行的,所以速度可能会慢一些。

按Esc键,可以停止跟踪。

Alt+F9 - 执行直到返回到用户代码段,跟踪程序直到指令所属于的模块不在系统目录中,在此期间不进入子函数也不更新CPU 数据。

如何将EXE安装文件脱壳和破解

如何将EXE安装文件脱壳和破解

如何将EXE安装文件脱壳和破解--之解决办法步骤1 检测壳壳的概念:所谓“壳”就是专门压缩的工具。

这里的压缩并不是我们平时使用的RAR、ZIP 这些工具的压缩,壳的压缩指的是针对exe、com、和dll等程序文件进行压缩,在程序中加入一段如同保护层的代码,使原程序文件代码失去本来面目,从而保护程序不被非法修改和反编译,这段如同保护层的代码,与自然界动植物的壳在功能上有很多相似的地方,所以我们就形象地称之为程序的壳。

壳的作用: 1.保护程序不被非法修改和反编译。

2.对程序专门进行压缩,以减小文件大小,方便传播和储存。

壳和压缩软件的压缩的区别是压缩软件只能够压缩程序而经过壳压缩后的exe、com和dll等程序文件可以跟正常的程序一样运行下面来介绍一个检测壳的软件 PEID v0.92 这个软件可以检测出 450种壳新版中增加病毒扫描功能,是目前各类查壳工具中,性能最强的。

另外还可识别出EXE文件是用什么语言编写的VC++、Delphi、VB或Delphi等。

支持文件夹批量扫描我们用PEID对easymail.exe 进行扫描找到壳的类型了 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 说明是UPX的壳下面进行步骤2 脱壳对一个加了壳的程序,去除其中无关的干扰信息和保护限制,把他的壳脱去,解除伪装,还原软件本来的面目。

这个过程就叫做脱壳。

脱壳成功的标志脱壳后的文件正常运行,功能没有损耗。

还有一般脱壳后的文件长度都会大于原文件的长度。

即使同一个文件,采用不同的脱壳软件进行脱壳,由于脱壳软件的机理不通,脱出来的文件大小也不尽相同。

关于脱壳有手动脱壳和自动脱壳自动脱壳就是用专门的脱壳机脱很简单按几下就 OK了手动脱壳相对自动脱壳需要的技术含量微高这里不多说了 UPX是一种很老而且强大的壳不过它的脱壳机随处就能找到 UPX本身程序就可以通过 UPX 文件名-d 来解压缩不过这些需要的命令符中输入优点方便快捷缺点DOS界面为了让大家省去麻烦的操作就产生了一种叫 UPX SHELL的外壳软件 UPX SHELL v3.09 UPX 外壳程序!目的让UPX的脱壳加壳傻瓜化注:如果程序没有加壳那么我们就可以省去第二步的脱壳了,直接对软件进行分析了。

软件加壳技术及实现

软件加壳技术及实现

软件加壳技术及实现软件加壳是一种常见的软件保护技术,通过将原始的可执行文件进行加密和封装,增加软件的安全性和难度,提高软件的抵抗逆向工程、防止破解的能力。

下面将介绍软件加壳技术的原理及实现方法。

1.软件加壳原理软件加壳的基本原理是将原始可执行文件进行加密处理,生成一个加密后的壳程序,再将原始可执行文件嵌入到壳程序中,并根据可执行文件的特征信息进行相应的处理和解密,最终执行原始程序。

具体的加壳流程如下:(1)加密原始可执行文件:使用对称加密算法(如AES、DES等)对原始可执行文件进行加密处理,使其不可读。

(2)生成壳程序:编写一个壳程序,包括解密原始可执行文件、加载和执行原始程序等功能。

壳程序本身一般是已经加密的,以防止被分析破解。

(3)将原始可执行文件嵌入到壳程序中:将加密后的原始可执行文件隐藏在壳程序中,一般是作为一个资源或数据块存在。

(4)运行壳程序:用户双击运行壳程序,壳程序首先进行解密处理,获取原始可执行文件,然后进行加载和执行。

2.软件加壳实现方法(1)静态加壳:在编译链接阶段对可执行文件进行加壳处理。

静态加壳可以通过修改可执行文件的文件头信息和重定位表等方式实现。

(2)动态加壳:在运行时对可执行文件进行加壳处理。

动态加壳使用的是运行时加载原始程序的方式,可以提高软件的安全性,但也会增加运行的开销。

3.加壳脱壳工具目前市面上有很多成熟的加壳脱壳工具可供使用,如UPX、ASPack、FSG等。

这些工具可以方便地对可执行文件进行加壳和脱壳操作,但也容易被黑客用来破解软件。

总结:软件加壳技术是一种常用的软件保护手段,通过加密和封装原始可执行文件,增加软件的安全性和防破解能力。

加壳脱壳工具能够方便地实现对可执行文件的加壳和脱壳操作,但需要注意合理的加密算法和技术选型,以提高软件的安全性。

通达信主程序脱壳全记录(图文)

通达信主程序脱壳全记录(图文)

通达信主程序脱壳全记录(图文)UPX加壳入口第一句是PUSHAD;出口关键字POPAD;手动脱壳时,用Olldbg载入程序,脱壳程序里面会有好多循环。

对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。

第一步,先侦壳,侦壳工具为peid0.92,侦测结果如下:(图000)(图000)原来是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo加的壳,UPX是一种压缩壳,强度很低。

第二步,我们请出调试利器:Ollydbg1.09,载入程序,出现提示:用F8进行单步跟踪,对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈那就是设置“断点”。

见上图(图004 005 006 007)下走。

(后面碰到类似的情况,处理方法一样。

)一直往下找,直到发现“POPAD”时,在其地址处设置“断点”―――“运行到选定位置F4”,然后继续F8往下走。

(图008 009)下走。

在走几行,就会出现上图画面,“00622838A”55 DB55 CHAR‘U’―――这是通达信主程序代码的真点击右键调出菜单,选择“用OllyDump脱壳调试进程”。

(图012)=========下图为重新载入已脱壳的新文件(图015)==========用“PEID”检测,提示已无壳。

(图016),但该文件还不能正常启动,因为“输入表”尚未修复。

第三步,就是修复程序的输入表。

使用importREC,这是最好用的输入表修复工具。

1、运行加壳的原版TDX主程序,启动importREC程序,(图018)在“附加一个活动进程”中选择“D:\通达信分析家l论坛版本\TDX.EXE”。

2、在“所需的IAT信息”中的“OEP”填入“0022838A”,点击“自动搜索”按钮,出现下图提示:(图019)3、点击“获取输入表”按钮:(图020)4、点击“修复转存文件”按钮,选择前面已完成脱壳的新文件,程序会自动生成一个新的“******_。

c++ 加壳原理

c++ 加壳原理

c++ 加壳原理
加壳原理是指在应用程序运行之前,把应用程序的代码内核打包装入一个程序,从而形成一个包含内核的壳程序,在运行壳程序的时候,壳程序完成这样一系列的工作:解压出内核,校验合法性,提供程序运行环境以及防护等等,也就是说运行加壳程序实际上是运行加壳后的程序,而不是加壳前的程序。

使用 C++ 语言实现加壳原理,需要考虑以下几个步骤:
1、把目标程序的二进制可执行代码压缩到一个文件中。

2、在加壳程序中实现解压缩,把压缩的文件保存到加壳程序的内存中。

3、实现程序的校验,确保程序内容完整。

4、实现程序的加载,以及提供程序运行环境等等。

5、实现程序的防护,避免程序被破解。

C++ 语言实现加壳原理的函数步骤如下:
int main()
{
// 1.加载壳
char *pFileData = LoadShell();
// 2.解压壳
UnzipShell(pFileData);
// 3.校验文件
bool bIsValid = VerifyShell(pFileData);
// 4.提供程序运行环境
PrepareRunEnvironment();
// 5.运行程序
RunShell(pFileData);
// 6.防护程序
ProtectShell(pFileData);
return 0;
}
以上是 C++ 语言实现加壳原理的大致步骤,需要根据实际的需要,完善的实现加壳的每个环节。

软件加壳脱壳技术教程

软件加壳脱壳技术教程
附加一点内容
一.壳的概念
作者编好软件后,编译成exe可执行文件
1.有一些版权信息需要保护起来,不想让别人
随便改动,如作者的姓名等
2.需要把程序搞的小一点,从而方便使用
于是,需要用到一些软件,他们能将exe可执行文件压缩,
实现上述两个功能,这些软件称为加壳软件或压缩软件.
它不同于一般的winzip,winrar等压缩软件.
好,我们先从一个基本的Upx壳入手。
本地下载
首先必须的工具要准备好,
查壳工具
Peid0.91,Fileinfo,Language2000,File Scanner等。
查入口工具。
Peid0.91首推,冲击波(9X)系统专用,Asloader,自己的感觉,程序跨段跳跃点。
脱壳工具。
Ollydbg首选,LoadPe,PEditor,ProcDump等,够用了。
傻瓜式软件,运行后选取待侦测壳的软件即可(open)
脱壳教程2:手动脱壳入门第一篇
【使用工具】Ollydbg1.10b,ImportREC1.6F
【破解平台】Win2000/XP
前言,作者写这篇文章只是举个例子,希望读者能够举一反三,看清思路.
本论坛中破解高手很多,不会手动脱壳者人数仍然不少。有人会说,我有Unaspack,Caspr,ProcDump等众多脱壳工具,不会手动脱壳用工具脱就可以了。但有部分壳如Asprotect1.23Rc4,本论坛高手仙剑(将自己加密壳伪装成C++),有漏洞,用Peid查壳,Ep区段写有Xj,用Od载入提示有壳,更有甚一些软件如大嘴日语加了四层壳,这些都是工具无法脱壳的。随着加密壳的不断出现,基本壳都不会,高版本的加密壳以后脱壳盲根本无从入手。所以,手动脱壳Crack必修。

加壳 脱壳代码

加壳 脱壳代码

加壳和脱壳通常是在软件工程中使用的术语,它们涉及到对二进制代码进行加密和解密。

加壳:这是将代码进行加密的过程。

当代码被加壳时,它变得难以阅读和理解。

这可以防止未经授权的人查看或修改代码。

加壳后的代码通常会以一种特殊的方式执行,这使得原始代码在运行时才能被解密并执行。

脱壳:这是将加壳的代码进行解密的过程。

当你想查看或修改加壳的代码时,你需要进行脱壳。

脱壳后的代码通常是原始代码,可以被阅读和理解。

以下是一个简单的Python加壳和脱壳的示例:加壳:```pythondef obfuscate_code(code):encrypted_code = ""for char in code:encrypted_code += chr(ord(char) ^ 42) # XOR with 42 to encrypt the codereturn encrypted_codeoriginal_code = "print('Hello, World!')"encrypted_code = obfuscate_code(original_code)exec(encrypted_code) # This will run the encryptedcode```脱壳:```pythondef deobfuscate_code(encrypted_code):decrypted_code = ""for char in encrypted_code:decrypted_code += chr(ord(char) ^ 42) # XOR with 42 to decrypt the codereturn decrypted_codeencrypted_code = "print('Hello, World!')" # This is the encrypted code from the previous exampledecrypted_code = deobfuscate_code(encrypted_code)exec(decrypted_code) # This will run the decrypted code, which will print "Hello, World!"```请注意,这只是一个简单的示例,实际的加壳和脱壳技术要复杂得多,并且可以包括更高级的加密和混淆技术。

Android中的Apk的加固(加壳)原理解析和实现

Android中的Apk的加固(加壳)原理解析和实现

Android中的Apk的加固(加壳)原理解析和实现一、前言今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理。

现阶段。

我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服。

虽然我们混淆,做到native层,但是这都是治标不治本。

反编译的技术在更新,那么保护Apk的技术就不能停止。

现在网上有很多Apk加固的第三方平台,最有名的应当属于:爱加密和梆梆加固了。

其实加固有些人认为很高深的技术,其实不然,说的简单点就是对源Apk进行加密,然后在套上一层壳即可,当然这里还有一些细节需要处理,这就是本文需要介绍的内容了。

二、原理解析下面就来看一下Android中加壳的原理:我们在加固的过程中需要三个对象:1、需要加密的Apk(源Apk)2、壳程序Apk(负责解密Apk工作)3、加密工具(将源Apk进行加密和壳Dex合并成新的Dex)主要步骤:我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk.他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。

在这个过程中我们可能需要了解的一个知识是:如何将源Apk和壳Apk进行合并成新的Dex 这里就需要了解Dex文件的格式了。

下面就来简单介绍一下Dex文件的格式主要来看一下Dex文件的头部信息,其实Dex文件和Class文件的格式分析原理都是一样的,他们都是有固定的格式,我们知道现在反编译的一些工具:1、jd-gui:可以查看jar中的类,其实他就是解析class文件,只要了解class文件的格式就可以2、dex2jar:将dex文件转化成jar,原理也是一样的,只要知道Dex文件的格式,能够解析出dex文件中的类信息就可以了当然我们在分析这个文件的时候,最重要的还是头部信息,应该他是一个文件的开始部分,也是索引部分,内部信息很重要。

壳是什么

壳是什么

壳是什么?脱壳又是什么?这是很多经常感到迷惑和经常提出的问题,其实这个问题一点也不幼稚。

当你想听说脱壳这个名词并试着去了解的时候,说明你已经在各个安全站点很有了一段日子了。

下面,我们进入“壳”的世界吧。

一、金蝉脱壳的故事我先想讲个故事吧。

那就是金蝉脱壳。

金蝉脱壳属于三十六计中的混战计。

金蝉脱壳的本意是:寒蝉在蜕变时,本体脱离皮壳而走,只留下蝉蜕还挂在枝头。

此计用于军事,是指通过伪装摆脱敌人,撤退或转移,以实现我方的战略目标的谋略。

稳住对方,撤退或转移,决不是惊慌失措,消极逃跑,而是保留形式,抽走内容,稳住对方,使自己脱离险境达到己方战略目标,己方常常可用巧妙分兵转移的机会出击另一部分敌人。

三国时期,诸葛亮六出祁山,北伐中原,但一直未能成功,终于在第六次北伐时,积劳成疾,在五丈原病死于军中。

维遵照诸葛亮的吩咐,在诸葛亮死后,秘不发丧,对外严密封锁消息。

他带着灵柩,秘密率部撤退。

司马懿派部队跟踪追击蜀军。

姜维命工匠仿诸葛亮摸样,雕了一个木人,羽扇纶巾,稳坐车中。

并派杨仪率领部分人马大张旗鼓,向魏军发动进攻。

魏军远望蜀军,军容整齐,旗鼓大张,又见诸葛亮稳坐车中,指挥若定,不知蜀军又耍什么花招,不敢轻举妄动。

司马懿一向知道诸葛亮“诡计多端”,又怀疑此次退兵乃是诱敌之计,于是命令部队后撤,观察蜀军动向。

姜维趁司马懿退兵的大好时机,马上指挥主力部队,迅速安全转移,撤回汉中。

等司马懿得知诸葛亮已死,再进兵追击,为时已晚。

相信这个故事,大家在大型连续剧《三国演义》里已经看过了。

呵呵,只是没有理解得这么深入罢了!而在黑客入侵技术中,金蝉脱壳则是指:删除系统运行日志攻击者攻破系统后,常删除系统运行日志,隐藏自己的痕迹...呵呵二、壳,脱壳,加壳在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。

自然界中植物用它来保护种子,动物用它来保护身体等等。

同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。

壳,加壳,脱壳,介绍壳的一些基本常识

壳,加壳,脱壳,介绍壳的一些基本常识

壳,加壳,脱壳,介绍壳的一些基本常识免杀入门 2009-08-06 16:58 阅读7 评论0 字号:大大中中小小在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。

它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。

就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。

由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。

就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。

从功能上抽象,软件的壳和自然界中的壳相差无几。

无非是保护、隐蔽壳内的东西。

而从技术的角度出发,壳是一段执行于原始程序前的代码。

原始程序的代码在加壳的过程中可能被压缩、加密……。

当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。

软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。

关于“壳”以及相关软件的发展历史请参阅吴先生的《一切从“壳”开始》。

(一)壳的概念作者编好软件后,编译成exe可执行文件。

1.有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。

2.需要把程序搞的小一点,从而方便使用。

于是,需要用到一些软件,它们能将exe可执行文件压缩,3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。

实现上述功能,这些软件称为加壳软件。

(二)加壳软件最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK ;PETITE NEOLITE (三)侦测壳和软件所用编写语言的软件因为脱壳之前要查他的壳的类型。

1.侦测壳的软件fileinfo.exe 简称fi.exe(侦测壳的能力极强)。

2.侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒),推荐language2000中文版(专门检测加壳类型)。

给木马穿个马甲——木马加壳与脱壳

给木马穿个马甲——木马加壳与脱壳
1什 么 是 加 壳 .
所 谓 加 壳 。其 实 是 指 利 用 特 殊 的算 法 , 对
E E、 L X D L文 件 里 的资 源 进 行 压 缩 的 方 法 , 个 这
压 缩 之 后 的 文 件 可 以 独 立 运 行 . 压 过 程 完 全 解 隐 蔽 , 在 内存 中 完 成 。加 壳 一 般 有 两 种 用 途 : 都
但 是 , 果 是 对 恶 意 程 序 进 行 加 壳 后 。 般 就 如 一
不要点击了, 否则善后工作将会很繁琐。 如图6
所示。
( ) “ 开 文 件 ” 面 中 , 准 备 进 行 加 3在 打 界 将 壳 的 程 序 添 加 进 来 ,这 里 添 加 的 是 压 缩 程 序
Wirr 如 图 4所 示 。 na,
是 如何 实 现 加 壳 的 呢 ?木 马 加 壳 的技 术 实 际 上
很 简 单 , 当 一 个 服 务 器 端 的 E E 程 序 生 成 好 X 后 , 可 以 很 轻 松 的 利 用 A P C U X、 S A K、 P WW. PC A K等 这 些 第 三 方 的程 序 进 行 加 壳 操 作 。 下 面 ,让 我 们 来 看 看 如 何 使 用 A P c S a k汉 化 版 对
反 , 马 会 采 取 种 种 手 段 , 量 不 让 大 家识 别 出 来 , 中加 壳 就 是 一 种 常 用 的 方 式 , 面 我 木 尽 其 下 们 就 看 看 如 何 实 现 木 马 的 加 壳 . 何 检 测 木 马是 否 被 加 壳 以 及 如 何 防 范 ! 如


穿马 甲——木马加壳的实现
( 在 完 成 软 件 的 添 加 后 。 立 即 跳 转 到 4) 将

软件加壳、脱壳基础介绍

软件加壳、脱壳基础介绍

软件加壳、脱壳基础介绍什么是加壳加壳的全称应该是可执⾏程序资源压缩,压缩后的程序可以直接运⾏。

加壳,顾名思义,就是给⼀个东西加上⼀个壳,只不过这⾥是程序。

就好⽐这⼤⾃然中的种⼦⼀样,为了保护⾃⼰,有⼀层壳,要想看到⾥⾯的东西,就要剥开这层壳。

加壳的另⼀种常⽤的⽅式是在⼆进制的程序中植⼊⼀段代码,在运⾏的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的⽬的是隐藏程序真正的OEP(⼊⼝点,防⽌被破解)。

⼤多数病毒就是基于此原理。

加壳的程序需要阻⽌外部程序或软件对加壳程序本⾝的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运⾏。

这种技术也常⽤来保护软件版权,防⽌软件被破解。

但对于病毒,加壳可以绕过⼀些杀毒软件的扫描,从⽽实现它作为病毒的⼀些⼊侵或破坏的⼀些特性。

加壳的⼯具分为压缩壳和加密壳:* UPX ASPCAK TELOCK PELITE NSPACK … ** ARMADILLO ASPROTECT ACPROTECT EPE SVKP …*什么是脱壳 脱壳就是将外⾯的保护程序脱掉,看到⾥⾯的程序。

对于有壳的程序,每次程序的⼊⼝点总是从壳开始,,这个⼊⼝点是EP,那么源程序的⼊⼝点是OEP,壳将真正的OEP隐藏了,我们脱壳就是修改程序的⼊⼝点。

如何脱壳 如果没有基础的汇编知识,那就查出相应的壳,⽤相应的脱壳机进⾏脱壳,那如果,脱壳机⽆法脱呢?⼿动脱壳!基础知识1.PUSHAD (压栈)代表程序的⼊⼝点,2.POPAD (出栈)代表程序的出⼝点,与PUSHAD想对应,⼀般找到这个OEP就在附近3.OEP:程序的⼊⼝点,软件加壳就是隐藏了OEP(或者⽤了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以⽴刻脱壳。

脱壳的⽅法清单⽅法⼀:单步跟踪法1.⽤OD载⼊,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。

也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下⼀句代码处按F4(或者右健单击代码,选择断点——>运⾏到所选)4.绿⾊线条表⽰跳转没实现,不⽤理会,红⾊线条表⽰跳转已经实现!5.如果刚载⼊程序,在附近就有⼀个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运⾏到某个CALL程序就运⾏的,就在这个CALL中F7进⼊7.⼀般有很⼤的跳转(⼤跨段),⽐如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的⼀般很快就会到程序的OEP。

脱壳知识——精选推荐

脱壳知识——精选推荐

脱壳知识什么是壳因为许多软件为了保护⾃⼰的软件不被和修改,通常会加壳,代码加密,增加破解的难度,从⽽达到保护软件的⽬的。

⾸先⼤家应该先明⽩“壳”的概念。

在⾃然界中,我想⼤家对壳这东西应该都不会陌⽣了,植物⽤它来保护种⼦,动物⽤它来保护⾝体等等。

同样,在⼀些计算机软件⾥也有⼀段专门负责保护软件不被⾮法修改或反编译的程序。

它们⼀般都是先于程序运⾏,拿到控制权,然后完成它们保护软件的任务。

举个例⼦,核桃⼤家都知道吧,想要吃到⾥⾯的⾁,就必须得先打开核桃外⾯那⼀层坚硬的壳,同样,外⾯想要看到⼀个程序的内部逻辑代码,就要脱掉外⾯的⼀层壳。

程序作者在编好软件后,编译成exe可执⾏⽂件。

有⼀些版权信息需要保护起来,不想让别⼈随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采⽤加壳来进⾏保护。

需要把程序搞的⼩⼀点,缩⼩程序的体积,减少内存容量,从⽽⽅便使⽤。

于是,需要⽤到⼀些软件,它们能将exe可执⾏⽂件压缩,在⿊客界给⽊马等软件加壳以躲避杀毒软件。

实现上述功能,这些称为加壳。

⾃然有加壳就会有脱壳。

为什么要脱壳脱壳是为了能够学习⼀个软件的程序设计逻辑,达到我们想要的⽬的。

如果不脱壳,我们就不能够了解软件的逻辑,也就⽆法得到源代码,也就⽆法破解⼀个软件,也就不会有这篇⽂章了。

我们拿到⼀个软件想要了解它的编程逻辑,那么我们就需要对它进⾏反汇编,当然有壳,也必须先脱壳(有些软件也可以不脱壳破解)。

如果我们需要对⼀个病毒或者⽊马进⾏分析,也是需要脱壳的,如果病毒⽊马不加壳,早被杀毒软件杀掉了。

⼀些常见的壳1、aspack壳2.caspr2、upx壳3、PEcompact壳等等...我们要脱壳,就需要⽤到⼀些汇编的指令,这是必须的,如果不懂汇编指令的话,那么就⽆法进⾏软件的脱壳了。

下⾯我就来介绍破解需要的⼀些主要的汇编指令⼀、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.1. 通⽤数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压⼊堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压⼊堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压⼊堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器⾥字节的顺序XCHG 交换字或字节.( ⾄少有⼀个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG ⽐较并交换操作数.( 第⼆个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第⼀个操作数⾥ )XLAT 字节查表转换.── BX 指向⼀张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )2. 输⼊输出端⼝传送指令.IN I/O端⼝输⼊. ( 语法: IN 累加器, {端⼝号│DX} )OUT I/O端⼝输出. ( 语法: OUT {端⼝号│DX},累加器 )输⼊输出端⼝由⽴即⽅式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. ⽬的地址传送指令.LEA 装⼊有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送⽬标指针,把指针内容装⼊DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送⽬标指针,把指针内容装⼊ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送⽬标指针,把指针内容装⼊FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送⽬标指针,把指针内容装⼊GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送⽬标指针,把指针内容装⼊SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装⼊AH.SAHF 标志寄存器传送,把AH内容装⼊标志寄存器.PUSHF 标志⼊栈.POPF 标志出栈.PUSHD 32位标志⼊栈.POPD 32位标志出栈.⼆、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的⼗进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04SHL AX,CL四、串指令─────────────────────────────────────── DS:SI 源串段寄存器 :源串变址.ES:DI ⽬标串段寄存器:⽬标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表⽰重复操作中SI和DI应⾃动增量; 1表⽰应⾃动减量. Z标志⽤来控制扫描或⽐较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串⽐较.( CMPSB ⽐较字符. CMPSW ⽐较字. )SCAS 串扫描.把AL或AX的内容与⽬标串作⽐较,⽐较结果反映在标志位.LODS 装⼊串.把源串中的元素(字或字节)逐⼀装⼊AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或⽐较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或⽐较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令─────────────────────────────────────── 1>⽆条件转移指令 (长转移)JMP ⽆条件转移指令CALL 过程调⽤RET/RETF过程返回.2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不⼩于或不等于时转移.JAE/JNB ⼤于或等于转移.JB/JNAE ⼩于转移.JBE/JNA ⼩于或等于转移.以上四条,测试⽆符号整数运算的结果(标志C和Z).JG/JNLE ⼤于转移.JGE/JNL ⼤于或等于转移.JL/JNGE ⼩于转移.JLE/JNG ⼩于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC ⽆进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯⽚引线TEST为⾼电平时使CPU进⼊等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置⽅向标志位.CLD 清⽅向标志位.STI 置中断允许位.CLI 清中断允许位.其实上⾯我们⽤到的也就主要有⼀些赋值指令和⼀些跳转指令⽽已,⼤部分我们⽬前是⽤不到的。

Dex加壳解壳原理

Dex加壳解壳原理

Android Dex文件加壳原理:1、加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载3、源程序:需要加壳处理的被保护代码根据解壳数据在解壳程序DEX文件中的不同分布,本文将提出两种Android Dex加壳的实现方案。

加壳程序工作流程:1、加密源程序APK文件为解壳数据2、把解壳数据写入解壳程序Dex文件末尾,并在文件尾部添加解壳数据的大小。

3、修改解壳程序DEX头中checksum、signature 和file_size头信息。

4、修改源程序AndroidMainfest.xml文件并覆盖解壳程序AndroidMainfest.xml文件。

解壳DEX程序工作流程:1、读取DEX文件末尾数据获取借壳数据长度。

2、从DEX文件读取解壳数据,解密解壳数据。

以文件形式保存解密数据到a.APK文件3、通过DexClassLoader动态加载a.apk。

当数据在解壳文件头中时,加壳程序工作流程:1、加密源程序APK文件为解壳数据2、计算解壳数据长度,并添加该长度到解壳DEX文件头末尾,并继续解壳数据到文件头末尾。

(插入数据的位置为0x70处)3、修改解壳程序DEX头中checksum、signature、file_size、header_size、string_ids_off、type_ids_off、proto_ids_off、field_ids_off、 method_ids_off、class_defs_off和data_off相关项。

分析map_off 数据,修改相关的数据偏移量。

4、修改源程序AndroidMainfest.xml文件并覆盖解壳程序AndroidMainfest.xml文件。

解壳DEX程序工作流程:1、从0x70处读取解壳数据长度。

2、从DEX文件读取解壳数据,解密解壳数据。

以文件形式保存解密数据到a.APK3、通过DexClassLoader动态加载a.APK。

elf程序加壳原理

elf程序加壳原理

elf程序加壳原理
ELF 程序加壳原理主要是通过在原始 ELF 可执行文件的代码段或数据段中增
加额外的代码,来实现对程序的保护和安全加固。

加壳操作通常包括以下几个步骤:
1. 选择合适的壳程序:开发者会先选择一个合适的壳程序,用来对原始 ELF
可执行文件进行加密或混淆操作。

2. 加密原始程序:通过对原始程序的代码和数据进行加密,使得黑客难以对程
序进行分析和逆向工程。

3. 插入解密代码:在加密后的程序中插入解密代码,用于在运行时解密程序的
代码和数据,以便程序正常运行。

4. 修改入口点:修改程序的入口点,使其先执行解密代码来解密程序,然后再
执行原始程序逻辑。

5. 防调试与防破解:还可以在壳程序中增加一些反调试和反破解的功能,增强
程序的安全性。

ELF 程序加壳原理就是在原始程序的基础上加入额外的代码和逻辑,通过加密
和混淆来保护程序的安全性,防止被恶意利用。

ZProtect加壳程序脱壳重点笔记

ZProtect加壳程序脱壳重点笔记

ZProtect加壳程序脱壳笔记之前写了一种ZPIAT加密方式分析,这里继续接着前面文章,写一种ZProtect 加壳程序完整脱壳笔记。

目的程序是一种用ZP二次加密程序,也许是某位大侠作品,小弟这里只是随手拿来做个演示,有什么冒犯之处,敬请见谅。

目的程序在附件中。

运营一下程序,程序提示只能运营三次,每次只能运营十分钟,看来这个是要先干掉这个对话框再说了~ 写个lpk hook DialogBoxIndirectParam这个api 然后返回232C 即可。

膜拜一下卡卡大大强大代码。

把这个lpk放在软件目录下就没有注册框了。

当前可以OD载入了~1,到OEP去上次我分析里面说了,如何最快到达OEP方式就是用ESP定律。

过了pushad后来,下Hr ESP 然后就到了。

查找FF25 发现壳没有解决IAT调用代码,只是对IAT进行了加密,看来这个应当是1.4.0-1.4.4之间某个版本。

2,修复IAT通过查找FF25 很容易拟定IAT位置。

1.005A3190 00641378 店铺宝贝.006413782.005A3194 00641798 店铺宝贝.006417983.005A3198 00641B10 店铺宝贝.00641B104.005A319C 00E300005.005A31A0 00E3000E6.005A31A4 00641048 店铺宝贝.006410487.005A31A8 006411E0 店铺宝贝.006411E0复制代码下面是一某些IAT,可以看出IAT解决方式有两种。

修复时候也要分两种状况进行修复。

依照我上篇分析文章结论,两种加密方式最后是殊途同归:push 提取码调用获取函数序号call按照隐藏IAT基址+序号方式来寻址。

下面看看两种不同方式提取码和call调用方式。

方式一00406A54 - FF25 64325A00 jmp dword ptr ds:[5A3264] ds:[005A3264]=00E301421.00E30142 50 push eax2.00E30143 60 pushad3.00E30144 68 7695B4AD push ADB495764.00E30149 E8 310DE7FF call 00CA0E7F5.00CA0E7F A1 7448CA00 mov eax,dword ptr ds:[CA4874]6.00CA0E84 8078 0C 00 cmp byte ptr ds:[eax+C],07.00CA0E88 74 57 je short 00CA0EE18.00CA0E8A FF15 2810C900 call dword ptr ds:[C91028] ;kernel32.GetTickCount9.00CA0E90 8BC8 mov ecx,eax10.00CA0E92 2B0D 4046CA00 sub ecx,dword ptr ds:[CA4640]11.00CA0E98 81F9 88130000 cmp ecx,138812.00CA0E9E 76 41 jbe short 00CA0EE113.00CA0EA0 FF35 4446CA00 push dword ptr ds:[CA4644]14.00CA0EA6 A3 4046CA00 mov dword ptr ds:[CA4640],eax15.00CA0EAB FF15 5810C900 call dword ptr ds:[C91058] ;kernel32.ResumeThread16.00CA0EB1 833D 944ECA00 0>cmp dword ptr ds:[CA4E94],317.00CA0EB8 7C 08 jl short 00CA0EC218.00CA0EBA 6A 00 push 019.00CA0EBC FF15 1C10C900 call dword ptr ds:[C9101C] ;kernel32.ExitProcess20.00CA0EC2 803D B848CA00 0>cmp byte ptr ds:[CA48B8],021.00CA0EC9 74 08 je short 00CA0ED322.00CA0ECB FF05 944ECA00 inc dword ptr ds:[CA4E94]23.00CA0ED1 EB 07 jmp short 00CA0EDA24.00CA0ED3 8325 944ECA00 0>and dword ptr ds:[CA4E94],025.00CA0EDA C605 B848CA00 0>mov byte ptr ds:[CA48B8],126.00CA0EE1 56 push esi27.00CA0EE2 57 push edi28.00CA0EE3 FF7424 0C push dword ptr ss:[esp+C]29.00CA0EE7 FF15 5C46CA00 call dword ptr ds:[CA465C]30.00CA0EED 8BF8 mov edi,eax31.00CA0EEF BE 644ECA00 mov esi,0CA4E6432.00CA0EF4 E8 6941FFFF call 00C9506233.00CA0EF9 8B00 mov eax,dword ptr ds:[eax]34.00CA0EFB 5F pop edi35.00CA0EFC 894424 2C mov dword ptr ss:[esp+2C],eax36.00CA0F00 5E pop esi37.00CA0F01 C2 0400 retn 438.00E3014E 61 popad39.00E3014F C3 retn复制代码方式二00406A64 /FF25 5C325A00 jmp dword ptr ds:[5A325C] ds:[005A325C]=00641A44 (店铺宝贝.00641A44)1.00641A44 68 6B95B4AD push ADB4956B-----------------------这个就是提取码了~2.00641A49 /E9 5E070000 jmp 店铺宝贝.006421AC3.006421AC - E9 17F26500 jmp 00CA13C84.00CA13C8 60 pushad5.00CA13C9 FF7424 20 push dword ptr ss:[esp+20]6.00CA13CD E8 ADFAFFFF call 00CA0E7F7.00CA0E7F A1 7448CA00 mov eax,dword ptr ds:[CA4874]8.00CA0E84 8078 0C 00 cmp byte ptr ds:[eax+C],09.00CA0E88 74 57 je short 00CA0EE110.00CA0E8A FF15 2810C900 call dword ptr ds:[C91028] ;kernel32.GetTickCount11.00CA0E90 8BC8 mov ecx,eax12.00CA0E92 2B0D 4046CA00 sub ecx,dword ptr ds:[CA4640]13.00CA0E98 81F9 88130000 cmp ecx,138814.00CA0E9E 76 41 jbe short 00CA0EE115.00CA0EA0 FF35 4446CA00 push dword ptr ds:[CA4644]16.00CA0EA6 A3 4046CA00 mov dword ptr ds:[CA4640],eax17.00CA0EAB FF15 5810C900 call dword ptr ds:[C91058] ;kernel32.ResumeThread18.00CA0EB1 833D 944ECA00 0>cmp dword ptr ds:[CA4E94],319.00CA0EB8 7C 08 jl short 00CA0EC220.00CA0EBA 6A 00 push 021.00CA0EBC FF15 1C10C900 call dword ptr ds:[C9101C] ;kernel32.ExitProcess22.00CA0EC2 803D B848CA00 0>cmp byte ptr ds:[CA48B8],023.00CA0EC9 74 08 je short 00CA0ED324.00CA0ECB FF05 944ECA00 inc dword ptr ds:[CA4E94]25.00CA0ED1 EB 07 jmp short 00CA0EDA26.00CA0ED3 8325 944ECA00 0>and dword ptr ds:[CA4E94],027.00CA0EDA C605 B848CA00 0>mov byte ptr ds:[CA48B8],128.00CA0EE1 56 push esi29.00CA0EE2 57 push edi30.00CA0EE3 FF7424 0C push dword ptr ss:[esp+C]----------这里就是push提取码31.00CA0EE7 FF15 5C46CA00 call dword ptr ds:[CA465C]---------这个call就是获取函数序号32.00CA0EED 8BF8 mov edi,eax33.00CA0EEF BE 644ECA00 mov esi,0CA4E6434.00CA0EF4 E8 6941FFFF call 00C95062----------------------这个call就是通过序号和基址获取API地址35.00CA0EF9 8B00 mov eax,dword ptr ds:[eax]---------这里[eax]就是真实API地址36.00CA0EFB 5F pop edi37.00CA0EFC 894424 2C mov dword ptr ss:[esp+2C],eax38.00CA0F00 5E pop esi39.00CA0F01 C2 0400 retn 440.00CA13D2 61 popad41.00CA13D3 C3 retn复制代码从上面可以看出来,两种方式最后调用是同一子程序。

vmp加壳返回参数

vmp加壳返回参数

vmp加壳返回参数(实用版)目录1.VMP 加壳简介2.VMP 加壳的作用3.VMP 加壳的返回参数4.使用 VMP 加壳的注意事项正文一、VMP 加壳简介VMP(Virus Mark Pro)是一款国产的优秀壳工具,主要用于病毒分析、调试和自动处理。

它能有效地对病毒进行加壳处理,使其在保持原有功能的前提下,变得更加安全。

二、VMP 加壳的作用VMP 加壳的主要作用有以下几点:1.保护病毒代码:通过对病毒代码进行加壳,可以有效地防止病毒代码被轻易地分析和修改,从而保证了病毒的完整性和功能性。

2.增加病毒的隐蔽性:经过 VMP 加壳处理后的病毒,在运行时能够更好地隐藏自己的行踪,使病毒感染者在不知不觉中受到感染。

3.提高病毒的抗杀能力:VMP 加壳可以提高病毒的抗杀能力,使其在面对杀毒软件的查杀时,能够更好地保护自己,降低被查杀的风险。

三、VMP 加壳的返回参数在使用 VMP 加壳工具进行病毒加壳处理时,它会返回一些参数,这些参数主要包括:1.输入文件路径:即待加壳的病毒文件的路径。

2.输出文件路径:即加壳处理完成后,生成的新文件的路径。

3.加壳类型:表示使用的加壳方式,如:压缩、加密、编码等。

4.加壳层数:表示加壳的层数,层数越多,病毒代码的隐蔽性就越强,但也会使病毒体积变大。

5.加壳时间:表示加壳处理所需的时间。

四、使用 VMP 加壳的注意事项在使用 VMP 加壳工具时,需要注意以下几点:1.确保自己的电脑已经安装了杀毒软件,并及时更新病毒库,以防止病毒感染。

2.选择合适的加壳类型和层数,既要保证病毒的隐蔽性和抗杀能力,同时也要考虑病毒体积的大小。

3.在加壳处理完成后,要及时备份原始文件,以防止加壳后的文件出现问题。

通达信主程序脱壳全记录(图文)

通达信主程序脱壳全记录(图文)

通达信主程序脱壳全记录(图文)UPX加壳入口第一句是PUSHAD;出口关键字POPAD;手动脱壳时,用Olldbg载入程序,脱壳程序里面会有好多循环。

对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。

第一步,先侦壳,侦壳工具为peid0.92,侦测结果如下:(图000)(图000)原来是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo加的壳,UPX是一种压缩壳,强度很低。

第二步,我们请出调试利器:Ollydbg1.09,载入程序,出现提示:用F8进行单步跟踪,对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈那就是设置“断点”。

见上图(图004 005 006 007)下走。

(后面碰到类似的情况,处理方法一样。

)一直往下找,直到发现“POPAD”时,在其地址处设置“断点”―――“运行到选定位置F4”,然后继续F8往下走。

(图008 009)下走。

在走几行,就会出现上图画面,“00622838A”55 DB55 CHAR‘U’―――这是通达信主程序代码的真点击右键调出菜单,选择“用OllyDump脱壳调试进程”。

(图012)=========下图为重新载入已脱壳的新文件(图015)==========用“PEID”检测,提示已无壳。

(图016),但该文件还不能正常启动,因为“输入表”尚未修复。

第三步,就是修复程序的输入表。

使用importREC,这是最好用的输入表修复工具。

1、运行加壳的原版TDX主程序,启动importREC程序,(图018)在“附加一个活动进程”中选择“D:\通达信分析家l论坛版本\TDX.EXE”。

2、在“所需的IAT信息”中的“OEP”填入“0022838A”,点击“自动搜索”按钮,出现下图提示:(图019)3、点击“获取输入表”按钮:(图020)4、点击“修复转存文件”按钮,选择前面已完成脱壳的新文件,程序会自动生成一个新的“******_。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

加壳与脱壳的应用与实现一、加壳 (2)1.什么是壳 (2)2.加壳原因 (2)3.壳的加载过程 (3)4.压缩引擎 (5)5.常见的加壳工具 (6)a.常用压缩壳介绍 (6)b.加密保护壳介绍 (7)二、脱壳 (10)1.侦壳 (10)2.脱壳 (13)a.查找程序的真正入口点(OEP) (13)b.抓取内存映像文件 (15)c.输入表重建 (15)附:视频“加壳与脱壳(软件)”和“手动脱壳” (17)加壳与脱壳一、加壳1.什么是壳在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。

它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。

由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。

图1.12.加壳原因就把这样的程序称为“壳”了。

作者编好软件后,编译成exe可执行文件。

1)有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。

2)需要把程序搞的小一点,从而方便使用。

于是,需要用到一些软件,它们能将exe可执行文件压缩。

3)在黑客界给木马等软件加壳脱壳以躲避杀毒软件。

实现上述功能,这些软件称为加壳软件。

3.壳的加载过程1)获取壳自己所需要使用的API地址如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API 函数。

壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数2)解密原程序的各个区块(Section)的数据壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。

在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。

壳一般按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。

如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。

这也是一些壳的特色之一,比如说原来的程序文件未加壳时1~2M大小,加壳后反而只有几百K。

3)重定位文件执行时将被映像到指定内存地址中,这个初始内存地址称为基地址(ImageBase)。

当然这只是程序文件中声明的,程序运行时能够保证系统一定满足其要求吗?对于EXE的程序文件来说,Windows系统会尽量满足。

例如某EXE 文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。

在这种情况下就不需要进行地址“重定位”了。

由于不需要对EXE文件进行“重定位”,所以加壳软件把原程序文件中用于保存重定位信息的区块干脆也删除了,这样使得加壳后的文件更加小巧。

有些工具提供“Wipe Reloc”的功能,其实就是这个作用。

不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。

这样“重定位”就很重要了,此时壳中也需要提供进行“重定位”的代码,否则原程序中的代码是无法正常运行起来的。

从这点来说,加壳的DLL比加壳的EXE更难修正。

4)HOOK-APIWindows API是一套用来控制Windows的各个部件的外观和行为的一套预先定义的Windows函数。

程序文件中的输入表的作用是让Windows系统在程序运行时提供API的实际地址给程序使用。

在程序的第一行代码执行之前,Windows 系统就完成了这个工作。

壳一般都修改了原程序文件的输入表,然后自己模仿Windows系统的工作来填充输入表中相关的数据。

在填充过程中,外壳就可填充HOOK-API的代码的地址,这样就可间接地获得程序的控制权。

5)跳转到程序原入口点(OEP)从这个时候起壳就把控制权交还给原程序了,一般的壳在这里会有明显的一个“分界线”。

但现在的猛壳己没这界限了,壳里有肉,肉里有壳。

4.压缩引擎各类加壳软件,其压缩算法一般不是自己实现的,大多是调用其他的压缩引擎。

目前压缩引擎种类比较多,不同的压缩引擎有不同特点,如一些对图像压缩效果好,一些对数据压缩效果好。

而加壳软件选择压缩引擎有一个特点,在保证压缩比的条件下,压缩速度慢些关系不是太大,但解压速度一定要快,这样加了壳的EXE文件运行起来速度才不会受太大的影响。

例如下面几个压缩引擎就能满足这要求:1). aPLib压缩引擎 /,这个库对于低于64K的文件压缩效果较好,速度较快。

2). JCALG1压缩引擎,相对于aPlib,JCALG1对于大文件效果好些。

3). LZMA压缩引擎 /zh-cn/sdk.html,LZMA 是 7-Zip 程序中 7z 格式的默认压缩算法,压缩率很高。

5.常见的加壳工具加壳软件按照其加壳目的和作用,可分为两类:一是压缩(Packers),二是保护(Protectors)。

压缩这类壳主要目的是减小程序体积,如ASPacK、UPX和PECompact等。

另一类是保护程序,用上了各种反跟踪技术保护程序不被调试、脱壳等,其加壳后的体积大小不是其考虑的主要因素,如ASProtect、Armadillo、EXECryptor 等。

随着加壳技术的发展,这两类软件之间的界线越来越模糊,很多加壳软件除具有较强的压缩性能,同时也有了较强的保护性能。

a.常用压缩壳介绍1) ASPacKASPack是款Win32可执行文件压缩软件,可压缩Windows 32位可执行文件(.exe)以及库文件(.dll、.ocx),文件压缩比率高达40%~70%。

图1.22) UPXUPX是一个以命令行方式操作的可执行文件经典免费压缩程序,压缩算法自己实现,速度极快。

(开源)3) PECompactPECompact同样也是一款能压缩可执行文件的工具(支持EXE、DL L、SCR、OCX等文件)。

相比同类软件,PECompact提供了多种压缩项目的选择,用户可以根据需要确定哪些内部资源需要压缩处理。

同时,该软件还提供了加解密的插件接口功能。

图1.3b.加密保护壳介绍为了保护自己的软件不轻易被他人“借鉴”,有必要对软件进行一些加密保护,而这方面目前己有成熟的专业加密软件可选择。

但不要太依赖壳的保护,大多数壳是可以被攻破的,还是在自身保护上下些功夫。

加密软件比较多,但在强度与兼容性上做的好的并不多,这里向大家介绍几款常见的。

现在壳的发展一个趋势就是虚拟机保护,利用虚拟机保护后,能大大提高强度,因此建议尽可能使用此类技术保护软件。

如Themida ,WinLicense,EXECryptor等壳带有虚拟机保护功能,因此得用好其S DK。

1) ASProtectASProtect是一款非常强大的Windows 32位保护工具,这4、5年来,其一直在更新进步。

其开发者是俄国人Alexey Solodovnikov。

它拥有压缩、加密、反跟踪代码、反-反汇编代码、CRC校验和花指令等保护措施。

它使用Blowfish、Twofish、TEA等强劲的加密算法,还用RSA1024作为注册密钥生成器。

它还通过API钩子(API hooks,包括Import hooks(GPA hook)和Export hooks)与加壳的程序进行通信。

甚至用到了多态变形引擎(Polymorphic Engine)。

反Api hook代码(Anti-Apihook Code)和BPE32的多态变形引擎(BPE32的Polymorphic Engine)。

并且ASProtect为软件开发人员提供SD K,实现加密程序内外结合。

ASProtect SKE系列己采用了部分虚拟机技术,主要是在Protec t Original EntryPoint与SDK上。

保护过程中建议大量里使用SD K, SDK使用请参考其帮助文档,在使用时注意SDK不要嵌套,并且同一组标签用在同一个子程序段里。

ASProtect使用相当的简单,打开被保护的EXE/DLL文件后,选上保护的选项。

再单击菜单Modes,单击Add Mode按钮,将Is this Mode Avtive选上,最后,单击Pr otection标签,对软件进行保护即可。

ASProtect加壳过程中也可外挂用户自己写的DLL文件,方法是在上图中的External Options选项加上目标DLL即可。

这样,用户可以在DLL加入自己的反跟踪代码,以提高软件的反跟踪能力。

图1.42) Armadillo加密壳Armadillo也称穿山甲,是一款应用面较广的壳。

可以运用各种手段来保护你的软件,同时也可以为软件加上种种限制,包括时间、次数,启动画面等等!很多商用软件采用其加壳。

Armadillo对外发行时有Public,Custom两个版本。

Public是公开演示的版本,Custom是注册用户拿到的版本。

只有Custom才有完整的功能,Public版有功能限制,没什么强度,不建议采用。

图1.5二、脱壳1.侦壳侦测壳和软件所用编写语言的软件,因为脱壳之前要查他的壳的类型。

1).侦测壳的软件fileinfo.exe 、PEID等等。

2).侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒)推荐language2000中文版(专门检测加壳类型)3).软件常用编写语言Delphi,VisualBasic(VB)---最难破,VisualC(VC)。

PEiD的GUI界面操作非常方便直观。

它的原理是利用查特征串搜索来完成识别工作的。

各种开发语言都有固定的启动代码部分,利用这点就可识别出是何种语言编编译的。

同样,不同的壳也有其特征码,利用这点就可识别是被何种壳所加密。

PEiD提供了一个扩展接口文件userdb.txt ,用户可以自定义一些特征码,这样就可识别出新的文件类型。

有些外壳程序为了欺骗PEiD等文件识别软件,会伪造启动代码部分,例如将入口代码改成与Visual C++ 6.0所编程程序入口处类似代码,即可达到欺骗目的。

所以,文件识别工具所给出的结果只是个参考,文件是否被加壳处理过,还得跟踪分析程序代码才可得知。

目前Hying的壳PE-Armor伪装能力是最强的:图2.1PEiD分析不出类型的文件就报告是“Nothing found *”,如出现这情况一般都是未知壳或新版的壳。

下面PEiD识别出这个软件是用Asprotect 1.2x加的壳。

图2.2FileInfo(简称Fi)另一款不错的文件检测工具。

Fi运行时是DOS界面,在DOS窗口中运行程序相当不便,建议采用下面的技巧:首先,用鼠标将文件拖到Fi主文件上。

相关文档
最新文档