逆向工程与IDA使用入门

逆向工程与IDA使用入门

在进行逆向工程分析时,IDA(Interactive DisAssembler)是一个非常强大的工具,它可以帮助我们将机器代码反编译为更易读的伪C代码。为了高效使用IDA进行分析,特别是对复杂的二进制文件进行逆向,需要一些必要的准备和基本操作熟悉。

准备工作

首先,你需要确保安装了以下环境和插件:

  1. Python 3.8.x:确保安装了正确版本的Python,并配置好环境变量,以便与IDA和相关插件兼容。
  2. LazyIDA:这是一个非常有用的插件,可以简化IDA的使用体验。你可以从GitHub下载并安装。
  3. Keypatch:这是另一个重要插件,依赖于keystone-engine,它可以帮助你在IDA中方便地进行汇编代码的修改。使用pip install keystone-engine来安装依赖库。
基本操作
  1. 图形与文本模式切换:通过按下空格键可以在IDA中快速切换图形视图和文本视图,帮助你更好地理解代码结构。
  2. 窗口切换:使用Tab键可以在IDA的不同窗口间进行切换,如十六进制数据窗口和反汇编窗口。
  3. 字符串表:按下Shift + F12或通过菜单 View -> Open subview -> Strings 可以打开字符串表,这是分析代码时非常重要的一步,可以帮助你快速定位感兴趣的字符串,并反向查找它们在代码中的引用。
高效分析技巧
  1. 快速查找:使用 Ctrl + F 可以在表格或代码中快速查找内容。
  2. 编辑十六进制数据:在IDA的Hex View中,可以右键进行编辑并应用更改。
  3. 交叉引用:点击符号名变为黄色,然后按 X 键可以展示所有对该符号的引用,帮助你更好地理解代码的调用关系。
具体案例分析

通过实际案例,如Base64编码函数的逆向工程,我们可以看到如何通过IDA分析并确认代码的功能。在这种情况下,sub_140008780 函数是一个标准的Base64编码实现。通过分析函数的结构和操作,你可以快速确认其功能并进行相关操作。

使用准备

安装python3.8.x版本,lazyida,keypatch

pip install keystone-engine

基本使用

按空格键,转换图形模式或者文本模式

光标定位,tab转换窗口

shift +f12 得到字符串表

view --> open subview --> strings

字符串表 ----》找到字符串(不一定全) --》 找到开源库 ---》逆向代码

CTRL + f 快速查找表格内容

IDA 数据窗口 Hex-View   右键编辑   十六进制数据 ---》右键 应用更改 --》麻烦

IDA 交叉引用

单击符号名---》变成黄色----》按下X---》展示所有引用

最后一次点击某view---》查表----》返回到刚才的某view

快速找到感兴趣的代码

字符串查找

重命名 N ----》有良好的命名习惯

追踪username 的编码过程,右键可修改显示或者隐藏类型转换

例如第二个函数可以解释成base64编码

__int64 __fastcall sub_140008780(__int64 a1, __int64 a2, int a3)
{
  int v4; // [rsp+24h] [rbp+4h]
  int v5; // [rsp+44h] [rbp+24h]
  int v6; // [rsp+44h] [rbp+24h]
  int v7; // [rsp+44h] [rbp+24h]
  int v8; // [rsp+44h] [rbp+24h]
  int v9; // [rsp+44h] [rbp+24h]
  int v10; // [rsp+44h] [rbp+24h]
  unsigned __int8 v11; // [rsp+64h] [rbp+44h]
  unsigned __int8 v12; // [rsp+64h] [rbp+44h]

  j___CheckForDebuggerJustMyCode(&unk_14015000E);
  v4 = 0;
  v5 = 0;
  while ( v4 < a3 )
  {
    *(a2 + v5) = off_14013F000[0][(*(a1 + v4) >> 2) & 0x3F];
    v6 = v5 + 1;
    v11 = (16 * *(a1 + v4)) & 0x30;
    if ( v4 + 1 >= a3 )
    {
      *(a2 + v6) = off_14013F000[0][v11];
      v7 = v6 + 1;
      *(a2 + v7++) = 61;
      *(a2 + v7) = 61;
      v5 = v7 + 1;
      break;
    }
    *(a2 + v6) = off_14013F000[0][(*(a1 + v4 + 1) >> 4) & 0xF | v11];
    v8 = v6 + 1;
    v12 = (4 * *(a1 + v4 + 1)) & 0x3C;
    if ( v4 + 2 >= a3 )
    {
      *(a2 + v8) = off_14013F000[0][v12];
      v9 = v8 + 1;
      *(a2 + v9) = 61;
      v5 = v9 + 1;
      break;
    }
    *(a2 + v8) = off_14013F000[0][(*(a1 + v4 + 2) >> 6) & 3 | v12];
    v10 = v8 + 1;
    *(a2 + v10) = off_14013F000[0][*(a1 + v4 + 2) & 0x3F];
    v5 = v10 + 1;
    v4 += 3;
  }
  *(a2 + v5) = 0;
  return a2;
}

小总结,进去函数之后是复杂的c语言代码,可以直接扔给gpt反馈。

可以确认是base64,并且没有魔改

快捷键h ,进制转换

快捷键r,字符转换

IDA背景颜色修改

关闭,可以选择打包数据库,压倒一个文件里面

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值