Buucft-Reverse-xor 题解&思路总结

下载试题后解压,得到一个无后缀名的文件 

1、先添加txt后缀,查看文件内容

看到了一些printf函数 

查壳无有效信息

 

2、把文件放到ida64中分析

Shift+F12查看字符串,找到关键词

双击关键字,找到引用该字符串的地址

双击引用该字符串的地址,跳转到流程图界面

 按F5,查看伪代码

关键语句是这条if判断句,因为字符串最后输出了Success,所以global和_b这两个字符串时相同的。

双击global,然后看到global字符串中的值

双击aFKWOXZUPFVMDGH

然后选中aFKWOXZUPFVMDGH

接着导出global的值 (可以按快捷键Shift+E,或者点击Edit—>Export data)

 

可以选择导出十进制或十六进制

这里我选择导出十进制的数据

编写脚本,进行异或运算

异或运算的规则

shua = [102,  10, 107,  12, 119,  38,  79,  46,  64,  17,
  120,  13,  90,  59,  85,  17, 112,  25,  70,  31,
  118,  34,  77,  35,  68,  14, 103,   6, 104,  15,
   71,  50,  79,   0]
flag = chr(shua[0])
i = 1
while True:
  if i < len(shua):
    flag += chr(shua[i] ^ shua[i-1])
    i += 1
  else:
    break
print(flag)

运行后结果

得到flag:flag{QianQiuWanDai_YiTongJiangHu}

过程总结

题目条件:

  1. 不是PE文件

做题步骤:

  1. 添加txt后缀,查看有无有效信息
  2. 使用查壳软件查壳,了解程序是多少位的(64位或32位)
  3. 使用ida进行分析(用Shift+F12查看一下字符串,寻找关键词(如flag等))

ida分析过程:

  1. Shift+F12查看一下字符串,寻找关键词(如flag等) ,如没有关键词,就在main函数里查找信息
  2. 双击字符串,查看包含该字符串的位置
  3. 查看引用该字符串的详细地址
  4. 使用F5反汇编,查看伪代码
  5. 分析伪代码(选中数字后按键盘“R”键,即可将数字转换为字符;选中变量后 ,按下键盘“X”键查看该变量的交叉引用)
  6. Shift+E可以导出变量的值
  7. 编写代码进行运算

猜你喜欢

转载自blog.csdn.net/m0_62239233/article/details/130492093