首页 > 其他分享 >ida(持续更新)

ida(持续更新)

时间:2025-01-18 13:10:30浏览次数:1  
标签:get 持续 ea 更新 bytes 地址 ida IDA

前缀 说明
sub_ 指令和子函数起点
locret_ 返回指令
loc_ 指令
off_ 数据,包含偏移量
seg_ 数据,包含段地址值
asc_ 数据,ASCII字符串
byte_ 数据,字节(或字节数组)
word_ 数据,16位数据(或字数组)
dword_ 数据,32位数据(或双字数组)
qword_ 数据,64位数据(或4字数组)
_OWORD (8个字=16个字节=128位)
flt_ 浮点数据,32位(或浮点数组)
dbl_ 浮点数,64位(或双精度数组)
tbyte_ 浮点数,80位(或扩展精度浮点数)
stru_ 结构体(或结构体数组)
algn_ 对齐指示
unk_ 未处理字
XMMWORD 128位

IDA的使用教程

转载自先知社区

原文链接:IDA Pro7.0使用技巧总结

俗话说,工欲善其事,必先利其器,在二进制安全的学习中,使用工具尤为重要,而IDA又是玩二进制的神器,以前在使用IDA的时候,只是用几个比较常用的功能,对于IDA的其他功能没有去研究,于是本着学习的精神,参考着《IDA pro权威指南》(第二版),写下这篇文章,记录自己的学习心得,下面的记录都是在Windows平台下的IDA pro7.0进行的
一些二进制工具

在《IDA pro权威指南》的开篇一两章中,先是介绍了几款常用于二进制研究的工具,我这里简单的记了几个,介绍一波:

C++filt:
可以用于显示出c++中复杂的重载后的函数名称

PE tools:
是一组用于分析Windows系统中正在运行的进程和可执行文件的工具

string:
可以用于直接搜索出elf文件中的所有字符串
参数-a 表示搜索整个文件,参数-t 可以显示出每一个字符串的偏移,参数-e 可以用于搜索更多的字符编码的字符串,如Unicode编码

strip:

可用于elf去符号,去符号后仍然保持正常功能但增加了逆向的难度,出题恶人必备

开发了IDA的天才是Ilfak,他的个人博客有很多IDA的教程
https://www.hexblog.com/

IDA目录结构

在IDA的安装根目录下有许多文件夹,各个文件夹存储不同的内容

cfg:包含各种配置文件,基本IDA配置文件ida.cfg,GUI配置文件idagui.cfg,文本模式用户界面配置文件idatui.cfg,
idc:包含IDA内置脚本语言IDC所需要的核心文件
ids:包含一些符号文件
loaders:包含用于识别和解析PE或者ELF
plugins:附加的插件模块
procs:包含处理器模块

常用快捷键

IDA中的快捷键都是和菜单栏的各个功能选项一一对应的,基本上你只要能在菜单栏上找到某个功能,也就能看到相应的快捷键,这里记录几个常用的:

a:将数据转换为字符串

f5:一键反汇编

esc:回退键,能够倒回上一部操作的视图(只有在反汇编窗口才是这个作用,如果是在其他窗口按下esc,会关闭该窗口)

shift+f12:可以打开string窗口,一键找出所有的字符串,右击setup,还能对窗口的属性进行设置

ctrl+w:保存ida数据库

ctrl+s:选择某个数据段,直接进行跳转

ctrl+鼠标滚轮:能够调节流程视图的大小

x:对着某个函数、变量按该快捷键,可以查看它的交叉引用

g:直接跳转到某个地址

n:更改变量的名称

y:更改变量的类型,ida函数参数不对也可以用这个.

/ :在反编译后伪代码的界面中写下注释

\:在反编译后伪代码的界面中隐藏/显示变量和函数的类型描述,有时候变量特别多的时候隐藏掉类型描述看起来会轻松很多

;:在反汇编后的界面中写下注释

ctrl+shift+w:拍摄IDA快照

