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

附上一个视频讲解

视频


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烨鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值