西湖论剑 BabyRe 复现
逆向分析
我们拖入IDA加载后可以很明显的观察到对应的 Main 函数空空如也
对于这种情况我们运行程序可以发现其有一个明显的字符串 Input:
,我们通过这个字符串可以定位到相关的代码处,一番查找后我们可以发现有三处加密
通过 initterm 来初始化加密的全局函数
其中调用了一个RC4加密
一个魔改sha1加密
一个Base 8加密 从密文的16位开始比较
通过分析可以发现调用过程为:base8 -> sha1 -> rc4
程序沟通过 atexit 函数来进行注册每一次的加密,同时其调用顺序为栈式,即先后注册先调用
程序对应的执行顺序为:
1 |
|
我们通过调试可以发现在Base8的过程中会将我们输入的前36字节进行判断,随后将加密后的数据的前16字节进行SHA1的魔改加密,最后使用加密的 Base8 的末 6 个字节作为 RC4 加密的 key 进行使用,来加密整个 Base8 后的数据。
解密
Base8解密
1 |
|
SHA1 & RC4 解密
对于魔改后的SHA1我们采用单独爆破的效率有点低…而且似乎不用爆破?我们可以直接对RC4的6位Key进行爆破
1 |
|
我们发现第一次Base8加密后的数字与m中存在有大部分相同点
第一次 Base8 后数据 162304651523346214431471150310701503207116032063140334661543446114434066142304661563446615430464
可以发现flag在RC4与Base8共同加密后,逆回RC4加密前的Base8加密。可以发现多出来1523306115230466
这样一串数据,我们将其对Base8的解密,即可得到flag的前六位
其实直接对 m 解一次 Base8 再加上最后的 RC4 的 6位 Key 就可以得到 flag
Flag
1 |
|
西湖论剑 BabyRe 复现
https://equinox-shame.github.io/2023/03/01/西湖论剑 BabyRe 复现/