使用ESP定律_手工脱壳

ESP定律脱壳一般的加壳软件在执行时,首先要初始化,保存环境(保存各个寄存器的值),一般利用PUSHAD(相当于把所有寄存器都压栈),当加壳程序的外壳执行完毕以后,再来恢复各个寄存器的内容,通过跨区段的转移来跳到程序的OEP来执行原程序,简单点来说就是会将加壳过程执行一遍之后会跳到OEP来执行源程序,当我们找到了OEP的时候就是找到了源程序,即可实现脱壳。

通常在软件的破解过程中,会遇到代码经过混淆器混淆的程序,此类混淆器可以称之为壳,壳又可分为压缩壳(常见的有UPX、北斗、ASDPack、Npack、PECompact等)和保护壳(如强壳Safengine、VMprotect、winlicense、Themida等),压缩壳作用是把程序进行体积缩小化处理,保护壳主要作用是混淆或加密代码防止他人进行逆向程序、破解程序。我们可以通过一些侦壳程序进行识别,但有些壳会采用伪装技术来混淆侦壳程序。

本次我们使用ESP定律来脱一个ASPack的壳,先来准备课前工具,以后将使用这几个工具。

DIE查壳工具:https://files.cnblogs.com/files/LyShark/DiE_0.64.zip
课件内容:https://files.cnblogs.com/files/LyShark/ASPack.zip

 

1.首先使用DIE载入查询待脱壳程序,观察是使用那种语言来实现的,还有判断是加了那种壳,这里当然是aspack

上面的报告可以看出,编译器使用的是VC++ ,版本不确定,压缩器使用的是ASPack2.12版本。

 

2.OD载入待脱壳的程序,会看到第一条指令是Pushad,这种指令往往是成对出现的,而且能够使用ESP定律搞定。

 

3.接着我们按一下F8单步执行一次,会发现右侧寄存器窗口,只有ESP变成了红色,这样的情况可以使用ESP定律了。

 

4.在ESP寄存器上,右键,选择在数据窗口中跟随。

 

5.查看数据窗口,并选择下面的区域,设置断点,硬件访问断点,类型为DWORD

 

6.然后,F9 让程序跑起来,会停在以下代码区域。

 

7.然后按下F8,3次,到程序返回,最后看到下面的代码处,说明已经到了OEP的位置了。

 

8.直接脱壳,选择用od dump 脱壳调试进程。

 

9.点击获取OEP,脱壳,保存程序即可了。

 

10.最后,对比一下两个文件,会发现大小发生变化了。

转载于:https://www.cnblogs.com/LyShark/p/11139836.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sliverlight MD5

突然想在WP上用MD5 ,c#的MD5方法在SL下是不能用的额 搜索下MSDN,找到解决方法: http://archive.msdn.microsoft.com/SilverlightMD5 下载那两个类添加到工程中,然后添加代码: 1: protected string GetMD5Hash(string input) 2: { …

apache-apollo启动报错

启动Apollo后,进入网页版管理中心后报错:500: Server Error https://127.0.0.1:61681/console/index.html 网页抓包 报错:{"code":"500: Internal Server Error","message":"java.lang.IllegalArgumentEx…

android 标签对应的代码怎么写alignParentRight、marginRight

2019独角兽企业重金招聘Python工程师标准>>> android:layout_alignParentRight"true" LayoutParams lp new LayoutParams(mp); lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 转载于:https://my.oschina.net/zhangjie830621/blog/158899

[Winodows Phone 7控件详解]容器控件

在Windows Phone7中存在着多个容器控件,这些控件主要是用来界面的布局设置,以及包容多个控件时的布局设置。 一.Grid控件:主要用于界面的布局,这个和web page里的很相似,可以通过网格布置规划界面,也可以嵌…

C++ Template

