ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BUUCTF xor

2022-05-22 11:03:42  阅读:225  来源: 互联网

标签:__ BUUCTF xor int global db flag 0000000100000F6E


  1. 利用ida64打开文件xor,并按F5进行反编译,得到代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
  int i; // [rsp+2Ch] [rbp-124h]
  char __b[264]; // [rsp+40h] [rbp-110h] BYREF

  memset(__b, 0, 0x100uLL);
  printf("Input your flag:\n");
  get_line(__b, 256LL);
  if ( strlen(__b) != 33 )
    goto LABEL_7;
  for ( i = 1; i < 33; ++i )
    __b[i] ^= __b[i - 1];
  if ( !strncmp(__b, global, 0x21uLL) )
    printf("Success");
  else
LABEL_7:
    printf("Failed");
  return 0;
}
  1. 代码分析
    首先通过第7,8行可以看出需要输入这个就是我们的flag
    第9行我们知道了flag长度为33
    第11行的循环,从flag[1]开始,依次与前一位异或,得到当前位置的值
    第13行与global比较,按shift + F12,查看文件中的可见字符串

点进去看

__cstring:0000000100000F6E aFKWOXZUPFVMDGH db 'f',0Ah              ; DATA XREF: __data:_global↓o
__cstring:0000000100000F6E                 db 'k',0Ch,'w&O.@',11h,'x',0Dh,'Z;U',11h,'p',19h,'F',1Fh,'v"M#D',0Eh,'g'
__cstring:0000000100000F6E                 db 6,'h',0Fh,'G2O',0

我们知道了global的内容,从后到前异或回来即可得到flag

  1. 编写脚本
s = ['f',0xA,'k',0xC,'w&O.@',0x11,'x',0xD,'Z;U',0x11,'p',0x19,'F',0x1F,'v"M#D',0xE,'g',0x6,'h',0xF,'G2O',0x0]

for i in range(len(s)):
    if(type(s[i])==int):
        s[i] = chr(s[i])

s = "".join(s)
res = "f"
for i in range(1,len(s)):
    res += chr(ord(s[i]) ^ ord(s[i-1]))

print(res)
  1. 得到flag
    flag{QianQiuWanDai_YiTongJiangHu}




参考链接:
https://www.cnblogs.com/Mayfly-nymph/p/11461575.html

标签:__,BUUCTF,xor,int,global,db,flag,0000000100000F6E
来源: https://www.cnblogs.com/darkcyan/p/16297185.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有