一、普及

What?壳

所谓“壳”就是专门压缩的工具。

这里的压缩并不是我们平时使用的RAR、ZIP这些工具的压缩,壳的压缩指的是针对exe、com、和dll等程序文件进行压缩,在程序中加入一段如同保护层的代码,使原程序文件代码失去本来面目,从而保护程序不被非法修改和反编译,这段如同保护层的代码,与自然界动植物的壳在功能上有很多相似的地方,所以我们就形象地称之为程序的壳。WHY?

① 对程序专门进行压缩,以减小文件大小,方便传播和储存。

② 我这是一个商业的程序,是用来赚钱的,怎么可以被别人破解呢,那我就是加密保护壳(Safengine、VMprotect、winlicense、Themida)保护程序不被非法修改和反编译。

③ 其他(病毒、木马加壳,Anti-AntiVirus)

DO?

脱壳

就是把保护壳去掉更好的调试和破解能清楚看到代码

OEP

程序的入口点如果我们找到OEP我们就能快速脱壳就类似于找到钥匙就能开门

壳就是一把锁OEP就是锁孔

IAT

IAT就是指针脱壳的话可能要修复指针如果没有指针就相当于人只有一个身体没有灵魂

壳可能会对指针进行处理,修复输入表就是修复IAT

段首和段尾

段首,是上一段的结尾也是下一段的开头一段是以retn开始和retn结尾。我们经常听到在段首下断,所以我们要找的就是retn下面第一个push ,段首是以push开始滴,所以我们不会在retn那里下段而段尾我们是在retn处下断,因为软件的子程序是以retn返回到某一地方所以返回的时候要在retn出下断。

二、准备知识

ESP定律的原理就是“堆栈平衡”原理。

1、在命令行下断hresp-4(此时的ESP就是OD载入后当前显示的值)

2、hrESP(关键标志下一行代码所指示的ESP值(单步通过))

CALL

1.向堆栈中压入下一行程序的地址;

2.JMP到call的子程序地址处。

RETN

与call对应的就是RETN了。对于RETN我们可以这样来理解:

1.将当前的ESP中指向的地址出栈;

2.JMP到这个地址。

三、开始

工具:

①、peid
②、OD
③、DetectItEasy
④、LordPE
⑤、ImportREC

☆ esp定律

1.F8,观察OD右上角寄存器中ESP有没有实现(红色)

2.命令行下 DD ******(当前代码ESP值),回车

3.DD就选中下端地址,断点—硬件访问—DWORD断点,F9运行,到跳转处按F8 到OEP

1、PEID先看程序的壳

2、ASPACK的壳子属于压缩壳的一种

3、用DetectItEasy V1.0看一下编译器为Delphi看一下delphi的oep

4、之后,载入od

5、选择是否都可以的

这是带壳的.

6、f8单步往下走

7、ESP和EIP都变成红色(实现)的时候,在ESP上右键下ESP断点

8、下完断点,F9运行程序

9、之后F8单步往下走,一直走

10、到达OEP,右键-用OD脱壳调试进程

11、复制红框里面的oep,(9C25C)之后关闭这个框,OD最小化

12、打开loadpe

13、选择刚刚的程序进程–修复镜像大小-完全转存

14、转存后打开会出现这样的结果

15、然后再用ImportREC修复

16、点选刚刚的进程

17、把之前复制的OEP放到1里面,按序号依次点击

18、修正转储刚刚导出的那个

19、脱壳完成…

之后放到原目录下运行即可

四、内存镜像法内存镜像法找oep

1.OD载入软件

2.点选项—调试选项—忽略全部—CTRL+F2重载

3.ALT+N打开内存镜像,找程序第一个.rsrc—F2下断—SHIFT+F9运行到断点,再打开找到程序第一个.rsrc上面的.code处(就是00401000处),F2下断—SHIFT+F9或无异常按F9,到OEP

1、载入DO之后,alt+m

2、在程序的资源处下内存访问断点

3、返回程序按F9运行程序,也可以用快捷键SHIFT+F9运行程序

界面是这个样子的

4、ALT+M返回,在代码段下内存访问断点

5、SHIFT+F9运行程序

单步跟踪法

1.OD载入,不分析代码。

2.近CALL—F7,远CALL—F8,实现向下的跳转。

3.有回跳处,下一句代码处—F4 (右键—代码断点运行到所选)

4.大的跳转(大跨段,JMP***或JE***或RETN),很快就会到OEP

最后一次异常

1.OD打开—点选项—调试选项—去掉所有异常—CTRL+F2重载.

2.SHIFT+F9.只到程序运行,记下次数M

3.CTRL+F2重载—按SHIFT+F9(次数为M-1次)

4.按CTRL+G—输入OE右下角的SE句柄前的地址.

5.F2下断—SHIFT+F9到断点处.

6.去断按F8,到OEP.

6、直接到达OEP,按照之前的方法脱壳就可以了

7、用OD自带的插件即可脱壳

OEP大全

总结:

1、介绍了什么是压缩壳,什么是加密壳

2、脱壳原理

3、脱壳常用的工具

