脱壳教程全集 您所在的位置:网站首页 夏普3148提示f2-58 脱壳教程全集

脱壳教程全集

2023-03-27 19:05| 来源: 网络整理| 查看: 265

安全验证 - 知乎

进入知乎

知乎 - 有问题,就会有答案

系统监测到您的网络环境存在异常风险,为保证您的正常访问,请输入验证码进行验证。

开始验证

逆向入门(三)-----脱壳的常用方法 - 简书

什么是壳

    大家应该先明白“壳”的概念。在自然界中,我想大家对"壳"这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(当然后来也出现了所谓的“壳中带籽”的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。

壳的作用

1 写好一个程序后,不想让别人随便更改其中的版权信息,我们可以加壳对其进行保护防止被修改。

2 可以利用压缩壳减少程序容量,方便程序传播。

3 帮助木马病毒进行免杀,我们可以直接加壳免杀,也可以

脱壳

对其代码进行修改从而躲过杀毒软件的查杀。

脱壳的基础知识

1壳是怎么装载的?    

    壳自从加到程序上以后就连在一起了,即对程序进行保护,防止被修改,也就是壳把程序给包裹起来了,而且原程序的数据也被压缩了。    

    装载的时候通常是先执行壳后再跳到真正的原程序OEP(程序入口点),这时开始运行原先没加壳的程序。运行顺序:执行带壳文件——执行壳——执行到程序入口点——运行未加壳的程序。

2 壳的分类

    壳出于程序作者想对程序资源压缩、注册保护的目的,壳一般分为压缩壳和加密壳两类。

        压缩壳:一般只对文件进行压缩处理,既压缩区段和一些资源压缩,以减少文件体积为目的如:ASPack、UPX、PECompact等

        加密壳:跟压缩壳正好相反,一般是牺牲减少体积为代价,对文件进行加密处理,用上各种反跟踪技术保护程序不被调试、脱壳,如:ASProtect、Armadillo、EXECryptor等

但随着加壳技术的发展,这两类壳之间的界限越来越模糊,很多加壳软件既有压缩功能也有保护性能,而且现在很多加密壳达到壳中带肉,肉中带壳的地步了。 

3 OEP (程序入口点)  

OEP:Original Entry Point ,程序加壳前真正的入口点。 

4 脱壳的基本步骤

查壳(

PEID

、FI、PE-SCAN)--->寻找OEP(OD)--->脱壳/Dump(LordPE、PeDumper、OD自带的脱壳插件、PETools)--->修复(Import REConstructor)

常用脱壳方法

1 单步跟踪法

(1)用OD载入,点“不分析代码”

(2).单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现(通过F4)

(3)遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)

(4)绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现

(5)如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑  飞,这样很快就能到程序的OEP

(6)在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入

(7)一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN  的一般很快就会到程序的OEP

注:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP 

2 ESP定律法   

ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)

(1)开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)(这只是一  般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)

(2)在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),  按回车

(3)选中下断的地址,断点--->硬件访--->WORD断点

(4)按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP 

3内存镜像法

(1)用OD打开软件

(2)点击选项——调试选项——异常,把里面的忽略全部√上。CTRL+F2重载下程序

(3)按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运  行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也  就是00401000处),按F2下断点。然后按SHIFT+F9(或者是在没异常情况下按F9),  直接到达程序OEP 

4 一步到达OEP

(1)开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,  F9运行到此处

(2)来到大跳转处,点下F8,到达OEP 

5 最后一次异常法