u:undefine,取消定义函数、代码、数据的定义

常用设置

拍摄快照

由于IDA不提供撤销的功能,如果你不小心按到某个键,导致ida数据库发生了改变,就得重新来过,所以要记得在经常操作的时候,加上快照:file–>take database snapshot
加完快照后,会生成一个新的ida数据库文件,本质上是有点像另存的操作

快捷键:ctrl+shift+w

菜单栏常用设置

view–>open subviews: 可以恢复你无意中关闭的数据显示窗口

windows–>reset desktop: 可以恢复初始ida布局

option–>font: 可以改变字体的相关属性

在流程视图中添加地址偏移

IDA中的流程视图可以说是非常的好用,简单明了地能看出程序的执行流程,尤其是在看if分支代码和循环代码的时候,能够非常直观
在这里插入图片描述
但是,我们还可以改得更加好用,在这个视图中添加地址偏移的话,我们取地址就非常方便,不再需要按空格切换视图去找,在菜单栏中设置:option–>general
在这里插入图片描述

将该选项打钩后就可以看到效果了:
在这里插入图片描述

自动添加反汇编注释

同样是在菜单栏中设置:option–>general
在这里插入图片描述

这个功能对于萌新来说非常友好,在刚刚初学汇编的时候, 难免遇到几个不常用的蛇皮汇编指令,就得自己一个个去查,很麻烦,开启了自动注释的功能后,IDA就可以直接告诉你汇编指令的意思

效果如下:
在这里插入图片描述

其他目前暂时用不到,具体请看原作者文章吧。=-=

