zoukankan      html  css  js  c++  java
  • re | [SWPU2019]ReverseMe

    这是一道win32 console的逆向。

    主函数相对清晰:

    上图两个重点,1是输入长度为32位、2是一个加密函数。

    这里均是用动态调试去看的,因为函数本身较为复杂,直接静态分析有点困难。

    通过动态调试下内存断点,查看数据的操作:

    主函数中有一个异或,那个复杂的加密函数中还是一个异或:

    *中途对数据进行了转移:

    *下图为第二次异或操作:

    *同样提出数据:

    然后提出最后需要比较的数据,在局部变量之中:

    提出来:

    然后开始写脚本(跟到这里我已经累得不行了...):

     1 aim = [0xB3,0x37,0x0F,0xF8,0xBC,0xBC,
     2 0xAE,0x5D,0xBA,0x5A,0x4D,0x86,0x44,
     3 0x97,0x62,0xD3,0x4F,0xBA,0x24,0x16,
     4 0x0B,0x9F,0x72,0x1A,0x65,0x68,0x6D,
     5 0x26,0xBA,0x6B,0xC8,0x67]
     6 
     7 xor2 = [0x86,0x0C,0x3E,0xCA,0x98,0xD7,0xAE,0x19,0xE2,0x77,0x6B,0xA6,0x6A,0xA1,0x77,0xB0,0x69,0x91,0x37,0x05,0x7A,0xF9,0x7B,0x30,0x43,0x5A,0x4B,0x10,0x86,0x7D,0xD4,0x28]
     8 xor1 = list('SWPU_2019_CTFSWPU_2019_CTFSWPU_2')
     9 
    10 flag0 = []
    11 for i in range(32):
    12     flag0.append(xor2[i] ^ aim[i])
    13 
    14 
    15 flag = []
    16 for i in range(32):
    17     flag.append(chr(ord(xor1[i]) ^ flag0[i]))
    18             
    19 print(''.join(flag))

    得到flag。

    这是我第一次使用内存断点,学到了。

  • 相关阅读:
    mysql安装停在make[3]: Leaving directory `/mysql5.xx/mysqltest' 解决方法
    搞了个burst
    PKU2074
    PKU2029
    ACM/ICPC要求的知识点(转)
    PKU3264线段树解法
    PKU2036
    PKU1151线段树解法
    今天递了辞呈
    hamachi
  • 原文地址:https://www.cnblogs.com/Mz1-rc/p/13756728.html
Copyright © 2011-2022 走看看