这个题是有一定难度的,它考的知识点不是特别常见,对于萌新来说。

解题步骤:

1、

下载完附件之后先进行查壳
无壳,我们直接拖进ida64中。通过shift+f12查看字符串
找到输出flag的字符串通过这个字符串直接进入这个题的关键函数f5查看伪c代码并进行初步分析


通过简单的分析我们可以先写脚本求出outputString[]中的内容


s3478 = "(_@4620!08!6_0*0442!@186%%0@3=66!!974*3234=&0^3&1@=&0908!6_0*&"
s3438 = "55565653255552225565565555243466334653663544426565555525555222"
s = '1234567890-=!@#$%^&*()_+qwertyuiop[]QWERTYUIOP{}asdfghjkl;,ASDFGHJKL:"ZXCVBNM<>?zxcvbnm,./'
p = ''
for i in range(62):p += chr(s.index(s3478[i]) + s.index(s3438[i])*23 )#这里有点难懂。先要理清楚a/b = c ...... d a除以b等于c余d 商是c 余数是d。则有c*b+d = a#这里通过index()函数返回的值其实就是得到了v11%23的值d和v11/23的值c。然后再用c*23+d就得到了原来outputString中的值
print (p)

输出为:private: char * _[添加链接描述](https://www.freesion.com/article/6515734088/)_thiscall R0Pxx::My_Aut0_PWN(unsigned char *)

2、

查看UnDecorateSymbolName()函数

了解并理解这个函数是解题的重中之重!!!!

该函数第一个参数为输出地址、第二个参数为未修饰的名字、第三个参数为长度、第四个参数为0表示完全修饰

以下所有资料摘自:https://blog.csdn.net/liweigao01/article/details/78351464

资料一:
无论 __cdecl,__fastcall还是__stdcall调用方式,函数修饰都是以一个“?”開始,后面紧跟函数的名字。
再后面是參数表的開始标识和 依照參数类型代号拼出的參数表。

v2 = ?My_Aut0_PWN

资料二:
对于C++的类成员函数(其调用方式是thiscall)。
函数的名字修饰与非成员的C++函数稍有不同,首先就是在函数名字和參数表之间插入以“@”字 符引导的类名。

v2 = ?My_Aut0_PWN@R0Pxx

资料三:其次是參数表的開始标识不同,公有(public)成员函数的标识是“@@QAE”,保护(protected)成员函数的标识是 “@@IAE”,私有(private)成员函数的标识是“@@AAE”,
假设函数声明使用了constkeyword,则对应的标识应分别为 “@@QBE”,“@@IBE”和“@@ABE”。

应为函数是private私有成员
所以v2 = ?My_Aut0_PWN@R0Pxx@@AAE
之后就是添加参数,先添加反回值类型参数,在添加函数形参。

资料四:
參数表的拼写代号例如以下所看到的:
X--void
D--char
E--unsigned char
F--short
H--int
I--unsigned int
J--long
K--unsigned long(DWORD)
M--float
N--double
_N--bool
U--struct
....
指针的方式有些特别。用PA表示指针,用PB表示const类型的指针。

这一题的函数返回值类型为 char * 对应PAD
所以v2 = ?My_Aut0_PWN@R0Pxx@@AAEPAD
形参类型为unsigned char * 对应PAE
所以v2 = ?My_Aut0_PWN@R0Pxx@@AAEPADPAE

资料五:
參数表后以“@Z”标识整个名字的结束。假设该函数无參数,则 以“Z”标识结束。

最终v2 = ?My_Aut0_PWN@R0Pxx@@AAEPADPAE@Z

另一种方法:https://www.cnblogs.com/Mayfly-nymph/p/11869959.html

#include <iostream>class R0Pxx {public:R0Pxx() {My_Aut0_PWN((unsigned char*)"hello");}
private:char* __thiscall My_Aut0_PWN(unsigned char*);
};char* __thiscall R0Pxx::My_Aut0_PWN(unsigned char*) {std::cout << __FUNCDNAME__ << std::endl;return 0;
}int main()
{R0Pxx A;system("PAUSE");return 0;
}

得到:?My_Aut0_PWN@R0Pxx@@AAEPADPAE@Z

3、

之后就是分析这里
我们直接动态调试。在这一句下断点
输入31位字符串

然后f7单步调试
进入这个函数发现这里的name也就是v2我们已经算出来了,然后发现是一个result给他赋的值
汇编代码为

这里al就是result的值,记录al的值(这里需要有点耐心。慢慢来一步一步走。别漏了!)

得到0x50, 0x51, 0x48, 0x52, 0x53, 0x49, 0x44, 0x54, 0x55, 0x4a, 0x56, 0x57, 0x4b, 0x45, 0x42, 0x58, 0x59, 0x4c, 0x5a, 0x5b, 0x4d, 0x46, 0x5c, 0x5d, 0x4e, 0x5e, 0x5f, 0x4f, 0x47, 0x43,
接着f7得到在这里插入图片描述

v2就是name ,此时v4 = 1E

点进汇编查看此时v5为0x41

最后上脚本:

