[SUCTF2018]babyre [ACTF新生赛2020]fungame
文章目录
- [SUCTF2018]babyre
- 惯用思维
- 常人思维
- GAMEOVER
- [ACTF新生赛2020]fungame
- int __cdecl sub_401340(int a1)
- int __cdecl sub_4013BA(char *Source)
[SUCTF2018]babyre
惯用思维
首先呢,是个bin文件,需要用binwalk把文件提取出来。
binwalk -e [SUCTF2018\]babyre.bin
是一个xml
文件,我打开后除了正常结构就是乱码。。。
然后就没法分析了。。。xml不能放在ida里面分析。。
常人思维
查看一下文件类型,居然是64位的exe程序,任何东西都保持怀疑的态度。。笑死人。。。。
如下就是数据库,可以利用这些字符进行运算得到一些其它的字符进行输出
v7[0] = 2;v7[1] = 3;v7[2] = 2;v7[3] = 1;v7[4] = 4;v7[5] = 7;v7[6] = 4;v7[7] = 5;v7[8] = 10;v7[9] = 11;v7[10] = 10;v7[11] = 9;v7[12] = 14;v7[13] = 15;v7[14] = 12;v7[15] = 13;v7[16] = 16;v7[17] = 19;v7[18] = 16;v7[19] = 17;v7[20] = 20;v7[21] = 23;v7[22] = 22;v7[23] = 19;v7[24] = 28;v7[25] = 25;v7[26] = 30;v7[27] = 31;v7[28] = 28;v7[29] = 25;v7[30] = 26;v7[31] = 31;qmemcpy(v8, "$!\"'$!\"#().+$-&/81:;4=>7092;<567HIBBDDFGHIJJMMONPPRSUTVWYYZ[\\]^^``ccdeggiikklmnnpprstuwwxy{{}}", 94);v8[94] = 127;v8[95] = 127;v8[96] = -127;v8[97] = -127;v8[98] = -125;v8[99] = -125;v8[100] = -116;v8[101] = -115;v8[102] = -114;v8[103] = -113;v8[104] = -120;v8[105] = -119;v8[106] = -118;v8[107] = -117;v8[108] = -116;v8[109] = -115;v8[110] = -114;v8[111] = -121;v8[112] = -104;v8[113] = -111;v8[114] = -110;v8[115] = -109;v8[116] = -108;v8[117] = -107;v8[118] = -106;v8[119] = -105;v8[120] = -104;v8[121] = -103;v8[122] = -102;v8[123] = -102;v8[124] = -100;v8[125] = -100;v8[126] = -98;v8[127] = -98;v8[128] = -96;v8[129] = -96;v8[130] = -94;v8[131] = -94;v8[132] = -92;v8[133] = -92;v8[134] = -90;v8[135] = -90;v8[136] = -88;v8[137] = -88;v8[138] = -86;v8[139] = -86;v8[140] = -84;v8[141] = -84;v8[142] = -82;v8[143] = -82;v8[144] = -80;v8[145] = -79;v8[146] = -78;v8[147] = -77;
这里的话就是利用数据区的字符进行一系列运算,然后进行flag的赋值,然后接着一个函数进行字符输出。
while ( v9[30] ){--v9[30];for ( j = 22; j; v9[j] |= v13 << v9[30] ){v12 = v7[22 * v9[30] + --j];v13 = (v12 >> ((v10[0] >> (2 * v9[30])) & 3)) & 1;}}
输入不同的key然后就会有不同的字符输出,我们需要找到输出flag的key,而flag字符的特征就是SUCTF
,如果就这种特征,那么就进行输出
if (flag[0] == 'S' && flag[1] == 'U' && flag[2] == 'C' && flag[3] == 'T' && flag[4] == 'F'){for (int i = 0; i < 22; i++)printf("%c", flag[i]);system("pause");}
GAMEOVER
SUCTF{Flag_8i7244980f}
[ACTF新生赛2020]fungame
int __cdecl sub_401340(int a1)
flag=[None]*16
b=""
y1=[0x23, 0x61, 0x3E, 0x69, 0x54, 0x41, 0x18, 0x4D, 0x6E, 0x3B, 0x65, 0x53, 0x30, 0x79, 0x45, 0x5B
]
y2=[0x71, 0x04, 0x61, 0x58, 0x27, 0x1E, 0x4B, 0x22, 0x5E, 0x64, 0x03, 0x26, 0x5E, 0x17, 0x3C, 0x7A
]
for i in range(len(y1)):a=hex(y2[i]^y1[i])b+=chr(y2[i]^y1[i])flag[i]=a
print(b)
Re_1s_So0_funny!
然而却是错误,看第二个函数
int __cdecl sub_4013BA(char *Source)
int __cdecl sub_4013BA(char *Source)
{char Destination[12]; // [esp+1Ch] [ebp-Ch] BYREFstrcpy(Destination, Source);strcpy(x, Source);return 0;
}
strcpy(Destination, Source);
这行代码导致栈溢出,然后导致返回地址被覆盖,紧接着返回的时候就没法正确返回,以至于程序过了第一个函数,第二个函数结束时,就自动gg。
我一直好奇和其它博主输入一样,然后栈溢出导致返回地址覆盖时,改变后却不一样,嗯哼????出题人强行整活。。
strcpy(x, Source);
这里有个全局变量x,要找这个线索,固定了前16字节字符,后面覆盖值需要自己算,然后跳入_sub_40233D
这个函数。说白了就是一个pwn题,跟re无关。
_sub_40233D
这个函数是出题人自己搞的,它也不会自动覆盖跳,需要玩家手动算。欧了,base64,这题目对于re玩家毫无价值,对于pwn玩家有太简单。搞不懂re库为啥会有这种???
输入:Re_1s_So0_funny!,返回地址如下:
输入:Re_1s_So0_funny!0,返回地址如下:
这个题完全没有必要继续研究,就是出题人强行整活,作为re题的话,直接没法做;作为pwn题的话,又太无聊,总结——————凑数题(跳转不固定,flag固定,这咋做?脑洞?)
[SUCTF2018]babyre [ACTF新生赛2020]fungame相关推荐
- [ACTF新生赛2020]fungame
32位无壳 简单异或,解出来是 Re_1s_So0_funny but没有那么简单,这里只有16字节.继续分析: 这里出现了栈溢出: 4013BA函数的参数source 也就是v4(我们的flag) ...
- BUU [ACTF新生赛2020]Universe_final_answer
[ACTF新生赛2020]Universe_final_answer 首先查壳, 64bit 无壳 ida64位打开 main() __int64 __fastcall main(int a1, ch ...
- BUUCTF Misc 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧
目录 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧 穿越时空的思念 下载文件 使用Audacity打开 点击图示 ...
- [BUUOJ] [RE] [ACTF新生赛2020] rome1
IDA 好久没写博客了,最近在刷re,这道题是我觉得十分有意义的一道题.故AC后总结分享给大家.不足之处请指正. 分析 直接导入IDA shift +F12 双击后按 ctrl + x跳转到被调用的函 ...
- BUUCTF-MISC-[BJDCTF2020]你猜我是个啥~[ACTF新生赛2020]outguess
文章目录 1.[BJDCTF2020]你猜我是个啥 2.秘密文件 3.[SWPU2019]神奇的二维码 4.[BJDCTF2020]一叶障目 5.[BJDCTF2020]just_a_rar 6.[B ...
- re学习笔记(59)BUUCTF - re - [ACTF新生赛2020]Oruga
新手一枚,如有错误(不足)请指正,谢谢!! 题目链接:[ACTF新生赛2020]Oruga IDA64位载入,进入main函数 进入sub_78A()函数 类似于象棋里面的'车'吧,不过这个要走到障碍 ...
- BUUCTF——[ACTF新生赛2020]SoulLike——使用angr解
64位无壳.IDApro打开,查看main函数 逻辑很简单,我们来查看sub_83A函数.点进去,toobig 看了其他博客. 我们需要将ida /ctg目录下的hexrays.cfg文件中的MAX_ ...
- [ACTF新生赛2020]easyre
脱壳 使用exeinfo查看文件,发现有upx,使用upxshell解压缩.之后放进IDA中. 查看程序 很明显V4和v16都是个数组.可以看出是将v4的每个值(一共12个),去和data的那个数组去 ...
- BUU_re_[ACTF新生赛2020]rome
拖进IDA,查看main函数 int func() {int result; // eaxint v1; // [esp+14h] [ebp-44h]int v2; // [esp+18h] [ebp ...
最新文章
- 高斯混合模型(GaussianMixture Model, GMM)聚类、可视化最优协方差形式、通过TSNE进行结果可视化分析、抽取核心特征因子
- DNA Sorting(排序)
- JDBC中Statement与PreparedStatement的区别
- 光通信调制方式MATLAB仿真,基于LED的紫外光通信调制方式研究
- 【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类)
- apache启服务命令_linux系统下apache服务的启动、停止、重启命令
- NDK 下利用 arm-linux-androideabi-addr2line 定位 so 库问题点
- Linux编译错误:对‘sem_init/sem_wait/sem_destroy’等未定义的引用
- mysql where连接_MySQL连接查询on和where的区别和顺序
- 排序算法2:直接选择排序
- PDF转CAD怎么弄?推荐两个转换方法
- 日记侠:如何提高朋友圈活跃度,给你5种实用方法
- linux下好用的chm阅读器
- 流量、电量、弱网环境怎么测?
- Linux系统命令与网络、磁盘参数和日志监控
- ueditor编辑器抓取页面背景图片background-image或background
- WM_KILLFOCUS和WM_SETFOCUS
- 【Vivado那些事】Xilinx的7系列的SRCC和MRCC
- 红旗系统linux2.6.32屏保咋设置,红旗Linux桌面操作系统 V11社区预览版发布,附新特性介绍...
- python对MySQL数据库的基本操作CRUD
热门文章
- python dbscan 如何确定eps参数_如何选择eps和minPts(DBSCAN算法的两个参数)以获得有效结果?...
- eclipse java maven_Eclipse构建maven项目
- AGI:走向通用人工智能的【哲学】之现实世界的虚拟与真实——带你回看1998年的经典影片《The Truman Show》感悟“什么是真实”
- 成功解决极其刁钻bug之TypeError: ‘<=‘ not supported between instances of ‘list‘ and ‘int‘
- DayDayUp:朋友圈有趣的职场跳槽微小说《华为跳阿里→阿里跳腾讯→腾讯跳百度→百度跳华为》
- DayDayUp:2018年06月07日高考必胜:程序猿的方式祝福莘莘学子高考必胜!
- Python连接Oracle数据库,以字典形式返回结果
- mssql sqlserver 对不同群组对象进行聚合计算的方法分享
- [poj 2001] Shortest Prefixes (字典树)
- JVM——虚拟机的简介【摘录】