DLL文件加壳

合集下载

南开20秋学期《攻防技术基础》在线作业答案02778

南开20秋学期《攻防技术基础》在线作业答案02778

(单选题)1: 以下有关加壳说法正确的是()。

A: 加壳的全称应该是可执行程序资源压缩,是破坏文件的常用手段。

B: 加壳其实是利用特殊的算法,对EXE、DLL文件里的代码、资源等进行压缩、加密。

C: 加壳过的程序无法直接运行,但是不能查看源代码。

要经过脱壳才可以查看源代码。

D: CPU需要暴力解压加壳程序。

正确答案: B(单选题)2: Kali Linux是专门用于渗透测试的Linux操作系统,它由()发展而来。

A: WindowsB: MacOSC: BackTrackD: MSDOS正确答案: C(单选题)3: 下面有关造成文件上传漏洞原因说法错误的是()。

A: 文件上传时检查过于严格。

B: 文件上传后修改文件名时处理不当。

C: 使用第三方插件时引入。

D: 文件上传仅仅在客户端进行了检查。

正确答案: A(单选题)4: 蠕虫与普通病毒相比特有的性质为()。

A: 传播性B: 隐蔽性C: 不利用文件寄生D: 破坏性正确答案: C(单选题)5: 栈是由()分配,堆由()分配。

A: 系统自动、程序员自己申请B: 程序员自己申请、程序员自己申请C: 系统自动、系统自动D: 程序员自己申请、系统自动正确答案: A(单选题)6: 超文本标记语言中文件的开头的标记符是()。

A:B:C:D:正确答案: D(单选题)7: Cookie与Session是与HTTP会话相关的两个内容,其中()存在在浏览器,()存储在服务器中。

黑客术语大全

黑客术语大全

黑客术语大全1,肉鸡:所谓“肉鸡”是一种很形象的比喻,比喻那些可以随意被我们控制的电脑,对方可以是WINDOWS系统,也可以是UNIX/LINUX系统,可以是普通的个人电脑,也可以是大型的服务器,我们可以象操作自己的电脑那样来操作它们,而不被对方所发觉。

2,木马:就是那些表面上伪装成了正常的程序,但是当这些被程序运行时,就会获取系统的整个控制权限。

有很多黑客就是热中与使用木马程序来控制别人的电脑,比如灰鸽子,黑洞,PcShare等等。

3,网页木马:表面上伪装成普通的网页文件或是将而已的代码直接插入到正常的网页文件中,当有人访问时,网页木马就会利用对方系统或者浏览器的漏洞自动将配置好的木马的服务端下载到访问者的电脑上来自动执行。

4,挂马:就是在别人的网站文件里面放入网页木马或者是将代码潜入到对方正常的网页文件里,以使浏览者中马。

5,后门:这是一种形象的比喻,**者在利用某些方法成功的控制了目标主机后,可以在对方的系统中植入特定的程序,或者是修改某些设置。

这些改动表面上是很难被察觉的,但是**者却可以使用相应的程序或者方法来轻易的与这台电脑建立连接,重新控制这台电脑,就好象是**者偷偷的配了一把主人房间的要是,可以随时进出而不被主人发现一样。

通常大多数的特洛伊木马(Trojan Horse)程序都可以被**者用语制作后门(BackDoor)6,rootkit:rootkit是攻击者用来隐藏自己的行踪和保留root(根权限,可以理解成WINDOWS下的system或者管理员权限)访问权限的工具。

通常,攻击者通过远程攻击的方式获得root访问权限,或者是先使用密码猜解(破解)的方式获得对系统的普通访问权限,进入系统后,再通过,对方系统内存在的安全漏洞获得系统的root权限。

然后,攻击者就会在对方的系统中安装rootkit,以达到自己长久控制对方的目的,rootkit与我们前边提到的木马和后门很类似,但远比它们要隐蔽,黑客守卫者就是很典型的rootkit,还有国内的ntroorkit等都是不错的rootkit工具。

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

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

壳,加壳,脱壳,介绍壳的一些基本常识免杀入门 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中文版(专门检测加壳类型)。

DLL 劫持技术(内存补丁技术)