(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 

6 模拟跟踪法

(1)先试运行,跟踪一下程序,看有没有SEH暗桩之类

(2)ALT+M打开内存镜像,找到(包含那一列中出现SFX,imports,relocations或者SFX,输  入表,重定位)

(3)若地址为00xxxxxx在命令行下输入tc eip 60 PUSHAD 停在这里,我们先记住UPX壳的加壳入口第一句是PUSHAD

出口暂时不清楚,为的是今后碰到多层壳有准备。

0046AC01 BE 00104400 MOV ESI,ex1.00441000

0046AC06 8DBE 0000FCFF LEA EDI,DWORD PTR DS:[ESI+FFFC0000]

0046AC0C C787 D0940500 D>MOV DWORD PTR DS:[EDI+594D0],10A125D8

0046AC16 57 PUSH EDI

0046AC17 83CD FF OR EBP,FFFFFFFF

0046AC1A EB 0E JMP SHORT ex1.0046AC2A 跳走

0046AC1C 90 NOP

0046AC1D 90 NOP

0046AC1E 90 NOP

0046AC1F 90 NOP

0046AC20 8A06 MOV AL,BYTE PTR DS:[ESI]

0046AC22 46 INC ESI

0046AC23 8807 MOV BYTE PTR DS:[EDI],AL

0046AC25 47 INC EDI

0046AC26 01DB ADD EBX,EBX

0046AC28 75 07 JNZ SHORT ex1.0046AC31

0046AC2A 8B1E MOV EBX,DWORD PTR DS:[ESI] 到这里。

0046AC2C 83EE FC SUB ESI,-4

0046AC2F 11DB ADC EBX,EBX

0046AC31 ^ 72 ED JB SHORT ex1.0046AC20 这里注意,往回跳。脱壳时记住只能让程序往前运行

0046AC33 B8 01000000 MOV EAX,1 在这里点一下,F4运行到这句继续。

0046AC38 01DB ADD EBX,EBX

0046AC3A 75 07 JNZ SHORT ex1.0046AC43 跳

分享:Tuts4you社区,脱壳教程全集.1.5G_fqbqrr的博客-CSDN博客

分享:Tuts4you社区,脱壳教程全集.1.5G

链接:https://pan.baidu.com/s/1XNSBSReRfmYJbcUD2QJ2Fw提取码:189m分享,以备忘.

复制链接

UPX手动脱壳_re ida upx手动脱壳_Em0s_Er1t的博客-CSDN博客

脱壳入门,不喜勿喷,欢迎指正。

参考 “逆向界圣经”

《加密与解密(第四版)》

0x01 壳&脱壳

首先了解一下什么是壳,

壳实质上是一个子程序,它在程序运行时首先取得控制权并对程序进行压缩。同时隐藏程序真正的OEP。

而脱壳的过程总体分为三个步骤:

关于壳的类型有以下几种:

解压->运行

解压->运行->解压.->运行

解压 decoder|encoded code->decode ->exc

Run the virtual machine

0x02 Dump

一般找到程序入口点(OEP)后我们需要Dump出脱壳之后的文件。

那么,什么是dump?

定义:

dump(抓取内存镜像,“转存”),就是读出指定地址的映像文件并以文件方式保存。一般在OEP处(因为此时一些项目已经完成了初始化)dump

原理:

一些dump工具(如LoardPE、PETools等)利用Module32Next函数,函数声明如下:

BOOL

Module32Next

(

HANDLE

hSnapshot

,

LPMODULEENTRY32

lpme

)

LPMODULEENTRY32其实是一个结构体指针,结构体类型是MODULEENTRY32,这个结构体有两个字段modBaseSize,modBaseAddr,分别代表了一个进程的映像大小与基址。

这类工具先根据这俩个字段获取了一个进程的映像大小与基址;然后用ReadProcessMemory函数读取进程数据同时检测DOS文件头和PE文件头的字段完整性,最终决定是直接用进程文件头还是换用原始文件头(LordPE工具是直接获取原始文件头)

0x03 ESP定律(栈平衡原理)

先给出esp寄存器的功能:

存放栈顶的偏移地址

有关汇编代码中call指令实质上是

push ip ;把下一条指令的地址(存放在ip寄存器中)入栈jmp near ptr 地址 ;跳转到该函数的地址处

还有ret和retf(一个函数结束的标志):

pop ip ;(ret)返回到call指令的下一条指令

pop IP ;(retf)返回到call指令的下一条指令pop CS

在编写加壳软件时,我们必须要保证外壳初始化的现场环境(即各个寄存器的值)与源程序的现场环境是相同的,所以,在程序自解密或者自解压过程中,对于多数壳,它们会先将当前寄存器状态压栈,如使用pushad/pushfd。

而在解压结束后, 会将之前的寄存器值出栈,如使用popad/popfd,一般标志寄存器不是很重要,一般不做处理。

所以编写加壳软件必须遵守的是栈平衡原理。

因此在寄存器出栈时, 往往程序代码被恢复, 此时硬件断点触发(pop IP),这就是我们要下硬件断点的原因,然后在程序当前位置,只需要一些单步操作,就会到达正确的OEP位置。

也就是说,我们可以这么认为,如果载入程序后只有esp寄存器(eip除外)内容发生变化,那么这个程序多半可以用ESP定律。

0x04 实例

加壳程序:

re_sign.exe

使用工具:OllyDbg

导入od看到如下提示,点击“否”

单步调试前先看寄存器窗口的值,此时程序停在了pushad。

F8执行完pushad,再看寄存器窗口,除了EIP指令,只有ESP寄存器变红。(表明当前指令只用到了esp寄存器)

再看堆栈面板(把未执行pushad指令时的各个寄存器状态跟现在的堆栈面板的数据进行了比对),发现各个寄存器的值都入栈,表面开始进入壳代码。

我们接下来就可以下硬件断点了,查看esp寄存器里的值是19FF54,od命令行输入“hr 19FF54”下硬件读断点。

按F9,看到程序停在了popad指令的下一条指令,说明程序处理完了外壳代码,在调用popad指令恢复现场环境时访问这些栈,此时触发中断。我们比对也可以发现那些寄存器里的初始值恢复了,离我们的OEP不远了。

F8单步执行下去(中途有个循环可以下断点跳出去),然后jmp指令跳转(跳回程序的OEP),看到了几个push语句如下:

其中前几个是

push ebp ;入口点OEP,大多数程序的第一句指令都是push压栈。mov ebp,esppush -1

我们便可以判断我们已经找到OEP了,此时右键(利用OD的Ollydump工具)把程序dump出来即可得到脱壳后的程序。

拖到ida里面看看效果,现在已经可以正常静态分析了。

其实也有另一种思路。

既然很多OEP的第一句都是push ebp,而壳程序运行前会把ebp寄存器的值入栈,等到运行完壳代码再出栈,接着就是push ebp对ebp进行写入操作。我们不妨对ebp设置硬件写断点,那不就直接F9断在了OEP处了。

[下载]脱壳教程or脚本全集From Tuts4you-资源下载-看雪论坛-安全社区|安全招聘|bbs.pediy.com

活跃值:

(483)

能力值:

( LV9,RANK:320 )

2

很好,谢谢了

活跃值:

(10)

能力值:

( LV2,RANK:10 )

z寧

2014-6-29 14:04

3

多谢分享!

活跃值:

(10)

能力值:

( LV2,RANK:10 )

zina

2014-6-29 14:18

4

非常感谢,可惜英文应付不来。。

活跃值:

(665)

能力值:

( LV2,RANK:10 )

热咖啡

2014-6-29 14:29

5

弄这么下来一定很辛苦,非常感谢楼主老大分享这么多好东西,

活跃值:

(64)

能力值:

( LV5,RANK:60 )

6

mark

活跃值:

(10)

能力值:

( LV2,RANK:10 )

zina

2014-6-29 14:40

7

压缩包密码多少?

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

8

我去,忘了说,pediy

活跃值:

(10)

能力值:

( LV2,RANK:10 )

提线木偶

2014-6-29 14:44

9

可惜了,是英文版

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

10

英文版很好懂啊   况且很多都是视频动画

活跃值:

(10)

能力值:

( LV2,RANK:10 )

11

辛苦了!感谢分享!

活跃值:

(164)

能力值:

( LV2,RANK:10 )

12

膜拜大牛 我啥时候才能分享这么多重磅资源

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

13

,你分享的那些教程已经吊炸天了,恐怕大家一辈子也看不完

活跃值:

(627)

能力值:

( LV2,RANK:10 )

14

又发现一只勤劳的二蜜蜂~~

最近算是掉到蜂窝里啦,百度网盘中转满了,咋啥时都不够用呢~~

活跃值:

(627)

能力值:

( LV2,RANK:10 )

15

不懂行了吧,很多东西英文版才好呢才纯正呢,

2000年时有款软件叫clipmate

里边给的例子 苹果 香蕉 橘子的  我把例子的英文一个字一个词的翻译一遍照着做了一遍,用起来就超级顺手了。

省的很多误人子弟的乱翻译

这只大蜜蜂 真勤劳啊~~

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

16

还有2T空间,够用了

活跃值:

(627)

能力值:

( LV2,RANK:10 )

17

下次记着 全部解包 打包成7Z的,能省下不少的时间

活跃值:

(627)

能力值:

( LV2,RANK:10 )

18

是不是从这下载的?https://tuts4you.com/download.php

活跃值:

(25)

能力值:

( LV2,RANK:10 )

19

恩,是的

活跃值:

(47)

能力值:

( LV2,RANK:10 )

hjie

2014-6-29 16:35

20

发现一只蜂王,谢了~

活跃值:

(627)

能力值:

( LV2,RANK:10 )

21

下载到手了,看了一集,果然非比凡常,大开眼界啊~~论坛有这只勤劳的大蜜蜂实在是幸事啊~~

活跃值:

(712)

能力值:

( LV2,RANK:10 )

22

来顶下   分享是美德

活跃值:

(734)

能力值:

( LV2,RANK:10 )

zbzb

2014-6-29 17:24

23

辛苦了,楼主~~

活跃值:

(1095)

能力值:

( LV8,RANK:127 )

24

收藏了…感谢分享

活跃值:

(761)

能力值:

( LV12,RANK:345 )

25

收藏一份,脚本还不怎么用抽空学学

脱壳教程全集.zip网盘资源下载 - 学霸盘

《脱壳教程全集.zip》

来源于网盘资源爬虫采集。

请认真阅读本站声明:

1.

学霸盘

通过网盘资源爬虫收集网盘公开分享链接,本站不复制、传播、储存任何网盘资源文件,也不提供资源下载服务,链接会跳转至百度网盘,资源的安全性与有效性请您自行辨别。

2.

学霸盘

重视个人隐私和知识产权保护,坚决禁止一切违规信息,如您发现任何涉嫌违规的网盘信息,请立即向百度网盘官方网站举报,并将链接提交给我们进行删除。

3.

学霸盘

作为非经营性网站,网盘搜索服务仅供学习与交流使用。使用OllyDbg从零开始Cracking(已完结)-外文翻译-看雪论坛-安全社区|安全招聘|bbs.pediy.com

活跃值:

(1022)

能力值:

( LV2,RANK:10 )

2

占楼......

活跃值:

(788)

能力值:

( LV2,RANK:10 )

3

期待能够坚持完成翻译!

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

4

这个可以有

活跃值:

(365)

能力值:

( LV2,RANK:10 )

5

期待楼主能坚持翻译完。

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

6

恩...

活跃值:

(123)

能力值:

( LV2,RANK:10 )

gdut

2014-2-18 17:11

7

怎么记得教程系统以前就有呢?

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

8

这套教程论坛有个BGCoder的兄弟翻译了3章,后面的他没有继续翻译了,时隔几年,前段时间坛子里有个兄弟提到了,我就继续翻译了...

你没有看我的第4章开头的说明...

活跃值:

(1439)

能力值:

(RANK:215 )

9

这个导航帖子很有必要。

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

10

恩......

活跃值:

(10)

能力值:

( LV2,RANK:10 )

寒窗苦读

2014-2-19 16:38

11

楼主是我这辈子见到的最好的人,到目前为止。向楼主敬礼、致敬!好人一生平安!

活跃值:

(25)

能力值:

( LV3,RANK:20 )

稻天

2014-2-19 17:00

12

想追火影一样的追剧心里呀,,,,期待后续章节

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

13

要不要这样啊...

活跃值:

(10)

能力值:

( LV2,RANK:10 )

晓斌

2014-2-19 18:27

14

标记收藏,收藏标记。

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

15

第八章更新...

活跃值:

(67)

能力值:

( LV2,RANK:10 )

ipnu

2014-2-24 10:28

16

感谢LZ,为我们某福利~

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

17

过几天更新第九章,第九章内容有点多

活跃值:

(10)

能力值:

( LV2,RANK:10 )

18

好让人激动的教程,楼主幸苦了!可是看了一下第一章,配图太模糊了看不清啊!!!

活跃值:

(3148)

能力值:

( LV13,RANK:1760 )

19

1,2,3不是我翻译的,是之前另一位兄弟翻译的...后面的是偶翻译的...等翻译完这个系列,再把前三章的图补清晰

活跃值:

(10)

能力值:

( LV2,RANK:10 )

20

好人

活跃值:

(441)

能力值:

( LV2,RANK:10 )

21

好帖。。。菜鸟路过。。

活跃值:

(210)

能力值:

( LV2,RANK:10 )

22

感谢楼主!!期待后续。。。。。

活跃值:

(80)

能力值:

( LV2,RANK:10 )

23

一直在关注,支持,还有感谢

活跃值:

(190)

能力值:

( LV2,RANK:10 )

24

支持楼主翻译。。。。。

活跃值:

(247)

能力值:

( LV2,RANK:10 )

25

谢谢分享,这东西正要学习呢,感觉很强大的工具。。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有