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

----------------<小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。
如何将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的脱壳加壳傻瓜化注:如果程序没有加壳那么我们就可以省去第二步的脱壳了,直接对软件进行分析了。
手脱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
轻松手动脱壳ASPack 2.12 Alexey Solodovnikov

00452131 78 2C js short 0045215F
00452133 AC lods byte ptr [esi]
00452334 |3985 45050000 cmp [ebp+545], eax
0045233A |75 24 jnz short 00452360
0045233C |57 push edi
【详细过程】
脱壳前先用PEID查壳,得出为ASPack 2.12 -> Alexey Solodovnikov加壳类型。使用OD脱壳可增强手动脱能力
00452001 > 60 pushad ; pushhad关键字 F8跳过
00452134 3C E8 cmp al, 0E8
00452136 74 0A je short 00452142
00452138 EB 00 jmp short 0045213A
00452152 8906 mov [esi], eax
00452154 83C3 05 add ebx, 5
00452157 83C6 04 add esi, 4
0045215A 83E9 05 sub ecx, 5
0045215D ^ EB CE jmp short 0045212D ; 不能让他朝回跳到0045212D,要在下一句处下断按F4
0045215F 5B pop ebx ; 按F4
00452160 5E pop esi
00452177 8BB5 52010000 mov esi, [ebp+152]
0045217D C1F9 02 sar ecx, 2
手动脱壳

手动脱壳(中英文对照版)翻译:IceWorld /时间:2000年5月18日形式:中英文对照this is release 6 of the winice dumper.-----news.(新功能)------ source code included as usual, it's a dynamic VxD now, no need to patchwinice itself (happens runtime). stuff in static code and data segments(_STEXT and _SDATA) can be changed, but you must reboot before loadingthe new version.同以往一样,包括程序源代码。
winice dumper现是一个动态虚拟设备驱动程序,不必要补缀winice本身(运行时间时发生)。
添加的静态代码和数据段(_STEXT and _SDATA)可以改变,但是在装入新版本时你必需重新启动电脑。
- the new PAGEIN command has a new syntax which eventually willlet it dostuff it was never meant to ;-), see the details somewhere below...新的进入页面命令是一个新的构造,现最终可以完成填充功能。
具体请看下面:- certain subcommands need to call win32 API functions whose addresses arelooked up by using winice's internal symbol tables. for this to work youneed to have kernel32 and user32 exports loaded into winice (winice.dator loader32/file/load exports).某些子命令需调用win32 API功能,这些地址看起来是应用了winice 的国内符号表。
常见几种软件脱壳方法

常见⼏种软件脱壳⽅法⼀、概论壳出于程序作者想对程序资源压缩、注册保护的⽬的,把壳分为压缩壳和加密壳(强壳)两种"UPX" "ASPCAK" "TELOCK" "PELITE" "NSPACK(北⽃)" ..."ARMADILLO" "ASPROTECT" "ACPROTECT" "EPE(王)" "SVKP" ...顾名思义,压缩壳只是为了减⼩程序体积对资源进⾏压缩,加密壳是程序输⼊表等等进⾏加密保护。
当然加密壳的保护能⼒要强得多!⼆、⼯具的认识OllyDBG ring3 shell层级别的动态编译⼯具、PEid、ImportREC、LordPE、softIce ring0级别调试⼯具三、常见⼿动脱壳⽅法预备知识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。
脱壳找OEP7种基本方法

脱壳找OEP7种基本方法七种找OEP的方法OD手动脱壳的7种法则方法一:单步跟踪法1.用OD载入,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。
也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入7.一般有很大的跳转(大跨段),比如jmp XXXXXX 或者JE XXXXXX 或者有RETN 的一般很快就会到程序的OEP。
PS:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。
一般情况下可以轻松到达OEP!方法二:ESP定律法ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突变成红色。
(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!3.选中下断的地址,断点--->硬件访--->WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。
方法三:内存镜像法1:用OD打开软件!2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP!方法四:一步到达OEP1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处2.来到大跳转处,点下F8,到达OEP!方法五:最后一次异常法1:用OD打开软件2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m!4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次)5:在OD的右下角我们看见有一个"SE句柄",这时我们按CTRL+G,输入SE句柄前的地址!6:按F2下断点!然后按SHIFT+F9来到断点处!7:去掉断点,按F8慢慢向下走!8:到达程序的OEP!方法六:模拟跟踪法1:先试运行,跟踪一下程序,看有没有SEH暗桩之类2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations)内存镜像,项目30地址=0054B000大小=00002000 (8192.)Owner=check 00400000区段=.aspack包含=SFX,imports,relocations类型=Imag 01001002访问=R初始访问=RWE3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。
手动脱壳简简单单

