cracking__game——一道不能反编译的题

对于一个elf 文件,我还能做什么呢,先拖进IDA,观察,找到了关键的地方后,发现不能反编译,
那我们就看看,汇编的代码,找找线索,

这几句就是控制输出格式和传入参数,然后下面长的要死的运算。传入参数后,主要就是依靠esi,ecx进行运算,得出的结果,esi和ecx要等于0,才能跳转到Binggo!

爆破,虽然比较长,这里ecx两次传参,进行运算,esi只进行一次,所以才有了那三段flags,
NO.1:
bool_flag=0

for j in range(0xff):
for i in range(0xffffff):
if((((((((((((i<<8)|j)&0xffffffff)+0x376DA237)&0xffffffff)^0x5039B3AD)+0x197C0136)&0xffffffff)^0x1363F241)-0x74D86A5E)&0xffffffff)==0):
print “eax=key[0]=”+hex((i<<8)|j)
bool_flag=1
break
if bool_flag==1:
break

#eax=0xe698830d

NO.2:
bool_flag=0
for j in range(0xff):
for i in range(0xffffff):
if(((((((((((((((((((((((((((((((((i<<8)|j)&0xffffffff)+0x5A46BABC)&0xffffffff)^0x58E7773A)-0x3617A80B)&0xffffffff)^0x74A4134B)+0x4D6F9F5A)&0xffffffff)^0x2A3457E6)+0x4B8BF8B9)&0xffffffff)^0x0BB5D6AFF)+0x3EB308B5)&0xffffffff)
^ 0x3C5A9BE1)-0x4EF22DAE)&0xffffffff)^0x9D91B40F)-0x42596E22)&0xffffffff)^0x5D8ACD6E)+0x57794904)&0xffffffff)^0x481EE77)-0x2CF219D2)&0xffffffff)^0x5702EC35)
+0x67B243DF)&0xffffffff)^0x80CAFC7B==0):
print “ebx=key[1]=”+hex((i<<8)|j)
bool_flag = 1
break
if bool_flag==1:
break

#ebx=0x8dd70651

NO.3:
bool_flag=0
for j in range(0xff):
for i in range(0xffffff):
if(((((((((((((((((((((((((((((((i<<8)|j)&0xffffffff)^0x63074EB7)-0x0F5DED87)&0xffffffff)^0x3D898713)-0x1EBAD7B8)&0xffffffff)^0x0D4A1204D)-0x126E5E14)&0xffffffff)
^0x0DB034E6B)-0x68C8F0D3)&0xffffffff)^0x85AEAF52)+0x20E21188)&0xffffffff)^0x0CDC4D471)+0x6492A3E9)&0xffffffff)^0x5BF4CECF)
+0x28EF6935)&0xffffffff)^0x97C13118)-0x7624D9FB)&0xffffffff)^0x5B589A)
+0x64B87E0E)&0xffffffff)^0x0DF2FFB19==0):
print “edx=key[2]=”+hex((i<<8)|j)
bool_flag = 1
break
if bool_flag==1:
break

#edx=0xc1ecd292

flag{e698830d:8dd70651:c1ecd292}

温馨小贴士

对于爆破的范围:32位寄存器最低是8位,最高是32位,那么&0xffffffff的意思就是扩展,因为爆破的位置不一定全是32位的。

对于这道题还有诸多细节,本人不太清楚
如:
为什么, 第一段爆破在第一位,在其他位不可以吗?
欢迎留言,讨论 。
题目链接
密码: 9jfb

猜你喜欢

转载自blog.csdn.net/awm_kar98/article/details/81504340
今日推荐