200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > BUUCTF-Reverse:reverse3

BUUCTF-Reverse:reverse3

时间:2020-12-21 16:00:33

相关推荐

BUUCTF-Reverse:reverse3

题目地址:/challenges#reverse3

IDA打开

下载文件,无壳,直接使用ida(32)打开,找到主函数:

打开main 0 函数:

__int64 main_0(){size_t v0; // eaxconst char *v1; // eaxsize_t v2; // eaxint v3; // edx__int64 v4; // ST08_8signed int j; // [esp+DCh] [ebp-ACh]signed int i; // [esp+E8h] [ebp-A0h]signed int v8; // [esp+E8h] [ebp-A0h]char Dest[108]; // [esp+F4h] [ebp-94h]char Str; // [esp+160h] [ebp-28h]char v11; // [esp+17Ch] [ebp-Ch]for ( i = 0; i < 100; ++i ){if ( (unsigned int)i >= 0x64 )j____report_rangecheckfailure();Dest[i] = 0;}sub_41132F("please enter the flag:");sub_411375("%20s", &Str);v0 = j_strlen(&Str);v1 = (const char *)sub_4110BE(&Str, v0, &v11);strncpy(Dest, v1, 0x28u);v8 = j_strlen(Dest);for ( j = 0; j < v8; ++j )Dest[j] += j;v2 = j_strlen(Dest);if ( !strncmp(Dest, Str2, v2) )sub_41132F("rigth flag!\n");elsesub_41132F("wrong flag!\n");HIDWORD(v4) = v3;LODWORD(v4) = 0;return v4;}

代码分析:

第24行代码,第27~28行代码在对Dest进行一些列变换

从第30行代码分析得到,Str2中存储的就是flag变换过后的字符串,打开Str2

.data:0041A034 ; char Str2[].data:0041A034 Str2 db 'e3nifIH9b_C@n@dH',0 ; DATA XREF: _main_0+142↑o

因此,我们只需要将Str2反向变换即可得到flag

从’ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='可以看出,这个函数应该是base64的加密函数,因此只需要解密即可。

那应该是base64加密了,直接编写解题脚本:

import base64s = "e3nifIH9b_C@n@dH"x=''for i in range(0,len(s)):x+=chr(ord(s[i])-i)# chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符#ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,***返回对应的 ASCII 数值***,或者 Unicode 数值# >>>ord('a')# 97print(base64.b64decode(x))

或者:

import base64str1 = 'e3nifIH9b_C@n@dH'x = ''flag = ''for j in range(0, len(str1)):x += chr(ord(str1[j]) - j)flag = base64.b64decode(x)flag = flag.decode('ASCII')print(flag)

flag{i_l0ve_you}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
扩展阅读