手动脱壳简简单单在我们进行逆向分析的时候,通常会遇到有些文件被加密处理过,也就是我们通常所说的被加了壳,这时他的内部结构都已经改变,我们想要继续分析是很麻烦的,所以我们需要把它从壳中分离出来,也就是我们常说的脱壳。
现在越来越多的软件都使用了加壳的保护方法,所以脱壳是我们在逆向分析过程中很主要的步骤,掌握它至关重要壳是最早出现的一种专业加密软件。
不同的壳的侧重点也不同,有的侧重于压缩,有的侧重于加密,所以出现了压缩壳和加密壳。
压缩壳的特点是减小软件的体积,我们常见的有:UPX,ASPack,PECompack等。
加密壳的则侧重于加密,保护强度较大,常见的有:ASProtect,Armadillo,Themida等。
第一步寻找OEP★OEP(Original Entry Point):程序的原入口点,就是壳程序在完成了对原程序的还原后,开始跳转到刚还原的程序执行,此时的地址就是入口点的值。
1 单步跟踪首先,我们运行peid, 将我们要检测的程序拖到上面,可以看到它是用aspack加的壳,如图1。
我们运行OD,点击菜单栏中的“文件”→“打开”,把我们需要脱壳的文件加载进来,接着就会弹出一个对话框“模块……你仍要继续分析吗”,如图2,我们选择“否”(不管什么方法脱壳都要按“否”),程序就会停以下的代码处:01013001 > 90 nop01013002 60 pushad01013003 E8 03000000 call 0101300B01013008 - E9 EB045D45 jmp 465E34F80101300D 55 push ebp0101300E C3 retn0101300F E8 01000000 call 0101301501013014 EB 5D jmp short 01013073我们按F8来跟踪一下,当到了call 0101300B这里的时候,记事本自己打开了,我们按Ctrl+F2重新载入文件,再来跟踪,当我们再次遇到call 0101300B这一句的时候我们按F7跟进,代码会来到这里:0101300B 5D pop ebp0101300C 45 inc ebp0101300D 55 push ebp0101300E C3 retn我们继续F8来跟踪,当到了retn一句时,程序返回了,停在了call的下面一句jmp465E34F8上,跳转以后代码来到了下面的这一句call 01013015,继续F8,如果遇到程序往回跳,那么我们就在下一句代码处按F4,这样跟踪一段时间以后,我们会看到这样的代码:010133BB 68 9D730001 push 0100739D010133C0 C3 retn再F8一下我们的程序就返回了了这里:0100739D 6A 70 push 700100739F 68 98180001 push 01001898010073A4 E8 BF010000 call 01007568到这里,我们就已经到达OEP,单步跟踪法测试成功。
软件加壳脱壳技术教程

一.壳的概念
作者编好软件后,编译成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必修。
MOLEBOX OVERLAY 直接手动脱壳

