1、IDA 静态分析基础

IDA 静态分析

1、环境

注意:如果你的电脑有多个版本的python,比如:IDA使用的 python3.11.* 而你命令行cmd使用的是3.10.* 切换方法:使用 IDA 目录中的 idapyswitch.exe 切换

2、快捷键使用

IDA 有两种模式,一个是文字视图,一个是图形视图,按空格​可以进行切换

比如:

image

缩放就是鼠标+滚轮了

反汇编-> 伪代码 Tab​ 或者 F5​ 再按一次,光标停的位置与tab键的切换有一定关系(不清晰 自行尝试)

shift+f12​ 是字符串搜索的窗口,然后使用ctrl + F 来搜索想要寻找的字符串也是非常方便的。

image

注意 该功能不一定齐全,但是可以提供非常关键的信息。比如:想要查找某个开源库的版本号,然后进行编译匹配,这样就会好用。

数据窗口(也就是二进制窗口)。才导航栏上有一个Hex View,

如果没有就依次选择:[View] -> [Open subviews] -> [Hex dump]

使用F2 键进入编辑模式,再按一次F2就退出了

坏了 忘了在哪里看那些被修改过了……先记着吧,回头再看看。

复制数据的方法:

退出编辑模式 直接选中然后ctrl+C即可

在汇编代码界面也可以使用插件:LazyIDA

image

IDA还可以使用G​ 键来实现jmp 功能。

交叉引用:X​ 这个还是非常实用的。可以查看某个字符串被哪里调用了。从而定位关键点。

比如:这里有 一个base64 字符串;

image

直接跳过去。

image

到这里就可以知道一共有六处代码使用了这个了。

代码定位方法:主要是字符串定位法,也就是通过已知的字符串来定位目标代码,通过交叉引用的方法来查找

查找main函数,可以直接在function 窗口下ctrl+F 搜索main

也可以使用xfefs 来,直接在当前所在字符串所在的函数上选择 右键,就可以看到了。

IDA重命名:N键 万能重命名快捷键

快捷键总结:

  • 空格:文本模式和视图模式切换
  • Ctrl+鼠标滚轮:视图模式大小切换(基本上是一个好多软件都支持,ida好多功能也支持)
  • Tab/F5 :反汇编与伪代码之间切换
  • Shift + F12:字符串搜索窗口
  • F2: Hex View 窗口编辑模式的进入和退出
  • G: jmp address
  • X:查看交叉引用
  • N:重命名。

3、IDA中不同类型的整数

db 1个字节 dw 2个自检 dd 4个字节 dq 八个字节

比如,在64位程序中,如果我们没有对

下面说说LazyIDA 提取数据 :

直接右键 选择 Convert 这里要注意多选一项。然后选择以什么代码格式。

比如我选择了 C/C++ bytes

unsigned char main[70] = {
    0x8D, 0x4C, 0x24, 0x04, 0x83, 0xE4, 0xF0, 0xFF, 0x71, 0xFC, 0x55, 0x89, 0xE5, 0x56, 0x53, 0x51, 
    0x83, 0xEC, 0x1C, 0xE8, 0xB3, 0xEB, 0xFF, 0xFF, 0x81, 0xC3, 0x6B, 0x44, 0x03, 0x00, 0x89, 0xCE, 
    0xE8, 0x7A, 0x71, 0x01, 0x00, 0x89, 0x45, 0xDC, 0x83, 0x7D, 0xDC, 0x00, 0x75, 0x22, 0x8B, 0x46, 
    0x04, 0x8B, 0x00, 0x83, 0xEC, 0x08, 0x8D, 0x93, 0x78, 0x24, 0xFF, 0xFF, 0x52, 0x50, 0xE8, 0x09, 
    0xEE, 0xFF, 0xFF, 0x83, 0xC4, 0x10
};

就是这样。如果选择C/C++ DWORD 就是这样了

[+] Dump 0x59F5 - 0x5A3B (70 bytes) :
unsigned int main[18] = {
    0x04244C8D, 0xFFF0E483, 0x8955FC71, 0x515356E5, 0xE81CEC83, 0xFFFFEBB3, 0x446BC381, 0xCE890003, 
    0x01717AE8, 0xDC458900, 0x00DC7D83, 0x468B2275, 0x83008B04, 0x938D08EC, 0xFFFF2478, 0x09E85052, 
    0x83FFFFEE, 0x000010C4
};

数据与代码的转换:

首先

在某个地址里面按U 取消IDA对当前代码的解释,就会变成数据了。,

在数据上面按C 就是代码了, 并对其反汇编,

在你认为是函数头的位置按P 就可以创建函数了,。处理花指令特别有用,

花指令:垃圾代码。

比如:

image

比如这个无论如何中间这一段他就不会执行。

这就是花指令。

调用图:

其实就是在某个函数上面右键

image

to 的意思就是让当前函数当 根节点,看看哪些函数调用了当前函数。from就是当叶子节点,看看该函数调用了哪些函数。

常熟搜索:

方法:Search - > Immediate Value - > find all 选上搜索所有。

作用:搜索对结构体偏移的引用代码。或者是搜索ollvm 真实代码块。

image

这就是OLLVM平坦流。多的先不说了。先找继续学习。

常数搜索:在so文件中,有很多使用0x81 sys_exit 系统调用退出进程的安装,想要找到他就需要使用安装,下面看操作

search -> Immediate 然后选择0x81

image

这时候就可以搜到这些安装了。我们只需要再把它替换一个正常的即可,(这里我不会哈)

文本搜索:这个是可以搜索特殊指令的哈。

比如有些svc 0 特别烦人,我们就可以直接搜出来

搜索方法:image

image

使用Keypatch 来替换一下。

字节序搜索:

搜索满足匹配 HEX 串的序列
菜单 [Search]  [Sequence of bytes]

代码提取:

ida反编译的伪代码是可以直接用的,只要让vs识别哪些不认识的变量就可以了。他不认识你认识,问题不大。

image

也就是这样,直接替换掉就好。

IDA 的patch

直接修改数据:数据窗口 F2
插件修改数据:LazyIDA,修改位置,右键,[Paste Data],修改大段数据
修改汇编代码:Keypatch

以上所有修改,仅修改了IDA的数据库,对应文件并未修改
应用修改到文件:
菜单项 [Edit]  [Patch program]  [Apply Patches …]
注意:Apply 时,IDA 不会还原文件,注意第二次 Patch 时手动还原文件

其实是改完文件然后写入到exe中,

这里要重点注意标红位置所说的。

因为如果你第二次Patch 的时候,他是在你第一次patch基础上patch的

后面还有一个符号恢复,其实就是一个插件的使用,知道有这个东西即可。

posted @   未然king  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示