行业解决方案
查看所有行业解决方案
IDA 用于解决软件行业的关键问题。
在分析那些带有中文资源、日志文本或者配置内容的程序时,字符串窗口里时不时就会跳出问号、方框,或者干脆是一些没法阅读的字符。要弄清楚IDA里头的中文乱码通常跟哪些设置有关,还有乱码出现后编码方式该怎么去调整,先得分辨清楚这些乱码到底是出现在反汇编里的字符串、是Hex View右侧显示的那部分文本,还是旧数据库里留下来的注释。从7.0版本开始,IDA内部已经统一换成了UTF-8,但被分析的那个程序本身的原始字节,它照样可能用的是GBK、UTF-8、UTF-16LE这些不一样的编码,一旦判断错了,显示出来的东西就会不正常。
用IDA做exe静态分析,很多人最容易卡住的,不是菜单不会点,而是上来就急着看伪代码,结果文件入口、函数分布、导入表和字符串线索都还没先理清。Hex-Rays官方的基础文档其实把顺序写得很清楚,先把文件装进数据库并完成自动分析,再围绕反汇编窗口、函数窗口、导入导出视图和字符串窗口建立整体判断,最后再往局部逻辑深入。这样做的好处,是先把全局轮廓看明白,再决定哪里值得细看,效率会高很多。
刚开始用IDA做静态逆向,最容易走偏的地方,不是不会点菜单,而是一上来就想把整份样本一次看懂。Hex-Rays官方入门文档给出的顺序其实很清楚,先加载文件,等自动分析完成,再从函数、字符串、导入表和交叉引用这些基础线索往里走。这样做的好处是,先把程序骨架搭出来,再决定主逻辑从哪里切进去,不会一开始就被大段指令压住。
在IDA里处理arm64文件,先要分清两件事。第一件事是“文件能不能正确按AArch64解码”,第二件事是“函数调用约定有没有被识别对”。Hex-Rays官方文档对第一层说得很直接,加载新文件时先接受合适的loader和processor type,通常就是最稳的起点;而在arm处理器选项里又特别提醒,想正确解码AArch64指令,代码所在segment必须被设成64-bit。第二层则更依赖类型系统和ABI规则,Hex-Rays官方说明里明确写到,反编译器会尝试推断函数类型和calling convention,但在少数情况下会失败,这时就需要手工改函数类型。Arm官方AAPCS64也给出了标准规则,也就是x0到x7用于整型和指针参数与返回值,x8用作间接返回位置寄存器,v0到v7用于浮点和SIMD参数与返回值。
很多人把Linux程序拖进IDA Pro以后,第一步就去找伪代码,但真正影响分析效率的,往往是前面的加载、自动分析和视图切换有没有走顺。Hex-Rays官方文档说明,IDA在文件载入后会先进行自动分析,完成后默认进入IDA View,而且这里本身就支持图形视图、线性视图和邻近视图几种常用分析方式。
在IDA Pro里处理hex文件,最容易出问题的通常不是文件打不开,而是文件能装进数据库后,处理器类型、段地址和运行时映射没有先对齐。Hex-Rays官方文档已经把Intel Hex Object File列为受支持格式,而且新建分析时会先根据输入文件匹配loader,再要求确认处理器类型;但hex本身更像带地址记录的镜像文件,不一定会把后续分析所需的运行区布局一次整理完,所以装载之后先看段和地址,比一上来直接看伪代码更稳。
很多人拿到bin文件以后,第一反应就是直接想看伪代码,但raw binary和PE、ELF这类带文件头的格式不一样,IDA读不出处理器类型、装载地址和段布局,所以如果前面的加载动作没做对,后面反汇编和反编译通常都会跟着偏。Hex-Rays官方资料也明确说明,bin文件更适合通过binary loader手动装入,处理器和装载位置需要用户自己确认,载入后还要把真正的代码区域手动转成代码。
很多人第一次分析so文件,最容易走偏的地方不是不会点F5,而是把so当成独立可执行文件来处理。Hex-Rays官方文档说明,IDA的反编译核心入口是伪代码窗口,既可以在反汇编和伪代码之间来回切换,也可以把选中的函数或整个应用生成C风格输出;同时,IDA里的函数窗口、导出符号窗口和入口点列表,本来就是配合定位代码结构一起用的。也就是说,分析so文件时,真正稳的顺序通常不是“先找main”,而是先让函数、导出和入口信息都浮出来,再决定从哪一层往里走。
用IDA看恶意样本,最容易浪费时间的地方,不是窗口不会开,而是上来就追单个可疑函数,最后线索越来越碎。更稳的顺序,是先把导入、字符串、函数和交叉引用四条线跑一遍,再把能力标签和证据地址一起记下来。IDA本身就提供【Imports】【Strings】【Functions】【Names】【Cross references】【Bookmarks】和【Notepad】这些视图,适合做这类静态初筛与人工整理;而ATT&CK的作用,则是把零散行为收成统一的战术和技术标签。
碰到反混淆样本,最容易犯的错不是看不懂,而是太早扎进某一段伪代码里死抠,结果函数边界、字符串、交叉引用和命名体系都还没整理,越看越散。更稳的做法,是先把IDA里最能快速出轮廓的几组视图拉起来,再决定哪些位置要手动修,哪些位置适合用脚本批量收口。Hex-Rays官方文档里把【Strings】、【Names】、【Functions】、【Cross references】这些都列成了标准子视图,同时也给了create_strlit、set_name和plan_and_wait这类脚本接口,说明这类样本本来就适合先做结构化整理,再谈深入还原。