在逆向过程中,自动识别文件中存在的密码算法。原理上只有两条路
1、密码算法中的常量特征(常数、s盒等);
2、特定加密库的独有特征(字符串、指令流等)。
现有工具特点:
1、大多都是根据密码算法的常量特征进行识别,很少包含特定加密库的特征。
2、都是以反汇编工具(IDA/Ghidra)的插件、脚本形式存在。
3、都是基于静态分析,也就是只能识别静态特征。如果特征在运行时动态生成,则无能为力。
findcrypt系列
FindCrypt和FindCrypt2
最初的基础,2006年hex-rays的Ilfak发布。
77个特征,在源码的consts.cpp中,不方便修改,重新编译后才生效。
FindCrypt2使FindCrypt试用大端程序。
findcrypt3
HexRays 的 Ilfak 基于 findcrypt1 和 findcrypt2 开发的。
566个特征。特征库在源码中,不方便修改,重新编译后才生效。
https://github.com/HongThatCong/FindCrypt3
idapython_tools_findcrypt
使用python对findcrypt/findcrypt2的重现。
ida6.8-7.5均运行错误。作者只说了mac上7.x测试通过,具体版本没说。python版本也没说。
https://github.com/you0708/ida/tree/master/idapython_tools/findcrypt
FindCrypt - Ghidra
用java移植的findcrypt。
在findcrypt的77个特征库基础上增加到122个,位于database.d3v文件。格式未知,不好扩展。
https://github.com/d3v1l401/FindCrypt-Ghidra
Ghidra FindCrypt
说是对FindCrypt - Ghidra的重开发,但是比较两者对同一文件的扫描结果。没有FindCrypt - Ghidra扫出来的多。效果不好。
更好地呈现搜索的结果。会进行重命名并增加注释。
只支持9.2以后版本Ghidra。
https://github.com/TorgoTorgo/ghidra-findcrypt
Signsrch系列
IDA Signsrch
dll版本插件,最新2018年发布,只支持到ida7.1。
特征库xml形式。2279条特征。方便扩展。
特征库还包括其它一些字符串,如“IsDebuggerPresent”
GitHub - nihilus/IDA_Signsrch: IDA Signsrch
IDASignsrch
python版本插件,支持最新ida。
特征库真包含IDA Signsrch,多18个特征。
https://github.com/l4ys/idasignsrch
findcrypt-yara系列
findcrypt-yara
python插件。
需要给python安装yara,pip安装yara-python而不是yara,不然不兼容。
ida7.5支持。
特征库为yara,129条,方便扩展。
GitHub - polymorf/findcrypt-yara: IDA pro plugin to find crypto constants (and more)
总结
综上,推荐大家使用三个工具:
- findcrypt-yara
- IDASignsrch
- findcrypt3
最好是这三个工具都用一遍,虽然功能上有重合,但也各有特色,运行时间也都不太长。
———————————————————————————————————————————
欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。