BuckeyCTF - printful
这一题断断续续尝试了1天,从泄漏栈指针、任意位置读写,到远程dump ELF、泄漏got表、获得libc地址,到最后尝试写入ROP链,实在是非常梦幻() 然而可惜的是在最后一步总是遇到 remote connection closed with EOF的情况。赛后查看大佬们的wp发现和我写的不是同一个return addr. 除了最后一个小节,都会记录我当时的探索过程,因此有些过程可能是错的...
这一题断断续续尝试了1天,从泄漏栈指针、任意位置读写,到远程dump ELF、泄漏got表、获得libc地址,到最后尝试写入ROP链,实在是非常梦幻() 然而可惜的是在最后一步总是遇到 remote connection closed with EOF的情况。赛后查看大佬们的wp发现和我写的不是同一个return addr. 除了最后一个小节,都会记录我当时的探索过程,因此有些过程可能是错的...
0x01 页面要求点击1000000000次, 通过控制台查看,使用了flutter。 搜索核心字符串,发现在main.dart.wasm里 尝试使用wasm cheat engine, 但是没有找到能用的( 下载main.dart.wasm,然后用ghidra wasm plugin或者wasm2wat,但都无法打开。 赛后有大佬解释了原因: Yeah https://g...
0x01 初步分析:控制流混淆,花指令,运算符重载 UPX去壳后,很容易定位核心函数所在的位置。其中sub_7FF70E1FD3E8和sub_7FF70E1FD4B5都是字节序变换的函数,真正棘手的是for循环中的sub_7FF70E1FD5AC,会执行6轮,每次使用8字节进行变换(后续称呼为fuck函数) // bad sp value at call has been detected...
在SekaiCTF-2025中,面对一个程序,我用繁琐的动态调试方法来手动dump数据,每次运行都需要按下几十次 F9, 甚是繁琐,在被折磨一通耻辱下播(bushi)。比赛结束后我学习了一位大佬的解法,他使用了frida脚本来一键dump, 深深地震惊了我:这就是科技的力量吗?虽然很早以前就听过hook技术,但却没有想过还能这么玩。 不久后的FortID CTF中,其中有一道名为toile...
0x01 直接运行显示权限不够,sudo运行后显示监听本机的端口 /* WARNING: Enum "__rlimit_resource": Some values do not have unique names */ /* DWARF original prototype: Result<(),_alloc::boxed::Box<dyn_core::error::...
0x01 pyinstaller-cookie 运行后程序要求输入。尝试反汇编的时候一股浓烈的工业气息扑面而来: __int64 __fastcall sub_1400040D0(__int64 a1) { ...... v2 = _acrt_iob_func(2u); setbuf(v2, 0i64); if ( (int)sub_140003FC0(a1 + 16) &l...
0x01 程序分析 使用ghidra反汇编: /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ undefined8 FUN_0010108c(void) { int iVar1; size_t sVar2; undefined1 auStack_130 ...
这是一个python打包成的ELF文件: int __fastcall __noreturn main(int argc, const char **argv, const char **envp) { Nuitka_Main(argc, (char **)argv); } nuitka和pyinstaller等打包工具不同,它所做的工作更类似于“编译器”,因此不可能直接提取主代码。网...
__int64 __fastcall main(int a1, char **a2, char **a3) { unsigned int v3; // ebx __int64 v4; // rax __int64 v5; // rax _QWORD *v6; // rax unsigned int v7; // eax __int64 v8; // rax __i...
// gcc -o chall chall.c #include <stdio.h> #include <stdlib.h> #include <string.h> void rot13(char *s) { while (*s != 0) { *s += 13; s++; } } int main(void) { set...