脱UPX的四种方法

合集下载

(完整版)常见几种脱壳方法

(完整版)常见几种脱壳方法

----------------<小A分>----------------一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳(强壳)两种"UPX" "ASPCAK" "TELOCK" "PELITE" "NSPACK(北斗)" ... "ARMADILLO" "ASPROTECT" "ACPROTECT" "EPE(王)" "SVKP" ...顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。

当然加密壳的保护能力要强得多!-----------<小A分割线>-------------二、工具的认识OllyDBG ring3 shell层级别的动态编译工具、PEid、ImportREC、LordPE、softIce ring0级别调试工具-------------<小A分割>-------------------三、常见手动脱壳方法预备知识1.PUSHAD (入栈/压栈)代表程序的入口点,2.POPAD (弹栈/出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近3.OEP:程序的入口点,软件加壳就是隐藏了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。

UPX脱壳笔记

UPX脱壳笔记

这里脱的是一个UPX的壳:
首先把程序扔到OllyIce里面可以看到:
然后这里尝试使用ESP定理:即在ESP第一次改变时,对ESP的地址设置硬件字访问断点,这样可以在代码被UPX算法还原之后,跳转到程序的正常入口处。

然后F5运行,并没有直接到跳转到程序入口处的大跳位置,但是可以看到UPX的大跳就在眼前= =:
所以被还原后的程序入口点就是0x00445151(通过单步往下走,F4略过往回走的循环语句,也可以看到这个大跳的位置。

P.S.关于UPX壳的原理可以看参考文献链接。

)接下来走到大跳位置,跳到正常程序入口处:
然后去掉硬件断点,并使用LoadPE的dump功能dump目标程序:
先修正映像大小,然后再选择完整脱壳,这样可以得到第一步dump的程序,然后再使用ImportREC修复dump程序的OEP,OEP的信息通过OD自带的dump 功能查询或者直接填45151:
将正确的入口地址(OEP——Original Entry Point)填入ImportREC中,然后自动搜索IAT信息:
然后点击获取输入表得到修正IAT之后的程序函数输入表,然后再点击显示无效函数,愉快地发现没有无效函数,那么就可以直接修复转存文件了。

选择刚刚第一步dump下来的转储文件进行修复,修复完成之后脱壳完成:
相关参考的文章:
/forum.php?mod=viewthread&tid=294773&extra=page%3D1 %26filter%3Ddigest%26digest%3D1
/thread-16381-1-1.html。

upx脱壳方法

upx脱壳方法

upx脱壳方法UPX是一种广泛使用的可执行文件压缩工具,它可以将可执行文件压缩为较小的体积,同时保持其功能和完整性。

然而,一些恶意分析人员和软件破解者可能会使用UPX脱壳方法来绕过防护措施,对恶意软件进行分析或篡改。

在本文中,我们将介绍一些常见的UPX脱壳方法,并提供解决方案以保护可执行文件的安全性。

UPX使用一种称为Pack算法的压缩算法,这使得破解者可以很容易地进行脱壳操作。

以下是一些常见的UPX脱壳方法:1. 使用UPX扩展工具:一些破解者使用特定的UPX扩展工具,如UPXGui或UPXShell,来脱去UPX压缩的可执行文件。

这些工具简化了脱壳过程,使得攻击者能够更快速地解压被保护的可执行文件。

2. 反汇编和调试:使用逆向工程技术,攻击者可以将被压缩的可执行文件通过反汇编和调试操作还原为原始代码。

一旦得到了原始代码,攻击者可以轻松地修改和分析它。

3. 替换UPX头部:攻击者可以通过替换UPX头部来绕过UPX压缩的可执行文件的保护。

UPX头部是一个特殊的标识符,帮助识别文件是否经过UPX压缩。

攻击者可以通过删除或替换UPX头部,从而使可执行文件看起来像是未经过UPX压缩的。

为了保护可执行文件免受UPX脱壳攻击,我们可以采取以下措施:1. 使用反脱壳技术:一些保护工具提供了反脱壳功能,用于检测和阻止UPX脱壳操作。

这些技术能够检测恶意破解工具,并阻止其对文件进行脱壳。

2. 文件完整性校验:通过计算可执行文件的哈希值或使用数字签名技术,可以确保文件的完整性。

任何对文件进行篡改的尝试都会被检测到,并阻止执行。

3. 加密和混淆:使用加密算法和代码混淆技术,可以使恶意分析人员难以直接分析和篡改文件。

加密和混淆能够增加破解者解密的难度和时间成本。

4. 运行时防护:一些安全软件提供了运行时防护功能,可以实时监控和阻止对可执行文件的脱壳和篡改操作。

这些工具可以提高系统的安全性,并保护文件免受UPX脱壳等攻击。

解除脱UPX后的校验-寻找暗桩

解除脱UPX后的校验-寻找暗桩
77C09E5B ; ; ; ; ;85DB ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;test ebx,ebx
77C09E5D ; ; ; ; ;74 0B ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;je msvcrt.77C09E6A ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;//第3处
; ; ; ; ; ; ;
【加壳方式】 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay]
【脱壳声明】 我是个考古人在软件Software土地上发掘未知宝藏!
----------------------------------------------------------------------
用OD载入脱壳后代码我是DUMP_.EXE,来到这里
0040F765 d> 55 push ebp //这里是OEP
0040F766 8BEC mov ebp,esp
0040F768 6A FF push -1
0040F76A 68 903A4100 push dumped_.00413A90
77C09E73 ; ; ; ; ;E8 9BFEFFFF ; ; ; ; ; ; ; ; ;call msvcrt.77C09D13
看到前面有个RETN 第个可能入口是77C09E6A可能有个call从什么地方call过来;然而我们知道有些RETN也
可能是变形JMP(不过这个不太可能但我们对他也不可掉以轻心);第3个地方是77C09E5D他JMP过了RETN所
7C81CAA7 ; ; ; ; ;6A FF ; ; ; ; ; ;push -1

