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. IVIEW 评分组件 Rate 介绍

    1. 首先,评分允许评半颗星,使用 allow-half <template> <Rate allow-half v-model="valueHalf" /> ...

  2. mybatis-plus批量增加、批量修改样例+建表语句+postman接口

    使用mybatis-plus开发中会遇到数据量多的情况下,插入和修改效率低,主要原因是"新增"和"修改"方法是对一条数据进行处理的,如果有一万条数据就会和数据库 ...

  3. OpenTelemetry 实战:gRPC 监控的实现原理

    前言 最近在给 opentelemetry-java-instrumentation 提交了一个 PR,是关于给 gRPC 新增四个 metrics: rpc.client.request.size: ...

  4. Asp.net core 学习笔记之 authen + autho + oidc + oauth + spa 第九篇 (external login)

    External login 就是指通过 Google, Microsoft, Facebook account 做登入. https://docs.microsoft.com/en-us/aspne ...

  5. ASP.NET Core – Razor Pages 冷知识

    Multiple Form Binding 问题 在一个 page 里面有 2 张 form, 那么就会有 2 个 model binding. 当任何一个 submit 的时候. 由于 2 个 mo ...

  6. OData – 权限管理

    前言 OData 其实没有权限的机制, Client 可以任意的 $select, $expand. 即便它可以做简单防御设置, 但是离平常的业务需求还是很远. 一般上 query entity 常见 ...

  7. FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher

    ​EasyPusher是一款国产的RTSP直播录制推流客户端工具,它支持Windows.Linux.Android.iOS等操作系统.EasyPusher采用RTSP推流协议,其中安卓版EasyPus ...

  8. 系统编程-进程-close-on-exec机制

    我的相关博文: 系统编程-进程-exec系列函数超级详解(带各种实操代码) 一般我们会调用exec执行另一个程序,此时会用全新的程序替换子进程的正文,数据,堆和栈等. 此时保存文件描述符的变量当然也不 ...

  9. fp16 的累加误差有多大

    本文地址:https://wanger-sjtu.github.io/fp16-err/ 最近在项目中需要实现fp16的数据类型做FFN的计算,算子实现的同学反馈误差与x86上得到的golden数据有 ...

  10. 《WebGL 编程指南》读书笔记(2、3章)

    完整 demo 和 lib 文件可以在 https://github.com/tengge1/webgl-guide-code 中找到. 第 2 章 第一个 WebGL 程序 function mai ...