软件加壳与脱壳技术的实现
基于流的加壳与脱壳技术实现
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
软 件 加 密 技 术 是 软 件 保 护 的 重 要 手 段 。这 些 加 密 措 施 给 非 法 拷 贝 或非 法 使 用 造 成 一 定 的 障 碍 。 某 种 程 度 上 增 加 了 破解 难 度 。 在 因现 在 互 联 网 的普 及 , 种 破 解 软 件 可 以从 网上 轻 易 下 载 , 增 加 破 解 难 度 , 写 自己 的加 密程 序是 很 有 必要 的 。 现 在 加 密 程 序 的 各 为 编 重 要 手 段 之 一 就 是 对 程 序 加 壳 。 果 加 壳 程 序 使 用 压 缩 算 法 还 可 以 减少 程序 的体 积 。 止 破解 的人 非 法 修 改 程 序 。 文 介 绍 一 种 利 如 防 本 用 流 技 术 的加 壳 脱 壳 方 法 来 实 现 对 软 件 的 加 密 保 护 。
加壳与脱壳应用及实现
加壳与脱壳的应用与实现一、加壳 (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.软件加壳原理软件加壳的基本原理是将原始可执行文件进行加密处理,生成一个加密后的壳程序,再将原始可执行文件嵌入到壳程序中,并根据可执行文件的特征信息进行相应的处理和解密,最终执行原始程序。
具体的加壳流程如下:(1)加密原始可执行文件:使用对称加密算法(如AES、DES等)对原始可执行文件进行加密处理,使其不可读。
(2)生成壳程序:编写一个壳程序,包括解密原始可执行文件、加载和执行原始程序等功能。
壳程序本身一般是已经加密的,以防止被分析破解。
(3)将原始可执行文件嵌入到壳程序中:将加密后的原始可执行文件隐藏在壳程序中,一般是作为一个资源或数据块存在。
(4)运行壳程序:用户双击运行壳程序,壳程序首先进行解密处理,获取原始可执行文件,然后进行加载和执行。
2.软件加壳实现方法(1)静态加壳:在编译链接阶段对可执行文件进行加壳处理。
静态加壳可以通过修改可执行文件的文件头信息和重定位表等方式实现。
(2)动态加壳:在运行时对可执行文件进行加壳处理。
动态加壳使用的是运行时加载原始程序的方式,可以提高软件的安全性,但也会增加运行的开销。
3.加壳脱壳工具目前市面上有很多成熟的加壳脱壳工具可供使用,如UPX、ASPack、FSG等。
这些工具可以方便地对可执行文件进行加壳和脱壳操作,但也容易被黑客用来破解软件。
总结:软件加壳技术是一种常用的软件保护手段,通过加密和封装原始可执行文件,增加软件的安全性和防破解能力。
加壳脱壳工具能够方便地实现对可执行文件的加壳和脱壳操作,但需要注意合理的加密算法和技术选型,以提高软件的安全性。
第2课用相应工具软件为软件自动脱壳(非手动脱壳)
第二课用相应工具软件为软件自动脱壳(非手动脱壳)欲破解一个软件,我们首先应根据前面的内容侦测它的壳,然后我们要把它的壳脱去,还原软件的本来面目。
如果软件是一个PLMM,我们不喜欢穿衣服的MM,我们不喜欢艺术照的MM,我们迫不及待地想把MM脱光,想把MM骗上床。
带壳的软件以后很难分析,带壳的穿衣的MM很难调教,壳是一个拦路虎,我们却不知武松醉在何处。
这就如同我们要吃糖炒栗子,必须先剥掉栗子壳一样。
这一课就教给你如何用自动剥壳机去掉花生壳、栗子壳之类的东东。
若侦测出它根本没加壳,就可省掉这一步了(现在没加壳的软件已经很少很少了,除非软件作者缺乏最基本的加密解密常识)。
脱壳成功的标志是脱壳后的文件能正常运行,功能没有任何损耗。
一般来说,脱壳后的文件长度大于原文件长度;即使同一个文件,当采用不同脱壳软件进行脱壳的时候,由于脱壳软件机理不同,脱出来的文件大小也不尽相同。
但只要能够运行起来,这都是正常的,就如同人的体重,每次上秤,份量都有所不同。
但只要这个人是健康的,就无所谓,合乎情理。
一、脱壳软件的两大类别(两个门派――少林、武当)脱壳软件主要分两大类:专用脱壳软件(武当派)和通用脱壳软件(少林派,源自“全民皆武,天下英雄出少年”)。
每个专用脱壳软件只能脱掉特定的一种或两种加壳软件所加的壳,也就是说它是专门针对某种加壳软件的某个版本而制作的。
通用脱壳软件则具有通用性,可以脱掉许多种不同类型的壳。
根据“以一当一”的原则,专用类此门派为“武当”派。
大家可能会有这样的疑问?既然有通用脱壳软件,为什么还要专用脱壳软件呢?所谓“术业有专攻”,通用的脱壳程序往往不能精确地适用于某些软件,而专用的脱壳程序适用面虽窄,对付特定的壳却极为有效。
因此,少林派和武当派缺一不可,相辅相成。
均掌握了武术之精髓,能置“壳”以死地,打得壳满地找牙,第一时间以迅雷不及掩耳之势极速脱掉壳MM的衣衫。
二、专用脱壳软件的四大类别根据壳的流行程度,常用的脱壳软件主要有三类:脱Aspack类(叉A)、脱UPX类(叉U)、脱pecompact类(叉P,怎么又跟微软搞到一块儿了),分别针对前面提到的3个加壳软件。
软件加壳与脱壳技术的实现
软件加壳与脱壳技术的实现
夏绍春;易波;刘威
【期刊名称】《现代计算机(专业版)》
【年(卷),期】2004(000)003
【摘要】本文介绍了软件加壳与脱壳的原理,并用Delphi6.0实现了文件加壳与脱壳程序以及自解压脱壳程序.文中根据该原理对加壳与脱壳的编程思路作了概括和分析,并给出了加壳与脱壳两个关键模块的实现代码.
【总页数】4页(P78-81)
【作者】夏绍春;易波;刘威
【作者单位】湖南大学计算机与通信学院,长沙,410082;湖南大学计算机与通信学院,长沙,410082;湖南大学计算机与通信学院,长沙,410082
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于椭圆曲线数字签名的软件加壳保护技术的实现 [J], 田润芙;蔡永泉
2.基于流的加壳与脱壳技术实现 [J], 费明德;鞠永生;胡涛
3.多态技术加壳软件的实现 [J], 陈虹;汤明月;章三妹
4.基于流的加壳与脱壳技术实现 [J], 费明德;鞠永生;胡涛
5.软件加壳技术的研究与实现 [J], 李璇; 李林鹏; 李理
因版权原因,仅展示原文概要,查看原文内容请购买。
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++ 语言实现加壳原理的大致步骤,需要根据实际的需要,完善的实现加壳的每个环节。
[汇总]移动应用安全之APP加壳详解
什么是APP加壳?加壳是移动应用加密的一种方式。
APP加壳是指在二进制的应用程序中植入一段代码,对原始二进制原文进行加密、隐藏、混淆;加壳是应用加密的一种手法,应用加壳后,在运行的时候会优先取得程序的控制权,做一些额外的安全工作。
APP加壳的作用加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的,这种技术也常用来保护软件版权,防止被软件破解。
通俗的解释,加壳可以有效防止APP被植入恶意代码导致的程序被破解、被山寨的风险,同时保护用户隐私信息和数据泄露等。
如今,安卓apk文件很容易暴露出来,这也是安卓本身的特性。
安卓危险的原因:第一个原因就是签名机制问题,安卓上没有中央的签名机制,签名的原因造成现在安卓这个市场上二次打包的现象非常严重。
第二个原因是技术问题,安卓采用JA VA语言开发的,源码很容易泄露。
第三个原因就是安卓的开放性,苹果控制了签名,使下载程序的来源变得单一,而在安卓上你可以在任何地方下载应用程序,其实安卓不安全的真正原因就是这个因素造成的。
在这种情况下,我们还会经常碰到一些问题,现在会暴露一些服务器的漏洞。
为了支持手机的客户端,新开发了一套接口,而这套接口没有经过调试,黑客仿编你的客户端,通过未调试的接口就会发现你后台有一些相关的漏洞,从而通过这种方式进行一些入侵。
作为开发者或开发商,是应用程序产生的源头。
建议将安全融入到应用开发生命周期当中去,在开发阶段进行安全测试和检测,及时发现应用程序缺陷和安全漏洞,减少不必要的安全风险;在应用发布阶段进行应用安全加固,增加应用安全强度,防止应用被破解和二次打包;在运营阶段进行渠道监测,及时发现盗版应用,保障自身合法权益不受恶意损害。
APP加壳的利弊通过使用APP加壳技术,开发者可以有效保护自己的核心代码算法,提高破解、盗版程序和二次打包的难度;技术层面,APP加壳可以缓解代码注入、动态调试、内存注入攻击,加强了APP的安全;目前主流的移动应用安全服务商都将APP加壳作为主要的应用加密手段,辅以其他保护APP的手段。
软件加壳脱壳技术教程
一.壳的概念
作者编好软件后,编译成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!"```请注意,这只是一个简单的示例,实际的加壳和脱壳技术要复杂得多,并且可以包括更高级的加密和混淆技术。
去壳的步骤 六
去壳的步骤六如何将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.09UPX 外壳程序!目的让UPX的脱壳加壳傻瓜化注:如果程序没有加壳那么我们就可以省去第二步的脱壳了,直接对软件进行分析了。
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中文版(专门检测加壳类型)。
给木马穿个马甲——木马加壳与脱壳
所 谓 加 壳 。其 实 是 指 利 用 特 殊 的算 法 , 对
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) 将
壳的工作原理及手动脱壳的方法
壳的工作原理及手动脱壳的方法)1)Entry Point(入口点)PE格式的可执行文件的执行时的入口点,即是PE格式中的Entry Point。
用PEditor或者LordPE之类的PE查看工具看看NotePad.exe,你就会看到Entry Point的值。
也就是说NotePad.exe在执行时的第一行代码的地址应该就是这个值。
(当然应该加上基地址)2)Section(节区)PE格式文件是按节区进行规划组织的,不同的节区一般保存的数据的作用也不相同。
通常使用缺省方式编译的程序文件,有CODE/DATA/TLS/.text/.data/.tls/.rsrc/.rdata/.edata/.reloc等不同的名称,有的用于保存程序代码,如CODE和.text节区,有的用于保存程序中的变量的,如DATA/.data节区,有的保存重定位信息,如.reloc,有的用于保存资源数据,如.rsrc。
等等等等,当然这是缺省情况下编译器产生的结构。
而节区名称和节区中的数据其实没有必然的联系,节区中保存的数据也没有什么硬性的限制。
所以你可以在编译时用开关参数改变这些情况。
3)ImageBase(基地址)不仅程序文件按节区规划,而且程序文件在运行时Windows系统也是按节区加载的。
那么每一块的节区的顺序如何?起始的地址是什么呢?这就由基地址决定。
在程序的文件头部保存了每个节区的描述信息,比如有前面提到的节区名称,还有节区的大小,以及节区的相对虚拟地址(RVA)。
如果我们把节区的相对虚拟地址(RVA)加上基地址(ImageBase)就可以知道节区在内存中的虚拟地址(VA)了。
Windows系统就是按照这个要求来加载各个节区的。
这样Windows系统依次把各个节区放到了它相应的虚拟地址空间。
所以如果我们把相对虚拟地址(RVA)看成是坐标的偏移量的话,那么ImageBase就是原点了。
有了这个原点,一切都简单了。
好了有了简要的介绍,我们来看看壳的加载过程吧。
软件加壳、脱壳基础介绍
软件加壳、脱壳基础介绍什么是加壳加壳的全称应该是可执⾏程序资源压缩,压缩后的程序可以直接运⾏。
加壳,顾名思义,就是给⼀个东西加上⼀个壳,只不过这⾥是程序。
就好⽐这⼤⾃然中的种⼦⼀样,为了保护⾃⼰,有⼀层壳,要想看到⾥⾯的东西,就要剥开这层壳。
加壳的另⼀种常⽤的⽅式是在⼆进制的程序中植⼊⼀段代码,在运⾏的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的⽬的是隐藏程序真正的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。
VMP脱壳技术
WinlicenseWinlicenseBy VirusWizard今天第一次接触Themida/Winlicense,基本上都是脚本,算不上什么技术,但作为实验,记录一下。
总体流程:使用Nooby的脚本跑到FakeOEP,然后修复StolenCode。
首先使用Winlicense然后调整脚本中的Base记事本的WinLicen的Base。
我这里的Base是01015000,所以对应的代码修改成:mov tmdbase, 01015000接下来用StrongOD,选项全部勾上,开始跑脚本。
跑完脚本之后,来到这里:01007568 68 BA750001 push 010075BA0100756D 64:A1 00000000 mov eax, dword ptr fs:[0]01007573 50 push eax01007574 8B4424 10 mov eax, dword ptr [esp+10]01007578 896C24 10 mov dword ptr [esp+10], ebp0100757C 8D6C24 10 lea ebp, dword ptr [esp+10]01007580 2BE0 sub esp, eax01007582 53 push ebx01007583 56 push esi01007584 57 push edi01007585 8B45 F8 mov eax, dword ptr [ebp-8]01007588 8965 E8 mov dword ptr [ebp-18], esp0100758B 50 push eax0100758C 8B45 FC mov eax, dword ptr [ebp-4]0100758F C745 FC FFFFFFF>mov dword ptr [ebp-4], -101007596 8945 F8 mov dword ptr [ebp-8], eax01007599 8D45 F0 lea eax, dword ptr [ebp-10]0100759C 64:A3 00000000 mov dword ptr fs:[0], eax010075A2 C3 retn观察堆栈,发现这个:0006FF8C 011ABF9B NOTEPAD_.011ABF9B0006FF90 01001898 NOTEPAD_.010018980006FF94 0000007070有些眼熟,用OD打开原记事本,看到头两行:0100739D > $ 6A 70 push 70 ; (initial cpu selection) 0100739F . 68 push 01001898然后F4到011ABF9B,这个时候会进入VM,我暂时还没那技术去分析。
net程序加壳原理
.NET程序的加壳原理主要是通过对程序中的元数据和IL代码进行加密和混淆,以保护程序不被轻易破解和盗用。
加壳工具在加密时,会将程序中的一些重要部分(如:程序的入口点、资源文件等)进行加密和混淆处理,使得破解者无法轻易地还原程序的原始结构。
同时,加壳工具还会在程序运行时,先运行一段附加的指令,这段指令完成相关操作后会启动主程序。
这段附加的指令一般被称为“壳”,它的作用是解密和加载程序的主要部分,使得程序可以正常运行。
需要注意的是,不同的加壳工具在具体实现上会有所不同,有些加壳工具还会对程序的机器硬件指纹进行检测,以防止程序被非法复制和使用。
(完整版)常见几种脱壳方法(可编辑修改word版)
----------------<小 A 分>----------------一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳(强壳)两种"UPX" "ASPCAK" "TELOCK" "PELITE" "NSPACK(北斗)" ... "ARMADILLO" "ASPROTECT" "ACPROTECT" "EPE(王)" "SVKP" ...顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。
当然加密壳的保护能力要强得多!-----------<小 A 分割线>-------------二、工具的认识OllyDBG ring3 shell 层级别的动态编译工具、PEid、ImportREC、LordPE、softIce ring0 级别调试工具-------------<小 A 分割>-------------------三、常见手动脱壳方法预备知识1.P USHAD (入栈/压栈)代表程序的入口点,2.P OPAD (弹栈/出栈)代表程序的出口点,与 PUSHAD 想对应,一般找到这个OEP 就在附近3.O EP:程序的入口点,软件加壳就是隐藏了 OEP(或者用了假的 OEP/FOEP),只要我们找到程序真正的 OEP,就可以立刻脱壳。
------------<小 A 分割线>--------------------方法一:单步跟踪法1.用OD 载入,点“不分析代码!”2.单步向下跟踪 F8,实现向下的跳。
也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下一句代码处按 F4(或者右健单击代码,选择断点——>运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个 CALL 的,我们就 F7 跟进去,不然程序很容易跑飞,这样很快就能到程序的 OEP6.在跟踪的时候,如果运行到某个 CALL 程序就运行的,就在这个 CALL 中F7 进入7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN 的一般很快就会到程序的 OEP。