堆栈认知——逆向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,一经查实,立即删除!

相关文章

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

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

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

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

Glusterfs初试

Gluster的模式及介绍在此不表,这里只记录安装及配置过程。 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 下…

堆栈认知——堆简介

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

如何为 Horizon View 配置 VMware VSAN?

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

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

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

Wss 3.0安装指南(一)

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

智能五子棋基本思路

前些天闲时写的,在学数据结构的时拿来练手的.没技术含量,最有技术含量的AI部分,我是看别人(园子里叫二十四生的)的算法改的.刚弄了一下午小程序弄不过去,头疼,现无聊的紧,闲着发着玩.当消遣主要发下AI核心算法.有兴趣的同学用VB,VC.VC#都可以一起做着玩.保持对编程的兴趣.其它没…

webpack 4.0 配置文件 webpack.config.js文件的放置位置

一般webpack.config.js是默认放在根目录的,不在根目录的时候需要在package.json中制定位置,我的配置文件目录是config/webpack.config.js,在package.json文件中的配置为: "scripts": { "build": "webpack --mode p…

PowerShell远程管理Windows Server(2):公网访问【web形式】

*此文章只适合于windows server 2012版本以上;Powershell Web Access需要两个步骤才能使用:一、安装powershell web access功能;二、配置powershell web access;只要在服务器上启用powershell web access功能,即可通过…

POJ 3090 Visible Lattice Points 【欧拉函数】

<题目链接> 题目大意&#xff1a; 给出范围为(0, 0)到(n, n)的整点&#xff0c;你站在(0,0)处&#xff0c;问能够看见几个点。 解题分析&#xff1a;很明显&#xff0c;因为 N (1 ≤ N ≤ 1000) &#xff0c;所以无论 N 为多大&#xff0c;(0,1),(1,1),(1,0)这三个点一定…

精选 5 个漂亮的 CSS3 图片滑过特效

这篇文章将为大家分享5款漂亮的CSS3图片滑过特效&#xff0c;比如滑过后显示图片的详细文字介绍&#xff0c;又比如滑过后对图片进行淡入淡出的效果等等。让我们一起来看看&#xff0c;喜欢的朋友赶紧收藏。 1、非常酷的CSS3图片说明效果 在线演示 / 源码下载 2、纯CSS3图片相…

Cocos2d-x 3.0新引擎文件夹结构

Cocos2d-x 3.0新引擎文件夹结构2014年4月29日 Cocos2d-x 3.0学习作为一个Cocos2d-x的菜鸟&#xff0c;我倒是挺愿意关注不同版本号之间的差别&#xff0c;Cocos2d-x 3.0自2013年7月份開始公布alpha0-pre版本号&#xff0c;到2014年4月23日公布正式版&#xff0c;历经9个版本号…

SOA系列文章(二):服务设计原理:服务模式和反模式

服务设计系列的法则已经发展到最佳通信实践和取样相关编码的程度。本文提供了设计和实现网络服务的基本原理&#xff0c;并且对面向服务的体系结构(SOA)的相关概念做了一个简要的回顾&#xff0c;以及有关于几种模式和反模式的详细讨论&#xff0c;当构建网络服务时&#xff0c…

iOS程序启动原理(上)

为什么80%的码农都做不了架构师&#xff1f;>>> iOS程序启动原理 Info.plist 常见设置 建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件,该文件对工程做一些运行期的配置,非常重要,不能删除. 在旧版Xcode创建的工程中,这…

何时使用委托而不使用接口

委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现&#xff1b;可以为任何类中的方法创建委托&#xff0c;前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。既然存在这些相似性&#xff0c;那…

microsoft project 出现不能保存为xls文件时可以按照如下方法解决

工具-》选项-》安全性转载于:https://www.cnblogs.com/oymx/p/3753291.html

多功能节点连线绘图控件Nevron Diagram for .NET使用方法及下载地址

Nevron Diagram for .NET是一个功能强大,世界上顶级的.NET图表控件.可扩展的图形报表构架&#xff0c;可以帮您创建功能丰富的Winforms及Webforms图表解决方案。这个产品构建于Nevron表述层框架之上&#xff0c;能为您提供令人激动的视觉冲击&#xff0c;您无法通过其它产品体验…

《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记

模型的表示 场景&#xff1a;物品或模型的集合 任何物品都可以用三角形网络逼近表示。我们经常用以下术语描述三角形网络&#xff1a;多边形(polygons)、图元(primitives)、网络几何单元(mesh geometry)。 描述三角形&#xff1a;指定三个顶点 描述物品&#xff1a;三角形单元列…

CocosCreator2.1.0渲染流程与shader

CocosCreator2.1.0版本正式支持导入3D模型 对于2.5D游戏的开发来说有着重要意义 自己此前在写捕鱼游戏时了解过自定义shader 并实现了4种不同的水波效果 但经过CocosCreator版本的不断升级 尤其是1.10和2.0两个版本 旧的渲染器被抛弃了 因此老的shader特效也全都不能用了 直到最…