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

相关推荐
liuyicenysabel1 天前
多服务上线日记三:
运维·服务器·笔记·学习
CHENGQUAN_kenan1 天前
佛山亚马逊卖家出口退税合规指南|9610免税、一般贸易退税、无票采购、申报误区全覆盖
大数据·经验分享·笔记·百度
一只小小的芙厨1 天前
基础数论总结
笔记·学习·算法
@Mike@1 天前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
一米阳光86611 天前
软考(中级)软件设计师核心笔记(9)算法——背包问题
笔记·算法·职场发展·软考·软件设计师·中级职称
Chris _data1 天前
WPF 上位机开发学习笔记 - 第四天
笔记·学习·wpf
树的枝1 天前
【STM32】03.中断和EXTI外设
笔记·stm32·单片机·嵌入式硬件
Wang's Blog1 天前
PostgreSQL笔记34:索引优化策略全景解析——从B-tree到HOT的核心原理与实践
数据库·笔记·postgresql
金字塔頂の蝸牛1 天前
商务日语口语实用手册
笔记·学习笔记·日语·外语
HwJack201 天前
UIAbility 生命周期全链路:从冷启动到热启动的实战笔记
笔记·华为·harmonyos