mozhucy's blog.

mozhucy's blog.

NO PWN/GUITAR NO FUN

CTF二进制总结0x01
发现了一道大赛的签到题,来试一试下水大赛签到题次,ELF文件,扔进IDA,主函数逻辑很清晰,主要就是两个判断,一个是输入值的长度为14,二是将input传入一个judge函数,做判断。需要满足两个条件,由IDA反编译的结果来看,judge函数分析失败。这就很难受了,用gdb调试一波试试,顺便复习一下gdb操作。 file BabyREset disassembly-flavor intelb *0x400660rdisassem /m 得到如下结果123456789101112131415161718192021222324252627282930313233343536373839...
CTF二进制总结0x02
ELF文件的动态调试,IDA远程动态调试GG,kali自带OD GG,edb-debug鸡肋的功能,来一发radare2好了。上午刚被gdb搞得头大,现在来挑战一下更难的r2。首先,radare是一款类似于IDA的工具,他也有可视化图形界面,但是却是基于命令行之上的。先来一发Hello World调试一下。gcc hello.c -o hello后,打开终端 r2 ./hello[0x00000530]> 变成了这个样子,这时输入ie,你会得到 [Entrypoints]vaddr=0x00000530 paddr=0x00000530 baddr=0x00000000 la...
qctf-asong
比较基础的一个逆向 题目给了三个文件,一个内容是flagenc,一个是一份歌词,一个是elf文件 第一个函数是对输入的flag取{}之间的值 第二个函数是对于歌词的一个词频分析 第三个函数是将flag和歌词词频分析后的flag进行加密 加密过程: 首先利用词频分析出的表进行一个单表置换 随后再次进行一次置换 然后一个简单的位运算,写入文件 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566f...
z3求解器的一些简单使用
pip install z3-solver 安装这东西,一行就够了,记住不要直接pip install z3就好 from z3 import * 然后创建一个通用求解器,s = Solver() 一些函数:s.add()添加条件,s.model()列出求解结果,s.check()查看约束条件是否合格 一般循环设立值是这样的:X=[Int(“x%d”%i) for i in range(5)] add的条件可以用逗号隔开,然后从s.model()中提取数据s.model()[x].as_long() 之后有用到的例题在下面总结下
2018看雪ctf第四题-密界寻踪
密界寻踪恢复函数 ida打开后随便定位了一个字符串,随后定位到一个函数,但是不知道是做什么的,乖乖找main函数 找到_main和_main_0函数,点进去发现_main_0跳到了程序的另一个地方,也就是_main_0_0函数,这里有巨多的花指令,jnz/jz/jno/jo/e8/什么的全用上了QAQ 去花后发现这一段函数其实只有几步,push ebp/mov ebp,esp/sub esp,7Ch,然后一个大跳跳到函数主体,注意这个sub esp,7ch….被这个坑了好久 跟着跳转过去后,刚准备f5,堆栈不平衡了.到函数尾后,发现函数自从add esp,7Ch后就非常不正常,当时想了好...
Homuranote
cgctf pwn300大概审查思路 据说这题是入门堆题,又是校队考核题目,入门一发堆吧 很经典的note结构,menu getnum switch-case选择功能 checksec 查一下,能开的都开了. IDA打开后反编译,程序大概有5个功能,新建,删除,编辑,查看,退出 新建堆处很正常 删除堆,也就是free处,存在UAF 编辑处可以修改堆内的值 具体攻击思路 fastbin attack劫持 _malloc_hook_ unsorted bin leak 程序基址 配合给好的libc文件进行攻击 具体攻击原理fastbin atacck 一般利用doub...
SxqVM v0.0.1
去年校赛的题目 当时没做出来….后来也没做出来,今天平台更新,抱着试试看的心理答了这道题 难度还可以接受,因为是在实现一个很正常的汇编,所以可以看懂 逻辑分析 主函数逻辑很简单,输入flag后验证长度是否能被3整除,随后传入函数中,进行加密的操作,然后一个逐字符比较 123456789101112131415161718192021222324252627282930313233int __cdecl main(){ signed int status; // [esp+8h] [ebp-10h] signed int v2; // [esp+Ch] [ebp-C...
SUCTF-enigma
头铁解法 今天开始,准备研究一些原来做起来很难受的题目 首先是字符画”SUCTF”,略过程序大概逻辑 c++编写,主要函数逻辑采用c语言形式,首先接收输入到一个全局变量,然后判断输入长度是否为36,如不是传入GG函数 经过三个加密函数,memcmp比较加密后的flag和一个全局变量的36位 第一个加密函数分析 变量:首先是一个char型数组,长度为12,如下,三个int型的轮子,从程序后部可以看出来4次为一轮,方便理解可以想象成一个类似于始终的逻辑 key = [0x31 ,0x62 ,0x93 ,0xC4 ,0x21 ,0x42 ,0x63 ,0x84 ,0x3D ...
符号执行
angr 首先导入from angr import * 将程序加载进来p = Process(“filename”,auto_load_libs=False) 可以理解将程序变成一个特殊的状态,这样默认函数默认入口点,如果在()内加入addr=0xxxxxx,会指定另一个入口点s = p.factory.entry_state() 就有一些类似我们的打log时复现代码那一环,设定一个模拟器 smt = sm=p.factory.simulation_manager(s) sm就是之前载入文件,设定入口点,建立模拟对象,现在就可以explore来开始符号执行,后面是约束条件r = sm.e...
windows逆向
windows逆向句柄 句柄可以理解成一种特殊的指针,是windows系统为了实现程序频繁与内核之间进行交互保护的功能而设计出来的一种数据结构,但是他又不同与传统意义上的指针,传统意义上的指针被控制后几乎可以进行随意修改这个指针指向的地址的数据//其实觉得和plt got有点像… 或者说可以理解为windows为了实现安全性修改了指针的一些特性并且重命名为句柄
avatar
mozhucy
FRIENDS
friendA friendB