手脱UPX的四种方法

手脱UPX的四种方法
。。。。。。。。。。。
0040E938 11C9 adc ecx,ecx //跳到这里,继续F8
0040E93A 75 20 jnz short NOTEPAD.0040E95C //跳
。。。。。。。。。。。
0040E9F4 F2:AE repne scas byte ptr es:[edi]
0040E9F6 55 push ebp
0040E9F7 FF96 A4EC0000 call dword ptr ds:[esi+ECA4]
0040E9FD 09C0 or eax,eax
0040E9EE ^ 74 DC je short NOTEPAD.0040E9CC
0040E9F0 89F9 mov ecx,edi
0040E9F2 57 push edi
0040E9F3 48 dec eax
0040E9E8 95 xchg eax,ebp
0040E9E9 8A07 mov al,byte ptr ds:[edi]
0040E9EB 47 inc edi
0040E9EC 08C0 or al,al
0040E976 ^ E9 63FFFFFF jmp NOTEPAD.0040E8DE
0040E97B 90 nop
0040E97C 8B02 mov eax,dword ptr ds:[edx] //在这里F4,继续F8
0040E97E 83C2 04 add edx,4
0040E981 8907 mov dword ptr ds:[edi],eax
0040E983 83C7 04 add edi,4
0040E986 83E9 04 sub ecx,4

最新使用OllyDbg从零开始Cracking第三十四章-手脱UPX,修复IAT

最新使用OllyDbg从零开始Cracking第三十四章-手脱UPX,修复IAT

第三十四章-手脱UPX,修复IA T我们在上一章中给大家介绍了IT(导入表),IA T(输入函数地址表)的相关概念以及原理。

有的人可能会认为,我们只是想修复IA T呀,并不需要知道IA T的具体原理以及它是如何被填充的吧?不是有现成的IA T自动修复工具吗?可以很明确的告诉大家,了解操作系统是如何填充IA T的过程非常有必要的。

因为很多壳会检测这些常用的IA T修复工具,致其不能正常运行,在这种情况下,我们就需要自己进行相应的手工修复。

本章我们还是用最简单的CRACKME U PX作为例子,我们将对其进行脱壳以及修复IA T,让其能正常运行。

首先第一步我们来定位OEP,我们用OD加载CRACKME UPX。

这里我们用ESP定律来定位OEP,现在我们停在了入口点处,单击F7键执行PUSHAD。

在ESP寄存器值上面单击鼠标右键选择-Follow in Dump。

