破解入门(三)-----脱壳的常用方法
什么是壳
大家应该先明白“壳”的概念。在自然界中,我想大家对"壳"这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(当然后来也出现了所谓的“壳中带籽”的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。
壳的作用
1写好一个程序后,不想让别人随便更改其中的版权信息,我们可以加壳对其进行保护防止被修改。
2可以利用压缩壳减少程序容量,方便程序传播。
3帮助木马病毒进行免杀,我们可以直接加壳免杀,也可以脱壳对其代码进行修改从而躲过杀毒软件的查杀。
脱壳的基础知识
1壳是怎么装载的?
壳自从加到程序上以后就连在一起了,即对程序进行保护,防止被修改,也就是壳把程序给包裹起来了,而且原程序的数据也被压缩了。
装载的时候通常是先执行壳后再跳到真正的原程序OEP(程序入口点),这时开始运行原先没加壳的程序。
运行顺序:执行带壳文件——执行壳——执行到程序入口点——运行未加壳的程序。
2壳的分类
壳出于程序作者想对程序资源压缩、注册保护的目的,壳一般分为压缩壳和加密壳两类。
压缩壳:一般只对文件进行压缩处理,既压缩区段和一些资源压缩,以减少文件体积为目的
如:ASPack、UPX、PECompact等
加密壳:跟压缩壳正好相反,一般是牺牲减少体积为代价,对文件进行加密处理,用上各种反跟踪技术保护程序不被调试、脱壳,
如:ASProtect、Armadillo、EXECryptor等
但随着加壳技术的发展,这两类壳之间的界限越来越模糊,很多加壳软件既有压缩功能也有保护性能,而且现在很多加密壳达到壳中带肉,肉中带壳的地步了。
3OEP(程序入口点)
OEP:OriginalEntryPoint,程序加壳前真正的入口点。
4脱壳的基本步骤
查壳(PEID、FI、PE-SCAN)--->寻找OEP(OD)--->脱壳/Dump(LordPE、PeDumper、OD自带的脱壳插件、PETools)--->修复(ImportREConstructor)
常用脱壳方法
1单步跟踪法
(1)用OD载入,点“不分析代码”
(2).单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现(通过F4)
(3)遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选 择断点——>运行到所选)
(4)绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现
(5)如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑 飞,这样很快就能到程序的OEP
(6)在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
(7)一般有很大的跳转(大跨段),比如jmpXXXXXX或者JEXXXXXX或者有RETN 的一般很快就会到程序的OEP
注:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP
2ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
(1)开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)(这只是一 般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
(2)在命令行下:ddXXXXXXXX(指在当前代码中的ESP地址,或者是hrXXXXXXXX), 按回车
(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在命令行下输入tceip<00xxxxxx,回车,提示正在跟踪
7SFX法
(1)设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
(2)切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定
(3)重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP)
破解入门(三)-----脱壳的常用方法相关推荐
- 破解入门(四)-----实战单步跟踪法脱壳
背景 破解的第一步是判断所要破解的程序是否加壳了,如果程序加壳了,需要将壳脱掉再来破解,所以脱壳是破解的第一步 单步跟踪法的步骤 (1)用OD载入,点"不分析代码" (2).单步向 ...
- OllyDBG破解入门教程[图文]教程
OllyDBG破解入门教程[图&文]教程 OllyDBG破解入门教程![图&文]2008-11-06 18:50 一.OllyDBG 的安装与配置 OllyDBG 1.10 版的发布 ...
- 软件破解入门(暴力破解CrackMe)
所谓暴力破解,就是通过修改汇编代码进而控制程序的运行流程,达到不需注册码也能正常使用软件的目的.相对于解出算法进而编写注册机,暴破的技术含量是比较低的.但也正是因为一本05年的杂志上介绍"暴 ...
- flexlm破解入门文献列表
flexlm破解入门文献列表 许可证管理(License manager)实现软件保护是一种软保护,不象dongle 那样需要硬设备,这样其维护和升级都很方便,比如要实现试用版.演示版.正版的转换,只 ...
- WPF入门(三)-几何图形之不规则图形(PathGeometry) (2)
WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 上一节我们介绍了PathG ...
- [转载]Python爬虫入门三之Urllib库的基本使用
python爬虫系列教程http://cuiqingcai.com/1052.html 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
为什么80%的码农都做不了架构师?>>> 本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...
- Flash Builder4.7极其简单破解方法-三步搞定(亲测)
资讯类型: 转载 来源页面: http://weibo.com/2101024913/yvmR0D9Df 资讯原标题: 资讯原作者: 丿卓越丶星辰 翻译词数: 词 我的评论: 对这篇文你有啥看法,跟贴 ...
- 文本分类入门(三)统计学习方法
文本分类入门(三)统计学习方法 前文说到使用统计学习方法进行文本分类就是让计算机自己来观察由人提供的训练文档集,自己总结出用于判别文档类别的规则和依据.理想的结果当然是让计算机在理解文章内容的基础上进 ...
- .Net 3.5 Remoting编程入门三
VS2008 .Net 3.5 Remoting编程入门三 信道 什么是信道?信道有哪些类型呢? 信道顾名思意就是通信的通道.就想那些宣传标语说的,"要想富,先修路!".同理,要学 ...
最新文章
- jquery和bottstrap
- 除了 Python ,这些语言写的机器学习项目也很牛(二)
- dcmm认证的条件_DCMM认证 数据管理能力成熟度模型评估
- django 业务逻辑写在view里吗?_Python Web框架Django简介
- Java中怎么把文本追加到已经存在的文件
- 【python】逻辑运算符总结
- 把百度网站设为首页_网站百度推广效果好不好?怎样才能把网站推广到百度首页?...
- ubuntu高版本环境变量问题
- 根据压缩后的行列数和sourcemap反向定位源码
- 计算机开机不正常运行,win7 64位旗舰版电脑开机启动不正常怎么办
- 浅谈Entity Framework中的数据加载方式
- mysql 给已存在的商品数据,根据商品ID增加商品编号
- 从多云共存到多云融合:2020年多云管理市场展望
- 软件测试前景会被ai取代吗_软件测试人员可能很快会被AI程序取代
- 图案怎么导入ps?Photoshop图案导入教程
- 一般纳税人和小规模纳税人哪个好?哪个更划算?
- 《非诚勿扰》原声大碟
- 用Python把20年的GDP、人口以及房价数据进行了可视化
- 原生Python实现KNN算法,并用鸢尾花(iris)数据集测试
- UEFI模式双硬盘+双系统安装(Win8.1+Ubuntu18.04)
热门文章
- php excel转html,如何将Excel文件转换为Html的详解(图)
- 面试常问的40个问题(1-27)
- matlab求分段函数的值.,如何用MATLAB求分段函数的最小值和最大值?
- 刷题 最长不重复子串
- 2.3 Openwrt 模拟 spi 及其sx1301寄存器读写测试
- Markdown在表格中加入竖线的方法
- 【PyTorch教程】PyTorch分布式并行模块DistributedDataParallel(DDP)详解
- WebGIS开发杂谈(一)——基于ArcGIS构建WebGIS概述
- 淘宝搜索排序算法分析
- java时间解析错误_java.lang.IllegalArgumentException:解析错误-日期格式错误?