IDA Pro作为一款强大的逆向分析工具,对于软件开发和安全领域的专业人士来说是必不可少的。

1. 什么是逆向分析

逆向分析是指通过分析已有的软件或程序,推测出其内部运行机制、算法和逻辑等信息。通过逆向分析,您可以了解软件的运行逻辑,发现潜在的漏洞并进行修复,提升软件的安全性。

2. 为什么选择IDA Pro

IDA Pro是业界公认的最强大的逆向分析工具之一。它具有丰富的功能和灵活的使用方式,适用于各种软件和程序的逆向分析工作。无论您是软件开发人员、安全专家还是研究人员,IDA Pro都能满足您的需求。

3. IDA Pro的主要功能

IDA Pro提供了一系列强大的功能,帮助您进行逆向分析工作:

反汇编和调试:IDA Pro可以将二进制文件反汇编为可读的汇编代码,并提供强大的调试功能,帮助您理解程序的执行过程。

静态分析:通过IDA Pro的静态分析功能,您可以查看程序的结构、函数、变量等信息,深入理解程序的内部逻辑。

动态分析:IDA Pro还支持动态分析,您可以通过动态调试和插件来跟踪程序的运行过程,发现和修复潜在的问题。

插件支持:IDA Pro具有丰富的插件生态系统,您可以根据自己的需求选择并安装各种插件,扩展和定制IDA Pro的功能。

4. 如何使用IDA Pro进行逆向分析

使用IDA Pro进行逆向分析需要一定的技术和经验,下面是一些基本的步骤和技巧:

导入二进制文件:在IDA Pro中,您可以通过导入二进制文件的方式开始逆向分析。IDA Pro支持各种二进制文件格式,包括可执行文件、动态链接库等。

进行反汇编:一旦导入二进制文件,IDA Pro会将其反汇编为可读的汇编代码。您可以通过浏览代码、查看函数和跳转指令等方式理解程序的结构和逻辑。

符号命名和注释:在IDA Pro中,您可以对函数、变量等进行符号命名和注释,帮助理解和管理代码。合理的符号命名可以提高代码的可读性。

动态调试:如果您需要进一步了解程序的执行过程,可以使用IDA Pro的动态调试功能。通过设置断点、跟踪变量和内存,您可以逐步跟踪程序运行的过程。

插件使用:IDA Pro的插件功能是其强大之处之一。根据您的需求,选择合适的插件可以提升您的逆向分析效率和准确性。

[下载]

https://hex-rays.com/ida-pro/

[使用]

快捷键:

#1. 转成字符串: 方便使用字符串Ctrl+f进行搜索
Shift + F12 #2. 汇编代码转C代码(需要双击进去这个函数, 然后使用F5, 反编译成伪代码)
F5

#3. 空格
在代码与视图中进行快速切换, 代码中可以方便看到对应的地址

1) 这种就是函数的具体调用, 后面sub_xxxx就是对这个函数的引用调用

sub_1810CFE60   proc near               ; CODE XREF: sub_1810E7B40+1F8↓p

示例:

1.微信中防撤回消息

1)根据使用ida pro打开WeChatWin.dll文件

2)猜测可能使用到的词汇revoke, 使用Shift+F12切换字符串展示, crtl+f5进行字符串搜索

3)hook关键函数:使用frida

import sys

import frida

def main(wx_process):
# 链接本地设备
session = frida.attach(wx_process)
# 创建需要执行的js脚本
script = session.create_script("""
// 获取WechatWin.dll映射的根地址
const baseAddr = Module.findBaseAddress('WechatWin.dll');
console.log('WechatWin.dll baseAddr: ' + baseAddr);
// 撤回消息的函数地址
// const revokeMsgFuncAddr = resolveAddress('0x1810CFE60');
const revokeMsgFuncAddr = resolveAddress('0x1810E7D2A');
console.log('revokeMsgFuncAddr: ' + revokeMsgFuncAddr); // 注入
Interceptor.attach(revokeMsgFuncAddr, {
// 一旦进入地址的回调函数
onEnter(args) {
// 0x4
console.log('rdi: ' + this.context.rdi);
// 修改地址的值
this.context.rdi = 0x0;
console.log('ttttt');
}
}); // 从虚拟地址转化到实际内存地址
function resolveAddress(addr) {
// 这里将加载的文件最上面的地址拿到
const idaBase = ptr('0x180000000');
const offset = ptr(addr).sub(idaBase);
const result = baseAddr.add(offset);
return result;
} """)
# 加载并持续读取内容
script.load()
print("Process attached successfully.")
sys.stdin.read() # 基址: 0x7ff837cc0000 if __name__ == '__main__':
wx_process = 'WeChat.exe'
main(wx_process)

4)找到对应的撤回的call函数进行调用修改,即可

参考:

- https://www.bilibili.com/video/BV1di421U7qD/?share_source=copy_web&vd_source=c593b03003bbf8ce00280ed8379a79a4

- http://www.yxfzedu.com/article/10778

