X-CTF(REVERSE高级) hackme

代码逻辑从上至下:

用户输入长度为22的数组v1——随机取0-21的一个数字v7——byte_6B4270[v7]的值赋给v6——

v1[v7]的值赋给v5——验证十次如果v9^v5==v6那么成功。

所以我们求用户输入v1就是求所有的v5的值,因为v9^v5==v6,所以v5==v9^v6

细节说明:

一、byte_6B4270数组的数据查看,在代码处双击来到汇编,如果是这样的,右键选择data进行转换


这样的数据

 


data转换后的数据

二、怎么确定v1是用户输入,因为通过i(rbp+var_4)判断了用户输入长度,所以自然而然v1就是用户输入了,伪代码是反汇编出来的不是源码,所以也会有差错,这时候就要使用tab键看看汇编代码什么意思了

三、注意这里对v9强制类型转换为usigned_int8,在python里写解密代码使用0xff即可

 


写出解密代码:



 
附代码:
 1     byte =[0x5F, 0x0F2, 0x5E, 0x8B, 0x4E, 0x0E,0x0A3, 0x0AA, 0x0C7, 0x93, 0x81, 0x3D, 0x5F, 0x74,0x0A3, 0x9, 0x91, 0x2B, 0x49, 0x28, 0x93, 0x67 ]
 2 
 3     v9=0
 4 
 5     flag=0
 6 
 7     for i in range(0,22):
 8 
 9               v9 = 1828812941 * v9 +12345
10 
11               flag=(v9^byte[i])&0xff
12 
13               print(chr(int(flag)),end='')

 

posted @ 2020-02-05 14:26  黑冰Lisa  阅读(405)  评论(0编辑  收藏  举报