IDA

这玩意儿是昵称 · 2024-10-14 · 次阅读


IDA

ida插件环境:

1.至少Python3.8

2.多个使用IDA目录下的idaplyswitch.exe

插件:

直接把xxx.py放到目录的plugins目录

KeyPatch(修改汇编)

依赖安装:pip install keystone-engine

LazyIDA(提取,批量修改)

至于用64还是32,可以用查壳软件直接看

在linux下也可以使用file命令

但是实际上可以试错,不是直接打不开然后提醒,就是反汇编时会提醒

function 窗口

按G可以地址导航,按TAB显示伪代码

在该窗口中使用Ctrl+F就可以用关键字查找

这里包含了分析出的所有函数

IDAview

图形窗口

会显示控制流,按空格切换为文本模式,这是按照线性地址

分析一般从main开始,但是万一main函数名字没有识别到

可以根据输出的内容来定位地址(去字符串窗口找),然后定位函数

字符串窗口

shift+12

在该窗口中使用Ctrl+F也可以用关键字查找(其实所有表格窗口都可以)

它包括了所有已识别的字符串

选中按U取消已定义的标识符,按A重建,按X显示所有引用选中的字符串的地方

hex view

动态调试时显示内存数据,正常是显示静态数据

imports/exports

导入导出表

显示引用的api,使用里面的函数

分析动态链接库时,同时要看导出的函数

程序入口会被ida当成一个叫做start的导出函数

在运行时start先被初始化,然后调用main函数

其他玩意儿

重命名函数:

ida反编译的有时名字不太对,为了方便看,所以建议重命名
(自己要猜一猜可能是什么库函数)

选中,然后按N

IDA动态调试

作用:

验证静态分析结果

观察程序运行时数据

支持的特性:

1.软件/硬件/条件/脚本断点

设置断点,点前面,或者选中按F2

在伪代码设断点,可能会导致有些没执行(断点会在函数传参时)

软件:IDA在地址上设置断点(0xCC),到达后在恢复

硬件断点:通过CPU抛出错误来断点

条件断点:到达后执行特定脚本,并返回真表示被命中

脚本断点:基本和上面一样,但是返回值永远是假

2.步入/步过/步出/执行到光标位置/

步入:进入call函数(F7)

步过:直接到call函数的返回地址(F8)

步出:中断函数回到其调用者(执行到返回)(Ctrl+F7)

执行到光标位置:直接执行到选中位值(实际上是设置临时断点)(F4)

设置代码执行位置:用于跳过不想执行的代码(Ctrl+N)

注意scanf会强行暂停等待输入

3.汇编级/伪代码/源码/调试代码级支持

IDA会在存在源代码时自动导入,但是不如直接用VS之类的集成开发软件

4.寄存器/内存读写

不是很方便,建议装上面插件

5.启动进程/附加调试

启动调试可以每一步调试,也可以调试初始化代码(如果没有反调试)

附加调试不能调试初始化代码,但是有些程序是子程序,不附加环境不一样

也用来调试动态库以及绕过一些反调试

注:附加可以用Ctrl+F快速查找要附加到的程序

6.内存窗口

在窗口中按G跳转到特定地址(自己提前复制)

按F2修改内存(无插件时),可以输入十六进制数字,再按F2保存修改

用LazyIDA时,进入编辑模式时右键可以选pastedata,这样可以用ascll模式

但是这玩意儿不会自己不00,所以还要自己加

7.模块窗口

显示模块列表

Debuger–>Debuger Windows–>Modules

在Windows上是dll,Linux上是so

远程调试

安装环境:

在安装目录下的debugsrv目录,选择对应系统的sever,复制到目标环境运行(子系统必须是wsl2)

为了方便可以加到path里

echo $PATH
//调试目录就是执行目录

配置:

Debuger–>process options

Host 填Linux地址(wsl会自动填回环地址)

Port就填Linux上显示的监听端口

其他不要填

如果修改的代码,记得删掉重新上传


这玩意儿是昵称