SHA1算法逆向与还原
概述
sha1算法加密后的字符串长度是40位,sha256长度是64位
一般sha1算法还原
目标程序加密结果跟SHA1算法对不上
看下伪代码,SHA1算法跟MD5是类似的,也会用调用SHA1Update函数
把盐字符串拼接上就对了
SHA1Init常量变形还原
运行目标程序,发现加密跟标准sha1对不上
看下伪代码,发现SHA1Init函数中的常量跟标准SHA1算法不一样了,把标准SHA1算法代码中的常量替换成目标程序中的SHA1常量进行还原
把开源的sha1源码拷贝到Clion,把常量修改一下进行调用就可以实现算法还原工具了
SHA1Transform变形还原
逆向SHA1Init里的常量保存一致,SHA1Update的盐字符串也一致,结果却不一样,可以考虑是SHA1Transform函数的常量值被替换了
SHA1Transform是SHA1Update函数内部的一个函数,里面有很多常量参与运算,找出所有的常量再在标准算法里比对(也可以通过脚本进行筛查)
SHA1算法里的k1-k4就是transform里面的几个常量
如果有不一致的地方修改回来,再编写算法还原工具
SHA1Update字符串OLLVM混淆
可以看到这里字符串变成一个变量了
查看这几个变量的交叉引用会跟踪到非常复杂的混淆
对于这种情况可以通过frida hook这个变量地址直接打印出字符串再代入到算法工具中进行算法还原