• [WP]BUUCTF-Reverse-基础题(1-12)


    1、easyre

    查询基本信息

    载入 IDA 

     2、reverse1

     

    核心部分就是将 Str2 中的 o 替换成了 0,再与 Str1(我们输入的字符串) 进行比对

     

     查询 Str2 的值

     得到 flag

    3、reverse2

     与上题类似,也是将字符替换一下就能得到 flag

    将 {hacking_for_fun} 中的 i 和 r 替换为 1 即可

     

     4、内涵的软件

     运行程序

     直接查看字符串

     5、新年快乐

    32 位程序,但有 UPX 壳

     

    脱壳

     载入 IDA 分析 main 函数

     6、guessgame

     

     载入 IDA,查看字符串即可

     7、helloword

    一道安卓逆向,利用 JEB 即可

    8、xor

    64 位程序

     直接载入 IDA,将输入的字符串逐位异或后与 global 进行比对

     查询 global

     

     写出 EXP,运行得到 flag

     1 glo = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 
     2        0x40, 0x11, 0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 
     3        0x70, 0x19, 0x46, 0x1F, 0x76, 0x22, 0x4D, 0x23, 
     4        0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F, 0x47, 0x32, 
     5        0x4F]
     6 flag = ''
     7 for i in range(len(glo)-1, 0, -1):
     8     glo[i] ^= glo[i-1]
     9     
    10 for i in glo:
    11     flag += chr(i)
    12 
    13 print(flag)

     9、reverse3

     修改栈指针后查看 main 函数

     查询字符串,其实看到这个字符串表就可以大致知道是采用了 base64 加密或者是变种的 base64 加密

     查看 Str2 的值,为e3nifIH9b_C@n@dH

     Dest 的值即为我们输入的值,经过一个简单的运算后与 Str2 进行对比

     写出 EXP ,运行得到 flag

    1 import base64
    2 a = 'e3nifIH9b_C@n@dH'
    3 b = ''
    4 for i in range(len(a)):
    5     value = ord(a[i]) - i
    6     b += chr(value)
    7 print(b)
    8 print(base64.b64decode(b).decode('utf-8'))

     10、不一样的 flag

    32 位程序

     载入 IDA 中,我们可以看到四个选项:上下左右,其实可以大致猜测这是一道迷宫题,# 即为终点

    查看字符串,我们发现一个字符串

     写出路径即为 flag

     11、SimpleRev

    64 位程序

    直接载入 IDA 查看反编译后的代码,进入主要的 Decry 函数。

    最后进行比对的两个变量为 text,str2。

     

    根据流程可以编写 EXP,运行得到 flag。需要注意一下是小端存储,src、v10 需要反向后再进行拼接。

     1 #出现的变量
     2 key1 = 'ADSFK'
     3 key3 = 'kills'
     4 src = 'SLCDN'
     5 v10 = 'wodah'
     6 
     7 #LODWORD(v0) = join(key3, &v10)
     8 v0 = key3
     9 for i in range(len(v10)-1, -1, -1):
    10     v0 += v10[i]
    11 print(v0)
    12 #strcat(key, src)
    13 key = key1
    14 for i in range(len(src)-1, -1, -1):
    15     key += src[i]
    16 
    17 #第一个循环:key大写转化为小写
    18 tmp = ''
    19 for i in key:
    20     value = ord(i) + 32
    21     tmp += chr(value)
    22 key = tmp
    23 
    24 #第二个循环,逆向求出flag
    25 str2 = text = v0
    26 flag = ''
    27 for i in range(len(str2)):
    28     value1 = ord(str2[i])
    29     value1 -= 97
    30 
    31     value2 = -ord(key[i])
    32     value2 += 97
    33     value2 -= 39
    34     
    35     value = value1 - value2
    36     while True:
    37         if value > ord('Z'): value -= 26
    38         elif value < ord('A'): value += 26
    39         else: break
    40     flag += chr(value)
    41 
    42 print(flag)

     12、Java逆向解密

    将 class 文件直接拖入 jd-gui 中,程序是将我们输入的字符串经过 Encrypt 中的第一个循环运算后,与 KEY 进行比对

     需要注意到加法的优先级比异或要高,写出 EXP

    1 key = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
    2 for i in key:
    3     value = i
    4     value ^= 0x20
    5     value -= 64
    6     print(chr(value), end='')

  • 相关阅读:
    rc-local.service服务启动失败,导致rc.local中的开机启动服务不能启动
    bacula快速部署
    配置github SSH公钥登录
    快速安装zabbix
    编译安装git
    linux系统日志中出现大量systemd Starting Session ### of user root 解决
    根据屏幕高度自适应元素高度
    git+github上传与管理
    ajax简单应用
    自己常用的webstrom快捷键
  • 原文地址:https://www.cnblogs.com/Tsuiyields/p/13864314.html
Copyright © 2020-2023  润新知