堆栈认知——逆向IDA工具的基本使用

参考:逆向-IDA工具的基本使用
地址:https://qingmu.blog.csdn.net/article/details/118862881

目录

  • 1、文件的打开与关闭
  • 2、窗口介绍:图形 文本 其他窗口
    • 2.1、图形界面:
    • 2.2、文本界面:
    • 2.3、反汇编窗口
    • 2.4、 十六进制窗口
    • 2.5、 文件使用的模块(函数)
    • 2.6、文件导出的模块(函数)
    • 2.7、结构体(IDA识别出来的)
    • 2.8、枚举
  • 3、显示硬编码(ACDU)
    • 3.1.1、A
    • 3.1.2、C
    • 3.1.3、D
    • 3.1.4、U
  • 4、跳转指令 G
  • 5、搜索指令(ALT+T)
  • 6、修改名称(N)
  • 7、创建结构体 修改全局变量 修改局部变量
    • 7.1、创建结构体
    • 7.2、修改全局变量
    • 7.3、修改局部变量
  • 8、注释
    • 8.1、分号注释
    • 8.2、SHIFT加分号注释
    • 8.3、函数注释
  • 9、交叉引用
  • 10、总结

1、文件的打开与关闭

  • 1、F5反编译成C语言
    在这里插入图片描述

  • 2、关闭选项

在这里插入图片描述
IDA生成的数据库文件会打包成一个文件,下次使用就不需要打开源文件了,只需要打开这个数据库文件即可。第三个和这个类似
在这里插入图片描述
第一个选项会生成四个文件

在这里插入图片描述
当IDA很大的时候,这个选项会把很多不用的内存释放掉,保证文件占用的空间很小
在这里插入图片描述
关闭的时候此次做的操作不保留。IDA中唯一回退的方式。

2、窗口介绍:图形 文本 其他窗口

2.1、图形界面:

在这里插入图片描述

2.2、文本界面:

在这里插入图片描述
图形界面与文件界面的切换使用空格键

2.3、反汇编窗口

在这里插入图片描述
进入IDA的默认窗口

2.4、 十六进制窗口

在这里插入图片描述

2.5、 文件使用的模块(函数)

在这里插入图片描述
查看文件使用了哪些模块(函数),其实是根据导入表生成的

2.6、文件导出的模块(函数)

在这里插入图片描述

2.7、结构体(IDA识别出来的)

通过符号表识别出来的
在这里插入图片描述

2.8、枚举

在这里插入图片描述

3、显示硬编码(ACDU)

在这里插入图片描述
在这里插入图片描述
输入框中填写硬编码的长度,最大16。(我们的可执行程序都是由硬编码组成)。我们改成10看看效果,如下图:

在这里插入图片描述
图中的部分就是硬编码。每一行硬编码对应着一行汇编代码。

随便用一段代码举例说明,原始如下:
在这里插入图片描述

3.1.1、A

把当前的数据按照字符串来显示

转换成字符串:
在这里插入图片描述

3.1.2、C

把当前的数据按照代码来显示
在这里插入图片描述

3.1.3、D

把当前的数据用按照数据来显示
在这里插入图片描述
按一下表示单字节显示,按两下双字节显示,按三下表示四字节显示,按三下表示八字结显示

3.1.4、U

把当前的数据按照未定义(原始的字节)来显示
在这里插入图片描述

4、跳转指令 G

按一下G
在这里插入图片描述
在输入框中输入地址就可以进行跳转。

5、搜索指令(ALT+T)

按下alt+t:

在这里插入图片描述

6、修改名称(N)

当我们分析一段汇编的时候,分析完成需要对一个函数或一个变量我们有自己的理解,我们需要对它改成我们想要的名称时按N来修改。

例如:

在这里插入图片描述
按N修改:
在这里插入图片描述

在这里插入图片描述

7、创建结构体 修改全局变量 修改局部变量

7.1、创建结构体

