声明
本文属于OneTS安全团队成员flatcc的原创文章,转载请声明出处!本文章仅用于学习交流使用,因利用此文信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,OneTS安全团队及文章作者不为此承担任何责任。
在逆向中遇到加密算法,别懵!首先我们需要识别出是哪一种加密算法。本文就先为大家介绍识别加密算法的常用方法!后续会更新识别算法后针对不同加密算法的逆向分析的做法及案例。
常见算法识别
01、特征值识别
很多常见算法,如AES、DES等,在运算过程中会使用一些常量提高运算的效率,这些常量往往被硬编码在程序中。
通过识别这些特征常量,可以对算法进行一个大致的快速判断。下表是常见算法需要使用的常量。
基于此原理的分析工具有IDA的 FindCrypt、PEID 的 Krypto Analyzer 插件等。
02、特征运算识别
当特征值不足以识别出算法时,我们可以深入二进制文件内部,通过分析程序是否使用了某些运算特征来推算程序使用了某些算法。下表是常见的运算特征:
我们可以使用静态分析或动态调试的方法来确定。
03、第三方库识别
算法中可能会使用一些现成的库,对这些库进行针对性的识别可以提高逆向分析的效率,下面是ida识别第三方库的一些方法:
01、字符串识别
许多第三方库会将版权信息和该库使用的一些字符串(如报错信息)以字符串的形式写入库中。通过寻找这些字符串可以快速判断使用了哪些第三方库。
02、函数签名识别
在确定了使用的库之后,可以进一步识别具体函数。
🔹当IDA函数列表或者导航栏有大部分青色区域,就属于识别函数,这时可手动应用:shift+f5打开Signature列表,然后insert可以新增匹配的函数签名库。
🔹第三方库函数也有类似上述的方法:
ida文件菜单 -> Load File -> FLIRT Signature file,对应添加就行,若ida没有预置所需识别的库函数签名,这里查https://github.com/push0ebp/sig-database或https://github.com/Maktm/FLIRTDB,对应签名放进sig文件夹,然后在IDA中加载。
03、二进制对比识别
工具:BinDiff 安装使用:https://www.cnblogs.com/lsdb/p/10543411.html