zoukankan      html  css  js  c++  java
  • 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='')
  • 相关阅读:
    三种基本排序算法
    sourcetree push限制大小
    移动端布局注意事项
    margin-top 实效问题
    布局方式
    web前端开发工程师
    eScript 简记
    Siebel script for Pre Events
    Siebel Performance for Script <1>
    Siebel Presumed Child Property Set
  • 原文地址:https://www.cnblogs.com/blackicelisa/p/12263663.html
Copyright © 2011-2022 走看看