就可以在数据窗口中定位到刚刚PUSHAD指令保存到堆栈中的寄存器环境了,我们选中前4个字节,我们通过单击鼠标右键选择Breakpoint-Hardware,on access-Dword给这4个字节设置硬件访问断点。

运行起来,马上就断在了JMP OEP指令处。

我们直接按F7键单步到OEP处。

好了,现在我们处于OEP处,原程序区段已经解密完毕,我们现在可以进行dump了。

前面已经提到过,有很多dump的工具,OD有一个款插件OllyDump的dump效果也不错。

上一章中我们使用LordPE来进行dump 的,这里我们来使用另外一个工具PE TOOLS来进行dump。

我们用PE-TOOLS定位到CRACKME U PX所在的进程。

这里这个crackme.exe就是,因为我忘了把那个重命名的CRACKME UPX放到哪里去了,所以我又重新弄了一个新的,忘了改名字,直接命名为原来的名字crackme.exe了,当前这个crackme.exe进程停在了OEP处。

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

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

通达信主程序脱壳全记录(图文)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、点击“修复转存文件”按钮,选择前面已完成脱壳的新文件,程序会自动生成一个新的“******_。

脱UPX变形壳&去校验

脱UPX变形壳&去校验
00CE6D5B 60 pushad //F4下来
00CE6D5C - E9 A93C74FF jmp Hiddukel.0042AA0A //跳向OEP
0042AA0A 55 push ebp ; WSOCK32.#1139 //OEP!
大小=00865000 (8802304.)
宿主=Hiddukel 00400000
区段=code
类型=Imag 01001002
访问=R
初始访问=RWE
00CE6D4E 8903 mov dword ptr ds:[ebx],eax ; kernel32.ExitProcess //停在这里
00CE6C00 EB 10 jmp short Hiddukel.00CE6C12
00CE6C02 EB 00 jmp short Hiddukel.00CE6C04
00CE6C04 ^ EB EA jmp short Hiddukel.00CE6BF0
0041C097 |E8 E0DF0000 call Unpack_.0042A07C
0041C09C |83C4 04 add esp,4
0041C09F |3D 08220800 cmp eax,82208
0041C0A4 |7C 42 jl short Unpack_.0041C0E8
0042AA19 64:A1 00000000 mov eax,dword ptr fs:[0]
0042AA1F 50 push eax
0042AA20 64:8925 00000000 mov dword ptr fs:[0],esp
0042AA27 83EC 58 sub esp,58

upx脱壳方法 -回复

upx脱壳方法 -回复

upx脱壳方法-回复UPX(Ultimate Packer for eXecutables)是一种广泛使用的可执行文件压缩器和脱壳器。

它采用了先进的压缩算法,能够有效地减小可执行文件的体积,同时保持文件的可执行性。

然而,有时我们需要对UPX压缩过的可执行文件进行脱壳操作,以便进行进一步的分析或修改。

本文将一步一步介绍UPX脱壳的方法。

第一步:准备工作在开始UPX脱壳之前,我们需要先准备一些工具。

首先,我们需要下载并安装IDA Pro。

IDA Pro是一款非常强大的逆向工程软件,可以帮助我们分析和修改可执行文件。

其次,我们还需要下载并安装UPX工具集,以便进行脱壳操作。

最后,我们需要找到一个已经被UPX压缩过的可执行文件,作为我们的实验对象。

第二步:分析可执行文件打开IDA Pro,并导入我们选定的UPX压缩文件。

通过IDA Pro的静态分析功能,我们可以获取有关该文件的一些基本信息,例如文件的入口点地址和函数列表等。

这将有助于我们在后续操作中准确定位需要脱壳的代码。

第三步:寻找脱壳代码在IDA Pro中,我们需要找到UPX的脱壳代码。

UPX脱壳的主要原理是在运行时将压缩过的可执行文件还原为原始的可执行文件。

因此,UPX脱壳代码的位置通常在程序的入口点之后。

我们可以通过在IDA Pro中分析可执行文件的反汇编代码,寻找与UPX脱壳相关的代码段或函数。

这些代码段或函数通常包含有关文件解压缩和内存映射的指令。

第四步:研究脱壳代码找到UPX脱壳代码后,我们需要仔细研究这段代码的逻辑和功能。

通常,UPX脱壳代码会包含一系列指令,用于解压缩数据并将其映射到内存中。