在我们使用IDA的时候,我们对一段汇编代码进行解读的时候,发现其为一个结构体,此时IDA并未识别出来,那么我们可以在Structures文件中增加一个结构体。

点击Edit 选择 add struct type。
在这里插入图片描述
此时会让我们输入结构体的名称,我们随便输入一个,如下:
在这里插入图片描述
在这里插入图片描述
此时AAA结构体已经出来了,那么如何向结构体中增加整数,字符,数组,结构体呢?

操作如下:

添加普通类型(db、dw、dd):
选中我们创造的结构体第一哥成员,按D

在这里插入图片描述

此时就添加了一个成员,此时field_0的类型为一个字节,我们选中db然后按D就可以更改其字节数(一字节,两字节,四字节)。

此时名称我们也需要修改成我们想要的名称,怎么办呢?

如上面讲解,按N就可以修改

在这里插入图片描述

此时名称修改成了a,宽度修改成了两字节。

添加结构体类型
如上述方式先按D添加一个成员。然后选中成员按下alt+q就可以识IDA已有的所有结构体,添加自定义结构体需先自己添加好,如图:

在这里插入图片描述
随便选择一个即可。修改结构体的名称和上述一样,按下N即可。

添加数组

如上述方式先按D添加一个成员。
在这里插入图片描述
右键我们的成员(db),选择数组,然后修改数组的大小即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改名称一样按N修改,我们修改为C,此时就定义了一个数组名称为C,类型为dw(双子节),长度为10.

在这里插入图片描述
此时我们就在IDA中创建了一个结构体。我们就可以在我们的代码中引用这个结构体了。
在这里插入图片描述

7.2、修改全局变量

比如说我们选中一个全局变量,我们要修改其为我们刚刚添加的结构体,怎么做呢?

很简单选中这个变量,按下alt+q,此时会列举出这个IDA所有识别出来的结构体,选择我们刚刚添加的结构体即可。

改完他的类型,IDA会自动给我们生成一个名字,这个名称我么也可修改,并且后续用到的这个变量的地方都将修改成我们修改的名称。

7.3、修改局部变量

当我们修改局部变量的时候,快捷键是T,我们需要找到这个结构体并选中结构体的成员点击确定就可以修改了。(IDA会按照偏移把相应的值列出来)
在这里插入图片描述
在这里插入图片描述
我们逆向的过程,就是给函数起名字,分析结构体,分析出结构体类型,分析出全局变量类型,分析出参数类型,当我们把这些全都分析好,整个逆向的过程也差不多了。

8、注释

注释有三种方式

8.1、分号注释

在一句代码的末端按下分号(;)会跳出一个文本框,此时我们输入注释,则就会在代码的末尾添加上注释。
在这里插入图片描述
这么做的话,他不仅会在本行的末尾添加注释,也会在其他跳转到本行的地方也会添加一段注释。有利有弊。

8.2、SHIFT加分号注释

上面我们说了分号注释他不仅会在本行的末尾添加注释,也会在其他跳转到本行的地方也会添加一段注释。那么我们不希望在跳转的地方也显示注释怎么办呢?

shift + ; 注释就可以在其他跳转到本行的地方不会添加注释了

8.3、函数注释

那么,我们在向写C语言函数的时候,我们想在函数的前面加上注释(函数名,参数、返回值等信息)的时候,我们选中函数名,按下分号,此时就可以添加注释了。
在这里插入图片描述

9、交叉引用

比如说我们遇到一个函数,我们想看他还被谁引用了,怎么做呢?

当然在函数名的右下角也有显示,但是补全,如下:
在这里插入图片描述
那我们如何查看完整的引用呢?

首先选中函数名,点击上方菜单栏的的view,选择open subviews,在选择cross reference,就可查看所用引用这个函数的地方了。

在这里插入图片描述
在这里插入图片描述
当然我这里找的是main韩式只有一个。

10、总结

