PE文件中脱壳技术的研究
- 格式:pdf
- 大小:651.64 KB
- 文档页数:4
基于带权欧拉距离的PE文件壳检测技术陈勤;黄剑军;褚一平;方海英【期刊名称】《计算机工程与科学》【年(卷),期】2010(32)7【摘要】越来越多的恶意软件出现在网络上.恶意软件作者通过网络将软件中的恶意代码植入用户的电脑中,从而达到诸如获得用户名与密码的非法目的.为了阻止它们对用户电脑的侵害,软件分析人员必须分析恶意软件的工作原理.但是,如果这些恶意软件加壳,那么分析它们就会变得非常困难,因此必须对他们进行脱壳.脱壳的第一步即检测这些恶意软件是否加壳.本文通过对未加壳和已经加壳的软件PE头部进行分析与比较,提出了带权欧拉距离PE文件壳检测(PDWED)算法,其中包括构造一个含有10个元素的向量,并为每个向量中每个元素分配一个权重值,计算向量的带权欧拉距离.实验结果表明,PDWED能够比较快速而又准确地检测软件是否加壳.【总页数】4页(P1-3,7)【作者】陈勤;黄剑军;褚一平;方海英【作者单位】杭州电子科技大学软件与智能技术研究所,浙江,杭州,310018;杭州电子科技大学软件与智能技术研究所,浙江,杭州,310018;杭州电子科技大学软件与智能技术研究所,浙江,杭州,310018;杭州电子科技大学软件与智能技术研究所,浙江,杭州,310018【正文语种】中文【中图分类】TP309【相关文献】1.基于负荷介数和电气欧拉距离的电网关键环节辨识 [J], 江浩;吕飞鹏;孔德洪2.基于欧拉距离法的制冷压缩机故障判断 [J], 邓锦军3.基于负荷介数和电气欧拉距离的电网关键环节辨识研究 [J], 马铂浩4.一种基于明可夫斯基距离的加壳PE文件识别方法 [J], 吴丽娟;李阳;梁京章5.基于带权语义距离的网页预取方法 [J], 赵欣欣;索红光;刘玉树;张利萍因版权原因,仅展示原文概要,查看原文内容请购买。
常见的脱壳方法范文脱壳是指将一个已经加密或保护的程序反编译或解密成原始的可执行文件或源代码的过程。
常见的脱壳方法主要包括静态脱壳和动态脱壳两种方法。
1.静态脱壳方法静态脱壳是指将已经加密或保护的程序文件保存到硬盘,然后通过一些工具进行反编译或解密。
常见的静态脱壳方法有:(1) IDA Pro:IDA Pro是一种功能强大的交互式反汇编软件,可以将二进制文件转换成可读的汇编代码,从而方便进行分析和修改。
(2) OllyDbg:OllyDbg是一种强大的动态调试工具,可以在运行时跟踪程序的执行过程,并在关键处设置断点和查看内存状态,从而找到程序解密和脱壳的关键函数。
(3)PEiD:PEiD是一种可携带的工具,能够识别和解析PE文件,包括可执行文件、动态链接库和驱动程序。
PEiD可以检测程序中使用的加密算法和保护措施,并提供脱壳插件。
2.动态脱壳方法动态脱壳是指通过调试程序的运行过程,找到加密和解密函数的位置和参数,从而在运行过程中直接提取出原始可执行文件或源代码。
常见的动态脱壳方法有:(1) API hooking:API hooking是指通过拦截和替换程序使用的API 函数,来修改程序的行为。
通过在API函数前插入脱壳代码,可以截获加密和解密过程中的数据和密钥,从而得到原始的可执行文件或源代码。
(2)内存转储:内存转储是指将程序在运行时的内存状态保存到文件中,然后利用其他工具对内存进行分析。
通过分析内存中的数据和代码,可以找到加密和解密函数的位置和参数,从而得到原始的可执行文件或源代码。
(3)运行时调试:运行时调试是指通过调试工具在程序运行过程中设置断点、查看内存和寄存器状态,来跟踪程序的执行过程。
通过查看程序的执行流程和数据变化,可以找到加密和解密函数的位置和参数,从而得到原始的可执行文件或源代码。
总结:脱壳方法主要包括静态脱壳和动态脱壳两种方法。
静态脱壳是将已经加密或保护的程序保存到硬盘,然后通过反编译或解密工具进行分析或修改。
脱壳方法总结1. 引言在软件开发和逆向分析领域,脱壳(Unpacking)是指将一个已经被加密或保护的可执行文件还原到其原始状态的过程。
通过脱壳,分析人员可以获取被加密或保护的文件的源代码、算法、关键函数等信息,从而进行后续的逆向工程分析。
本文将总结几种常见的脱壳方法,并介绍它们的原理和使用场景。
2. 静态脱壳方法静态脱壳方法是指在不运行程序的情况下,通过对加密或保护的文件进行静态分析,还原出原始的可执行文件。
2.1. 字节码分析字节码分析是通过对加密或保护的文件进行二进制分析,识别出不同的加密算法或保护机制,从而还原出原始文件。
常见的字节码分析工具有IDA Pro、Radare2等。
2.1.1. IDA ProIDA Pro是一款功能强大的反汇编工具,可以用于对二进制文件进行逆向分析。
通过加载被加密或保护的文件,IDA Pro可以在图形界面下显示程序的反汇编代码。
通过对代码进行分析,可以识别出不同的加密算法或保护机制,从而编写相应的解密脚本。
2.1.2. Radare2Radare2是另一款强大的反汇编工具,它以命令行形式提供了一系列功能,可以对二进制文件进行静态分析。
通过使用Radare2的命令,可以查看程序的反汇编代码,识别出加密或保护机制,并编写相应的解密脚本。
2.2. 调试器调试器是一种用于运行和调试程序的工具,通过对加密或保护的文件进行动态分析,可以观察程序的行为,从而还原出原始文件。
常见的调试器有OllyDbg、GDB等。
2.2.1. OllyDbgOllyDbg是一款运行在Windows平台上的调试器,它可以用于对可执行文件进行动态分析。
通过加载被加密或保护的文件,OllyDbg可以以汇编代码的形式显示程序的执行过程。
通过逐步执行程序,并观察寄存器、堆栈等信息的变化,可以找到解密过程中使用的关键函数和算法。
2.2.2. GDBGDB是一款开源的调试器,可以运行在多种平台上,如Linux、macOS等。
第27卷第9期 计算机应用与软件Vol 127No .92010年9月 Computer App licati ons and Soft w are Sep.2010PE 文件中脱壳技术的研究李 露 刘秋菊 徐汀荣(苏州大学计算机科学与技术学院 江苏苏州215006)收稿日期:2009-01-07。
李露,硕士生,主研领域:网络安全,信息技术。
摘 要 对PE (Portable Executable )文件进行加壳是保护软件的有效手段,但恶意程序也会通过加壳来保护自己。
作为一名病毒分析师或软件安全分析员,只有先将其脱壳,才能进行彻底的分析。
以W indows 记事本程序为实例,首先分析了PE 文件结构及其加壳原理,其次阐述了脱壳的一般步骤,然后从压缩壳和加密壳的角度,重点探讨了脱壳技术的原理和方法。
最后对伪装壳和多重壳及程序自校验进行了探讨和分析。
关键词 PE 加壳 脱壳 伪装壳 多重壳 自校验O N UNPACK I NG TECHNOLO GY FO R PE F I L ESL i Lu L iu Q iuju Xu Tingr ong(School of Co m puter Science and Technology,Soocho w U niversity,Suzhou 215006,J iangsu,China )Abstract Packing Portable Executable (PE )files is an effective mean t o p r otect s oft w are,but mal w are can als o use packing t o p r otect the m selves .A s a virus analyst or a s oft w are security researcher,you must unpack the mal w are first,then can you analysis the m in detail .Taking the notepad p r ogra m in M icr os oftW indows as an in this paper we first analyzed the PE file structure and the p rinci p le of packing,and then expounded the general step s of unpacking .After that,in ter m s of the comp ressi on shell and encryp ti on shell,we f ocused on the p rinci p les and methods of unpacking technol ogy .Finally,we discussed and analyzed the ca mouflage shell,multi 2shell and self 2chec 2king .Keywords PE Packing Unpacking Ca mouflage shell Multi 2shell Self 2checking0 引 言PE 文件格式是W I N 32环境自带的跨平台可执行文件格式,常见的EXE 、DLL 、OCX 、SYS 、COM 等文件均是PE 格式。
加壳与脱壳的原理-回复"加壳与脱壳的原理"加壳(Packaging)是指对一个可执行文件或者库文件进行额外的处理,以使其更难以被逆向工程或者破解。
而脱壳(Unpacking)则是指将已经加壳的文件还原为原始的可执行文件或者库文件。
加壳与脱壳的原理涉及到计算机的底层操作以及程序解释执行的过程。
在理解加壳与脱壳的原理之前,我们需要先了解几个相关的概念。
1. 可执行文件(Executable File):指计算机中的一种文件类型,包含一系列的二进制指令,可以被操作系统加载和执行。
2. 动态链接库(Dynamic Link Library,DLL):是一种包含可执行程序、函数、类或其他数据的模块,可以被多个程序同时使用,提供了代码复用的机制。
3. 虚拟内存(Virtual Memory):是计算机操作系统中为执行程序而虚拟化出来的内存,使得程序运行时感觉自己拥有连续的可用内存,实际上是由操作系统进行了地址映射和管理。
加壳的原理如下:1. 加壳算法选择:选择适合的加壳算法进行加壳操作。
常见的加壳算法有简单的多层字节替换、代码混淆、指令重排、函数重命名等。
2. 加壳过程:将被保护的可执行文件或库文件加载到内存中,通过加壳算法对文件进行处理。
加壳算法会在文件的原始指令之前或之后添加额外的指令,以及加密或混淆文件的内容。
这样就改变了文件的结构和指令的布局,使得逆向工程师难以进行分析或者修改。
3. 跳转到加壳后的指令:在加壳过程完成后,控制权会被转移到加壳后的代码,加壳后的代码会负责解密或还原文件的原始指令,然后再将控制权转交给原始指令。
脱壳的原理如下:1. 检测加壳文件:首先需要确定一个文件是否经过加壳处理,可以通过静态或动态分析来判断。
一些特征线索包括文件的大小、文件的进程行为、使用的加密算法等。
2. 脱壳过程:脱壳工具或程序会加载加壳文件到内存中,并且通过特定的算法和技术还原文件的原始指令。
普通壳的脱壳方法和脱壳技巧脱壳是指将一个已经打包的可执行文件(通常是二进制文件)恢复为原始的、可以读取和修改的形式。
这在软件逆向工程、安全审计和病毒分析等领域都是非常常见的操作。
下面我将为你介绍普通壳的脱壳方法和脱壳技巧。
一、普通壳的脱壳方法1.静态脱壳静态脱壳是指对目标文件进行分析,找到壳的解密和载入代码,然后将其解密出来,恢复原始的可执行文件。
- 调试器脱壳:使用调试器(如OllyDbg、IDA Pro等)来单步执行目标程序,找到壳的解密代码,并通过调试器的内存分析功能来寻找待解密的数据。
一旦找到解密的算法和密钥,就可以将目标文件完全解密出来。
- 静态分析脱壳:通过静态分析工具(如IDA Pro、Hopper等)来逆向目标文件,找到壳的解密算法和密钥,然后将其解密出来。
2.动态脱壳动态脱壳是指在目标程序运行时,通过对程序的运行过程进行监控和分析,找到壳的解密和载入代码,并将其解密出来,恢复原始的可执行文件。
-API钩取脱壳:通过使用一个DLL注入到目标程序的地址空间中,然后使用API钩子来监控API函数的调用,找到壳解密代码的入口点。
一旦找到壳解密代码的起始地址,就可以通过调试器执行目标程序,并在合适的时机将解密出来的代码或数据导出。
- 内存转储脱壳:通过在目标程序的执行过程中,使用内存转储工具(如winhex、ollydump等)将目标程序的内存转储出来,然后使用静态脱壳的方法对内存转储文件进行分析。
二、普通壳的脱壳技巧1.加载器分析在进行脱壳之前,首先要分析目标文件中的加载器。
加载器是壳程序的一部分,用于解压和载入真正的可执行文件。
通过分析加载器,可以确定载入代码和解密算法的位置,并推导出解密算法的密钥。
2.寻找壳代码的入口点在进行脱壳时,需要找到壳代码的入口点,即壳程序开始执行的位置。
可以通过调试器或者静态分析工具来寻找入口点,并标记下来以备后续使用。
3.内存和断点设置通过内存和断点设置,在目标程序运行过程中定位到关键的内存位置。
RebPE.exe
1 OEP寻找技巧
OEP也就是原函数的入口点,在这里停止可以通过dump去掉外壳。
1)直接跟踪到.text段
2)内存访问断点,麻烦!!!!(除非熟悉该外壳算法,不然中断次数太多了)
3)堆栈平衡去找(快啊),在command 设置读取的断点,马上就找到了
4)找到之后,可以通过编译语言确认一下,如:
GetVersion是VC6.0独有的特征。
OEP为00401130
2 停在OEP口之后,就是DUMP了,使用LordPE
设置从磁盘黏贴文件头,避免PE头被破坏
右键修正ImageSize大小,然后full dumpl(完整脱壳),这里有可能PE头无法访问
使用od在<m>里面修改PE文件头的属性。
3 重建输入表
随便找一个函数调用的
<command>d 0x405028;然后在数据窗口点击长型(long)->地址,就可以看到整个输入表了
00405000 7C810EF1 kernel32.GetFileType
004050B8 FFFFFFFF
如此,输入表的大小为004050B8-00405000=B8,起点为004050B8
关键是这里,刚才找到的信息如下:
OEP:1130
RV A:5000
Size:B8
EXE的base默认为00400000(DLL就不一定了)
接着查看这里面有没有无效的数据,有的话就要手工了。
接着dump就行了,这里发现“吾爱破解专用版”在这里失效,可能小生弄太多插件了,有bug,用ollyICE就没有问题。
PECompact壳研究与解密脱壳-电脑资料因为PECompact有2种加壳方式,我也拜读了DiKeN的"PECompact的OEP的简易查找方法",于是想深入研究一下.这是98的Notepad.exe使用PECompact(JCALG1)压缩过的结果0040AB20 >EB 06 JMP SHORT NOTEPAD.0040AB28<==第一条指令0040AB22 68 CC100000 PUSH 10CC<======这就是程序的原始OEP的RVA地址这是这是98的Notepad.exe使用PECompact(aPLib)压缩过的结果0187:0040AB1F 68EB0668CC PUSH DWORD CC6806EB<==第一条指令0187:0040AB24 1000 ADC [EAX],AL0187:0040AB26 00C3 ADD BL,AL0187:0040AB28 9C PUSHF0187:0040AB29 60 PUSHA这样就不能用DiKeN的"PECompact的OEP的简易查找方法"来找程序的OEP了.于是我手动跟踪了一下,并做了记录:Notepad.exe使用PECompact(JCALG1)压缩过0187:0040AAFF 65EB06 JMP SHORT 0040AB080187:0040AB02 68CC100000 PUSH DWORD 10CC0187:0040AB07 C3 RET0187:0040AB08 9C PUSHF0187:0040AB09 60 PUSHA0187:0040AB0A E802000000 CALL 0040AB11 //这里按F8继续.0187:0040AB0F 33C0 XOR EAX,EAX0187:0040AB13 83C004 ADD EAX,BYTE +04......按F12,到了这里0187:0040AB77 F3A5 REP MOVSD0187:0040AB79 8BFB MOV EDI,EBX0187:0040AB7B C3 RET //光标停在这里0187:0040AB7C BDCF400000 MOV EBP,40CF0187:0040AB81 8BF7 MOV ESI,EDI......再按F12,到了这里0187:0040D551 68CC104000 PUSH DWORD 004010CC 0187:0040D556 C20400 RET 04 //返回OEP 处了!0187:0040D5598BB55B974000 MOV ESI,[EBP+0040975B]到了OEP直接Makepe.Notepad.exe使用PECompact(aPLib)压缩0187:0040AB1F 68EB0668CC PUSH DWORD CC6806EB 0187:0040AB24 1000 ADC [EAX],AL0187:0040AB26 00C3 ADD BL,AL0187:0040AB28 9C PUSHF0187:0040AB29 60 PUSHA0187:0040AB2A E802000000 CALL 0040AB31 //F8进去后0187:0040AB2F 33C0 XOR EAX,EAX0187:0040AB31 8BC4 MOV EAX,ESP......按F120187:0040AB97 F3A5 REP MOVSD0187:0040AB9B C3 RET //停在这里0187:0040AB9C BDCF400000 MOV EBP,40CF......再按F120187:0040D54F 9D POPF0187:0040D550 50 PUSH EAX0187:0040D551 68CC104000 PUSH DWORD 004010CC 0187:0040D556 C20400 RET 04 //又返回OEP了,怎么这么简单?这里还有一点要说明,我发现使用PECompact压缩过的程序,用PROCDUMP或LordPE就算Dump出来还是不能使用对于Dump出来的程序必须要修改入口地址才可以记得以前在脱PECompact的壳时用PROCDUMP来Dump就非法,顺便用TRW跟了一下,有一点点体会如下:记得在TRW中输入Faults on,然后用PROCDUMP脱壳吧,然后TRW就跳出来了0187:004055C3 8B7D10 MOV EDI,[EBP+10]0187:004055C6 56 PUSH ESI0187:004055C7 51 PUSH ECX0187:004055C8 AC LODSB //停在这里,于是下断 bpx eip-1之后就F50187:004055C9 AE SCASB0187:004055CA 750B JNZ 004055D70187:004055CC 803F00 CMP BYTE [EDI],00然后重新运行PROCDUMP,继续脱壳0187:004055C3 8B7D10 MOV EDI,[EBP+10]0187:004055C6 56 PUSH ESI0187:004055C7 51 PUSH ECX //断在这里让我们来修改吧a eip+1nop回车F5看看是不是正常脱壳了啊!当然也可以直接修改主程序,以后就不用这样反复修改了!查找8B 7D 10 56 51 AC AE,改为8B 7D 10 56 51 90 AE就可以了!不知道会不会有什么不对,还请高手指正!后记,其实我在跟踪的时候并不是上面写的时候那么容易,本来我是一步一步慢慢走的,后来跟了几遍,就发现了这个规律,所以没有详细写跟踪过程,只是把自己的总结写了出来,如果有什么不足或欠缺,还请多多指教,本人才疏学浅,还需要大家的帮助修正一点错误关于Procdump的修改,当时没有发现,如果修改了主程序,使用脱壳脚本的时候会有问题,建议保留原来的备份.修改的程序作为专门脱用未修改程序脱壳时非法的工具。
实验一壳保护实验一、实验背景壳是在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行、拿到控制权,然后完成它们保护软件的任务。
UPX 是一个开源的,免费的可执行程序压缩壳。
IDA 是一款逆向必用工具,强大的反编译能力。
二、实验目的(1)理解壳保护技术的原理;(2)熟悉常用加脱壳工具upx的使用方法;(3)熟悉加壳、脱壳流程,学会手工脱壳的基本流程以及注意事项。
三、实验原理脱壳方法(1)使用脱壳工具识别壳: exeinfoPE、PEiD、Stud_PE;脱壳器:专用:UnPecomp2、untelock;通用:Quick Unpack、linxerUnpacker。
(2)手动脱壳1)找原程序入口点 OEP(Original Entry Point)一步到位法:查找popad指令,找到匹配处,确认是壳解压完毕即将跳转到OEP部分,只适用于极少数压缩壳。
内存镜像法:内存镜像法的原理在于对于程序资源段和代码段下断点,一般程序自解压或者自解密时,会首先访问资源段获取所需资源,然后在自动脱壳完成后,转回程序代码段。
这时候下内存一次性断点,程序就会停在OEP处。
方法步骤:a.选项->调试选项->异常->勾选所有的忽略异常b. Alt+M快捷键查看内存映像,对 .rsrc/.text段设置内存访问断点,执行至断点c. 对.text段第一字节设置硬件执行断点,Shift+F9运行至断点最后异常法:最后一次异常法的原理是,程序在自解压或自解密过程中,可能会触发无数次的异常。
如果能定位到最后一次程序异常的位置,可能就会很接近自动脱壳完成位置。
2)DUMP(内存映像转储)应该在壳加载器执行完毕后,程序在内存中完整还原,且原程序指令未被执行,程序状态未受影响的情况下DUMP。
3)重建PE文件(IAT)压缩壳一般不破坏TAT(Import Address Table),加密壳中原始程序IAT被劫持到壳加载器相应函数。
脱壳教程标题:脱壳教程引言:脱壳是指将软件或应用程序的包装层(也称为保护壳或加密层)移除,以便对其进行更深入的分析、修改或逆向工程。
脱壳过程可以帮助软件开发人员或安全研究人员理解程序的内部运行机制,发现其中的漏洞或者进行优化改进。
本文将介绍脱壳过程的基本原理和几种常见的脱壳工具以及其使用方法。
一、脱壳的基本原理脱壳的基本原理是通过破解或绕过软件的保护机制来移除保护壳。
保护机制通常包括各种检测和防御技术,如代码混淆、加壳、逆向工程等。
常见的保护壳有UPX、ASProtect、Enigma等。
脱壳的过程涉及对程序进行调试、分析和修改。
二、脱壳工具介绍及使用方法1. OllyDbgOllyDbg是一款著名的逆向工程和调试工具,也是脱壳过程中经常使用的工具之一。
它具有强大的调试和反汇编功能,可以帮助分析程序的执行流程、内存变化等。
使用OllyDbg进行脱壳时,首先需要加载待脱壳的程序,然后设置断点,跟踪程序执行,找到关键的保护机制的位置,最终移除保护壳。
2. IDA ProIDA Pro是一款功能强大的反汇编和逆向工程工具。
它可以将程序转换为易读的汇编代码,并提供强大的导航和分析功能。
脱壳时可以使用IDA Pro来分析和修改程序的内存和代码。
它可以帮助找到程序的入口点、解密过程等,从而移除保护壳。
3. x64dbgx64dbg是一款开源的调试器工具,适用于32位和64位的Windows系统。
它具有用户友好的界面和丰富的调试功能,并支持脱壳过程中的动态调试和反调试技术。
使用x64dbg进行脱壳时,可以跟踪程序的执行流程、查看内存变化,找到关键代码并进行修改。
三、脱壳过程示例以某款加壳的软件为例,介绍基本的脱壳过程。
1. 加载待脱壳的程序到脱壳工具中,并设置断点。
2. 运行程序,在断点处停下来,观察程序的状态和执行流程。
3. 跟踪程序的执行,查找关键的保护机制位置,例如解密函数、保护壳的入口等。
4. 分析并修改程序的内存和代码,移除保护壳。
—160— PE 文件动态加壳技术的研究与实现庞立会(国防科技大学计算机学院,长沙 410073)摘 要:对可执行文件加壳是保护软件的一种有效方法。
但常用的加壳软件采用的是一种静态加壳技术,所有被加壳后的可执行文件都具有部分相同的代码,这样就增加了软件被破解的可能性,不能完全满足PE 文件保护的需求。
针对这一不足,在分析PE 文件格式和加载机制的基础上,提出PE 文件动态加壳的思想,设计和实现了一种PE 文件动态加壳软件。
试验结果表明其可以有效地提高PE 文件的自我保护能力。
关键词:PE 文件;加壳;多态引擎;变形Research and Implementation of Dynamically Packing Technology for PE FilesPANG Li-hui(School of Computer, National University of Defense Technology, Changsha 410073)【Abstract 】It is an effective method to protect software by packing Portable Executable(PE) files. But the technology which is commonly used by most packing software is a statically packing technology, and it exists a shortage that all the PE files packed by the same packing software have partly uniform code, thus increases the possibility of the packed software being decrypted, which can not fully satisfy the requirement to protect PE files. Based on the analysis of the PE file format and loading mechanism, this paper proposes the idea of dynamically packing for PE files, designs and implements a prototype of dynamically packing for PE files. The experimental results show dynamically packing technology can be used to improve the protection capability of PE files.【Key words 】PE files; packing; polymorphic engine; metamorphism计 算 机 工 程Computer Engineering 第34卷 第19期Vol.34 No.19 2008年10月October 2008·安全技术·文章编号:1000—3428(2008)19—0160—03文献标识码:A中图分类号:TP393.081 概述为了维护自身以及软件购买人的利益、保护科研成果、技术和版权,软件开发者在最终发布软件前通常会对软件进行加密保护。
第一课PE格式要想学脱壳,第一步就得掌握PE格式,PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows 平台上的主流可执行文件格式。
Microsoft Visual C++提供的WINNT.H里有PE数据结构的完整定义。
推荐文档:ah007翻译的“PE文件格式”1.9版qduwg翻译的PE文件格式Iczelion's 的PE文件格式PE结构各字段偏移参考微软官方提供的PE文档(Revision 8.0 - May 16, 2006)学习PE格式的方法是自己先准备一个十六进制工具,如HexWorkshop,WinHex,用这些工具打开一个EXE文件对照着学。
强烈推荐你用Stud_PE v.2.2.0.5这款工具辅助学习PE格式。
PE格式学习的重点是在输入表(Import Table)这块。
Stud_PE工具界面:PE结构图:第二课SEH技术结构化异常处理(Structured Exception Handling,SEH)是Windows操作系统处理程序错误或异常的技术。
SEH是Windows 操作系统的一种系统机制,与特定的程序设计语言无关。
外壳程序里大量地使用了SEH,如果不了解SEH,将会使你跟踪十分困难。
SEH in ASM 研究(一)by humeSEH in ASM 研究(二)by humeStructured Exception Handling加密与解密二版菜鸟学习笔记(2) - SEH 结构化异常处理by ytcswb由于Ollydbg对SEH处理异常灵活,因此脱壳用Ollydbg会大大提高效率。
附CONTEXT结构环境:代码:typedef struct _CONTEXT {/*000*/ DWORD ContextFlags;/*004*/ DWORD Dr0;/*008*/ DWORD Dr1;1. 什么是壳?在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
恶意代码加壳脱壳技术张士豪(中国人民公安大学研究生部北京100038)摘要:介绍了加壳脱壳技术的对象:PE可执行文件的结构以及各部分的功能,进而通过对恶意代码加壳、脱壳以及相关的壳技术包括壳分类、壳检测技术等的概述,揭示了加壳的恶意代码的工作原理,同时提出了对应的防护方法。
着重提出了两种比较新的技术:分别是基于带权欧氏距离的脱壳过程以及基于SVM的实时加壳分类技术。
关键词:PE可执行文件;加壳;脱壳;恶意代码;1.引言近些年来,随着恶意软件数量的急剧增加,给信息的安全性带来了巨大的威胁。
这其中有很大一部分原因是由于恶意软件的保护机制逐渐增强,加壳等混淆技术的使用使得传统的依靠特征码扫描方式的查毒机制逐渐失效,因此亟需寻找新的方法来对恶意软件进行识别。
而其中对恶意软件加壳的自动化识别是一个必要步骤,因为对可执行文件进行加壳是目前恶意软件的作者最常用的用来防止杀毒软件检测的混淆技术。
在已知壳种类的前提下,许多通用的脱壳工具都能够有效的从加壳的可执行文件中检测和提取被混淆的原始代码,然后就可以应用传统的基于特征码扫描的反病毒检测软件找出隐藏的病毒。
2.PE文件概述PE是portable executable的英文简称,可移植的可执行文件。
PE格式是Windows 平台下可执行程序的主要格式,常见的EXE,OCX,DLL,SYS等文件都是遵循PE格式的。
在Windows平台下,所有的软件加壳技术与脱壳技术都是在PE格式上进行处理的,因此,研究PE格式对后续的加壳脱壳技术的研究是很有必要的。
PE文件的格式如图1所示:图 1 PE文件格式下面对PE结构中的一些重要的部分重点介绍:DOS header 和 DOS Stub:所有的 PE 文件(或32位的DLLS)都必须以一个简单的DOS MZ header为起始(IMAGE_DOS_HEADER结构体)。
在实际中,除了e_lfanew (PE header 的文件偏移量)我们可以不必太关心其余成员数据。
简单脱壳教程笔记(7)---⼿脱PECompact2.X壳本笔记是针对ximo早期发的脱壳基础视频教程。
整理的笔记。
本笔记⽤到的⼯具下载地址:简单介绍:FSG壳是⼀款压缩壳。
我们这⾥使⽤9种⽅式来进⾏脱壳⼯具:ExeinfoPE或PEid、OD、LordPE、ImportREConstructor脱壳⽂件:05.⼿脱PECompact2.X壳.rar1 单步我们发现有两处call会跑飞。
那么我们须要在跑飞处进⼊,然后在跟就可以。
第⼀个跑飞的call,我们此时不应该单步⽽是进⼊第⼆个跑飞的call,我们此时不应该单步⽽是进⼊OEP2 ESP定律单步到在此处。
并在数据窗体中尾随,下断点,单步跟踪就可以。
可參考前⾯的笔记内容。
3 使⽤BP VirtualFree断点⾸先下 bp VirtualFree断点然后 SHIFT+F9执⾏,接着按F2取消断点接着ALT+F9运⾏到⽤户代码ctrl+f 进⾏查找 push 8000(特征码)F2设置断点, shift+f9执⾏到这,然后取消断点接着单步跟就可以。
就会到达OEP4 相同设置BP VirtualFree⾸先设置断点然后。
两次SHIFT+F9。
然后,取消断点。
Alt+F9 并运⾏到⽤户代码然后单步⾛。
就会到达OEP5.1、载⼊程序后,会发现⾸⾏有个地址0040A86D > B8 74DE4500 mov eax,qqspirit.0045DE742、在该地址处下断点 bp 0045de743、然后shift+f9执⾏,并取消断点4、我们在该处的retn 下⼀⾏设置断点,然后shift+f9执⾏,并取消断点045DE74 B8 F9CB45F0 mov eax,F045CBF90045DE79 8D88 9E120010 lea ecx,dword ptr ds:[eax+1000129E] 0045DE7F 8941 01 mov dword ptr ds:[ecx+1],eax0045DE82 8B5424 04 mov edx,dword ptr ss:[esp+4]0045DE86 8B52 0C mov edx,dword ptr ds:[edx+C]0045DE89 C602 E9 mov byte ptr ds:[edx],0E90045DE8C 83C2 05 add edx,50045DE8F 2BCA sub ecx,edx0045DE91 894A FC mov dword ptr ds:[edx-4],ecx0045DE94 33C0 xor eax,eax0045DE96 C3 retn0045DE97 B8 78563412 mov eax,12345678 //下断点5、接着单步跟就可以。
写这篇文章的目的是想让大家了解如何利用现有的工具来优化脱壳后的程序。
因为要让脱壳优化过的程序可以用汉化工具正常汉化的话,要求要稍微高一些,我就基于优化后的文件可正常用汉化工具汉化这样的目标来讲解。
这篇文章主要是为新手服务的,所以肯定比较罗唆,高手可以略过。
这篇文章中我采用 dwing 的 WinUpack 0.39 final 讲述。
采用 WinUpack 来讲解的原因主要是这款壳把 PE 头搞得很让人郁闷,修复其它脱壳后的程序不需要修复 PE 文件头,而修复 WinUpack 却要考虑修复 PE 头的问题,而且这个壳加壳后把原程序的各个区段都合并了,修复的步骤要多一些,这样也方便大家了解的更详细一点。
我准备分两部分来讲述,第一部分我采用 WinUpack 0.39 final 来给我自己用 MASM 写的一个示例程序加壳,然后来进行脱壳优化,第二部分直接讲解 WinUpack 0.39 final 中的那个中文版 WinUpackC.exe 的脱壳优化。
其实本来直接写 WinUpackC.exe 的脱壳优化就可以了,不过我开始的时候没准备写 WinUpack 主程序的脱壳,写到后来才发现用自己写的示例程序加壳后再谈脱壳后的优化,有点自说自话的感觉,所以临时决定加一个 WinUpack 主程序的脱壳优化。
因为文章已经写了一部分了,不想再重新抓图,就搞出两部分了(看见砖头、鸡蛋扔来,我躲!)。
一、示例程序的脱壳优化1、脱壳中国破解联盟+j%w6v/I.X3p1C1a,T这里的目标程序是我用 MASM 写的一个对话框的简单例子,我采用 WinUpack 的默认选项把原程序 test.exe 加壳,加壳后的程序名为 test1.exe,大小由原来的 6.5K 变为 4.4K。
因为 WinUpack 给程序加壳时修改了 PE 头的缘故,普通 OD 可能加载不了用 winUpack 加壳后的程序,所以我们换用看雪兄修改的 OllyICE 载入加壳后的 test1.exe,会出现一个“32 位可执行文件格式错误或未知”的错误对话框,不用管,点确定,又出现一个“无法在内存中分配 XXXXX 字节”的错误对话框,继续点确定,我们停在这里:00401018 > BE B0114000 MOV ESI,test1.004011B02Z:q7r4}5D0040101D AD LODS DWORD PTR DS:[ESI] ; ESI地址处的值就是OEP 0040101E 50 PUSH EAXWinUpack 的壳比较好脱,F8 到上面的第二条指令时,ESI 所显示的值就是存放 OEP 的地址。
第27卷第9期 计算机应用与软件Vol 127No .92010年9月 Computer App licati ons and Soft w are Sep.2010PE 文件中脱壳技术的研究李 露 刘秋菊 徐汀荣(苏州大学计算机科学与技术学院 江苏苏州215006)收稿日期:2009-01-07。
李露,硕士生,主研领域:网络安全,信息技术。
摘 要 对PE (Portable Executable )文件进行加壳是保护软件的有效手段,但恶意程序也会通过加壳来保护自己。
作为一名病毒分析师或软件安全分析员,只有先将其脱壳,才能进行彻底的分析。
以W indows 记事本程序为实例,首先分析了PE 文件结构及其加壳原理,其次阐述了脱壳的一般步骤,然后从压缩壳和加密壳的角度,重点探讨了脱壳技术的原理和方法。
最后对伪装壳和多重壳及程序自校验进行了探讨和分析。
关键词 PE 加壳 脱壳 伪装壳 多重壳 自校验O N UNPACK I NG TECHNOLO GY FO R PE F I L ESL i Lu L iu Q iuju Xu Tingr ong(School of Co m puter Science and Technology,Soocho w U niversity,Suzhou 215006,J iangsu,China )Abstract Packing Portable Executable (PE )files is an effective mean t o p r otect s oft w are,but mal w are can als o use packing t o p r otect the m selves .A s a virus analyst or a s oft w are security researcher,you must unpack the mal w are first,then can you analysis the m in detail .Taking the notepad p r ogra m in M icr os oftW indows as an in this paper we first analyzed the PE file structure and the p rinci p le of packing,and then expounded the general step s of unpacking .After that,in ter m s of the comp ressi on shell and encryp ti on shell,we f ocused on the p rinci p les and methods of unpacking technol ogy .Finally,we discussed and analyzed the ca mouflage shell,multi 2shell and self 2chec 2king .Keywords PE Packing Unpacking Ca mouflage shell Multi 2shell Self 2checking0 引 言PE 文件格式是W I N 32环境自带的跨平台可执行文件格式,常见的EXE 、DLL 、OCX 、SYS 、COM 等文件均是PE 格式。
使用该格式,在非I ntel 芯片的CP U 上,W indows 一样能识别和使用。
对PE 文件加壳,能较好地保护原程序。
但病毒和木马也会利用加壳技术来保护自己,因为加壳后程序执行结果不变,但代码发生了变化,从而使杀毒软件无法查杀。
作为一名病毒分析师或者软件安全研究员,如果不懂得脱壳技术,将很难对这些恶意程序进行分析。
据瑞星公司截获的病毒样本统计,90%以上的病毒文件都经过加壳处理,可见掌握脱壳技术十分重要。
现有文章大都进行加壳技术的探讨[1-3],本文则着重研究脱壳技术。
1 壳的介绍壳是一段附加在原程序上的代码,它先于真正的程序运行并拿到控制权,在完成程序保护任务后(检测程序是否被修改,是否被跟踪等),再将控制权转交给真正的程序,其运行过程与病毒有些相似。
在形式上又与W I N RAR 类的压缩软件类似,运行前都需要将原程序解压。
但壳对程序的解压是在内存中进行,对用户来说完全透明,用户感觉不到壳的存在。
壳分为压缩壳和加密壳。
压缩壳只是为了减少程序体积而对资源进行压缩,便于传输,具有一定的保护作用。
常见的压缩壳有UPX 、ASPCAK 、TE LOCK 、PE L I TE 、NSP ACK 等。
加密壳是使用各种手段对程序资源进行保护,防止其被反汇编或跟踪,文件加壳后是否变小不是其主要目标。
常见的加密壳有AR MA 2D I L LO 、ASPROTECT 、ACPROTECT 、EPE 、S VKP 等。
目前一些壳已兼具有两种功能,即能压缩资源,又能加密资源。
2 PE 结构框架PE 文件使用一个平面地址空间,所有代码和数据都被合并成一个很大的结构。
文件内容由属性相同的区块组成,各区块按页边界对齐,大小没有限制。
每个区块都有不同的名字,用来表示区块的功能。
图1是W indows98下记事本Notepad .exe 程序的PE 结构图。
从图中可以看出PE 文件由几个连续的区块组成。
先后由DOS 头部、PE 头部、区段表以及各个区段组成。
其中.text 是代码段,.data 是已初始化的数据段,.idata 是输入表段,.rsrc 是资源段,.rel oc 是基址重定位表段。
图1 W indows98记事本PE 结构图280 计算机应用与软件2010年虚拟偏移也称相对虚拟地址,是PE 程序载入到内存后在386保护模式下相对于基地址的偏移量。
物理偏移也称文件偏移,是PE 文件存储在磁盘上相对于文件头的偏移量。
原始大小是文件在磁盘上的结构大小。
从图1中可以清晰地看到DOS 头、PE 头、区段表和各个区段的排列顺序与大小。
使用W inhex 打开未加壳记事本程序,其DOS 头部和PE 头部的十六进制代码如图2所示。
图2 W inhex 打开Notepad .exe 的DOS 头和PE 头由图2可以看出DOS 头以“M Z ”(0x4D5A )标志开始,在偏移0x14和0x16处指明DOS 代码的入口I P 和CS,在偏移0x3C处指明PE 头的起始位置(0x00000080)。
紧接着是PE 头(在0x80处),它由“PE \0\0”(0x50450000)标识开始,其后是20个字节的文件头和224个字节的可选头,整个PE 头有248个字节。
在偏移0x86处指明区段个数0x0005,如图1所示正好5个区段。
在偏移0x A8处指明OEP (O riginal Entry Point 原始入口点,程序执行的第一条指令位置)地址为0x000010CC,在0x AC 处指明代码段基址(.text 段)为0x00001000,在0x B4处指明程序装载基址0x00400000。
另外PE 头还包含文件对齐大小、内存对齐大小等等其他信息。
其后是节表(secti on table ),它是一个结构型数组,其成员数表示该PE 文件的节数,每个成员中包含对应节的属性。
每个节成员有40个字节,该记事本有5个成员,共200个字节(十六进制为C8)。
最后就是各个区段结构,区段的大小没有限制。
3 加壳原理加壳是应用某种算法对原程序进行压缩(压缩壳)或加密(加密壳),并使程序运行时先运行对应的解压或解密代码。
加壳过程一般为,首先在原程序中新建一个区段用来存放加密加压和解密解压代码,其次将原程序数据压缩或加密,最后将程序的入口点修改为壳代码入口。
程序的入口点即程序开始执行的第一条指令的地址。
如图3是Notepad .exe 加A s pack 2.12壳后的PE 结构图。
从图中可以看出加壳后,程序会多.as pack 和.adata 两个区段,区段表的大小也增加到280个字节(十六进制:118)。
其中.as pack 是A s pack 2.12壳代码区段,.adata 是附加数据区段。
A s pack 属于压缩壳,通过对比发现,壳对原程序中的数据做了压缩处理,加壳后的区段原始大小均比未加壳时小。
图3 记事本使用A s pack 2.12加壳后的PE 结构图加壳会修改原程序的执行参数,如表1所示,是加壳前后Notepad .exe 的执行参数对比表。
从表中可以看出加壳后其入口点被修改成壳代码的区段,其首字节和EP 区段均发生了变化。
表1 notepad .exe 加壳前后参数对比表W indows 记事本未加壳加A s pack 壳后入口点(OEP )000010CC 0000D001文件偏移量000010CC 00004201EP 区段.text .as pack 首字节55,8B ,EC,8360,E8,03,00壳信息VC ++ 6.0A s pack 2.124 脱壳原理脱壳就是将加壳后的程序解压或者解密,使程序从原始入口点开始运行。
脱壳分为硬脱壳和软脱壳。
硬脱壳也称为静态脱壳,是根据加壳程序的算法,写出逆向的算法,就像压缩与解压缩一样。
如UPX 的壳就有相应的脱壳程序。
软脱壳也叫动态脱壳,该方法将程序加载到内存运行,使其自行脱壳后,抓取内存镜像,再重新构造标准的执行文件。
该方法能较好对付加密壳和变形壳。
脱壳一般会按查壳、寻找OEP 、du mp 程序、修复的顺序进行。
4.1 查 壳现有工具如PE I D 、F I 、PE 2SCAN 等都能较好查出壳的类型。
查壳的原理是将程序OEP 附近的代码和各种壳代码进行比较,从而判断程序是否加壳以及加哪种壳。
类似于杀毒软件查杀病毒,都是通过特征码进行扫描对比。
只是查壳的特征码对比一般都是在程序OEP 附近,而病毒的特征码则可以定位在程序的任何部分。
4.2 寻找O EP壳在完成自己的任务后,会将控制权转交给真正的程序。
由于壳代码和原始代码在不同的区段,两者之间距离较远,那么由壳代码区段运行到原始代码区段必定会存在一个大的跳转,因此可以根据大跳转来确定OEP 。
另外,每种语言编写的程序其OEP 处的代码都有自己的特征,类似查壳的原理,就可以根据代码特征来判定OEP 。
如表2所示,是不同的语言编写的程序在OEP 处的反汇编代码。
表2 使用不同语言编写的程序其O EP 处的反汇编代码表编程语言机器码汇编代码Del phi5588EC 83C4F0B8A86F4B00P USH E BPMOV EBP,ESP ADD ESP,210MOV EAX,PE .004B6F A8VC ++558BEC 83EC 4456P USH E BP MOV EBP,ESP S UB ESP,44P USH ESI VBFF256C10400068147C4000J MP DWORD PTR P USH PE .00407C14CALL <J MP .&MS VBVM60.#100>第9期 李露等:PE文件中脱壳技术的研究281Builder C++EB1066J MP SHORT PE.DB66Das m 6A00E8C50A0000P USH0CALL<J MP.&KERNEL32.Get M odul HandA>4.3 du m p内存所谓du mp就是转存,将内存中的进程数据抓取出来转存为文件格式。