由于程序运行时提示缺少CAR.CDR文件 估计OVERLAY中的数据是程序运行时用到的普通文件
分析中发现
3E2428 压缩了的 文件名 起始位置
3E4BC6 这里开始记录文件的属性 以四个双字为一个结构 第一个双字为内存中文件名位置 第二个双字为文件数据在EXE文件中的相对位置 第三个双字为文件的大小 第四个双字为关键字 是后以两个全零双字结束
004071AC - FF25 00745D00 JMP DWORD PTR DS:[5D7400] ; patch科?006E8D5B 壳模拟FindFirstFile
00407134 - FF25 2C745D00 JMP DWORD PTR DS:[5D742C] ; patch科?006E9B6A 壳模拟CreateFile
DS:[005D5D48]=00DC4470, (ASCII "F:\unpackme\moleBox\V3.2x\") 路径
看看程序是如何调用READFILE函数发现发现如下代码
0041C42B 0FB7D7 MOVZX EDX,DI
0041C42E
006DC700 61 POPAD
006DC900 在这里插放修改代码
pop eax
MOV DWORD PTR SS:[ESP+24],EAX
push eax
mov ax,26eb
mov word ptr [005CFBB4],ax
pop eax
004E1F4A FF50 18 CALL DWORD PTR DS:[EAX+18] ;创建快捷方式
DS:[003E5A46]=003E37DA, (ASCII "PICTURE\C9.1.2.2.JPG")
360脱壳方法

360脱壳方法通常涉及到一系列的逆向工程技巧,具体如下:
1. 过掉反调试:需要找到并绕过360加固的反调试机制。
这可能涉及到对加固应用的内存进行分析,寻找和修改与反调试相关的代码部分。
2. 获取原APK的classes.dex文件:这是脱壳的关键一步,因为classes.dex文件包含了应用程序的大部分代码。
可以尝试从内存中DUMP出原始的classes.dex文件。
在Dalvik虚拟机下,可能需要自己实现加载classes.dex的代码,而在ART环境下,操作空间可能会更小。
3. 使用MT管理器脱壳:MT管理器是一个常用的工具,可以用来进行APK文件的分析、编辑和脱壳。
通过MT管理器,可以对APK包中的文件进行操作,尝试去除加固壳的部分。
4. IDA手动脱壳:IDA(Interactive Disassembler)是一个强大的逆向工程工具,可以用来静态分析和动态调试程序。
在Dalvik模式下,可以在memcmp处进行断点,结合静态和动态分析来寻找反调试点,并在JNI_Onload处dump出so文件进行修复。
去壳的步骤 六

去壳的步骤六如何将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的脱壳加壳傻瓜化注:如果程序没有加壳那么我们就可以省去第二步的脱壳了,直接对软件进行分析了。
简单的逆向手动脱壳例题

简单的逆向手动脱壳例题
逆向工程是指对已经编译或加密的程序进行分析和破解的过程。
手动脱壳是指通过手动分析程序的代码和结构来去除程序的保护措施。
以下是一个简单的逆向手动脱壳的例题:
假设有一个使用了简单壳保护的可执行文件,你想要脱去这个
壳以便分析其内部结构和代码。
首先,你需要使用逆向工程工具
(如IDA Pro、OllyDbg等)打开这个可执行文件,然后分析其代码
段和数据段。
你需要寻找壳代码的入口点和保护措施,比如加密算
法或反调试技术。
接下来,你需要理解壳是如何工作的,包括它是如何加密或隐
藏原始代码的。
你可以通过动态调试来观察程序在运行时的行为,
或者静态分析来查看程序的代码逻辑。
一旦你理解了壳的工作原理,你可以开始编写代码来解密或者绕过这些保护措施。
在解密或绕过壳的过程中,你需要小心处理程序的内存和寄存
器状态,确保不会对程序造成不可逆的损坏。
一旦成功去除了壳,
你就可以分析原始的程序代码,包括其功能、逻辑和数据结构。
需要注意的是,逆向工程和脱壳是复杂且需要丰富经验的技术领域,需要深入的计算机系统知识和编程技能。
在实际操作时,务必遵守当地的法律法规,不要进行未经授权的逆向工程行为。
壳,加壳,脱壳,介绍壳的一些基本常识

壳,加壳,脱壳,介绍壳的一些基本常识免杀入门 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)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就是原点了。
有了这个原点,一切都简单了。
好了有了简要的介绍,我们来看看壳的加载过程吧。
手动银杏脱壳机的设计与试验