a = "?My_Aut0_PWN@R0Pxx@@AAEPADPAE@Z"
b = 0x50, 0x51, 0x48, 0x52, 0x53, 0x49, 0x44, 0x54, 0x55, 0x4a, 0x56, 0x57, 0x4b, 0x45, 0x42, 0x58, 0x59, 0x4c, 0x5a, 0x5b, 0x4d, 0x46, 0x5c, 0x5d, 0x4e, 0x5e, 0x5f, 0x4f, 0x47, 0x43, 0x41
c = list(a)
for i in range(0,len(a)):c[b[i]-0x41] = a[i]
a = ''.join(c)
print(a)

得到:Z0@tRAEyuP@xAAA?M_A0_WNPx@@EPDP
最后在MD5 就行了!

flag{63b148e750fed3a33419168ac58083f5}

buu [2019红帽杯]childRE wr相关推荐

  1. buu [2019红帽杯]xx1 wp

    首先用exeinfo打开它,发现是无壳的64位程序. 逆向先静后动,因此先用ida 打开: main函数代码如下: int __cdecl main(int argc, const char **ar ...

  2. 红帽杯——childRE

    查壳 拖进ida main函数 signed __int64 main() {signed __int64 v0; // rax__int64 v1; // raxconst CHAR *v2; // ...

  3. [2019红帽杯]easyRE1题解

    迷蒙马背眠,月随残梦天边远,淡淡起茶烟.                                                         --松尾芭蕉 目录 1.查壳 2.拖入64位I ...

  4. [2019红帽杯]easyRE writeup

    很想挑战难题,发现自己连writeup也看不懂 用64bit的ida打开,查找字符 找到函数: signed __int64 sub_4009C6() {signed __int64 result; ...

  5. BUUCTF-[2019红帽杯]SnakeDig the way

    [2019红帽杯]Snake 题目下载:下载 下载完文件是一个用C#编写的untiy程序,对于这种程序果断用dnSpy查看Assembly-CSharp.dll 找到如下位置 发现这些函数都导入了In ...

  6. 网络安全培训小白入门课,从buu到红帽的图片隐写

    图片隐写是MISC中的一部分,雨笋教育小编给小白从BUU中找到入门MISC之图片隐写,分享给大家 恢复黑白图片 buuoj 静静听这么好听的歌 由于网上wp只给了代码而且函数非常吓人,因此写了一个新手 ...

  7. 2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会

    2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会 这题有两种情况 1.最大的和是在0~n-1 2.最大的和越过了首尾 这时候只要用n个数的和 - 0~n-1 的连续的最小和 这是求连续子集最大.最小 ...

  8. 面向萌新的红帽杯2018线上赛wp

    网络安全攻防大赛第二届"红帽杯"网络安全攻防大赛(除了web3 guess id,不会做.没写.) misc2 Not Only Wireshark 下载流量包,wireshark ...

  9. [CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it

    [CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it 看群里说CTFHub上复现了, 我来看看 本来想按照红帽杯的套路来试一下,发现phpinfo里莫得flag了 只能想想其他 ...

最新文章

  1. Linux基础命令(3)
  2. Javascript面向对象编程(三):非构造函数的继承
  3. Shell脚本实现生成SSL自签署证书
  4. 7-28作业直接刷一下
  5. 大数据发行版本+组件中的竞品/等同地位关系(持续更新中)
  6. [css] 如何在白天和黑夜自动切换页面的颜色?
  7. Linux常用命令—文件处理命令—文件处理命令
  8. Matlab打开文件替换变量,读取matlab某个路径下的“.mat”文件,改变文件中的内容,并以原名字,变量保存...
  9. 睡前1分钟 坚持瘦下来(信不信由你)
  10. STM32F103C8t6程序下载
  11. 谷歌传奇Jeff Dean获2021年IEEE冯诺依曼奖,8页本科论文被大学图书馆保存至今
  12. MDUI的黑暗模式实现和居中问题
  13. 正则表达式去除空格、符号,只保留中文、英文、数字
  14. 百度翻译API教程(完整Android代码)
  15. ECMAScript标准简介
  16. 手机如何快速转换图片格式?改图片格式手机如何操作?
  17. Animated详解
  18. js:webpack插件BannerPlugin添加版权信息
  19. 【图文教程】文件压缩和打包
  20. 教你如何听懂英语新闻

热门文章

  1. Redis.conf详解
  2. Hash构造函数的方法
  3. HPL-用于分布式内存计算机的高性能Linpack基准的便携式实现测试
  4. 微小目标识别(3)——论文翻译 SCRDet++: Detecting Small Objects via Instance-Level Feature Denoising(放不下了,摘要全文名称)
  5. 刘宝锭 模糊规划理论与程序(Cpp)
  6. 游侠网NCG组织出来了
  7. 为大家推荐一款非常不错的MarkDown编辑器——stackEdit
  8. vscode是付费的吗_vscode免费吗
  9. Redis_exporter 对应的PromSql参数说明
  10. 清华姚班毕业生、MIT学霸吴佳俊荣获首届AAAI/ACM SIGAI博士论文奖