史上最全最完整,最详细,软件保护技术-程序脱壳篇-逆向工程学习记录

BET体育365官网首页 📅 2025-12-03 15:16:15 👤 admin 👁️ 7419 ❤️ 806
史上最全最完整,最详细,软件保护技术-程序脱壳篇-逆向工程学习记录

title: 程序脱壳篇 date: {

{ date }} tags: [‘程序壳’,‘程序脱壳篇’] categories: [‘程序壳’,‘程序脱壳篇’] excerpt: 壳是最早出现的专用加密软件技术!程序的壳可以是开发者未来保护自己的代码不被借鉴、破解、逆向;也可用来病毒、木马、蠕虫隐藏恶意代码,不被杀毒如软件查杀!所以我们每次逆向破解的时候遇到带壳程序会非常头疼,这篇文章主要是有关程序脱壳的技术的讲解,内容详细,深入学习者一定不能错过,带你深入研究程序脱壳技术,一定有所收获!

声明

首先要感谢的是我在2022年为了进阶逆向工程学习这门技术的老师,是鱼C工作室的老师小甲鱼,先学会感恩,是为人处世的基本准则。这是我看了它的脱壳篇后的课后自己实践过一遍的笔记总结。 其次这篇文章我最早发布于我临时搭建的博客网站,随后发布现在才搭建的正式网站

最后,抄一百篇不如自己实践操作写一篇,尊重知识产权,写笔记辛苦,禁止转载!!!引用注明出处!!!写了几个月,因为都是实践过的,如今分享给大家学习,但是尊重劳动成果。 我是同一作者!

一· 什么是壳?

1 . 初步认识壳

历史:壳是最早出现的专用加密软件技术!

作用:可以是开发者未来保护自己的代码不被借鉴、破解、逆向;也可用来病毒、木马、蠕虫隐藏恶意代码,不被杀毒如软件查杀!

预习:vmp纯虚拟机壳,目前公认认为公认最强。

温馨提示:脱壳上瘾,可不要随意传播哦!

2 . 壳的执行过程

加壳压缩,壳先执行,还原源程序,执行源程序

3 . OEP(Original Entry Point)

1·EP(Entry Point)

EP(Entry Point),意即程序的入口点。而OEP是程序的原始入口点,一个正常的程序只有EP,

例如:C语言main函数、winAPI函数、VC编译的入口地址0x40000000

只有入口点被修改的程序(加壳等),才会拥有OEP。

2·OEP

OEP:(Original Entry Point),程序的原始入口点,软件加壳就是隐藏了EP, 只要我们找到程序的OEP,就可以立刻脱壳。

PUSHAD (压栈) 代表程序的入口点,POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个OEP就在附近啦。

4 . 壳的装载过程

模拟windows加载器:

壳获取自己所需要使用的API地址、解压或解密源程序的各个区块、进行必要的重定位、跳转到程序原入口点(OPE)

5 . 压缩引擎

1·aPLib

aPLib

低于64kb的文件压缩速度较快

2·JCALG1

JCALG1

对大文件效果较好

3·LZMA

LZMA

使用目的:开源,稳定

特点:保证压缩比的情况下解压速度一定要快

6 . 壳的分类

1·压缩壳

ASPack

UPX

PECompact

2·加密壳

ASProtect

Armadillo

EXECryptor

Themida

VMProtect 缺点慢

二· 实践是检验真理的唯一标准

接下来我们尝试破解这样一个老程序壳:

1 . 查看壳

1·PEiD查看

2·Exeinfo PE查看

咳咳咳,咋就是说,这找不到这个程序壳的特征码,咋们看不出什么来,试试别的,是个老古董壳!

3·脱壳后的程序查看

可见它是由VC5.0编译的程序!

可见无壳!

2 . OD脱壳

用od把程序打开,刚进来情况是这样的:

刚进来的时候是要提示是壳的EP,如果不是,要在选项/调制选项/事件中设置第一次暂停于主模块入口:

点击OD里面的M查看进程内存:

试着分析对比,可见代码的入口地址是0x00401000,按C回到查看汇编代码,我们现在的入口地址是0x46B6DE,可见它在包含SFX的地址0x46B00000中。这壳有这三个区块(资源、SFX、重定向)。.text段就是程序的代码段块!

接下来单步执行F8,到jmp的时候跳转到地址0x004271B0:

来到这大概这个样子,右键分析/分分析代码:

再看进程内存,可知0x004271B0是在包含代码地址0x00401000中,所以它开头是55/8BEC,我们就找到了OEP

在OD的plugin文件夹中加入插件重新打开:

右键选择插件dump debugged process把程序dump出来

如下设置:

确保勾选Fix Raw Size是修复壳进行的数据偏移,不勾选Rebuil lmport输入表不进行重定位!

点击dump,保存文件命名dumo1,回到上面脱壳后的查看!

3 . 删除壳,减小程序大小

目前查看dump1.exe文件属性/大小:

打开软件lordPE,然后点击PE Editor按钮,选择dump1,对照弹出窗口里面显示的出数据和OD里的进程内存对比,然后点击Sections按钮,发现多余的壳区块,通通右键选择wipe section header, 如果是灰色的,那么请确保程序先不处于运行状态。后点击Save按钮保存OK。

最后点击Rebuild PE再选择dump1打开:

咋就知道,程序大小最后变成了原本91%!

此时再用OD打开就发现壳已经无了:

4 . 根据堆栈平衡原理寻找OEP

1·示例:zip压缩壳

实例:看文件名可猜测这是一个压缩壳

相关推荐

我应该使用哪个shell - tcsh还是bash?
365现金app

我应该使用哪个shell - tcsh还是bash?

📅 07-11 👁️ 4876
勍敌的意思
365现金app

勍敌的意思

📅 10-10 👁️ 6262
第 2 部分:如何修复 Google Play 商店中的应用程序未更新的问题