IDA的功能还有很多很多,掌握上面流出的一些基本操作,基本的逆向的操作基本是没有问题的,如果还有其他欢迎补充,谢谢。

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

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

相关文章

jmeter中timeout值怎么设置_jMeter解决failed to respond Connection reset

通过以上可总结三种情况错误的情况如下:(以2000并发为例)----1:ideltimeout不设置,只设置connectionTimeout20s----一批接口中第一个接口肯定不会出现,因为他都是新建的tcp连接。----第二个接口容易出现RST,因为第一个…

DevIL真是好用得想哭

昨天整一个tiny的渲染中间层,涉及到image格式读取的问题先是整HBITMAP这一套函数,搞得人头大,搞来搞去发现只有是从::CreateDC("DISPLAY", 0, 0, 0) compatible 过来的DC才是支持color bitmap的,晕然后用DevIL来读取多种…

[Computation]集合、关系、语言

写了半天发现啥都没写 相当于自查表 集合、关系和语言 集合 *太简单辽,自己翻书*集合:对象的汇集。空集、单元集子集、真子集集合的运算:交 并 差 幂等律 交换律 结合律 分配律 吸收律 De Morgan律幂集 划分*太简单辽,自己翻书*笛…

JOSSO在JBOSS中安装与配置

JOSSO在JBOSS中安装与配置 1、JOSSO单点登录网关1.1进入josso/bin目录&#xff0c;执行josso-gsh命令1.2 安装JOSSO的核心Gateway,执行命令gateway install --target <JBOSS_HOME> --jboss-instance default - platform jb42此命令实际上执行了如下操作&#xff1a;1.2.…

堆栈认知——栈溢出实例(ret2text)

参考&#xff1a;栈溢出实例–笔记一&#xff08;ret2text&#xff09; 地址&#xff1a;https://qingmu.blog.csdn.net/article/details/119295954 目录1、什么是栈溢出&#xff1f;2、栈结构3、栈溢出需要解决的问题3.1、解决如何跳转的问题3.2、跳转到哪里去&#xff1f;4、…

rabbitmq取消自动重连_rabbitmq客户端自动重连

编程rookie, 如有错误请指出 ☞&#xff1a;253065903qq.comRabbitMQNode.js 客户端( AMQP 0-9-1 V0.5.2)自动重连重启策略开始找解决方案&#xff1a;通过查看AMQP的源码&#xff0c;发现没有reconnect的选项然后上GitHub上看有没有人提出类似的问题 github repo&#xff0c;通…

Expression,挑起2006年最后的争论?

微软开始把传说中的Expression拿出来show了&#xff0c;这东西对微软来说具有战略意义&#xff0c;比IE7重要的多。要理解它的意义&#xff0c;首先要了解微软。 大家都知道Google的核心价值观之一就是“一切以用户为中心”(进而发展出现在最流行的“用户体验至上”)&#xff0…

[HTML]去除li前面的小黑点,和ul、LI部分属性

[转] 对于很多人用div来做网站时&#xff0c;总会用到&#xff0c;但在显示效果时前面总是会有一个小黑点&#xff0c;这个令很多人头痛&#xff0c;但又找不到要源&#xff0c;其它我们可以用以下方法来清除。[HTML]去除li前面的小黑点,和ul、LI部分属性[转] 对于很多人用div来…

堆栈认知——栈溢出实例(ret2shellcode)

参考&#xff1a;栈溢出实例–笔记二&#xff08;ret2shellcode&#xff09; 地址&#xff1a;https://qingmu.blog.csdn.net/article/details/119303513 目录1、栈溢出含义及栈结构2、ret2shellcode基本思路3、实战一下3.1、二进制程序如下3.2、分析调试查看栈3.3、编写payloa…

Glusterfs初试

Gluster的模式及介绍在此不表&#xff0c;这里只记录安装及配置过程。 1.整体环境 server1 : gfs1.cluster.com server2 : gfs2.cluster.com Client: 2.安装Gluster 下载软件https://access.redhat.com/downloads/content/186/ver3/rhel---7/3.4/x86_64/product-software 下…

