BJDCTF2020-re Easy&& BJD hamburger competition&&JustRE

目录

Easy:

 BJD hamburger competition

JustRE


Easy:

下载链接:下载

查壳无壳拖入IDA,

看到有关时间的函数我的第一反应是:是不是在很长的时间后才会显示呀,我运行一下这个程序,发现并不是,因为出现了时间函数的代码“Can you find me?”,如下图:然后就自动退出了,所以这里不是关键函数,接下来就是找关键函数,发现ques函数,跟进:

 

 关键就是for循环,循环50次,v2[j]==1就输出*,否则输出空格,我当初以为这会不会是迷宫,但是没有给地图啊,也没有明显的上下左右的移动,所以应该不是。先执行一下这个ques函数看看。之前我们运行过,并不是执行这个代码,所以我们应该改EIP,让程序执行这里。在IDA里看到ques位置是401520,在OD中载入找到这个内存地址。

右键->此处为新IP,在运行即可。

仔细看是英文字母,很可能是flag。结果就是flag。

 BJD hamburger competition

题目下载:下载

解压后发现,运行可执行程序

这和平常的exe文件不一样,经过查阅知道:这种属于untiy3D游戏。Unity游戏逆向及破解方法介绍

  1. u3d支持c#和js两种脚本,而且c#是最普遍的
  2. 核心.net代码位于下述路径: \TPH\TPH_Data\Managed\Assembly-CSharp.dll
  3. 之所以要打开这个dll文件是因为unity在打包后,会将所有的代码打进一个Assembly-CShyarp.dll的文件里面,通过这个文件的反编译,就能详细看见里面的代码内容。

载入dnspy,找到该文件的代码

可以看到Md5,sha1加密。进入主函数

看到一串数据,所以把他sha1解密在MD5加密。图借鉴[BJDCTF2020]BJD hamburger competition_Child_K1ng的博客-优快云博客发现不对。难道还有其他操作嘛。找到MD5函数和Sha1函数。

发现ToString()和Substring()函数:

1.ToString("X2")即转化为大写的16进制

2.ToString("x2")即转化为小写的16进制

3.Substring():截取父字符串的一部分

所以MD5加密后应为大写且长度20。对上面结果修改后:BJD{B8C37E33DEFDE51CF91E}。

JustRE

下载:题目下载

运行程序是一个窗口点getflag出现载入IDA,查看字符串。

 

发现格式化输出是19999,0。没有未知数了,应该是flag。结果正是flag,这道题挺水的。。。

 

 

 

 

### BJD CTF 2020 BabyROP2 Writeup #### 题目概述 BabyROP2 是一道典型的 Return-Oriented Programming (ROP) 类型题目,主要考察参赛者对于 ROP 技术的理解以及利用漏洞执行任意代码的能力。 #### 利用技术分析 在该挑战中,`init` 函数提供了重要的提示信息[^4]。通过快速浏览反编译后的二进制文件代码可以确认这是一个 ret2libc 的攻击场景。具体来说: - `puts` 被用来泄露库函数的真实加载地址; - 计算目标系统调用(如 system 和 /bin/sh)相对于已知泄漏地址的位置偏移量; - 构造恶意输入数据覆盖返回地址链,从而实现控制程序流的目的; #### 实际操作步骤说明 为了成功完成此题目的解答,需要采取如下措施来构建有效的 payload 并触发远程命令执行: 1. 使用工具定位 libc 中的关键 gadget 地址; 2. 发送请求以获取服务器端实际使用的动态链接器基址; 3. 基于上述信息调整本地测试环境配置使之匹配远端状况; 4. 编写并发送精心设计的数据包给服务端,其中包含正确设置好的栈帧结构及必要的参数传递方式; ```python from pwn import * # 远程连接到CTF平台上的babyrop2服务 conn = remote('challenge.ctf.games', PORT) # ... (省略部分细节) payload = b'A' * OFFSET_TO_RETURN_ADDR \ + pack(system_addr, 'little') \ # 将system()的地址放入返回地址处 + pack(bin_sh_str_addr, 'little')\ # 参数"/bin/sh"字符串指针作为第一个参数传入system() conn.sendline(payload) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值