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}    千秋万代,一统江湖!

相关文章
|
4月前
|
C++
Leetcode第一题(两数之和)
这篇文章介绍了解决LeetCode第一题“两数之和”的两种方法:暴力法和哈希表法,并提供了相应的C++代码实现。
65 0
Leetcode第一题(两数之和)
|
9月前
LeetCode[题解] 2864. 最大二进制奇数
LeetCode[题解] 2864. 最大二进制奇数
44 0
|
9月前
leetcode:231. 2 的幂(位运算)
leetcode:231. 2 的幂(位运算)
34 0
|
9月前
[leetcode 数位运算] 2939. 最大异或乘积 M
[leetcode 数位运算] 2939. 最大异或乘积 M
|
存储
[MRCTF2020]Xor 题解
[MRCTF2020]Xor 题解
123 0
|
算法 C++
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
|
存储
LeetCode1-两数之和
LeetCode1-两数之和
LeetCode-2043 两数相加题解
LeetCode-2043 两数相加题解
|
人工智能

热门文章

最新文章