手动脱壳教程

article/2025/9/17 7:29:05

一、什么是壳?
        壳是指在一个程序的外面再包裹上另一段代码,保护里面的代码不被非法修改或反编译的的程序。它们一般先于程序运行,拿到控制权,然后完成它们保护软件的任务。
二、壳的加载过程
1、保存程序入口参数
        加壳程序初始化时保存各个寄存器的值(用堆栈),外壳执行完毕后,再恢复各个寄存器的值,最后再跳到源程序执行。
2、获取壳自己所需要使用的API的地址
        通过三个函数完成:GetProcAddress、GetMoudleHandle和LoadLibrary.
3、解密原始程序各个区块的数据
        按区块进行解密,并且会把解密的区块数据按照区块的定义放在合适的内存位置中。
4、IAT初始化
        由于加壳时外壳程序自己构建了一个输入表,并让PE头文件中的输入表指针指向了自建的输入表。所以 ,PE装载器只会对自建的输入表进行填写。原来的PE的输入表的填写,只好由外壳程序来实现。外壳要做的就是将这个新的输入表结构从头到尾扫描一遍,对每个DLL所引入的所有函数重新获取地址,并填写在IAT中。
5、重定位项处理
        主要:是在被加壳的DLL文件中。针对加壳后的DLL文件,外壳程序需要进行重定位。
6、跳转到程序入口点(OEP)
        OEP原始入口点,当程序完成上述操作后,就会跳转到原始的程序入口点去执行,因此这里就是外壳程序和原始程序的“分界线”。我们进行脱壳时就是找到程序的原始入口点,然后将相应的程序代码从内存中拷贝出来(dump)得到原始程序。
三、手动脱壳步骤
        手动脱壳的常规步骤如下:
        (1)、查壳:可用查壳软件(如PEiD)
        (2)、查找程序的入口点
        (3)、抓取内存映像文件
        (4)、PE文件(输入表)重建
第一步:查壳
        可使用PEID、die等工具进行查壳,一般都支持拖放。
第二步,手动脱壳
        方法一:单步跟踪法(用F8、F7、F4),一直跟踪到程序大跳转时,开始dump内存。主要用于比较简单的壳。
        方法二:ESP定律法(根据堆栈平衡原理找OEP) ,这是因为外壳程序在开始运行时需要保护现场,结束后恢复现场,从而保持堆栈平衡。
        脱壳方式:在外壳执行完pushad或pushfd后,对ESP指向的内存地址设置硬件访问断点,然后F9运行程序,很快就可达OEP。演示如下:
        用PEiD查壳,发现壳的类型为ASPack 2.12

在这里插入图片描述
用OD载入程序,用ESP定律法手动脱壳:
在这里插入图片描述
然后看一下ESP的值,如第一幅图,为0012FF8C,F8单步跟踪,并注意ESP的值,直到发现ESP第一次发生变化(且只有它为红色),如第二幅图,ESP的值变为0012FF6C。
在这里插入图片描述
在这里插入图片描述
在ESP处右键,选择HW break选项 ,此时会下一个硬件断点,点击调试-》硬件断点可看到:
在这里插入图片描述
在这里插入图片描述
然后点击F9运行程序,再F8单步跟踪,直到虚拟地址有较大变化时,如下图:则很可能已经到达程序的OEP,不过发现代码分析出错。
在这里插入图片描述

右键-》分析-》分析代码:强迫OD再次分析代码,得到下图所示,代码正常显示:
在这里插入图片描述

然后便可以用OD的插件来进行脱壳,具体操作是:右键-》选中OllyDbg脱壳调试进程:
在这里插入图片描述
然后保存文件:如脱壳.exe
在这里插入图片描述
用PEiD查看程序:脱壳.exe,发现没壳,以及运行程序正常:说明脱壳成功。
在这里插入图片描述
在这里插入图片描述
方法三:利用内存访问断点找OEP。
        内存断点:就是通过将需要设置断点的内存页设置为不可访问属性,这样,当程序访问相关内存地址时就会发生异常,从而中断下来。一般分为内存访问和内存写入两种断点。(以页为单位)
        两次内存访问一次性断点法:通过两次内存断点的方式来找到OEP。
        在第一个.text段处设置断点,然后F9,运行,运行到断点之后F8单步跟踪,即可找到程序的真正入口点,然后脱壳。
方法四:根据编译语言寻找OEP。(查找函数,在函数前下断进行脱壳)
        函数调用:GetCommandLineA、GetModuleHandleA、GetVersion、GetStartupInfoA


http://chatgpt.dhexx.cn/article/IqIi2W3i.shtml

相关文章

简单脱壳教程笔记

文章目录 1、手脱UPX壳简介:脱壳:笔记:方法1:单步跟踪(需要有耐心)一、使用ODE插件二、tools按钮选择LordPE进行脱壳(提前在SETUP PATHS里添加好) 方法2:ESP定律法方法3&…

常用编程语言开发工具

编程语言开发工具可分为文本开发工具 和 集成开发工具。 文本开发工具的特点是 体积小,功能也不弱。 集成开发工具的特点是 体积大,功能强大。 1.文本编辑器 widows 下的 notepad(记事本) Unix下的 vim ,这两个工具系…

开发工具:2022个人开发工具清单