引言 模板(Template)指C程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。 函数模板 在c入门中,很多人会接触swap(int&, …

Oracle--plsql异常处理

•什么是异常?Oracle中出现错误的情形通常分为编译时错误(compile-timeerror)和运行时错误(run-time error),异常是在PL/SQL执行过程中出现的警告或错误。•异常是如何触发的?–发生了一个 Oracle 错误时–使用RAISE语句显式触发•如何处理…

再谈SQL Server中日志的的作用

简介 之前我已经写了一个关于SQL Server日志的简单系列文章。本篇文章会进一步挖掘日志背后的一些概念,原理以及作用。如果您没有看过我之前的文章,请参阅: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 浅谈SQL Server中的事…

VS2012和XE2013的关联和设置问题

1. 首先要正确安装Microsoft VisualStudio 2012 Intel Parallel Studio XE 2013,其中,先安装VS2012,再安装XE2013。 2.Microsoft Visual Studio 2012 Intel Parallel Studio XE 2013集成检验: 打开:开始所有程序-&…

推荐一款移动端的web UI控件 -- mobiscroll

用mobiscroll 可实现ios系统自带的选择器控件效果,支持几乎所有的移动平台(iOS, Android, BlackBerry, Windows Phone 8, Amazon Kindle),当然在pc的浏览器上跑,效果也还不错。建议使用支持css3的浏览器访问^_^ 支持换肤,效果和性…

I2C通信 读写数据过程

在通信之初,主从机必须根据自己的要求约定好通信规则:command的定义和位置、address的位数和位置。 以读写从机寄存器数据为例: 假设从机寄存器地址为8位、从机寄存器也位8位(被读取数据为8位); 约定读comm…

C++的运算符重载(转)

C的运算符重载 cc扩展语言 C中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C中重新定义这些运算符,赋予已有运算符新的功能&#xff0c…

Android应用程序结构总结

2019独角兽企业重金招聘Python工程师标准>>> Android应用程序结构分析 由于是初学者,对于Android应用程序的结构的认识是一穷二白的,对于开发Android应用程序,必须先了解其程序的结构和作用。一下就用一个简单的例子来解剖&#…

递归--整数划分问题

问题描述: 将正整数n表示成一系列正整数之和:nn1n2…nk,其中n1≥n2≥…≥nk≥1,k≥1。正整数n的这种表示称为正整数n的划分。 问题1: 输出整数n的所有可能的划分,如: 输入:6 输出&am…

webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

webrtc是google推出的基于浏览器的实时语音-视频通讯架构。其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路由器/交换机/防火墙等),浏览器与浏览器很多时候无法建立p2p连接&…

从0-1背包问题学习回溯法、分支界限法、动态规划

一、0-1背包问题的描述 下面将使用回溯法、分支界限法、动态规划法来分析和解决此问题。 二、回溯法 (1)算法步骤 (2)代码如下(没有裁剪函数): 用i和n来判断结束与否,是因为解空间…

高可用性的HDFS—Hadoop分布式文件系统深度实践

《高可用性的HDFS—Hadoop分布式文件系统深度实践》基本信息作者: 文艾 王磊 出版社:清华大学出版社 ISBN:9787302282587上架时间:2012-5-14出版日期:2012 年5月开本:16开页码:371版次&#xff…

【作品】超级玛丽射击版

【下载地址】稍后上传 【以下内容摘自试验报告,可能狗屁不通,尽情谅解】 -游戏介绍: 简单的射击游戏,键盘控制动作[角色的移动,跳跃等],鼠标控制攻击的位置方向, 单击鼠标即射击,同时可以设置游戏规定时间,时间到则结束游戏. -游戏…

MySQL锁的用法之行级锁

2019独角兽企业重金招聘Python工程师标准>>> 行级锁是MySQL中粒度最小的一种锁,他能大大减少数据库操作的冲突。但是粒度越小,实现的成本也越高。MYISAM引擎只支持表级锁,而INNODB引擎能够支持行级锁,下面的内容也是针…

matlab中二维插值函数interp2的使用

下面是一段产生log-normal分布的代码,以此进行说明。 clear all; clc; for t1:100Traffic(t) curve(t); end MaxTraffic max(Traffic); w 0.2; Wmax 2*pi*w/3000; x[0:10:300]; y[0:10:300]; Nxlength(x); Nylength(y); Sigma 0.53; t 0; M 10*cu…