IDA PRO笔记

【快捷键】

-Tab/F5 :伪代码/反汇编切换

-Ctrl + F :表格窗口搜索功能

-N :重命名符号

字符串表(Strings window):

-Shift + F2 :打开字符串表

反汇编窗口(IDA View):

-空格 :切换图形/文本模式

-Ctrl + 鼠标滚轮 :调整反汇编图形模式大小

-G :地址跳转窗口

-X :查看交叉引用

-CTRL+ALT+X 全局查看交叉引用

-H :数据转换

-U/C :代码和数据相互转换

-M 修改常量为枚举值

伪代码窗口(Pseudocode):

-H :10进制和16进制转换

-R :切换对应的字符

Y键修改函数类型,包括函数返回值类型

【字符类型】

db :1字节 byte/char/uint8/int8

dw :2字节 word/short/uint16/int16

dd :4字节 dword/int/uint

dq :8字节 qword/int64

快捷键d转换字节类型

【增加类型】

在LocalTypes中添加类型

调试

F2加断点

F7单步进入函数

F8单步不进入函数

Ctrl+F7执行到当前函数返回后位置

F4执行到光标为止停下来

F9运行直到断点

SetIP(Ctrl+N)强制代码从光标位置处开始执行

动态调试时修改指定内存的值

idc.patch_dword(0x000000B039FAFDC0, 8)

--------------------------------------------------------------IDA Python----------------------------------------------------------------------

1.寄存器操作

idc.get_reg_value('rax')

idaapi.set_reg_val("rax",1234)

2.调试内存操作

idc.read_dbg_byte(addr)

idc.read_dbg_memory(addr,size)

idc.read_dbg_dword(addr)

idc.read_dbg_qword(addr)

idc.patch_dbg_byte(addr,val)

3.调试内存读写封装

def patch_dbg_mem(addr,data):

for i in range(len(data)):

idc.patch_dbg_byte(addr+i,datai)

def read_dbg_mem(addr,size):

dd=\[\]

for i in range(size):

dd.append(idc.read_dbg_byte(addr+i))

return bytes(dd)

4.本地内存操作(会修改idb数据库)

idc.get_qword(addr)

idc.patch_qword(addr,val)

idc.patch_dword(addr,val)

idc.patch_word(addr,val)

idc.patch_byte(addr,val)

idc.get_db_byte(addr)

idc.get_bytes(addr,size)

5.反汇编操作

GetDisasm(addr) #获取反汇编文本

idc.next_head(ea) #获取吓一跳指令地址

6.交叉引用分析

for ref in idautils.XrefsTo(ea):

print(hex(ref.frm))

7.杂项常用接口

idc.add_bpt(0x409437) 添加断点

idaapi.get_imagebase() 获取基地址

idc.create_insn(addr) #c,MakeCode

ida_funcs.add_func(addr) #p, create function

ida_bytes.create_strlit(addr) #创建字符串,A键效果

8.函数遍历

for func in idautils.Function():

print("px%x, %s" % (func, idc.get_func_name(func))

9.基本块遍历

fn = 目标函数地址

f_blocks = idaapi.FlowChar(idaapi.get_func(fn),flags=idaapi.FC_FREDS)

for block in f_blocks:

print hex(block.start_ea)

10.基本块的前驱

for pred in block.preds():

print hex(pred.start_ea)

11.基本块的后继

for succ in block.succs():

print hex(succ.start_ea)

12.指令遍历

for ins in idautils.FuncItems(0x401000):

print(hex(ins))

13.条件断点编写

0.编写断点函数脚本,本在IDA底部导入该函数

1.设置普通断点,在call rand之后设置(此时能获取rand的返回值)

2.右键->【Edit Bread ...】

3.点击Condition->...

4.输出bp(),并选择语言Python

def bp():

rax = idc.get_reg_value('rax')

return rax==16949


LazyIDA

HappyIDA

KeyPatch

BinDiff

Microcode展示插件https://github.com/gaasedelen/lucid

相关推荐
一只小菜鸡..1 天前
南京大学 操作系统 (JYY) 学习笔记:进程、系统调用与状态机管理
笔记·学习
DeviceHub1 天前
硬件工程师选型笔记:ALPS RK12L1230C0K 与 Tonevee RK12L1230C0K 电位器 PIN TO PIN 评估指南
笔记
whyTeaFo1 天前
GAMES101: Lecture 13: Ray Tracing 1 (Whitted-Style Ray Tracing) ppt笔记
笔记
XS0301061 天前
SpringMVC核心知识点实操笔记
笔记
依然范特东1 天前
强化学习笔记1--基础概念
笔记
晓梦林1 天前
[ACTF2020 新生赛]BackupFile学习笔记
android·笔记·学习
jjh+++(求关注版)1 天前
DeepAgent开发学习心得笔记
人工智能·笔记
xian_wwq2 天前
【学习笔记】解剖 Claude Code —— Anthropic 的 Harness 参考实现-09/15
人工智能·笔记·学习
晓梦林2 天前
Tools靶场学习笔记
笔记·学习
xian_wwq2 天前
【学习笔记】什么是Harness Engineering- 01/15
人工智能·笔记·学习