baby_re

在这里插入图片描述
需要输入正确flag
在这里插入图片描述
IDAmain函数

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char DstBuf[24]; // [rsp+20h] [rbp-20h] BYREF
  int v5; // [rsp+38h] [rbp-8h]
  int i; // [rsp+3Ch] [rbp-4h]

  _main(argc, argv, envp);
  printf("%s", string);
  init();
  v5 = read(0, DstBuf, 0x10u);		//DstBuf应该就是flag
  if ( v5 != 16 )			//flag长度为16
  {
    puts("length error");
    exit(0);
  }
  for ( i = 0; i < v5; ++i )		//对flag进行加密
    DstBuf[i] ^= DstBuf[(i + 1) % v5];
  if ( strcmp(DstBuf, string) == 1 )	//加密后flag==string
    puts("you get your flag");
  else
    puts("flag error");
  return 0;
}

查看init()

void init()
{
  FILE *v0; // rax
  FILE *v1; // rax
  FILE *v2; // rax

  v0 = __acrt_iob_func(0);
  setbuf(v0, 0i64);
  v1 = __acrt_iob_func(1u);
  setbuf(v1, 0i64);
  v2 = __acrt_iob_func(2u);
  setbuf(v2, 0i64);
  string[0] = 10;
  string[1] = 13;
  string[2] = 6;
  string[3] = 28;
  string[4] = 74;
  string[5] = 69;
  string[6] = 43;
  string[7] = 110;
  string[8] = 66;
  string[9] = 44;
  string[10] = 62;
  string[11] = 62;
  string[12] = 45;
  string[13] = 65;
  string[14] = 78;
  string[15] = 119;
}

Exp

#include<stdio.h>
int main()
{
	char a[16];
	char s[16];
	s[0] = 10;
	s[1] = 13;
	s[2] = 6;
	s[3] = 28;
	s[4] = 74;
	s[5] = 69;
	s[6] = 43;
	s[7] = 110;
	s[8] = 66;
	s[9] = 44;
	s[10] = 62;
	s[11] = 62;
	s[12] = 45;
	s[13] = 65;
	s[14] = 78;
	s[15] = 119;
	
	a[15] = s[15]^s[0];
	
	for (int i = 14; i >=0; --i)
		a[i] = s[i] ^ a[i + 1];
		
	for (int i = 0; i < 16; i++)
		printf("%c",a[i]);
		
	return 0;
}

在这里插入图片描述
验证一下
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值