通过对脱壳代码的分析,我们可以了解到UPX是如何解压缩和还原可执行文件的。

第五步:修改脱壳代码在研究了脱壳代码后,我们可以尝试对其进行修改,以实现我们的需求。

可能的修改包括改变解压缩的方式、修改解压缩后的文件内容等。

通过在IDA Pro中编辑脱壳代码,我们可以实现对UPX脱壳过程的定制。

脱壳基础知识入门

脱壳基础知识入门

脱壳基础知识入门现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。

越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。

除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。

壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹。

另外,论坛现在两极分化比较严重,高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但看到壳这么难,只好放弃了,造成新手与高手间一个断档,为了鼓励更多新人加入脱壳的行列,很有必要将壳有关知识总结一下。

主页提供的教学确实有点过时了,己到非更新不可了。

相对于密码学算法,脱壳并不难,只要肯花时间,短期内还是比较容易取得成绩的。

第一课 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格式的方法是自己先准备一个十六进制工具,如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操作系统的一种系统机制,与特定的程序设计语言无关。

upx加壳-出题过程的学习笔记

upx加壳-出题过程的学习笔记

upx加壳-出题过程的学习笔记gcc -static xxx.c -o xxxupx为压缩壳,将可执⾏⽂件进⾏压缩,当可执⾏⽂件过⼩时加壳会失败,所以此处采⽤了静态链接的⽅式进⾏编译;附上设计的源码:#include<stdio.h>#include<string.h>#include<windows.h>int main(){int a,b,c,d;int i;char answer[27];char seq1[]="are you a student at AEU?";char seq2[]="enter 1 or 0:";char seq3[]="welcome to the competition,do you want any hints?";char seq4[]="do you think the examiner is handsome?";char seq5[]="you are right!";char seq6[]="I modified the spack,You should try to remove the pack manually";char seq7[]="Listen!the flag is ";char seq00[]=" AEU{eeAmi3_";char flag[27]="AEU{eeAmi3_6e74rt_handi43}";char seq02[]="This is the first time for us to hold the competition,Looking forward to your performance\nHere's a present for you:";char seq03[]="Never give up\nNever lose hope.\nAlways have faith,\nIt allows you to cope.\nTrying times will pass,\nAs they always do.";char seq04[]="Just have patience,\nYour dreams will come true. \nSo put on a smile,\nYou'll live through your pain.\nKnow it will pass, \nAnd strength you will gain"; for(i=0;i<strlen(seq1);i++){printf("%c",seq1[i]);Sleep(90);}printf("\n");puts("enter 1 or 0:");scanf("%d",&a);if(a){for(i=0;i<strlen(seq3);i++){printf("%c",seq3[i]);Sleep(90);}printf("\n");puts("enter 1 or 0:");scanf("%d",&b);if(b){for(i=0;i<strlen(seq4);i++){printf("%c",seq4[i]);Sleep(90);}printf("\n");puts("enter 1 or 0:");scanf("%d",&c);if(c){for(i=0;i<strlen(seq5);i++){printf("%c",seq5[i]);Sleep(90);}printf("\n");for(i=0;i<strlen(seq6);i++){printf("%c",seq6[i]);Sleep(90);}printf("\n");for(i=0;i<strlen(seq7);i++){printf("%c",seq7[i]);Sleep(200);}for(i=0;i<strlen(seq00);i++){printf("%c",seq00[i]);Sleep(500);}Sleep(6000);puts(" (*^_^*)");puts("are you really want the flag?");for(i=0;i<strlen(seq02);i++){printf("%c",seq02[i]);Sleep(80);}printf("\n");for(i=0;i<strlen(seq03);i++){printf("%c",seq03[i]);Sleep(80);}printf("\n");for(i=0;i<strlen(seq04);i++){printf("%c",seq04[i]);Sleep(80);}printf("\n");for(i=0;i<strlen(seq7);i++){printf("%c",seq7[i]);Sleep(200);}for(i=0;i<strlen(flag);i++){printf("%c",flag[i]);Sleep(900);}printf("\n");puts("now,input your answer:");scanf("%s",answer);for(i=0;i<strlen(flag);i++){if(flag[i]=='e') flag[i]+=1;else if(flag[i]=='r') flag[i]-=1;}if(!strcmp(answer,flag))puts("right!");else puts("wrong,Is it really that simple?");Sleep(6000);}else{puts("You can't solve the problem");}}else{puts("I can't give you a hint");}}else{puts("sorry,identity failed");}return 0;}upx xxx.exe -o xxx.exe使⽤upx⼯具完成加壳,正常情况下upx⼯具可以顺利完成脱壳upx -d xxx.exe但对壳进⾏修改后该⼯具便失效。

