逆向攻防世界CTF系列4-re1
逆向攻防世界CTF系列4-re1 查壳,无壳32位 进到这 分析一波,只有v3是正的才会输出aflag,也就是v9和v5.mxxx相等,又看到v5和xmmmword有关,直接点进去: 右键双击两下,列表中和有转化好的值,完成转化,拼接得到结果: 这里有个知识点,大端与小端 。假设一个十六进制数0x12345678 大端的存储方式是:12,34,56,78,然后读取的时候也是从前往后读 小端的存储方式是:78,56,34,12,然后读取的时候是从后往前读取 正的发现不对,所以,最后的flag应该是:DUTCTF{We1c0met0DUTCTF}
pwn入门-ret2text+ROP详解
pwn入门-ret2text+ROP详解1234567#关闭栈保护gcc question_4_1.c -m32 -fno-stack-protector -o main#全部关闭gcc -no-pie -fno-stack-protector -z execstack -m32 -o 3.exe 3.c#-no-pie:地址随机化#-fno-stack-protector:没有堆栈保护#-z execstack:堆栈可执行 ret2text 即控制程序执行程序本身已有的的代码 (即, .text 段中的代码) 。其实,这种攻击方法是一种笼统的描述。我们控制执行程序已有的代码的时候也可以控制程序执行好几段不相邻的程序已有的代码 (也就是 gadgets),这就是我们所要说的...
逆向攻防世界CTF系列3-game
逆向攻防世界CTF系列3-game打开看下: 玩一个游戏n 是灯的序列号,m 是灯的状态。如果第 N 盏灯的 m 为 1,则灯亮,否则灯灭。起初所有的灯都是关闭的,现在您可以输入 n 来改变它的状态,但您要注意一点,如果您改变了第 N 盏灯的状态,第 (N-1) 盏灯和第 (N+1) 盏灯的状态也会随之改变。当所有灯都亮起时,会出现flag,现在输入 n.n(1-8) 解法一:一次输入12345678,得到flag(看的其他大佬,用广度优先,不理解为什么可以用广度…) 解法二:扔到exeinfo查,无壳,32位exe 扔到ida,shift+F12没找到flag f5找到main(当然你也可以一开始就F5然后一直点进函数内部也可以到main) 关键是这段 解释一下,就是只要不全为1就会一直循环,全为1则执行sub_457AB4();,注意sub_457AB4();是在循环外部,不在里面。 点进sub_457AB4(); 最后到达这: return的应该是flag 我们把这段伪代码转成python去运行得到flag: 注意qmemcpy(v2, “{ “,...
pwn入门-ret2syscall
pwn入门-ret2syscall静态编译怎么办?如果没system怎么办? system封装的execve 1int execve(const char *filename, char *const argv[], char *const...
逆向攻防世界CTF系列2-insanity
逆向CTF系列2-insanity直接扔入peid中,发现不是一个有效的PE文件 其实很简单,就是PEiD只支持检测32位的可执行文件,如果显示不是有效的PE文件,说明你的可执行文件为64位,不能用PEiD检测 下面使用Exeinfo PE查看,Exeinfo相当于PEiD的升级版,可查看64位的可执行文件 因此下载exeinfo pe 由此可以发现这是一个ELF32位的文件。 目前我们常见的两大主流平台分别是 Linux 和 Windows;在前者环境下,其主要的可执行文件对应的名称为 ELF(Executable and Linking Format)文件;在后者环境下,其可执行文件对应的名称为 PE(Portable Executable)文件。 扔入IDA,F5,发现strs,可疑,ctrl+点击点进去看看 查到flag 其实还有第二种方法,看了大佬的wp,在这阐述下: 直接shift+F12查看字符串变量 也能查到 .rodata:08048788 00000015 C 9447{This_is_a_flag}
pwn入门-ret2shellcode
pwn入门-ret2shellcode先看我的另一篇文章,shellcode详解 例一12345678910111213141516#include <stdio.h>#include <stdlib.h>#include <unistd.h>int dofunc(){ char b[0x100]; puts("input:"); read(0,b,0x100); ((void (*) (void)) b)(); return 0;}int main(){ dofunc(); return 0;} NX:栈不可执行 123456789101112131415from pwn import *context(log_level='debug',arch='amd64', os='linux')pwnfile= './question_6_1_x64'io =...
Android逆向4-动态调试&Log插桩
Android逆向4-动态调试&Log插桩来自吾爱破解-正己 https://www.52pojie.cn/thread-1701353-1-1.html 动调动态调试步骤 1 修改权限 方法一:在AndroidManifest.xml里添加可调试权限 1android:debuggable="true" 方法二:XappDebug模块hook对应的app 项目地址:XappDebug 右上角设置showa already debug 方法三:Magisk命令(重启失效) 12345671. adb shell #adb进入命令行模式2. su #切换至超级用户3. magisk resetprop ro.debuggable 14. stop;start; #一定要通过该方式重启 方法四:刷入MagiskHide Props...
baby_web-Web-攻防世界14
baby_web-CTFWeb进阶wp-攻防世界14页面显示1.php,可以先访问下源码和index.php,发现内容一致,再查看下cookie和header,看一下有没有藏flag,发现没。 dirsearch一下,发现访问index.php会重定向到1.php。抓包看一下 查得flag
pwn入门-ret2libc
pwn入门-ret2libcwrite(1) read(0) 0是输入,1是输出,write和puts有区别 amd64:前6个参数依次存放于 rdi、rsi、rdx、rcx、r8、r9 寄存器中,第7个以后的参数存放于栈中 程序没有system怎么办? 12345678910111213141516#include <stdio.h>#include <stdlib.h>#include <unistd.h>int dofunc(){ char b[8] = {}; write(1,"input:",6);//2,3,4 fd=open('./a');puts read(0,b,0x100); write(1,"byebye",6); return 0;}int main(){ dofunc(); return 0;} ret2libc 即控制函数的执行libc...
Android逆向3-去弹框,更新
Android逆向3-去弹框,更新原文:https://www.52pojie.cn/thread-1706691-1-1.html 做适当补充 安卓四大组件 组件 描述 Activity(活动) 在应用中的一个Activity可以用来表示一个界面,意思可以理解为“活动”,即一个活动开始,代表 Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启动,Activity的生命周期交给系统统一管理。 Service(服务) Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等。 Broadcast Receiver(广播接收器) 一个用于接收广播信息,并做出对应处理的组件。比如我们常见的系统广播:通知时区改变、电量低、用户改变了语言选项等。 Content Provider(内容提供者) 作为应用程序之间唯一的共享数据的途径,Content...