IDA使用之旅(一)用IDA查看最简单的sys文件

2023-11-13

转载请标明是引用于 http://blog.csdn.net/chenyujing1234 

欢迎大家拍砖!

 

本系列内容是我根据“知其所以然论坛”博主录制的学习视频,做的笔记。

使用的IDA软件版本: IDA.pro.5.5 (参考下载地址: http://www.pc6.com/softview/SoftView_55231.html

下载后得到IDA.pro.5.5dapro55.zip文件。

 

在Windows 下可以开发exe文件,exe是不可逆向的,通过IDA可以把应用程序逆向,并非不是完全逆向,因为EXE已经把代码优化了。

DEBUG比RELEASE能更好逆向。

IDA它支持多种文件的反汇编,如exe 、sys、dll等。

一、IDA软件的安装

1、安装DIA软件

把IDA.pro.5.5dapro55.zip解压后得到,双击它安装;

2、汉化

将IDA.pro.5.5dapro55.zip解压后得到的文件

继续解压得到,将它拷贝到IDS的安装目录下。

^-^ 此时运行IDA程序,可以看到程序界面了:

 

我们点击运行按钮,进入到主界面:

 

二、测试一个最简单的驱动程序

1、准备要测试的驱动程序

编译方法可参考我的文章:<<http://blog.csdn.net/chenyujing1234/article/details/7674104>>

之所以简单,是因为只有一个文件sys.c,文件中只有两个函数:

#include <ntddk.h>

VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
   KdPrint(("Enter DriverUnload\n"));
   KdPrint(("Leave DriverUnload\n"));
}



extern NTSTATUS DriverEntry (
			IN PDRIVER_OBJECT pDriverObject,
			IN PUNICODE_STRING pRegistryPath	) 
{
   NTSTATUS status;
   status=STATUS_SUCCESS;
   KdPrint(("Enter DriverEntry\n"));
   pDriverObject->DriverUnload = HelloDDKUnload;
   KdPrint(("DriverEntry end\n"));
   return status;
}

编译后得到我们的目标文件: sys.sys

 

2、反汇编实现

把sys.sys拖到IDA程序里。这里要选择载入的文件类型:

第一个是:PE文件

第二个是:DOS 可执行文件

第三个是:二进制文件。(用于有时我们不知道它的文件类型,eg:ROM镜像文件)

这里我们按默认的。(一般程序会帮我们自动选择类型。)

全部按默认,点确定;接下来会提示是否加载PDB文件,点YES。

此时在输出窗口中显示:

此时我们的结果出来了.

 

3、简要分析

我们可以看到在IDA View-A选项卡上会显示三种颜色。

蓝色: 表示是代码段;

棕色: 表示是数据段;

红色: 表示是内核;

 

3、1  代码段

 

.sys文件一般是从00010000开始的,而.exe一般是从00040000开始的,dll是从00070000开头的。

在查看的汇编代码中,如果可以标识符进步重命名,之后与它有关的所有名字都会改变。

 

 

接下来我们来查看函数DriverEntry

下图表示:把_HelloDDKUnload@4的代码放入eax+34h的内存中。这样当卸载时可以调用。

 

3、2  数据段

在数据段时若我们判断是字符串,那么可以选择以C风格来查看。

得到的结果如下:

 

若要还原为UNICODE风格,则选择

 

4、退出IDA

4、1   退出时提示是否要保存,我们选择不保存,且不存数据库。

这样我们文件夹中生成的四个文件会被删除:

id0:二叉树数据库
id1:文件包含描述每个程序字节的标记

nam:包含IDA NAME窗口的数据库
til:本地数据库有关信息

 

4、2  保存后退出。

保存也有两种方式,一种是压缩,一种是不压缩。