[IDA Python 常用函数 | 4nsw3r's Blog](https://4nsw3r.top/2022/02/11/IDA Python 常用函数/)

IDA Python 常用函数

官方文档

https://www.hex-rays.com/products/ida/support/idapython_docs/

读取

读取汇编信息

获取指定地址助记符

print_insn_mnem(ea)

获取上一条/下一条指令的地址

prev_head(ea)`
`next_head(ea)

超出当前函数边界后会跳至下一个函数

获取指定地址的第 n 个操作数

print_operand(ea,n)

如对于 0x40100 vpxor ymm3,ymm4,ymm5

python
>>>print_operand(0x40100,0)
ymm3
>>>print_operand(0x40100,1)
y4

获取指定地址的第 n 个立即数

get_printable_immvals(ea, n)

获取指定地址处的反汇编

GetDisasm(ea)

读取函数信息

获取一个地址范围内所有函数的地址

Functions(start_ea,end_ea)

返回一个 Python ·迭代器·对象

获取函数边界

get_func_attr(0x140008070,FUNCATTR_START)
get_func_attr(0x140008070,FUNCATTR_END)

获取当前地址的下一个/上一个函数

get_next_func(ea)
get_prev_func(ea)

读取数据

获取指定地址的字符串

get_strlit_contents(ea)

返回 Python bytes 类型

获取指定地址指定数量的bytes

get_bytes(ea,num)
返回 Python bytes 类型

获取指定地址的数据

python
ida_bytes.get_qword()
ida_bytes.get_dword()
ida_bytes.get_word()
ida_bytes.get_byte()
ida_bytes.get_64bit()
ida_bytes.get_32bit()
ida_bytes.get_16bit()

读取调试时寄存器的值

get_reg_val()

写入

修改数据

python
ida_bytes.patch_byte(ea,number)
ida_bytes.patch_word(ea,number)
ida_bytes.patch_dword(ea,number)

常用脚本片段

读取某地址范围内所有汇编助记符

python
ea=startAddress
while True:
    if ea>endAddress:
        print(opcode)
    ea=next_head(ea)

列出某地址范围内的所有函数地址

python
for i in Functions(startAddress,endAddress):
    print(i)

使用脚本控制调试,dump 数据

python
from idaapi import *

while True:
    # print(get_reg_val('eax'))
    # print(GetDisasm(GetEventEa()))
    # print(get_dword(address))
    continue_process()
    wait_for_next_event(WFNE_SUSP,-1)

标签:get,持续,ea,更新,bytes,地址,ida,IDA
From: https://www.cnblogs.com/T0fV404/p/18678368

相关文章

  • 2024 11~12 月 做题记录(待更新)
    CF2047DMoveBackataCost要使字典序最大,每次都要找到最小的数,把它前面的数都后移.因为可以钦定后移的顺序使得后移的数按升序排列,所以每个数最多被移位一次.定序后开两个队列模拟即可.CCPC2024上海F羁绊大师将羁绊相同的英雄相连,因为英雄至多\(2\)个羁绊,所以度数不超......
  • SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路
    随着公司业务的增加,公司需要一个java+python人工智能相互配合架构,正常网站业务用java来做,而ai,例如电价预测等回归任务,以及大模型预测全网负荷,新能源出力等任务,使用python通过fastapi暴露接口来做,那么就需要springcloud架构注册发现。前端统一使用Vue进行效果的展示因此本......
  • Creo许可证更新步骤及注意事项
    随着工程设计软件的不断发展,保持Creo许可证的最新状态对于确保软件的稳定运行和充分利用新功能至关重要。本文将指导您完成Creo许可证的更新步骤,并提醒您注意关键事项,以确保更新过程顺利且无误。一、Creo许可证更新步骤1.获取最新版本的许可证文件:访问Creo官方网站或授权渠道,下......
  • HAL库 相关单词注解表示(持续更新)
    SET/RESET------(1/0)通常用于表示将某个位、寄存器或标志设置为特定的值(通常 SET 表示设置为1,RESET 表示设置为0 Pin------引脚在嵌入式开发中,“PIN”通常指“引脚(Pin)”,即芯片或电子元件上用于连接外部电路或与其他设备进行通信的金属接触点。support------支持在......
  • (持续更新)零基础入门 Java 之初始二维数组
    ......
  • pytest测试框架集成钉钉机器人、邮件,并实现持续集成部署
    要结合多系统并存的架构,使用YAML文件编写测试用例,并集成钉钉、邮件通知功能以及CI/CD流程,以下是完整的实现方案。整体功能架构多系统测试支持:使用YAML文件定义测试用例,支持多系统间的模块化、分层管理。测试框架根据YAML文件动态加载测试用例,支持灵活扩展。......
  • 关于vue3 路由离开前 更新pinia 导致页面watch被触发 解决方法
    背景:在vue中,使用watch监听pinia中的数据是否变化来调用apiwatch(()=>{return[pinia.data,]},(newV,oldV)=>{axios.get('a.b',params).then((response)=>{........});},{immediate:true})在监听piniadata的时候,如......
  • 查询、更新数组/嵌套对象
    查询、更新数组/嵌套对象我们可以对对象、对象中的元素、数组、数组中的元素进行匹配查询,甚至还可以对数组和对象相互嵌套的字段进行匹配查询/更新,下面我们从普通匹配开始讲讲如何进行匹配。普通匹配匹配记录中的嵌套字段匹配数组匹配数组匹配数组中元素匹配数组第n项......
  • 【取证工具】Magnet AXIOM中文绿色版(更新8.4)
    MagnetAXIOM取证工具介绍MagnetAXIOM是一款功能强大的数字取证工具,专为法律执行人员、调查员和安全专家设计,用于从各种数字设备中提取、分析和报告证据。AXIOM提供了全面的取证支持,能够从电脑、移动设备、云端服务以及物联网设备中收集并分析数据。多平台支持MagnetAXIOM......
  • 专升本数据结构看这一篇就够了!(重要章节已更新完毕,持续更新中...)
    重点章节已更新完毕,其他章节持续更新中,最新版本可以查看语雀考前须知考核形式:闭卷笔试,不能使用电脑编程试题类型:填空、选择、判断、简答、算法设计成绩占比:按章节:25%:绪论,串,数组和广义表,排序75%:线性表,栈和队列,树和二叉树,图,查找按能力:30%:识记......