当碾搓砂轮外缘 间隙 1 i,转速 5 2ml l O~6 mi ,分别经水 煮 、微波 、晒干处理和未经 预处理的银杏 破壳 率 0r n时 /
接近 10 ,整仁率 分别为 5 % 、7 % 、4 %和 4 %. 0% 8 3 5 3 关键词 :银杏;手动脱壳试验 ;碾搓式 ; 脱壳机 中图分类号 : 2 64 ¥2 . 文献标识码 :A
手动 银 杏脱 壳机 的设ห้องสมุดไป่ตู้计 与试 验
黄武强 , 吴韶棠 , 陈永嘉 , 方壮锐 , 苏永坚 , 朱立学
( 恺农 业工程 学 院 机 电工程 学 院,广 东 广 州 5 0 2 ) 仲 12 5
摘要 :针对银杏物料特性和脱壳要求 ,分析对 比了主要的脱 壳方法 ,设计了一 种手摇链 传动碾搓式银杏脱壳机.
gid ds rn ik,t e r t t g s e d,ec W i h r —ra me so o c o k n h oa i p e n t. t te p e te t nt fp a h c o i g,mi rwa e he t g,d ・ h c o v ai n r
y g o opet a n ,h rc e t cak dgnk u u ni et a ts dm t a) a i , r r— et t t cak dr e( rce igon t a tyi t t t a r 1 w s n n r me e a q t n h o le e e i o 0 % , n h t rt e e rt it rt enl f h l dg goq a tyi ett s d f 0 1 a dtei e a dkr la s(ne ae kre o e e i k u ni t a t t ng e n e g d s l n t nh o l e e m t a)w r 8 、7 % 、4 % ad4 % , ep c vl, hl t ue ig tr lo eet — ae 1 ee5 % i r 3 5 n 3 rset e w i eotr r ei ev f h x u i y eh fn n a t r
稻谷脱壳原始方法

稻谷脱壳原始方法
稻谷脱壳是将稻谷的外壳去掉,只留下粒内部的米粒,使其可食用。
在现代农业中,人们通常采用机械化的方法对稻谷进行脱壳。
但在古代和一些落后地区,人们仍然采用原始方法进行脱壳。
脱壳的第一步是将稻谷洗净。
将稻谷放入水中浸泡,然后搓揉几次,使外壳松动。
然后将稻谷翻倒在竹篾或木板上晾干。
当稻谷晾干后,可以使用手动的脱壳板对其进行脱壳。
脱壳板通常是由一个长方形的木板和一个木质的抽屉组成。
稻谷被放入木板的顶部,然后使用手动的柄来碾压稻谷。
在碾压的过程中,稻壳会从米粒上分离出来并落入抽屉中,米粒则会从另一端出来。
另一种原始方法是使用竹筒或木筒,将稻谷和水一起放入其中,然后用手将其摇晃。
稻谷的外壳会随着水流和摇晃而松动,并最终剥落。
这种方法通常需要多次重复,以确保所有的外壳都被去除。
这些原始的稻谷脱壳方法虽然需要更多的劳动力和时间,但在缺乏机械设备的地区仍然是一种常见的做法。
(完整版)常见几种脱壳方法(可编辑修改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壳实战作者: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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
什么是脱壳技术?在一些电脑软件里有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行拿到控制权,然后完成它们保护软件的任务。
就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。
由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。
就像电脑病毒和自然界的病毒一样,其实都是命名上的方法罢了。
从功能上抽象,软件的壳和自然界中的壳相差无几。
无非是保护、隐蔽壳内的东西。
而从技术的角度出发,壳是一段执行于原始程序前的代码。
原始程序的代码在加壳的过程中可能被压缩、加密……。
当加壳后的文件执行时,壳这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。
软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。
关于“壳”以及相关软件的发展历史请参阅吴先生的《一切从“壳”开始》。
(一)壳的概念:作者编好软件后,编译成exe可执行文件。
1.有一些版权信息需要保护起来,不想让别人随便改动如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2.需要把程序搞的小一点,从而方便使用。
于是需要用到一些软件,它们能将exe可执行文件压缩。
3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。
实现上述功能,这些软件称为加壳软件。
(二)加壳软件最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK;PETITE NEOLITE(三)侦测壳和软件所用编写语言的软件,因为脱壳之前要查他的壳的类型。
1.侦测壳的软件 fileinfo.exe 简称 fi.exe (侦测壳的能力极强)。
2.侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒)推荐。
language2000中文版(专门检测加壳类型)。
3.软件常用编写语言Delphi;VisualBasic (VB)最难破;VisualC (VC)。
(四)脱壳软件。
软件加壳是作者写完软件后,为了保护自己的代码或维护软件产权等利益所常用到的手段。
目前有很多加壳工具,当然有盾,自然就有矛,只要我们收集全常用脱壳工具,那就不怕他加壳了。
软件脱壳有手动脱和自动脱壳之分,下面我们先介绍自动脱壳,因为手动脱壳需要运用汇编语言,要跟踪断点等,不适合初学者,但我们在后边将稍作介绍。
=======================================================================加壳一般属于软件加密,现在越来越多的软件经过压缩处理,给汉化带来许多不便,软件汉化爱好者也不得不学习掌握这种技能。
现在脱壳一般分手动和自动两种,手动就是用TRW2000、TR、SOFTICE等调试工具对付,对脱壳者有一定水平要求,涉及到很多汇编语言和软件调试方面的知识。
而自动就是用专门的脱壳工具来脱,最常用某种压缩软件都有他人写的反压缩工具对应,有些压缩工具自身能解压,如UPX;有些不提供这功能,例如:ASPACK,就需要UNASPACK对付,好处是简单,缺点是版本更新了就没用了。
另外脱壳就是用专门的脱壳工具来对付,最流行的是PROCDUMP v1.62,可对付目前各种压缩软件的压缩档。
在这里介绍的是一些通用的方法和工具,希望对大家有帮助。
我们知道文件的加密方式,就可以使用不同的工具、不同的方法进行脱壳。
下面是我们常常会碰到的加壳方式及简单的脱壳措施,供大家参考:脱壳的基本原则就是单步跟踪,只能往前不能往后。
脱壳的一般流程是:查壳--->寻找OEP--->Dump 修复。
找OEP的一般思路如下:[color=blue]先看壳是加密壳还是压缩壳,压缩壳相对来说容易些一般是没有异常,找到对应的popad后就能到入口。
跳到入口的方式一般为:我们知道文件被一些压缩加壳软件加密,下一步我们就要分析加密软件的名称、版本。
因为不同软件甚至不同版本加的壳,脱壳处理的方法都不相同。
我很少写破文,最近看到一些新手常问查壳工具查不出是什麼壳?不知壳如何脱?我这裏就简单的用一个范例程式谈谈脱壳方法,算是给新手打打气。
一般这种没有公开的壳不会太猛(除了hying,vcasm, jingulong等这些圈内人的壳哈)大多是自己土制的壳,有的还伪装一下致使查壳工具查不出或查出什麼Aspack,UPX的壳。
碰到这种壳不用太怕认真跟踪分析一下、一般都没多大问题。
一般加壳后的程式运行时大多是用各种方法AntiDebugger,其中夹杂很多花指令和垃圾指令、然后解码又是一堆AntiDebugger,可能又解码恢复IAT又是一堆AntiDebugger.....最后再跳到程式真正的OEP处。
对付这种壳一般的方法是先找到OEP,再修复IAT。
在壳跳到OEP的时候一般是个跨段跳转,跳转方法有很多例如:JMP XXXXXXXX, JMP [XXXXXXXX], JE [XXXXXXXX],PUSH XXXXXXXX RET, CALL XXXXXXXXX, CALL [XXXXXXXX], CALL EAX.....还有的是在SEH中直接指定EIP等等。
找到这个跳转位址,然后在相应位址上设上中断点,F9运行就到达OEP处了。
此时就是最好的Dump时机,修复IAT一般用ImportREC,填写好OEP的RVA先点IATAutoSearch--->再点GetImport,如果找到的API全部有效就可点Fix Dump 了,如果有无效的就需要修复,先点Show Invalid,再对这些无效的API点右键,共有3个修复级别:分别是Disasm,HOOK,Trap Flag。
可以一个一个试,全部API有效或只有一两个API无效时就可以点Fix Dump了,如果修复不了就只有用手工修复了。
手工修复IAT的方法是:一般壳在运行的时候会恢复IAT或破坏IAT,你可以在恢复IAT后或破坏IAT之前DUMP出完好的IAT,再用16进位编辑器把完整的IAT复制到Dump出来的档中。
多做做练习就不难了还是看看目的程式"轻轻松松学开车6.6",用PEiD 查一下,ASPack 2.12--->Alexey Solodovnikov用OD载入,提示入口点在代码外部(以后别再问如何判断程序是否加壳了,用OD载入如果有这个提示就表示程式是加了壳的)点确定、问是否分析?点否。
=======================================================================来到入口处:006AF001 D> 60 pushad ;壳代码入口。
006AF002 E8 03000000 call DrvStudy.006AF00A ;有花指令F7 跟进006AF007 - E9 EB045D45 jmp 45C7F4F7006AF00C 55 push ebp006AF00D C3 retn006AF00E E8 01000000 call DrvStudy.006AF014006AF013 EB 5D jmp short DrvStudy.006AF072在006AF002处call DrvStudy.006AF00A,代码中没有006AF00A是因为花指令让OD错误的分析了代码,用F7跟进就能来到006AF00A处,像这种近距离的Call其实是变形的Jmp,都要用F7跟进,如果要用F8跳过的话也可以只是会碰到裏面的陷阱。
006AF00A 5D pop ebp;DrvStudy.006AF007,跳到这裏:006AF00B 45 inc ebp;ebp + 1006AF00C 55 push ebp;变形跳转到ebp的位址处006AF00D C3 retn 跳到006AF008 EB 04 jmp short DrvStudy.006AF00E;跳到这裏006AF00A 5D pop ebp006AF00B 45 inc ebp;ebp + 1006AF00C 55 push ebp;变形跳转到ebp的地址处006AF00D C3 retn006AF00E E8 01000000 call DrvStudy.006AF014;变形跳转,F7跟进006AF014 5D pop ebp006AF015 BB EDFFFFFF mov ebx,-13006AF01A 03DD add ebx,ebp006AF01C 81EB 00F02A00 sub ebx,2AF000;代码重定位006AF022 83BD 22040000 00 cmp dword ptr ss:[ebp+422],0;变数ebp+422是存放的基址006AF029 899D 22040000 mov dword ptr ss:[ebp+422],ebx006AF02F 0F85 65030000 jnz DrvStudy.006AF39A;这裏不跳006AF035 8D85 2E040000 lea eax,dword ptr ss:[ebp+42E];"kernel32.dll"006AF03B 50 push eax;参数入叠006AF03C FF95 4D0F0000 call dword ptr ss:[ebp+F4D];kernel32.GetModuleHandleA006AF042 8985 26040000 mov dword ptr ss:[ebp+426],eax;kernel32.dll的控制码存入ebp+426处006AF048 8BF8 mov edi,eax;kernel32.77E40000006AF04A 8D5D 5E lea ebx,dword ptr ss:[ebp+5E];"VirtualAlloc"006AF04D 53 push ebx006AF04E 50 push eax;Kernel32.dll控制码006AF04F FF95 490F0000 call dword ptr ss:[ebp+F49];GetProcAddress006AF055 8985 4D050000 mov dword ptr ss:[ebp+54D],eax;把VirtualAlloc的函数位址存入ebp+54D处006AF05B 8D5D 6B lea ebx,dword ptr ss:[ebp+6B];"VirtualFree"006AF05E 53 push ebx006AF05F 57 push edi;Kernel32.dll控制码入叠006AF060 FF95 490F0000 call dword ptr ss:[ebp+F49];GetProcAddress006AF066 8985 51050000 mov dword ptr ss:[ebp+551],eax;把VirtualFree的函数位址存入ebp+511处006AF06C 8D45 77 lea eax,dword ptr ss:[ebp+77];跳转地址载入eax006AF06F FFE0 jmp eax;跳到eax指向的地方006AF08A 8B9D 31050000 mov ebx,dword ptr ss:[ebp+531];来到这裏,ebx=0006AF090 0BDB or ebx,ebx006AF092 74 0A je short DrvStudy.006AF09E;ebx==0,跳006AF094 8B03 mov eax,dword ptr ds:[ebx]006AF096 8785 35050000 xchg dword ptr ss:[ebp+535],eax006AF09C 8903 mov dword ptr ds:[ebx],eax006AF09E 8DB5 69050000 lea esi,dword ptr ss:[ebp+569];跳到这裏,esi指向一标志006AF0A4 833E 00 cmp dword ptr ds:[esi],0006AF0A7 0F84 21010000 je DrvStudy.006AF1CE;不为0,不跳006AF0AD 6A 04 push 4006AF0AF 68 00100000 push 1000006AF0B4 68 00180000 push 1800006AF0B9 6A 00 push 0006AF0BB FF95 4D050000 call dword ptr ss:[ebp+54D];分配内存C语言描述为VirtualAlloc(NULL, 0x1800, MEM_COMMIT, PAGE_READWRITE)。