注意:在使用IDA过程中要经常保存,因为IDA常会崩溃,这样会造成数据丢失。

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IDA使用之旅(一)用IDA查看最简单的sys文件 的相关文章

  • ES6 Map 仅返回对象键数组

    我正在尝试编写一个方法 它将帮助我返回所有货币的对象键数组 但是 我陷入了一个困境 我无法获得带有键 值对的完整对象数组 是的 我主要需要使用 ES6 方法 我不想使用任何其他迭代器 例如 我需要的 AED ALL AUD EUR 我得到什
  • DirectX Release 构建可以通过 VS2010 运行,但不能运行 exe

    我已经通过 Google 访问 Stack Overflow 几年了 但到目前为止还没有询问 回答任何问题 所以就到这里吧 基本上 我有一个在 DirectX 11 中设置绘图模型和地形的 3D 渲染框架 一切正常 通过 Visual St
  • 如何调用 MemberwiseClone()?

    我对如何使用感到困惑MemberwiseClone 方法 我在 MSDN 中查看了示例 他们通过this关键词 为什么我不能像其他对象的方法一样直接调用它GetType or ToString 另外一个没有出现的相关方法是ShallowCo
  • 从对象中获取数据

    我正在尝试使用此代码从用户的 Twitter 帐户获取数据 user info twitteroauth gt get account verify credentials 我在一个对象中得到一个很长的值 stdClass Object i
  • 如何在 Python 中运行 .exe 文件

    我正在尝试在 python2 7 中运行 exe 文件 我已经尽了一切努力来搜索它 这是我尝试过的一些代码 subprocess Popen r C Programs Files Internet Explorer iexplore exe
  • 当一个对象被分配给另一个对象时会发生什么

    public class DrumKitTestDrive param args public static void main String args TODO Auto generated method stub Echo e1 new
  • PHP:对象上的递归 htmlspecialchars

    我想为来自不同来源的数据建立一个通用的清理程序 对于清理 我的意思是 在这个阶段 将 htmlspecialchars 应用于字符串 现在 来自这些源的数据可以是任何东西 从对象到数组再到字符串 都是嵌套的 而且很复杂 并且格式总是有点不同
  • Objective-C 中的类对象和实例变量

    我很难理解这个概念 我直接引用书中的一句话 类对象还继承自层次结构中位于其上方的类 但因为它们没有实例变量 只有实例有 所以它们只继承方法 如果我错了 请纠正我 但类对象将是这样的 NSString aString NSString all
  • 如何在 jquery 中创建多维数组/对象并通过 AJAX post 传递

    我正在创建一个订单表单 其中包含用户可以购买的订单项目表 输入使用数据属性来存储商品名称和每件价格 如下所示
  • var->myProperty 和 var.myProperty 之间的区别

    我是 Objective C 的新手 我有一些疑问 我发现您可以访问类的属性 例如var gt 我的属性也喜欢那样变量 myProperty 但我不知道2之间有什么区别 我在互联网上搜索了很多 但确实没有找到确凿的答案 抱歉 如果我有拼写错
  • 如何设置“如果对象存在”条件?

    有没有办法检查对象是否存在 我不断收到 需要对象 错误 我知道该对象不存在 如果是这种情况 我想绕过我的代码的一部分 我不知道什么是我没有尝试过的 var codeName document getElementById testCode
  • 使用递归获取嵌套对象中的所有父对象

    我有以下对象 const object id 1 name a children id 2 name b children id 3 name c id 4 name d 我需要一个接受对象和最后一个子对象的
  • JavaScript“可写”属性描述符如何工作?

    为什么 JavaScript 可写 属性描述符不禁止任何属性更改 例如 var TheDarkKnight Object create Superhero name value Batman writable false TheDarkKn
  • 如何创建要添加到 JavaScript 对象变量的动态键 [重复]

    这个问题在这里已经有答案了 我正在尝试类似的事情 但这个例子不起作用 jsObj for var i 1 i lt 10 i jsObj key i example 1 我该怎么做才能制作这样的动态密钥 方括号 jsObj key i ex
  • JavaScript 中的对象解构[重复]

    这个问题在这里已经有答案了 gt a a true Statement lt a true 上面的语句是赋值true to a 为什么上面的语句在chrome控制台中没有报错 虽然下面的语句给出了错误 gt a a true Stateme
  • 如何在 jQuery 中检查 null 对象

    我正在使用 jQuery 我想检查页面中是否存在某个元素 我写了以下代码 但它不起作用 if btext i null alert btext i text btext i text Branch i 如何检查元素是否存在 检查jQuery
  • PowerShell函数不会返回对象

    我有一个简单的函数来创建一个通用列表 function test genericType Type System Collections Generic List 1 type typedParameters System String c
  • 构建 jar 后无法运行 exe

    我制作了一个简单的实用应用程序 其中我有一个要运行的exe文件 我通过使用它来运行 Runtime getRuntime exec this getClass getResource filename exe getPath 当我从 ide
  • 为什么.NET中的每个类都继承自Object?

    我不明白 为什么他们需要一个共同的基础 这个问题预设了一个谎言 他们不need一个共同的基础类型 这个选择并不是出于必要 这是出于为客户提供最佳价值的愿望 当设计类型系统或任何其他相关问题时 有时您会遇到决策点 您必须决定 X 或非 X 公
  • 如何访问 Javascript 对象的第一个属性?

    有没有一种优雅的方式来访问对象的第一个属性 您不知道您的房产名称的地方 不使用类似的循环for in或者 jQuery 的 each 例如 我需要访问foo1不知道 foo1 名称的对象 var example foo1 stuff1 fo