软件加壳脱壳技术教程

软件加壳脱壳技术教程
附加一点内容
一.壳的概念
作者编好软件后,编译成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必修。

脱壳教程_精品文档

脱壳教程_精品文档

脱壳教程标题:脱壳教程引言:脱壳是指将软件或应用程序的包装层(也称为保护壳或加密层)移除,以便对其进行更深入的分析、修改或逆向工程。

脱壳过程可以帮助软件开发人员或安全研究人员理解程序的内部运行机制,发现其中的漏洞或者进行优化改进。

本文将介绍脱壳过程的基本原理和几种常见的脱壳工具以及其使用方法。

一、脱壳的基本原理脱壳的基本原理是通过破解或绕过软件的保护机制来移除保护壳。

保护机制通常包括各种检测和防御技术,如代码混淆、加壳、逆向工程等。

常见的保护壳有UPX、ASProtect、Enigma等。

脱壳的过程涉及对程序进行调试、分析和修改。

二、脱壳工具介绍及使用方法1. OllyDbgOllyDbg是一款著名的逆向工程和调试工具,也是脱壳过程中经常使用的工具之一。

它具有强大的调试和反汇编功能,可以帮助分析程序的执行流程、内存变化等。

使用OllyDbg进行脱壳时,首先需要加载待脱壳的程序,然后设置断点,跟踪程序执行,找到关键的保护机制的位置,最终移除保护壳。

2. IDA ProIDA Pro是一款功能强大的反汇编和逆向工程工具。

它可以将程序转换为易读的汇编代码,并提供强大的导航和分析功能。

脱壳时可以使用IDA Pro来分析和修改程序的内存和代码。

它可以帮助找到程序的入口点、解密过程等,从而移除保护壳。

3. x64dbgx64dbg是一款开源的调试器工具,适用于32位和64位的Windows系统。

它具有用户友好的界面和丰富的调试功能,并支持脱壳过程中的动态调试和反调试技术。

使用x64dbg进行脱壳时,可以跟踪程序的执行流程、查看内存变化,找到关键代码并进行修改。

三、脱壳过程示例以某款加壳的软件为例,介绍基本的脱壳过程。

1. 加载待脱壳的程序到脱壳工具中,并设置断点。

2. 运行程序,在断点处停下来,观察程序的状态和执行流程。

3. 跟踪程序的执行,查找关键的保护机制位置,例如解密函数、保护壳的入口等。

4. 分析并修改程序的内存和代码,移除保护壳。

upx脱壳指令

upx脱壳指令

upx脱壳指令摘要:1.UPX脱壳的概念与作用2.UPX脱壳指令的原理3.常用UPX脱壳指令介绍4.UPX脱壳的优缺点5.总结正文:随着计算机技术的发展,各种病毒、恶意软件层出不穷,为了保护计算机安全,人们发明了各种加密技术对软件进行保护。

UPX(Ultra Police eXtractor)就是一种广泛应用于软件加密的技术。

本文将介绍UPX脱壳的概念、原理以及常用指令,并对其优缺点进行分析。

1.UPX脱壳的概念与作用UPX脱壳,指的是通过对加密的软件进行处理,使其恢复原始状态,以便于进一步分析、修改或反编译。

脱壳后的软件可以让我们更好地了解其内部结构,从而有针对性地进行安全防护和打击恶意行为。

2.UPX脱壳指令的原理UPX加密算法采用了一种基于密钥的加密方式,将原始代码和加密后的代码相互转换。

脱壳的关键在于找到正确的密钥,通过对加密代码进行处理,使其恢复为原始代码。

常用的脱壳方法包括:暴力破解、字典攻击、反汇编等。

3.常用UPX脱壳指令介绍以下是一些常用的UPX脱壳指令,供大家参考:- 暴力破解:通过穷举法尝试所有可能的密钥,直至找到正确的密钥。

