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上显示的监听端口
其他不要填
如果修改的代码,记得删掉重新上传