xor题解

简介: xor题解

xor题解


1.解压文件

得到文件夹,得到一个__MACOSX,说明是MacOs系统的可执行文件

._xor在windows系统中是没用的

只需要对xor进行反汇编

2.查壳

是一个64位文件

3.静态分析

找到main函数,按下F5反编译

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int i; // [rsp+2Ch] [rbp-124h]
  char v5[264]; // [rsp+40h] [rbp-110h]
  memset(v5, 0, 0x100uLL);
  printf("Input your flag:\n");  
  get_line(v5, 256LL);    //输入字符串
  if ( strlen(v5) != 33 )   //如果字符串长度不等于33,跳转
    goto LABEL_11;
  for ( i = 1; i < 33; ++i )
    v5[i] ^= v5[i - 1];     
  if ( !strncmp(v5, global, 0x21uLL) )
    printf("Success");
  else
LABEL_11:
    printf("Failed");      //字符串长度不等于33,输出failed,flag长度一定是33
  return 0;
}

flag是一个长度为33的字符串

for ( i = 1; i < 33; ++i )
    v5[i] ^= v5[i - 1];     
  if ( !strncmp(v5, global, 0x21uLL) )
    printf("Success");

根据这段关键代码编写wp

需要知道:两次异或等于没有异或

global与异或操作之后的数据相等

查看global

点击aFKWOXZUPFVMDGH继续跟进

找到数据

选中,shift加e提取

提取数据

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

4.编写wp

python wp

flag=""
data=[ 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]
for i in range(1,len(data)):
    flag+=chr(data[i]^data[i-1])  //第一个数据之后的都参与异或运算,需要逆向
print(chr(data[0])+flag)   //第一个数据没有参与异或运算,直接打印

C++ wp

#include<iostream>
using namespace std;
int main(){
  int data[34]={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};
  printf("%c",char(data[0]));
  for(int i=1 ;i<=32;i++){
    char a;
    a=(char)data[i]^data[i-1]; 
    printf("%c",a);
  } 
  return 0;
} 

flag{QianQiuWanDai_YiTongJiangHu}    千秋万代,一统江湖!

相关文章
|
22天前
【LeetCode 14】454.四数相加 II
【LeetCode 14】454.四数相加 II
25 1
|
6月前
|
人工智能 Java C++
leetcode-454:四数相加 II
leetcode-454:四数相加 II
40 1
|
6月前
|
存储 算法 Java
LeetCode算法题---两数相加(二)
LeetCode算法题---两数相加(二)
38 0
|
6月前
leetcode-258:各位相加
leetcode-258:各位相加
32 0
|
6月前
|
存储 算法
Leetcode算法系列| 2. 两数相加
Leetcode算法系列| 2. 两数相加
|
算法 C++
剑指offer(C++)-JZ56:数组中只出现一次的两个数字(算法-位运算)
剑指offer(C++)-JZ56:数组中只出现一次的两个数字(算法-位运算)
剑指offer(C++)-JZ56:数组中只出现一次的两个数字(算法-位运算)
|
存储
[MRCTF2020]Xor 题解
[MRCTF2020]Xor 题解
89 0
|
机器学习/深度学习 算法 C++
剑指offer(C++)-JZ64:求1+2+3+...+n(算法-位运算)
剑指offer(C++)-JZ64:求1+2+3+...+n(算法-位运算)
|
算法 C++
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
|
算法 C++
剑指offer(C++)-JZ15:二进制中1的个数(算法-位运算)
剑指offer(C++)-JZ15:二进制中1的个数(算法-位运算)