1.查壳+脱壳
得到一个没有后缀的文件,拖进die里看一下,发现是upx压缩壳,直接用upx命令行工具进行解压缩就好
脱完壳后的文件再拖进die里分析,可知是linux平台的elf文件,直接放ida里分析
2.ida静态分析
看不到显眼的main函数,这时候shift + f12查看一下字符串,能看到很多有用的信息
查看这个字符串的交叉引用
来到反汇编界面后直接反编译,这应该就是这道题目的关键代码部分了
稍微修改一下几个一眼能看出作用的函数名,让分析更加便于理解一点
看到一个可疑的sub_4009AE函数,双击进入函数体看看
从中可以看出v4是一个数组,那就把v4的定义修改一下,把它改成变量名为key,长度为32的数组,操作如下(y修改变量类型,n修改变量名)
操作完成后就变成了这样,是不是直观多了
sub_4009AE里有和key相关的处理过程,写脚本从中反推出key的值即可:)
//python
a = [166163712, 731332800, 357245568, 1074393000, 489211344, 518971936, 406741500, 294236496, 177305856, 650683500,
298351053, 386348487, 438258597, 249527520, 445362764, 981182160, 174988800, 493042704, 257493600,
767478780, 312840624, 1404511500, 316139670, 619005024, 372641472, 373693320, 498266640, 452465676,
208422720, 515592000, 719890500]
b = [1629056, 6771600, 3682944, 10431000, 3977328, 5138336, 7532250, 5551632, 3409728, 13013670, 6088797,
7884663, 8944053, 5198490, 4544518, 10115280, 3645600, 9667504, 5364450, 13464540, 5488432, 14479500,
6451830, 6252576, 7763364, 7327320, 8741520, 8871876, 4086720, 9374400, 5759124]
z = []
for i in range(len(a)):
z.append(chr(int(a[i]/b[i])))
print(z[i], end='')
需要注意的是16号和17号元素顺序是倒过来的,在看伪代码的时候要注意到,同时还能发现key[6]是未知的
在网上看了别人的wp,得出以下的解决思路
//python
a = [166163712, 731332800, 357245568, 1074393000, 489211344, 518971936, 406741500, 294236496, 177305856, 650683500,
298351053, 386348487, 438258597, 249527520, 445362764, 981182160, 174988800, 493042704, 257493600,
767478780, 312840624, 1404511500, 316139670, 619005024, 372641472, 373693320, 498266640, 452465676,
208422720, 515592000, 719890500]
b = [1629056, 6771600, 3682944, 10431000, 3977328, 5138336, 7532250, 5551632, 3409728, 13013670, 6088797,
7884663, 8944053, 5198490, 4544518, 10115280, 3645600, 9667504, 5364450, 13464540, 5488432, 14479500,
6451830, 6252576, 7763364, 7327320, 8741520, 8871876, 4086720, 9374400, 5759124]
z = []
for i in range(len(a)):
z.append(chr(int(a[i]/b[i])))
print(z[i], end='')
print()
for i in range(10):
s = z[:]
s.insert(6, str(i))
print(''.join(s))
就是在6号元素的位置插入数字,一个一个去套
能得到flag{e165421110ba03099a1c039337}为正确答案