随机推荐

  • Android开发之http网络请求返回码问题集合

    HTTP状态码 HTTP Status Code 一些常见的状态码为 200 服务器成功返回网页 404 请求的网页不存在 503 服务不可用 一 1xx 临时响应 表示临时响应并需要请求者继续执行操作的状态代码 代码 说明 100 继续
  • 【golang】派生数据类型---指针 && 标识符、关键字等

    1 指针 对比C C 中的指针 go语言中的指针显得极为简洁 只是简单的获取某个空间的地址 或者 根据指针变量中的内容 获取对应存储空间的内容等操作 具体示例如下 go中使用指针需要注意的点 可以通过指针改变它所指向的内存空间中的内容 指针
  • linux删除文件后硬盘空间不释放

    查看被删除了的所有文件 lsof n grep deleted 杀死这些文件的delete进程 释放空间 lsof n grep deleted awk print 2 xargs kill 9 接着再运行lsof n data grep
  • 模糊神经网络

    参考 https wenku baidu com view 94f77a7384868762cbaed58f html https wenku baidu com view 22590c72cc17552706220818 html 1 模
  • 新唐M0 内核 FLASH操作认识和总结

    本文不对代码做详细解析 先说结论 和常见问题 结论 结论1 FLASH在操作的时候 需要先 擦除 然后在 写入 结论2 擦除需要一整块擦除 不能只擦除某几个字节 结论3 写入是可以按照字节这样写入的 但是 结论1 的存在 导致写入也整片写入
  • linux syslog函数,Linux syslog相关函数详解

    介绍 syslog是Unix系统的日志系统 可以将日志记录在本地系统中 一个完整的syslong日志包含如下信息 程序模块 严重性 时间 主机名 进程名 进程ID 正文 syslong相关函数 1 openlog 函数 调用openlog
  • 迅为IMX6ULL-从C++到QT系统移植(QT视频他来了~)

    零基础的QT视频他来了 1 主打零基础入门 手把手教学 从C 到QT系统移植 带你打通QT的任督二脉 2 独创的框架学习法 先掌握整体的QT开发流程 然后在逐一击破 3 从Windows上位机开发 到Linux界面开发 再到手机APP开发
  • java中最小生成树的实现

    最小生成树的实现 import java util ArrayList import java util List public class ShortestTree int dataMap 1 1 10 1 30 100 1 1 5 1
  • java 数组追加数据

    想要追加数据 需要的流程是 数组 gt List gt 数组 案例 import java util ArrayList import java util Arrays import java util List public class
  • [MATLAB]Jacobi迭代

    MATLAB代码 关于使用雅可比迭代法求线性方程组的数值解 jacobi m 定义Jacobi迭代函数 function x n jacobi A b x0 eps 计算迭代矩阵 D diag diag A L tril A 1 U tri
  • Docker入门到实践 (六) docker网络模式详解以及容器间的网络通信

    文章目录 一 前言 二 docker网络模式介绍 1 默认网络 1 1 bridge网络模式 1 2 host网络模式 1 3 none网络模式 1 4 container网络模式 2 自定义网络 2 1 创建网络 2 2 连接网络 2 3
  • 微软收购暴雪的野心:与索尼争雄 重金布局元宇宙

    1月18日 微软发布声明称 将以全现金方式斥资687亿美元收购游戏巨头动视暴雪 这将成为微软有史以来规模最大的一笔收购 同时也将改写游戏行业的收购纪录 完成这笔收购之后 使命召唤 魔兽世界 糖果传奇 暗黑破坏神 守望先锋 等脍炙人口的作品将
  • element-ui el-cascader 级联选择器 联动默认值

    在使用 element ui 的 el cascader 组件根据后台返回的数据 需要展示一个默认值 官网给出的例子https element eleme cn 2 0 zh CN component cascader 借鉴了一下 话不多说
  • hexo博客搭建-背景知识(二)

    yum与rpm的区别 rpm适用于所有环境 而yum要搭建本地yum源才可以使用 yum是上层管理工具 自动解决依赖性 而rpm是底层管理工具 gcc cc c g 命令行详解 gcc包含的c c 编译器 gcc cc c g gcc和cc
  • JDK8 网络Net包研究(一)

    网络基础 1 国际标准化组织的OSI 开放式系统互联模型 七层模型 2 TCP IP协议 组 四层模型 3 TCP IP协议组 一组包括TCP协议和IP协议 UDP协议 ICMP协议和其他一些协议的协议组 网络层 IP协议 gt 网络互连协
  • sqlserver存储过程基本语法

    转载自 sqlserver存储过程的基本语法 1 定义变量 简单赋值 declare a int set a 5 print a 使用select语句赋值 declare user1 nvarchar 50 select user1 张三
  • ElasticSearch——全文检索

    ElasticSearch 全文检索 来源 尚硅谷 谷粒商城高级篇 一 简介 官网 https www elastic co cn what is elasticsearch 全文搜索属于最常见的需求 开源的 Elasticsearch 是
  • TypeScript学习(一):快速入门

    文章目录 一 TypeScript 简介 1 TypeScript 是什么 2 TypeScript 与 JavaScript 的区别 3 JavaScript 的缺点 4 为什么使用 TypeScript 二 TypeScript 开发环
  • 软件设计命名规范

    1 命名约定 Pascal和Camel命名约定 编程的命名方式主要有Pascal和Camel两种 Pascal 每个单词的首字母大写 例如ProductType Camel 首个单词的首字母小写 其余单词的首字母大写 例如productTy
  • IDA使用之旅(一)用IDA查看最简单的sys文件

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 本系列内容是我根据 知其所以然论坛 博主录制的学习视频 做的笔记 使用的IDA软件版本 IDA pro 5 5 参考下载地址 http w