这种方法适用于密钥长度较短的情况,但效率较低,消耗资源较大。

- 字典攻击:根据UPX加密的特点,构建一个包含可能密钥的字典,然后逐一尝试字典中的密钥,直至找到正确的密钥。

这种方法相较于暴力破解,效率更高,但仍然需要较大的资源和时间。

- 反汇编:通过对加密代码进行反汇编,分析代码内部的逻辑关系,进而找到密钥。

这种方法需要对汇编语言有一定了解,但成功率较高。

4.UPX脱壳的优缺点优点:- 能够帮助我们更好地了解加密软件的内部结构,为进一步分析、修改或反编译提供便利。

- 有助于打击恶意软件,提高计算机安全性。

缺点:- 脱壳过程消耗大量资源和时间,尤其是对于复杂加密算法和长密钥的情况。

- 脱壳成功率受限于加密算法的强度和密钥长度。

5.总结UPX脱壳作为一种有效的软件加密破解手段,在计算机安全领域具有重要意义。

脱壳知识——精选推荐

脱壳知识——精选推荐

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

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

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

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

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

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

程序作者在编好软件后,编译成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 清中断允许位.其实上⾯我们⽤到的也就主要有⼀些赋值指令和⼀些跳转指令⽽已,⼤部分我们⽬前是⽤不到的。

(完整版)常见几种脱壳方法(可编辑修改word版)

