BUU刷
Posted rookiedanny
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUU刷相关的知识,希望对你有一定的参考价值。
Reverse
内涵 0707
直接拖进IDA看到疑似flag,按A可以转中文
A ASCII解析成ASCII
[BJDCTF 2nd]guessgame
拖进IDA 发现flag
xor
拖进IDA
int __cdecl main(int argc, const char **argv, const char **envp)
{
char *v3; // rsi
int result; // eax
signed int i; // [rsp+2Ch] [rbp-124h]
char v6[264]; // [rsp+40h] [rbp-110h]
__int64 v7; // [rsp+148h] [rbp-8h]
memset(v6, 0, 0x100uLL);
v3 = (char *)256;
printf("Input your flag:
", 0LL);
get_line(v6, 256LL);
if ( strlen(v6) != 33 ) //如果不等于33则提示failed
goto LABEL_12;
for ( i = 1; i < 33; ++i )//如果等于33
v6[i] = v6[i]^v6[i - 1]; //与前一位异或
v3 = global;
if ( !strncmp(v6, global, 0x21uLL) )
printf("Success", v3);
else
LABEL_12:
printf("Failed", v3);
result = __stack_chk_guard;
if ( __stack_chk_guard == v7 )
result = 0;
return result;
}****
查看Global数据
创建数组:
点击选中你想要转换成数组的一块区域,Edit->Array
Array element size 这个值表示各数组元素的大小(这里是1个字节),是根据你选中的数据值的大小所决定的
Maximum possible size 这个值是由自动计算得出的,他表示数组中的元素的可能的最大值
Array size 表示数组元素的数量,一般都根据你选定的自动产生默认值
Items on a line 这个表示指定每个反汇编行显示的元素数量,它可以减少显示数组所需的空间
Element print width 这个值用于格式化,当一行显示多个项目时,他控制列宽
Use “dup” construct :使用重复结构,这个选项可以使得相同的数据值合并起来,用一个重复说明符组合成一项
Signed elements 表示将数据显示为有符号数还是无符号数
Display indexes 显示索引,使得数组索引以常规的形式显示,如果选了这个选项,还会启动右边的Indexes选项栏,用于选择索引的显示格式
Create as array 创建为数组,这个一般默认选上的
转为数组 提取得到:
66h, 0Ah, 6Bh, 0Ch, 77h, 26h, 4Fh, 2Eh, 40h, 11h, 78h,0Dh, 5Ah, 3Bh, 55h, 11h, 70h, 19h, 46h, 1Fh, 76h, 22h,4Dh, 23h, 44h, 0Eh, 67h, 6, 68h, 0Fh, 47h, 32h, 4Fh
第一位未被异或 逐位还原即可
hex_xor=[0x66,0x0A,0x6B,0x0C,0x77,0x26,0x4F,0x2E,0x40,0x11,0x78,0x0D,0x5A,0x3B,0x55,0x11,0x70,0x19,0x46,0x1F,0x76,0x22,0x4D,0x23,0x44,0x0E,0x67,0x6,0x68,0x0F,0x47,0x32,0x4F]
orgin=[]
print(len(hex_xor))
i=0
while i<32:
dig=hex_xor[i]^hex_xor[i+1]
orgin.append(dig)
i=i+1
print(orgin)
lag{QianQiuWanDai_YiTongJiangHu}
以上是关于BUU刷的主要内容,如果未能解决你的问题,请参考以下文章