BUUCTF-Reverse:reverse3
题目地址:https://buuoj.cn/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 base64
s = "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}
BUUCTF-Reverse:reverse3相关推荐
- BUUCTF Reverse/findKey
BUUCTF Reverse/findKey 先看文件信息:32位程序,没有加壳 打开看看,标题为find flag,也没啥有用的信息 IDA32位打开,找到start函数,看到有个main,跟随跳转 ...
- BUUCTF Reverse helloword、findit
BUUCTF Reverse helloword.findit helloword findit 一天一道CTF题目,能多不能少 记录一下这两道题,这两道题是安卓逆向的题目~ 第一次接触安卓逆向的题目 ...
- BUUCTF Reverse xor
题目:BUUCTF Reverse xor 一些犯傻后学到了新东西的记录 查壳,没壳,IDA打开 main函数很好理解,输入一个长度为33的字符串,1-32位与前一位异或后与global相等,则判定f ...
- BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker
BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...
- BUUCTF Reverse(helloworld)
BUUCTF Reverse(helloworld) 题目附件下载下来之后,是.apk后缀,所以可能是安卓逆向. 这里我用的工具是Android Killer,下载地址:https://xiazai. ...
- BUUCTF Reverse/Ultimate Minesweeper
BUUCTF Reverse/Ultimate Minesweeper 先看文件信息,没有加壳,且为net编写的程序 运行是一个扫雷游戏,只要点错一个就会自动退出(左上角显示的是雷的数目,一共有897 ...
- BUUCTF Reverse/[GWCTF 2019]pyre
BUUCTF Reverse/[GWCTF 2019]pyre 下载得到一个pyc文件,用这个在线反编译pyc,pyo反汇编出代码 print 'Welcome to Re World!' print ...
- BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun
BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun 先看文件信息, IDA64位打开,很简单的题目,只要一个个输入就行 都是返回的这种元素 _BOOL8 __fastcall i ...
- BUUCTF reverse题解汇总
本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 Page1 easyre reverse1 reverse2 内涵的软件 新年 ...
最新文章
- linux升级内核后反复重启,Ubuntu 14.04 升级内核后重启开机黑屏解决
- spark Bisecting k-means(二分K均值算法)
- Struts2 POI 导入导出Excel数据
- node.js当中net模块的简单应用(基于控制台的点对点通信)
- linux shell cut -d ‘:‘ -f1,3
- python清空屏幕代码_python代码怎样清屏
- Nginx常见面试题整理---40题
- android cos函数,Android三角函数
- mkallcache1.php,distributedCache
- 如何给图片加水印?分享怎么给图片加水印的方法
- 225页10万字政务大数据能力平台项目建议书
- atof函数(把字符串转换成浮点数)
- ERROR: resetting DM9000 -> not responding dm9000 not found at 0x88000000问题解决
- 城市公共交通规划掌握内容
- 河南单招计算机专业专科学校排名2015,河南省单招大专学校排名榜 哪个学校好...
- canopen 报文格式_CANopen协议介绍
- 【论文翻译】 BMN: Boundary-Matching Network for Temporal Action Proposal Generation
- CUMT学习日记——信号与系统之考试复习的记录
- Linux下运行robot,Robot Framework-Unix和Linux安装
- 面试被问死怎么办?学会这四招,通过的机率提升30%