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. 使用kamailio进行分机注册及互拨

    操作系统版本:Debian 12.5_x64 kamailio版本:5.8.2 kamailio作为专业的SIP服务器,可承担注册服务器的角色.今天记录下kamailio作为注册服务器,承接分机注册, ...

  2. java 知识

    1. 单文件java 例子和简单项目例子 http://kleinfelter.com/java-hello-world-with-visual-studio-code-and-eclipse jav ...

  3. OpenAI注册-临时手机号/邮箱

    OpenAI 在注册ChatGPT时,发生了一个错误,使用邮箱进行注册后,在注册界面会提示"Not available OpenAI's services are not available ...

  4. OData – 基础语法 Basic

    前言 有时候太久没有写真的会忘记,官网又太罗里吧嗦,还是写一篇帮助以后快速复习进入状况吧. Request URL: "/root/version/entities" OData ...

  5. webpack 5.88.2

    原理 webpack的运行过程大致可以分为以下几个步骤:webpack的运行过程实际上就是等待上一个钩子结束调用下一个钩子的过程 初始化:webpack接收命令行参数或配置文件,创建一个Compile ...

  6. 反问面试官3个ThreadLocal的问题

    ThreadLocal,一个Java人面试绕不开的话题,我也很奇怪为什么那些面试官很喜欢问这个,也不知道他们自己有没有搞清楚. 接下来,我想先说说ThreadLocal的用法和使用场景,然后反问面试官 ...

  7. 分析ueventd Coldboot耗时问题

    安卓go平台启动时间发现如下ueventd耗时1.907s问题: 01-11 00:20:02.854 0 0 I init : Parsing file /odm/etc/init... 01-11 ...

  8. Linux调度器:进程优先级

    一.前言 本文主要描述的是进程优先级这个概念.从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级.realtime优先级.归一化优先级 ...

  9. 批量读取dicom数据 to array类型((多标签融合)))

    file_name = ["portalvein", "venoussystem", "venacava"] def read_dicom( ...

  10. ABC270-d

    题目 首先贪心是行不通的,考试的时候打了贪心,挂了...... 举个反例: 10 2 3 4 贪心枚举答案为4,但若高桥先选3,最大值为6. 其实考试的时候想到了dp,但是不会打 悲 因为青木也是聪明 ...