DLL 劫持技术(内存补丁技术)
// 释放原始模块 inline VOID WINAPI Free() { if (m_hModule) FreeLibrary(m_hModule); } // 获取原始函数地址 FARPROC WINAPI GetAddress(PCSTR pszProcName) {
d FARPROC fpAddress; e TCHAR szProcName[16]={0}; r TCHAR tzTemp[MAX_PATH]={0}; te if (m_hModule == NULL) is {
00401496 EB 29 jmp short 004014C1
补丁编程实现就是: 代码:
unsigned char p401496[2] = {0xEB, 0x29}; WriteProcessMemory(hProcess,(LPVOID)0x401496, p401496, 2, NULL);
Printed with FinePrint - purchase at
丁任务。伪造的 ws2_32.dll 有着真实 ws2_32.dll 一样的输出函数,完整源码见光盘。实现时,可以利用 DLL 模块中的函数转发器来实现这个目标,其会将对一个函数的调用转至另一个 DLL 中的另一个函数。可 以这样使用一个 pragma 指令: 代码:
tered 利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除 kernel32.dll, ntdll.dll 等核心 is 系统库以外的 DLL 有效,如网络应用程序的 ws2_32.dll,游戏程序中的 d3d8.dll,还有大部分应用程序
都调用的 lpk.dll,这些 DLL 都可被劫持。
Printed with FinePrint - purchase at

对DLL脱壳的一点见解-电脑资料

对DLL脱壳的一点见解-电脑资料

对DLL脱壳的一点见解-电脑资料一般外壳都是加在PE文件最后,所以脱壳后获得的真正的重定位表所指向的地方的RVA跟脱壳前是一样的,哪位要是写个加壳的东西将外壳加在PE文件所有节前面或中间(指外壳实体放在PE最前面或中间),不知道给脱壳又要增加多少麻烦,。

建议D.Boy试试吧。

加壳的DLL处理重定位表有n中方法,常见的有下面4种情况:1、完整的保留了原重定位表,RVA也没有变化(即在加壳的程序中后看到的重定位表就原来真正的重定位表,我原来发给您的我写的加壳例子就是这样);2、原重定位表的RVA进行了加密,但重定位数据没有加密(即将原重定位数据做了搬移);3、对原重定位表的RVA和重定位数据都进行了加密处理;4、对原重定位表的RVA和重定位数据、以及原程序中被重定位项所指向的数据同时进行了加密。

以上几种情况中,都有可能在原重定位表中增加了外壳的重定位数据,所以脱壳后还要将外壳的重定位项去掉。

当然,如果不是真正脱掉外壳(保留脱壳后的外壳尸体)去不去掉也无所谓,若真正脱了壳,一定要去掉,否则PE装载时可能会报告:Windows错误,xxxxxxxx的地址不能为Write。

另外,DLL加载时候,基地址一般跟编译器生成的基地址是不同的,所以脱壳后的程序中被原重定位项所指向的地方是已经重定位了的数据。

所以,还要将这些地方还原为编译器生成的数据。

方法可以写一个程序,扫描获得的“真正的原重定位表”取得这些地方数据并减去脱壳时候的基地址,再加上编译器生成时候的基地址(重定位项的属性一共有7种情况,但在PE中只能看到0和3这两种情况,0---没有什么意义;3---对32位都要修正,即PE文件在重定位表中每项所指向的地方肯定是个32位的地址)。

第一种情况,是最简单的,因为完全保留了原来的重定位表,所以重定位的过程让PE装载器给完成了。

脱壳后只要将获得得原来的重定位数据复制到脱壳后的程序的重定位表中,再按照上面的方法修正重定位项所指的地方的数据就可以了。

所下载的恶意程序可能为网络游戏盗号木马、远程控制后门或恶意广告程序

所下载的恶意程序可能为网络游戏盗号木马、远程控制后门或恶意广告程序

所下载的恶意程序可能为网络游戏盗号木马、远程控制后门或恶意广告程序所下载的恶意程序可能为网络游戏盗号木马、远程控制后门或恶意广告程序/Huigezi.2008.qef中文名称:""变种qef病毒长度:276505字节病毒类型:后门危险级别:?影响平台:Win9X/ME/NT/2000/XP/2003MD5校验:f76d4e58ab1bbad03736de5848f2bac0特征描述:Backdoor/Huigezi.2008.qef""变种qef是""家族中的最新成员之一,采用"delphi"语言编写,并且经过加壳保护处理。

""变种qef运行后,会自我复制到被感染计算机系统的"%SystemRoot%\"文件夹下,并重命名为".exe",文件属性设置为"系统、隐藏、只读"。

""变种qef会在被感染计算机的后台调用系统IE浏览器进程"iexplore.exe",并把恶意代码注入其中调用执行,隐藏自我,防止被查杀。

如果被感染的计算机上已安装并启用了防火墙,则该后门会利用防火墙的白名单机制来绕过防火墙的监控,从而达到隐蔽通信的目的。

""变种qef属于反向连接后门程序,会在被感染计算机系统的后台连接攻击者指定的远程服务器站点,获取远程控制端真实地址,然后侦听攻击者指令,从而达到被攻击者远程控制的目的。

该后门具有远程监视、控制等功能,可以对被感染计算机系统中存储的文件进行任意操作,监视用户的一举一动(如:键盘输入、屏幕显示、光驱操作、文件读写、鼠标操作和摄像头操作等),还可以窃取、修改或删除用户计算机中存放着的机密信息,对用户的信息安全、个人隐私,甚至是商业机密构成了严重的威胁。

用户计算机一旦感染了""变种qef便会变成网络僵尸傀儡主机,攻击者利用这些傀儡主机可对指定站点发起DDoS攻击、洪水攻击等。

加壳与脱壳的原理 -回复

加壳与脱壳的原理 -回复

加壳与脱壳的原理-回复"加壳与脱壳的原理"加壳(Packaging)是指对一个可执行文件或者库文件进行额外的处理,以使其更难以被逆向工程或者破解。

而脱壳(Unpacking)则是指将已经加壳的文件还原为原始的可执行文件或者库文件。

加壳与脱壳的原理涉及到计算机的底层操作以及程序解释执行的过程。

在理解加壳与脱壳的原理之前,我们需要先了解几个相关的概念。

1. 可执行文件(Executable File):指计算机中的一种文件类型,包含一系列的二进制指令,可以被操作系统加载和执行。

2. 动态链接库(Dynamic Link Library,DLL):是一种包含可执行程序、函数、类或其他数据的模块,可以被多个程序同时使用,提供了代码复用的机制。

3. 虚拟内存(Virtual Memory):是计算机操作系统中为执行程序而虚拟化出来的内存,使得程序运行时感觉自己拥有连续的可用内存,实际上是由操作系统进行了地址映射和管理。

加壳的原理如下:1. 加壳算法选择:选择适合的加壳算法进行加壳操作。

常见的加壳算法有简单的多层字节替换、代码混淆、指令重排、函数重命名等。

2. 加壳过程:将被保护的可执行文件或库文件加载到内存中,通过加壳算法对文件进行处理。

加壳算法会在文件的原始指令之前或之后添加额外的指令,以及加密或混淆文件的内容。

这样就改变了文件的结构和指令的布局,使得逆向工程师难以进行分析或者修改。

3. 跳转到加壳后的指令:在加壳过程完成后,控制权会被转移到加壳后的代码,加壳后的代码会负责解密或还原文件的原始指令,然后再将控制权转交给原始指令。

脱壳的原理如下:1. 检测加壳文件:首先需要确定一个文件是否经过加壳处理,可以通过静态或动态分析来判断。

一些特征线索包括文件的大小、文件的进程行为、使用的加密算法等。

2. 脱壳过程:脱壳工具或程序会加载加壳文件到内存中,并且通过特定的算法和技术还原文件的原始指令。

unity中dll的常用加密和解密的方法

unity中dll的常用加密和解密的方法

unity中dll的常用加密和解密的方法
在Unity中,DLL文件经常需要进行加密以保护其代码和资源不被轻易破解。

以下是一些常用的DLL加密和解密的方法:
1. 代码混淆:这是最常见的加密方法,通过混淆代码使它更难理解。

Unity
自带的IL2CPP编译器可以将C代码转换为C++代码,增加破解难度。

2. DLL加壳:类似于给DLL文件穿上“外衣”,这层“外衣”在运行时动
态加载和保护DLL。

这种方法需要一定的技术水平。

3. 内存保护:利用内存保护技术防止DLL在运行时被读取。

这需要在编程
时使用特殊的库和工具。

4. 代码加密:对DLL中的代码进行加密,在运行时动态解密。

这种方法需
要一个解密函数,该函数必须安全且难以逆向工程。

5. 使用第三方工具:有一些第三方工具如.NET Reflector可以用来查看和反编译DLL文件,但它们通常需要付费。

6. 网络验证:在加载和使用DLL之前,可以通过网络验证其有效性或完整性,这样即使DLL被破解,也需要在特定的环境下才能使用。

7. 动态链接库重定向:这是一种相对高级的技术,可以在运行时将DLL加
载到虚拟地址空间中,而不是物理内存。

这需要深入了解操作系统和编程知识。

请注意,没有任何一种方法可以完全防止DLL被破解,因为只要有足够的资源和时间,任何东西都可以被破解。

选择哪种方法取决于你的具体需求和对安全性的权衡。

如果你有特殊的保护需求,建议寻求专业的安全顾问的帮助。

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

标题:对PECompact加壳的DLL脱壳的一点分析 (7千字)发信人:ljttt时间:2000-8-17 8:49:23详细信息:对PECompact加壳的DLL脱壳的一点分析【声明】我写文章以交流为主,希望大家在转载时能保持文章的完整性。

【前言】目前,我对DLL的脱壳的了解也不多,相信有些地方会和对EXE的脱壳大致相同。

现在我知道的主要不同是必须要在DLL的空间开始跟踪。

否则从EXE开始跟踪,那还不把人累死。

另外 ProcDump 和 PEditor 之类的工具好象还无法自动修复DLL的import table。

唉,又是手动,什么时候有个DLL的脱壳机出现呢?ou,别看我!我编程的水平三流,写不出那些好东东。

样例文件: dlcsp32.dll (DynaDoc Reader v3.01所带动态链接库文件,这个程序就是看.wdl电子图书文件的那个)加壳方式: PECompact v1.41b1加壳检测工具:和尚头上的虱子-----明摆着的嘛调试工具: SoftICE v4.05,PEditor v1.5,Hex WorkShop 2.10目标:脱壳作者: ljttt写作日期: 2000-08-161、首先当然要分析基本信息了。

用PEditor打开动态链接库文件,得到如下信息Entry Point: 00024000Image Base: 10000000Size of Image: 00029000Section Virtual Size Virtual Offsetpec1 00020000 00001000pec2 00003000 00021000.pec 00004000 00024000.rsrc 00001000 00028000再来看看import table和export table的情况,export table没有改变。

问我怎么知道?有未加壳的DLL 嘛。

西西。

2、现在我们要想办法在动态链接库的入口点 10024000 处中断,当然方法很多了,这里介绍两种办法。

①、第一种方法一、首先,用PEditor打开DLL文件,然后单击 FLC 按钮(这个功能是帮你计算Virtual Address转换为Offset的)输入 10024000 ,单击 DO! 按钮,得到 Offset[hex] 为 B000。

二、然后,用Hex WorkShop打开DLL文件,定位到 B000,记下此处字节的值 EB。

三、然后,用PEditor打开Dlview32.EXE(主程序文件)。

单击 break'n enter 按钮(这个功能是帮你在程序的某个地址空间设下int 3中断),在 Virtual Address 中输入 10024000。

四、Ctrl-D中断进入SoftICE,设断点 bpint 3。

五、F5回到Windows,单击break'n enter窗口中 RUN 按钮。

这样我们将在动态链接库的第一条指令处中断。

②、第二种方法一、同第一种方法二、同第一种方法三、然后,用Hex WorkShop把 B000 处的字节 EB 改为 CC。

四、同第一种方法五、运行程序。

这样我们也可以在动态链接库的第一条指令处中断。

这里,我用第一种方法。

我们现在中断在第一条指令处。

但是还不能继续跟踪。

要把 CC (即int 3指令)改为原来程序的代码。

(简称说明: EP: Entry Point, OEP: Orginal Entry Point, RVA: Relative Virtual Address )代码窗口显示如下:015F:10024000 CC INT 3 <---中断在此,这就是我们要改回的字节015F:10024001 06 PUSH ES015F:10024002 6810DE0000 PUSH 0000DE10 <---有点奇怪哦? DE10 不是我们要找的 OEP 吗,怎么在这里就出现了?难道不用找了?015F:10024007 C3 RET015F:10024008 9C PUSHFD015F:10024009 60 PUSHAD015F:1002400A E802000000 CALL 10024011015F:1002400F 33C0 XOR EAX,EAX015F:10024011 8BC4 MOV EAX,ESP015F:10024013 83C004 ADD EAX,04下指令eb eip EB (修改当然 IP 所在地址的字节为 EB)好,代码显示成原来的模样了。

015F:10024000 EB06 JMP 10024008 <---代码复原后015F:10024002 6810DE0000 PUSH 0000DE10 <---奇怪?015F:10024007 C3 RET==> 10024008 9C PUSHFD015F:10024009 60 PUSHAD015F:1002400A E802000000 CALL 10024011015F:1002400F 33C0 XOR EAX,EAX015F:10024011 8BC4 MOV EAX,ESP015F:10024013 83C004 ADD EAX,043、这样代码就复原了。

不过你发现一点问题没有? DLL的 OEP 怎么会在这里就出现了?好奇怪?!先不管它,设个断点留着看看。

设断点bpx 100240024、设断点bpx loadlibrarya do "dd esp->4" (老一套了)5、按 F5 继续,又中断在我们新设的断点。

我们来看一下数据窗口显示如下:015F:1002041A 4E52454B 32334C45 6C6C642E 00000000 KERNEL32.dll....-015F:1002042A 656C6552 44657361 00000043 44746547 ReleaseDC...GetD015F:1002043A 53550043 32335245 6C6C642E 00000000 ER32.dll....015F:1002044A 656C6544 624F6574 7463656A 00000000 DeleteObject....哦,这里看来就是我们要找的import table的一部分了。

6、继续搜索,下指令s 30:10000000 l ffffffff 1A,04,02,00 (这里就不多说了,和《脱壳----对用Petite2.2加壳的程序进行手动脱壳的一点分析》一文中所说的情况相同,所以搜索方法也一样了。

以后几步同理)搜索结果显示如下:Pattern found at 0030:1002000C (0002000C)7、下指令dd 1002000C-C数据窗口显示如下:0030:10020000 000200DC 00000000 00000000 0002041A ................-0030:10020010 00020270 000201D8 00000000 00000000 p...............0030:10020020 0002043C 0002036C 00020050 00000000 <...l...P.......8、这样到了import table的起始处了。

现在开始保存import table。

/dump 10020000 1000 c:\temp\dump.bin (1000 的长度是根据 00 字节的位置来确定的)9、下指令 BD 2 禁止 bpx loadlibrarya 中断,继续跟踪。

到如下015F:10025335 51 PUSH ECX015F:10025336 53 PUSH EBX015F:10025337 6A00 PUSH 00015F:10025339 FFD0 CALL EAX015F:1002533B FFA55E854000 JMP [EBP+0040855E]015F:10025341 8BB54E854000 MOV ESI,[EBP+0040854E]015F:10025347 8BBD52854000 MOV EDI,[EBP+00408552]015F:1002534D E82E0C0000 CALL 10025F80015F:10025352 61 POPAD015F:10025353 9D POPFD015F:10025354 50 PUSH EAX015F:10025355 6810DE0010 PUSH 1000DE10 <--- 1000DE10 - 10000000 = DE10 就是 OEP 了015F:1002535A C20400 RET 0004 <--- 这里就要到回到真正的入口处了,在此停下。

保存映象10、记下 OEP 为 DE10。

下指令保存整个DLL内存映象。

/dump 10000000 29000 c:\temp\dump.dll11、按 F5 继续,没有中断在我们在步骤 3 处设下中断。

关闭主程序时,中断。

正好在此处中断。

显示如下:015F:10024000 EB06 JMP 10024008015F:10024002 6810DE0000 PUSH 1000DE10 <---开始中断时的 0000DE10 这时已经变成 1000DE10 了。

015F:10024007 C3 RET==> 10024008 9C PUSHFD015F:10024009 60 PUSHAD015F:1002400A E802000000 CALL 10024011015F:1002400F 33C0 XOR EAX,EAX015F:10024011 8BC4 MOV EAX,ESP015F:10024013 83C004 ADD EAX,04看来此处的几条指令的用处PECompact是别有用意安排的,可能是为了方便去卸载动态链接库吧。

12、开始修补工作。

用PEditor打开dump.dll文件,选择sections,右键打开菜单,选择dumpfixer。

OK!一次完成所有Section的RVA、Size的转换工作。

再修改Entry Point为 DE10,单击apply changes保存,选择directory,修改其中的Import Table的RVA为 20000,Size为1000。

单击保存。

13、用Hex WorkShop打开dump.dll和dump.bin,定位dump.dll位置到 20000,选择 1000 个字节。

相关文档
最新文档