如何查看光驱硬盘托架的尺寸_如何确定光驱位的硬盘托架的大小尺寸和接口

如果你想在电脑光驱位安装固态硬盘&#xff0c;前提必须要确定光驱位硬盘托架的类型&#xff0c;如大小尺寸和接口参数。下面将介绍大家如何确定相关参数&#xff0c;其适合于联想&#xff0c;华硕&#xff0c;惠普等电脑品牌。1&#xff0c;最合理的确定方法是到Windows 设备管…

[Android Pro] ant 编译android工程

参考文章&#xff1a; http://blog.csdn.net/xyz_lmn/article/details/7268582?reload http://hubingforever.blog.163.com/blog/static/1710405792013220840347/ http://www.cnblogs.com/tankaixiong/archive/2010/11/24/1887156.html 一&#xff0c;准备ant ant 官网可下载h…

堆栈认知——堆简介

参考&#xff1a;Linux笔记–堆简介 地址&#xff1a;https://qingmu.blog.csdn.net/article/details/119510863 目录1、前言2、堆的由来3、Linux中堆简介4、堆分类4.1、请求堆4.2、释放堆5、内存分配背后的系统调用6、堆相关数据结构7、堆的申请8、调试验证1、前言 当前针对各…

(0.2.6)Mysql安装——编译安装

参考我的另一篇文章&#xff1a;https://www.cnblogs.com/gered/p/9539333.html转载于:https://www.cnblogs.com/gered/p/10359289.html

ubuntu查看gpu使用率_如何监控GPU卡的使用率(Linux)

Linux系统&#xff0c;在程序运行的时候&#xff0c;如何实时监控GPU卡的使用率呢&#xff1f;首先&#xff0c;你需要安装好CUDA。然后&#xff0c;你需要将CUDA的bin目录加入到PATH中。方法是在终端窗口输入如下命令&#xff1a;# vi ~/.bashrc将 /usr/local/cuda/bin 加入到…

sqlserver2000 mdf 文件导入

在Enterprise Manager中菜单\工具\sql analyze 把数据库的数据文件&#xff08;*.mdf&#xff09;和日志文件&#xff08;*.ldf&#xff09;都拷贝到目的服务器&#xff0c;在SQL sp_attach_db dbname test, filename1 d:\mssql7\data\test_data.mdf, …

如何为 Horizon View 配置 VMware VSAN?

原文&#xff1a;http://myvirtualcloud.net/?p5440注明&#xff1a;本文内容基于 VMwareVSAN beta 版本撰写&#xff0c;请访问http://www.vmware.com/products/virtual-san/获得有关正式版本的更新信息。我已经在前面的文章中讨论了VSAN 给 Horizon View 带来的益处&#xf…

配置vscode远程免密登入Linux服务器

视频教程&#xff1a;https://www.bilibili.com/video/BV1s64y167cM?vd_sourcecc0e43b449de7e8663ca1f89dd5fea7d 参考&#xff1a;配置vscode远程免密登入Linux服务器 地址&#xff1a;https://blog.csdn.net/weixin_54178481/article/details/123977675?spm1001.2014.3001.…

P1552 [APIO2012]派遣

链接 https://www.luogu.org/problemnew/show/P1552 思路 忍者数量肯定越多越好 那就从下到上的合并它的孩子 左偏树的话 顺便维护一个tot&#xff0c;大头堆&#xff0c;如果tot大于了m&#xff0c;把大的删掉 如果左偏树忘干净了或者没学的话 线段树合并也是个不错的选择 直接…

Wss 3.0安装指南(一)

Wss 3.0安装指南(一) "基本" 模式 WSS3.0的安装可分为独立服务器安装和服务器场安装,前者是将所有的服务和应用安装在一台Server 上,后者则是…