(完整版)常见几种脱壳方法(可编辑修改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。

手动脱UPX壳实战

手动脱UPX壳实战

⼿动脱UPX壳实战作者:Fly2015Windows平台的加壳软件还是⽐較多的,因此有⾮常多⼈对于PC软件的脱壳乐此不彼,本⼈菜鸟⼀枚,也学习⼀下PC的脱壳。

要对软件进⾏脱壳。

⾸先第⼀步就是查壳。

然后才是脱壳。

推荐⽐較好的查壳软件:PE Detective 、Exeinfo PE、DIE⼯具。

须要脱壳的程序是吾爱破解论坛的windows逆向破解培训第⼀课的作业题1.1.对该程序(吾爱破解培训第⼀课作业⼀.exe)进⾏查壳PE Detective的查壳结果:Exeinfo PE的查壳结果:DIE的查壳的结果:DIE查壳有⼀个优点就是能从查壳的结果中得知被加壳的程序是⽤什么语⾔编写的。

这个⽐較实⽤。

2.进⾏UPX脱壳实战该程序加载OD以后发现有pushad指令,⾮常显然该程序需採⽤ESP定律进⾏脱壳。

F8单步⾛⼀步。

然后右键选择ESP寄存器下HW break硬件断点。

F9执⾏程序,该程序会在硬件断点的地⽅⾃⼰主动断下来,如图:在JMP指令的位置F2下断点,然后F9执⾏到该断点00457765处,地址0041DDAC处就是被加壳程序原来的OEP处。

⼀般被加壳的程序在解壳以后都会有⼀个跳转,可能是JMP也可能是其它的指令。

F7跟进到地址0041DDAC处,如图:是不是⾮常眼熟啊,VS2008等编译的程序的⼊⼝点汇编指令。

下⼀步就能够使⽤OD的插件OllyDump或者(Load PE+RECImport)⼯具进⾏程序的脱壳和IAT表的修复:被加壳程序的真实的OEP的RVA地址为1DDAC,这⾥IAT表的重建选择⽅式1,依据实际情况选择IAT表的修复⽅式。

Ok。

⽤查壳程序。

对脱壳程序进⾏查壳,结果例如以下:执⾏⼀下刚才被脱壳的程序,证明脱壳成功!UPX脱壳分析⽂档和完美脱壳后的程序下载地址;。

脱羟基的方法

脱羟基的方法

脱羟基的方法
脱羟基的方法有多种,其中一种常用的方法是酸催化下的水解反应。

在酸性条件下,羟基能够被质子化,使得其更容易被亲核试剂进攻。

常见的亲核试剂包括醇、醚、硫醇等。

例如,在酸性条件下,醇可以被氧化成酮或酯,醚可以被裂解成两个烷烃,硫醇可以被氧化成亚砜或砜。

另一种脱羟基的方法是通过氧化反应,常用的氧化剂包括过氧化氢、高锰酸钾、硝酸等。

这些氧化剂可以将醇氧化成羧酸或酮,但是这个方法通常不适用于含有其他敏感官能团的化合物。

另外,还原反应也是一种可以用来脱羟基的方法。

在还原剂的作用下,醇可以被还原成烃或者醚。

这个方法通常适用于含有其他敏感官能团的化合物。

除此之外,有些化合物可以通过与其他的化合物发生反应来脱去羟基。

例如,有些醇可以与卤代烃发生反应,生成醚和卤化氢;有些醇可以与羧酸发生反应,生成酯和氢气。

总之,脱羟基的方法有很多种,不同的方法适用于不同的化合物。

在实际应用中,需要根据具体情况选择合适的方法来进行脱羟基反应。

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

---------------------------------------------------------------------------------手脱UPX的四种方法首先,查壳,使用PEID是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo,使用FI 为UPX v1.08接下来用OD载入,提示为“压缩代码是否继续分析”,我们选择否我在这里介绍几种方法,请看我的操作。

方法1:单步跟踪(最常见的方法)0040E8C0 N> 60 pushad //停在这里了,我们F8单步0040E8C1 BE 15B04000 mov esi,NOTEPAD.0040B0150040E8C6 8DBE EB5FFFFF lea edi,dword ptr ds:[esi+FFFF>0040E8CC 57 push edi0040E8CD 83CD FF or ebp,FFFFFFFF0040E8D0 EB 10 jmp short NOTEPAD.0040E8E2 //跳》》》》0040E8E2 8B1E mov ebx,dword ptr ds:[esi] //跳到这里0040E8E4 83EE FC sub esi,-40040E8E7 11DB adc ebx,ebx0040E8E9 ^ 72 ED jb short NOTEPAD.0040E8D8 //这里要往回跳了0040E8EB B8 01000000 mov eax,1 //F4,然后继续F80040E8F0 01DB add ebx,ebx0040E8F2 75 07 jnz short NOTEPAD.0040E8FB //跳》》》》0040E8FB 11C0 adc eax,eax //来到这里,F8继续0040E8FD 01DB add ebx,ebx0040E8FD 01DB add ebx,ebx0040E8FF ^ 73 EF jnb short NOTEPAD.0040E8F00040E901 75 09 jnz short NOTEPAD.0040E90C //跳》》》》0040E90C 31C9 xor ecx,ecx //跳到这里,继续F80040E90E 83E8 03 sub eax,30040E90E 83E8 03 sub eax,30040E911 72 0D jb short NOTEPAD.0040E920 //跳》》》》0040E920 01DB add ebx,ebx //跳到这里,继续F80040E922 75 07 jnz short NOTEPAD.0040E92B //跳》》》0040E92B 11C9 adc ecx,ecx //跳到了这里,继续F80040E92D 01DB add ebx,ebx0040E92F 75 07 jnz short NOTEPAD.0040E938 //跳》》》0040E938 11C9 adc ecx,ecx //跳到这里,继续F80040E93A 75 20 jnz short NOTEPAD.0040E95C //跳》》》》0040E95C 81FD 00F3FFFF cmp ebp,-0D00 //来到这,继续F8 0040E962 83D1 01 adc ecx,10040E965 8D142F lea edx,dword ptr ds:[edi+ebp]0040E968 83FD FC cmp ebp,-40040E96B 76 0F jbe short NOTEPAD.0040E97C0040E96D 8A02 mov al,byte ptr ds:[edx]0040E96F 42 inc edx0040E970 8807 mov byte ptr ds:[edi],al0040E972 47 inc edi0040E973 49 dec ecx0040E974 ^ 75 F7 jnz short NOTEPAD.0040E96D //要往回跳了0040E976 ^ E9 63FFFFFF jmp NOTEPAD.0040E8DE0040E97B 90 nop0040E97C 8B02 mov eax,dword ptr ds:[edx]// F4,继续F8 0040E97E 83C2 04 add edx,40040E981 8907 mov dword ptr ds:[edi],eax0040E983 83C7 04 add edi,40040E986 83E9 04 sub ecx,40040E989 ^ 77 F1 ja short NOTEPAD.0040E97C0040E98B 01CF add edi,ecx0040E98D ^ E9 4CFFFFFF jmp NOTEPAD.0040E8DE //要往回跳了。

0040E992 5E pop esi //这里F4,继续F80040E993 89F7 mov edi,esi0040E995 B9 DD000000 mov ecx,0DD0040E99A 8A07 mov al,byte ptr ds:[edi]0040E99C 47 inc edi0040E99D 2C E8 sub al,0E80040E99F 3C 01 cmp al,10040E9A1 ^ 77 F7 ja short NOTEPAD.0040E99A //要往回跳了0040E9A3 803F 00 cmp byte ptr ds:[edi],0 //这里F4,继续F8 0040E9A6 ^ 75 F2 jnz short NOTEPAD.0040E99A //要往回跳了0040E9A8 8B07 mov eax,dword ptr ds:[edi] // F4,继续F8 0040E9AA 8A5F 04 mov bl,byte ptr ds:[edi+4]0040E9AD 66:C1E8 08 shr ax,80040E9B1 C1C0 10 rol eax,100040E9B4 86C4 xchg ah,al0040E9B6 29F8 sub eax,edi0040E9B8 80EB E8 sub bl,0E80040E9BB 01F0 add eax,esi0040E9BD 8907 mov dword ptr ds:[edi],eax0040E9BF 83C7 05 add edi,50040E9C2 89D8 mov eax,ebx0040E9C4 ^ E2 D9 loopd short NOTEPAD.0040E99F //要往回跳了0040E9C6 8DBE 00C00000 lea edi,dword ptr ds:[esi+C000> //F4继续F8 0040E9CC 8B07 mov eax,dword ptr ds:[edi]0040E9CE 09C0 or eax,eax0040E9D0 74 3C je short NOTEPAD.0040EA0E0040E9D2 8B5F 04 mov ebx,dword ptr ds:[edi+4]0040E9D5 8D8430 14EC00>lea eax,dword ptr ds:[eax+esi+>0040E9DC 01F3 add ebx,esi0040E9DE 50 push eax0040E9DF 83C7 08 add edi,80040E9E2 FF96 A0EC0000 call dword ptr ds:[esi+ECA0]0040E9E8 95 xchg eax,ebp0040E9E9 8A07 mov al,byte ptr ds:[edi]0040E9EB 47 inc edi0040E9EC 08C0 or al,al0040E9EE ^ 74 DC je short NOTEPAD.0040E9CC0040E9F0 89F9 mov ecx,edi0040E9F2 57 push edi0040E9F3 48 dec eax0040E9F4 F2:AE repne scas byte ptr es:[edi]0040E9F6 55 push ebp0040E9F7 FF96 A4EC0000 call dword ptr ds:[esi+ECA4]0040E9FD 09C0 or eax,eax0040E9FF 74 07 je short NOTEPAD.0040EA080040EA01 8903 mov dword ptr ds:[ebx],eax0040EA03 83C3 04 add ebx,40040EA06 ^ EB E1 jmp short NOTEPAD.0040E9E9 //要往回跳了0040EA08 FF96 A8EC0000 call dword ptr ds:[esi+ECA8]0040EA0E 61 popad //这里F4,继续F8 0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC //在这里直接跳到了OEP 》》》》004010CC 55 push ebp //来到这里,在此dump004010CD 8BEC mov ebp,esp004010CF 83EC 44 sub esp,44其他操作请看动画方法2:ESP定律手动脱壳0040E8C0 N> 60 pushad //停在这里了,我们F8单步0040E8C1 BE 15B04000 mov esi,NOTEPAD.0040B015 //ESP突现,0012FFA4dd 0012FFA4回车,断点--硬件访问--WORD,F9运行,直接来到这里0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC //来到这单步就到了OEP不详述,和方法一一样了方法3:内存镜像法(由于经过了方法2和方法3大家都熟悉了代码,我在这里就不写了)ALT+M打开内存找到.rsrc,F2下断,F9运行。

ALT+M打开内存找到UPX0,F2下断,F9运行0040EA01 8903 mov dword ptr ds:[ebx],eax//来到这,F8继续0040EA03 83C3 04 add ebx,40040EA06 ^ EB E1 jmp short NOTEPAD.0040E9E90040EA08 FF96 A8EC0000 call dword ptr ds:[esi+ECA8]0040EA0E 61 popad0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC其他的就不说了~请看动画。

相关文档
最新文档