文章目录

  • [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相关推荐

  1. [ACTF新生赛2020]fungame

    32位无壳 简单异或,解出来是 Re_1s_So0_funny but没有那么简单,这里只有16字节.继续分析: 这里出现了栈溢出: 4013BA函数的参数source 也就是v4(我们的flag) ...

  2. BUU [ACTF新生赛2020]Universe_final_answer

    [ACTF新生赛2020]Universe_final_answer 首先查壳, 64bit 无壳 ida64位打开 main() __int64 __fastcall main(int a1, ch ...

  3. BUUCTF Misc 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧

    目录 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧 穿越时空的思念 下载文件 使用Audacity打开 点击图示 ...

  4. [BUUOJ] [RE] [ACTF新生赛2020] rome1

    IDA 好久没写博客了,最近在刷re,这道题是我觉得十分有意义的一道题.故AC后总结分享给大家.不足之处请指正. 分析 直接导入IDA shift +F12 双击后按 ctrl + x跳转到被调用的函 ...

  5. BUUCTF-MISC-[BJDCTF2020]你猜我是个啥~[ACTF新生赛2020]outguess

    文章目录 1.[BJDCTF2020]你猜我是个啥 2.秘密文件 3.[SWPU2019]神奇的二维码 4.[BJDCTF2020]一叶障目 5.[BJDCTF2020]just_a_rar 6.[B ...

  6. re学习笔记(59)BUUCTF - re - [ACTF新生赛2020]Oruga

    新手一枚,如有错误(不足)请指正,谢谢!! 题目链接:[ACTF新生赛2020]Oruga IDA64位载入,进入main函数 进入sub_78A()函数 类似于象棋里面的'车'吧,不过这个要走到障碍 ...

  7. BUUCTF——[ACTF新生赛2020]SoulLike——使用angr解

    64位无壳.IDApro打开,查看main函数 逻辑很简单,我们来查看sub_83A函数.点进去,toobig 看了其他博客. 我们需要将ida /ctg目录下的hexrays.cfg文件中的MAX_ ...

  8. [ACTF新生赛2020]easyre

    脱壳 使用exeinfo查看文件,发现有upx,使用upxshell解压缩.之后放进IDA中. 查看程序 很明显V4和v16都是个数组.可以看出是将v4的每个值(一共12个),去和data的那个数组去 ...

  9. BUU_re_[ACTF新生赛2020]rome

    拖进IDA,查看main函数 int func() {int result; // eaxint v1; // [esp+14h] [ebp-44h]int v2; // [esp+18h] [ebp ...

最新文章

  1. 高斯混合模型(GaussianMixture Model, GMM)聚类、可视化最优协方差形式、通过TSNE进行结果可视化分析、抽取核心特征因子
  2. DNA Sorting(排序)
  3. JDBC中Statement与PreparedStatement的区别
  4. 光通信调制方式MATLAB仿真,基于LED的紫外光通信调制方式研究
  5. 【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类)
  6. apache启服务命令_linux系统下apache服务的启动、停止、重启命令
  7. NDK 下利用 arm-linux-androideabi-addr2line 定位 so 库问题点
  8. Linux编译错误:对‘sem_init/sem_wait/sem_destroy’等未定义的引用
  9. mysql where连接_MySQL连接查询on和where的区别和顺序
  10. 排序算法2:直接选择排序
  11. PDF转CAD怎么弄?推荐两个转换方法
  12. 日记侠:如何提高朋友圈活跃度,给你5种实用方法
  13. linux下好用的chm阅读器
  14. 流量、电量、弱网环境怎么测?
  15. Linux系统命令与网络、磁盘参数和日志监控
  16. ueditor编辑器抓取页面背景图片background-image或background
  17. WM_KILLFOCUS和WM_SETFOCUS
  18. 【Vivado那些事】Xilinx的7系列的SRCC和MRCC
  19. 红旗系统linux2.6.32屏保咋设置,红旗Linux桌面操作系统 V11社区预览版发布,附新特性介绍...
  20. python对MySQL数据库的基本操作CRUD

热门文章

  1. python dbscan 如何确定eps参数_如何选择eps和minPts(DBSCAN算法的两个参数)以获得有效结果?...
  2. eclipse java maven_Eclipse构建maven项目
  3. AGI:走向通用人工智能的【哲学】之现实世界的虚拟与真实——带你回看1998年的经典影片《The Truman Show》感悟“什么是真实”
  4. 成功解决极其刁钻bug之TypeError: ‘<=‘ not supported between instances of ‘list‘ and ‘int‘
  5. DayDayUp:朋友圈有趣的职场跳槽微小说《华为跳阿里→阿里跳腾讯→腾讯跳百度→百度跳华为》
  6. DayDayUp:2018年06月07日高考必胜:程序猿的方式祝福莘莘学子高考必胜!
  7. Python连接Oracle数据库,以字典形式返回结果
  8. mssql sqlserver 对不同群组对象进行聚合计算的方法分享
  9. [poj 2001] Shortest Prefixes (字典树)
  10. JVM——虚拟机的简介【摘录】