practice-2之汇编

一道ELFx64的题目,只能用IDA载入,找到main函数,F5得到代码


看上面两个图,代码可读性果然不太好。前面print的一大堆应该是文件的提示字符串输入重点是后面的while循环以及那个if语句,直接看到if可以发现flag的最后几个变量必须是0,8,2,3这个不难看出来,

试着看汇编把,看总览图,也不知道是不是这个技巧,看看剪头分布能推断出哪一段是循环语句所在之处,if判断之处啥的


跟着C语言看看汇编语言吧

进过上述分析可以知道var_40应该使我们输入的结果,所以必须必须知道var_C0的数据跳到相应位置

是空的,再回到代码找找,会发现这样子一串操作

刚好17个数字,所以说var_i[i] = ((var_C0[i]-1)+(var_C0[i]-1)>>0x1f)>>1

好的,python写脚本:

#!usr/bin/python
#-*- coding:utf-8 -*-

key = [0x0EF,
0x0C7,
0x0E9,
0x0CD,
0x0F7,
0x08B,
0x0D9,
0x08D,
0x0BF,
0x0D9,
0x0DD,
0x0B1,
0x0BF,
0x087,
0x0D7,
0x0DB,
0x0BF
]
flag = []
for i in range(0,17):
       ch = ((key[i]-1)+((key[i]-1)>>0x1f))>>1;
       flag.append(chr(ch))
print(flag)
print('0823}')

最后结果:

Contents
|