查看程序信息
Detect It Easy查看程序信息,发现是64位应用且未加壳
反编译文件
使用IDA打开,shift+f12检索程序里的字符串,发现this is the right flag!
,双击查看,发现被main_0函数引用
双击main_0函数查看
F5查看伪代码
int __cdecl main_0(int argc, const char **argv, const char **envp)
{
char *v3; // rdi
__int64 i; // rcx
size_t v5; // rax
char v7; // [rsp+0h] [rbp-20h] BYREF
int j; // [rsp+24h] [rbp+4h]
char Str1[224]; // [rsp+48h] [rbp+28h] BYREF
__int64 v10; // [rsp+128h] [rbp+108h]
v3 = &v7;
for ( i = 82i64; i; --i )
{
*(_DWORD *)v3 = -858993460;
v3 += 4;
}
for ( j = 0; ; ++j )
{
v10 = j;
if ( j > j_strlen(Str2) )
break;
if ( Str2[j] == 111 )
Str2[j] = 48;
}
sub_1400111D1("input the flag:");
sub_14001128F("%20s", Str1);
v5 = j_strlen(Str2);
if ( !strncmp(Str1, Str2, v5) )
sub_1400111D1("this is the right flag!\n");
else
sub_1400111D1("wrong flag\n");
return 0;
}
通过 if ( !strncmp(Str1, Str2, v5) ),可以发现当输入的字符str1与预定的字符str2相等就为正确的flag
双击str2发现str2为{hello_world},所以flag为{hello_world},但是输入提示错误
再查看伪代码发现以下代码,这里将str2中的111替换为了48,这里看不懂111和48是什么
if ( Str2[j] == 111 )
Str2[j] = 48;
这是111和48为int,是asicc码,使用快捷键R转换一下
可以看出这里是将o替换为了0,所以可以得出flag
flag{hell0_w0rld}
标签:sub,Buuctf,Reverse,48,Str2,char,flag,111,reverse1
From: https://www.cnblogs.com/scarecr0w7/p/17377206.html