目录 ​编辑 1、谷歌浏览器 2、腾讯文档 3、Notepad 4、IntelliJ IDEA 5、VisualStudio 6、VSCode 7、微信开发者工具 8、Navicat 9、PDManer 10、Git/Tortoise Git 11、Axure 12、NxShell 13、ApiPost 14、Xmind 15、Everything 16、WizTree 17、猿如意 …

开发工具推荐

1.前言 俗话说:“工欲善其事,必先利其器”。 为了助力大家的学习和进阶,本小节介绍几个对 Java 学习非常有帮助的 IDEA 插件,代码反编译和反汇编工具,以及非常不错的网站等。 2. IDEA 插件 首先不必多说&#xff0c…

【高效开发工具系列】开发工具

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Linux--开发工具

前言: 是不是看见10月24日有种莫名的亲戚,在信息技术行业,由于2101024,所以1GB 1024MB,1MB 1024KB,1KB 1024B。于是1024是程序员们最为敏感的数字,那么今天祝所有铁子们节日快乐!…

开发工具入门

配置SublimeText的编译 工具->编译系统->新建编译系统 修改如下代码到新建文件内,CtrlS保存内容到 “SublimeText安装目录下的\Data\Packages\User” # 配置文档 { "cmd": ["软件名如:php", "$file"], &qu…

开发工具的使用

git git管理你的项目 进入项目----》右键----》git bash here--->输入git init---->该文件夹和子文件夹都会被git管理 写项目.,...... 头部完成 头部完成想形成一个版本号(形成一个版本号目的是后期可以切换回来), 有以下几个步骤 git add . git commit -m …

【开发工具系列】猿创征文|有了这8个开发工具,程序员可以早点下班了

📣📣📣📣📣📣📣 🎍大家好,我是慕枫 🎍前阿里巴巴高级工程师,InfoQ签约作者、阿里云专家博主,一直致力于用大白话讲解技术知识 &#x…

开发工具使用

一、markdown 1、MarkDown语法 Markdown 语法手册 (完整整理版)【Markdown语法】字体颜色大小及文字底色设置 二、IDEA工具 1.1 IDEA相关插件 idea插件下载地址:https://plugins.jetbrains.com/ 开发必装插件: (1…

程序员常用开发工具盘点

优秀的程序员优秀的原因不一定是他敲代码比别人快,但他解决事情的效率一定比别人都要高,往往都会利用工具提升自己的效率,下面给大家分享几个程序员常用的开发工具。 1.浏览器插件FeHelper FeHelper插件支持Chrome、Firefox、MS-Edge浏览器…

15个程序员实用的开发工具,你有用过几个呢?

分享一些日常工作中比较实用的软件和网站,这些网站你平时工作中大概率是会用到的,感觉不错的话可以点赞收藏 1. GitHub Desktop 对于新手来说,要记住那么多git命令可能有点困难,建议新手使用git可视化工具,会方便很多…

13个程序员常用开发工具用途推荐整理

作为一名刚入门的程序员,选择合适的开发工具可以提高工作效率,加快学习进度。在本文中,我将向您推荐10个常用的开发工具,并通过简单的例子和代码来介绍它们的主要用途。 1. Visual Studio Code Visual Studio Code(V…

我常用的15 款开发工具!

上一篇:从零开始搭建公司后台技术栈,这套架构绝了... 作者:爱马仕_人员链接:https://www.jianshu.com/p/4d1a4606ef61 从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的…

在 Windows 下关闭135/139/445端口的图文方法

135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。 端口说明:135端口主要用于使用RPC(Remote Procedure Call,远程过程调用&…

如何关闭135、137、138、139、445端口

昨天好像有比特币勒索病毒爆发。。。将135、137、138、139、445这些不常用的端口禁用能够预防病毒。。。貌似大多数高校的网络中心会在校园网及数据中心禁止外网访问这几个端口,运营商也将445端口暂时禁用。 我还是写一下这篇教大家如何关闭135、137等等共享端口的…

如何关闭135端口、139端口、445端口

都知道135端口,139端口以及445端口.这三个端口容易被黑客或者病毒利用.所以我们今天就来教下大家如何关闭它. 太难的方法就不教给大家了.什么实用策略组之类的.新手感觉很麻烦.所以下面给大家来简单的教程 方法一:直接用软件关闭它. 工具下载 点击Close,Disable 就可以了 方…

WIN10系统如何关闭139 135 445端口

扫描自己的主机,发现自己的某些端口开启着的 139端口 这个端口比较危险 139端口是NetBIOS Session端口,用来文件和打印共享 如果你是单机,不是企业内部网里的成员,为了保护计算机的安全关闭这个端口比较好。 135 137 139 445 3389…

139端口的攻与防

通过139端口入侵是网络攻击中常见的一种攻击手段,一般情况下139端口开启是由于NetBIOS网络协议的使用。NetBIOS即网络基本输入输出系统,系统可以利用WINS服务、广播及Lmhost文件等多种模式将NetBIOS名解析为相应IP地址,从而实现信息通讯。在局…

R语言热门应用领域

R的概述: R语言是用于统计分析,图形表示和报告的编程语言和软件环境。 R语言的核心是解释计算机语言,其允许分支和循环以及使用函数的模块化编程。 R语言允许与以C,C ,.Net,Python或FORTRAN语言编写的过程…