软件逆向之IDA Pro的更多相关文章

  1. 使用IDA Pro逆向C++程序

    使用IDA Pro逆向C++程序 附:中科院李_硕博 : IDA用来做二进制分析还是很强大的 .lib程序是不是很容易分析出源码? 这个得看编译选项是怎么设置的 如果没混淆 没太过优化 大体能恢复源码 ...

  2. IDA Pro - 使用IDA Pro逆向C++程序

    原文地址:Reversing C++ programs with IDA pro and Hex-rays 简介 在假期期间,我花了很多时间学习和逆向用C++写的程序.这是我第一次学习C++逆向,并且 ...

  3. 使用IDA pro逆向ARM M系核心的Bin固件

    使用IDA pro逆向ARM M系核心的Bin固件 ​ 物联网和智能设备这两年还是比较火的,我们的手中或多或少都有了几个智能设备,比如手环,智能手表,或者门锁什么之类的东西,但是同学们在做逆向的时候, ...

  4. 路由器逆向分析------在Linux上安装IDA Pro

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69665905 01.在Linux系统上安装Linux版本的IDA Pro Linu ...

  5. IDA Pro - 如何得到比较清楚的逆向伪代码

    原文地址:Question about disassembler 简介 这篇文章介绍了如何在不使用插件的IDA Hex-Rays如何得到比较清晰的伪代码.IDA Hex-Rays功能很强大,只要你提供 ...

  6. IDA,IDA PRO 产品介绍

    IDA理念这是我们在开发产品时竭尽全力遵循的理念--在此过程中,我们相信我们将开发出能够为您带来所需的可靠性.便利性和易用性的软件.没有什么能打败人脑因为我们知道一秒钟的洞察力仍然胜过百年的处理时间, ...

  7. android调试系列--使用ida pro调试原生程序

    1.工具介绍 IDA pro: 反汇编神器,可静态分析和动态调试. 模拟机或者真机:运行要调试的程序. 样本:自己编写NDK demo程序进行调试 2.前期准备 2.1  准备样本程序(假设已经配置好 ...

  8. IDA Pro使用技巧

    DA Pro基本简介 IDA加载完程序后,3个立即可见的窗口分别为IDA-View,Named,和消息输出窗口(output Window). IDA图形视图会有执行流,Yes箭头默认为绿色,No箭头 ...

  9. IDA Pro使用(静态分析+动态调试)

    链接:http://skysider.com/?p=458 IDA Pro使用(静态分析+动态调试) 1.静态分析 IDA FLIRT Signature Database —— 用于识别静态编译的可 ...

  10. ida pro 使用

    交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA.是目前最棒的一个静态反编译软件,为众多0day世界的成员 ...

随机推荐

  1. 用Python实现阿拉伯数字转换成中国汉字

    要将阿拉伯数字转换成中国汉字表示的数字,我们需要一个映射表来转换每个数字,并且处理不同位数的数字(如十.百.千.万等). 1. Python实现阿拉伯数字转换成中国汉字 下面是一个完整的Python代 ...

  2. jQuery父子页面之间元素、方法获取、调用

    资源来自:https://www.cnblogs.com/it-xcn/p/5896231.html 一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式: ...

  3. 八皇后dfs全排列——洛谷1219

    [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 \(6 \times 6\) 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括 ...

  4. Foxmail 设置个人签名的方法

    事件起因: 在foxmail设置一个好看的个人签名 具体设置过程: 打开Foxmail - 右上角设置 -写邮件 签名的设置 字体格式:等线 10px 黑色 内容: 名字 | 名字英文 职位 个人邮箱 ...

  5. OpenCL架构

    OpenCL提供了一种统一的编程接口,使得程序员可以编写一次代码,然后在多种处理器上运行. 平台模型 OpenCL平台总是包括一个宿主机(host).宿主机与OpenCL程序外部的环境交互,包括I/O ...

  6. iOS中搜索框EVNCustomSearchBar使用小结

    最近在项目开发中用到了搜索框,之前都是用的系统的searchbar,现有项目中用的是EVNCustomSearchBar,我试了一下还挺方便,下面说一下具体的用法. 第一步:引入添加相关的委托代理EV ...

  7. 内核级流量治理引擎Kmesh八大新特性解读

    本文分享自华为云社区<内核级流量治理引擎 Kmesh v0.5 发布!进击的Sidecarless服务网格>,作者:云容器大未来. 我们非常高兴地宣布 Kmesh v0.5.0 的发布.首 ...

  8. centos7.6源码方式安装python3.6.8

    1 安装依赖包 centos7.6是没有自带python3的 [root@opgs201 ~]# cat /etc/redhat-release CentOS Linux release 7.6.18 ...

  9. 抽象队列同步器AQS

    AQS是AbstractQueuedSynchronizer的简称,即抽象队列同步器,从字面上可以这样理解: 抽象:抽象类,只实现一些主要逻辑,有些方法由子类实现: 队列:使用先进先出(FIFO)的队 ...

  10. Machine Learning Week_8 K-means And PCA

    目录 1 K-means 1.1 Unsupervised Learning:Introduction 1.2 K-Means Algorithm 1.2.1 k-means algorithm 1. ...