最近翻了一下吾爱的网盘,发现了可以用来检测二进制文件中加密算法的工具Hash & Crypto Detector v1.4
![](https://static-img.0xffff.one/btkzsHwDipleWfmdbPywMJRFte-PlC6rFsgFiSgfUvY/q:90/w:800/rt:fit/aHR0cHM6Ly9zdGF0/aWMuMHhmZmZmLm9u/ZS9hc3NldHMvZmls/ZXMvMjAyMC0wMi0w/NC8xNTgwODI4Nzkw/LTcwMDkzNC0xLnBu/Zw.jpg)
打开之后拖个DLL给它看一下,可以扫描出加密算法类型并且还能告诉你它的位置(Virtual Address)
![](https://static-img.0xffff.one/69MbgkN8UOY-X11HLibGvabHzXHoST8-fybn90HPjhs/q:90/w:800/rt:fit/aHR0cHM6Ly9zdGF0/aWMuMHhmZmZmLm9u/ZS9hc3NldHMvZmls/ZXMvMjAyMC0wMi0w/NC8xNTgwODI4Nzk3/LTk5NjcxLTIucG5n.jpg)
原理其实很简单,你如果仔细看过Hash或者其他加密算法的话你会发现它总会有一些特定的常量,其中最特别的那些可以用来作为识别的特征数据(图为OpenSSL的MD5源码)
![](https://static-img.0xffff.one/zfayOET6w7k9q1le2y1TsM_udQNMs94_xVnXOj2Tex0/q:90/w:800/rt:fit/aHR0cHM6Ly9zdGF0/aWMuMHhmZmZmLm9u/ZS9hc3NldHMvZmls/ZXMvMjAyMC0wMi0w/NC8xNTgwODI5MjEy/LTIyNTg1LTQucG5n.jpg)
用刚才那个例子,开IDA看下刚才那个位置的汇编,右手边是百度百科给出的SHA1的伪代码,发现这些常量其实是一一对应的,由此可以判断这个算法很大概率是SHA1
![](https://static-img.0xffff.one/0zl2dJRpUypUBpvvS27f7l4IapwgIGJgK1lRxALRds8/q:90/w:800/rt:fit/aHR0cHM6Ly9zdGF0/aWMuMHhmZmZmLm9u/ZS9hc3NldHMvZmls/ZXMvMjAyMC0wMi0w/NC8xNTgwODI4ODAz/LTU4MDk3Mi0zLnBu/Zw.jpg)
(刚才报的的MD4常量也是在这张图里,估计是有MD4和SHA1共用的常量,出现了误报)
个人感觉用这个工具的好处是可以减轻算法逆向的难度(其实是因为菜+懒,如果对常见加密有了解的话,手动逆也绝对能发现这个办法),不足之处也很明显,除了刚才误报的问题之外,这个工具只针对PE文件,不支持ELF...