4、4种脱壳方法及修复

5、各种语言OEP特征

6、压缩壳这几种方法几乎够用了,如果出现冷门壳,用这些方法脱不掉,可以用之间说的打补丁的方法。

现在压缩壳都有很多自动脱壳机,但是加密壳呢?学习手工脱壳不是为了单纯去学怎么脱这一种壳,学习的是技巧,以后遇到其他的没有脱壳机的壳要尝试手工去脱,就像一个网站注入点,你可以用sqlmap去注入,如果有waf呢?Sqlmap脚本绕不过去呢?不还得靠手工去试,工具是死的,人是活的.

本文转载自

逆向破解程序脱壳篇-压缩壳 - FreeBuf专栏·i春秋学院

http://www.freebuf.com/column/143114.html

逆向破解程序脱壳篇-压缩壳相关推荐

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

    title: 程序脱壳篇 date: {{ date }} tags: ['程序壳','程序脱壳篇'] categories: ['程序壳','程序脱壳篇'] excerpt: 壳是最早出现的专用加密 ...

  2. 32. 脱壳篇-简单带壳的程序、反调试带壳的程序(堆栈平衡原理找OEP、代码段设置断点)

    第一个程序 OEP为46B6F9 PE头位置为46B000到46D000区间,have a nice day! 就是壳 一定要点上箭头指向处,dump改名 清除区段 ,删除壳,保存 第二个程序(市面上 ...

  3. 黑客逆向破解基础-3:如何识别程序加的什么壳

    目前来说windows程序状态大体可以分为以下几种类型:未加壳.压缩壳.传统加密壳.代码虚拟化保护..Net程序加密. 识别程序加的什么壳目前常用的方法有以下两个: 1.使用查壳工具:如PEiD.Ex ...

  4. 什么是壳 - 脱壳篇01

    什么是壳 - 脱壳篇01 让编程改变世界 Change the world by program 壳 在自然界中,植物用壳来保护种子,动物用壳来保护身体,我们人类没有壳,但我们有衣服,房子也起到了壳的 ...

  5. 逆向破解 - 兵器篇

    逆向破解 - 兵器篇 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 目录 文章目录 逆向破解 - 兵器篇 @[toc] 前言 1.调 ...

  6. 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂 ...

  7. GJM:移动App入侵与逆向破解技术-iOS篇 【转载】

    GJM:移动App入侵与逆向破解技术-iOS篇 [转载] 转载: URL http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您 ...

  8. 移动App入侵与逆向破解技术-iOS篇

    如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析.追踪.注入等实用的破解技术,另外,通过"入侵",将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件 ...

  9. 31. 脱壳篇-什么是壳

    壳:作用就是保护程序. 加壳:先运行壳的代码,对主程序进行压缩或加密保护,因此程序的EP被壳的EP取代 脱壳:解压解密,还原之后再用壳调用主程序的EP,主程序的EP叫OEP,主要就是找OEP 第一个对 ...

最新文章

  1. 【Groovy】构建工具 ( 构建工具引入 | Gradle 构建工具作用 | 传统的依赖管理 )
  2. jquery rotate.js
  3. ansys结构分析单元与应用_结构动力学中的时域分析(3) —— 基于ANSYS的实现
  4. Java对【JSON数据的解析】--官方解析法
  5. 工资表 车辆工程 冯大昕
  6. VTK:Rendering之StippledLine
  7. python检查_python – 检查属性是否存在的最佳方法是什...
  8. mysql5.7无法启动问题
  9. 【JZOJ4762】【NOIP2016提高A组模拟9.7】千帆渡
  10. excel实时获取基金信息的实现方法
  11. mysql数据库安全怎么设置密码_关于mysql的数据库的安全问题
  12. linux java 多线程_Java多线程:Linux多路复用,Java NIO与Netty简述
  13. 马尔科夫模型与隐马尔科夫模型
  14. 你在家看电视,家里的电视也在看你?
  15. 小班同学学习经历分享(一)游戏程序员成长札记
  16. CapstoneCS5211,CS5212,CS5256,CS5811,CS5288,……型号大全
  17. C++ 模板中的类型获取(一)
  18. 【明解C语言】选择语句之switch
  19. HDU4417 主席树入门2
  20. 家中联通光纤宽带200MB,测试速度才92.87mbps,需要换个猫吗?

热门文章

  1. GitHub刷屏!阿里程序员成功考上公务员指南火了!
  2. js判断页面滚动方向
  3. 宽带显示服务器未启动,解决访问网上邻居出现“网络不存在或尚未启动”故障...
  4. PixHawk飞控 配置参数
  5. 东南大学苏州联合研究生院计算机考研科目,东南大学苏州联合研究生院计算机技术调剂信息...
  6. docker安装orcale-12c
  7. 软件架构设计的底层逻辑
  8. 优雅安装电脑或手机实用软件与分享(持续更新)
  9. matlab 输出数,matlab入门(变量、数值运算、输出)
  10. 想在PPT中插入swf文件,但是在其他控件中找不到shockwave falsh object,怎么办?(win7)