MozhuCY's blog

MozhuCY's blog

NO PWN NO FUN

网鼎杯半决赛pwn3
整理结构体主menu的chara结构体1234500000000 chara struc ; (sizeof=0x18, align=0x8, mappedto_7)00000000 inuse dq ?00000008 name_ptr dq ?00000010 type dq ?00000018 chara ends 其中inuse限制了不能edit和double free,程序中没有溢出点 虽然inuse可以不能直接读取内存,但是可以利用堆块包含来进行堆块内容的读取 可控堆块size的...
网鼎杯半决赛pwn1
一个短信系统 定义了两个结构体,分别如下,一个是用户信息的结构体,一个是信息结构体 1234567891011121314151617180000000000000000 message struc ; (sizeof=0x18, align=0x8, mappedto_6)00000000 title dq ? ; offset00000008 content dq ?00000010 next dq ?00000018 message ends000000...
东南大学练习平台二进制全题解(持续更新中)
东南的平台又放了新题,这次决定都做一下试试,在这里记录解题过程,因为是平时练习,我会尽可能多的把思路和解法写全,鉴于东南平台的wp不是很多,也方便下一届萌新的自主练习.平台地址:http://sus.njnet6.edu.cn helloworld 逆向签到题,直接f5看到内部if条件即可 抛开f5,分析一下汇编,首先是函数头部连续mov到栈中的数据,也就是flagenc 1234567mov dword ptr [ebp+flag], 0C881E8F1hmov dword ptr [ebp+flag+4], 0CECF81D2hmov dword ptr...
0ctf - freenote
整理结构体 程序首先初始化了了chunklist,此题的chunklist是在堆里面分配的 一个指针指向了malloc(0x1810)的头,此段空间的前16字节分别是最大堆块的值和当前堆块数量 大概结构体如下图 12345670000000000000000 headptr struc ; (sizeof=0x1810, align=0x8, mappedto_6)00000000 max dq ?00000008 count dq ?00000010 nodelist note 256 dup(?)000018...
babyheap
网鼎杯第一场 程序功能:新建,编辑,打印,free free处没有置空指针,导致可以uaf malloc每次都是0x20的fastbin,编辑功能可以使用3次 自写了readn函数,没有溢出点 edit可以修改free后堆块的bk,fd 12345Arch: amd64-64-littleRELRO: Full RELROStack: Canary foundNX: NX enabledPIE: No PIE (0x400000) Full RELRO导致got表不可写,所以只能劫持malloc_hook或者free_hook_来劫持程序的流...
Hook学习
Hook hook实际上可以理解成一个劫持程序流的过程,我们可以在想劫持的地方写入钩子函数,然后程序执行到那里时,会先执行我们写的代码,然后ret源程序执行流,在我们的代码部分,我们可以检控程序中的一些变量,还可以更改这些变量,一般实战中,hook会被用于做键盘,鼠标,窗口,日志等部分的消息钩取 在ctf中,我们可以利用hook来监控程序中特定变量的值,帮助分析程序,同时,patchkit的pt.hook()其实也用了相同的东西,hook和patch相比,对程序影响较小,不用担心大量patch给程序带来的副作用 frida frida是一款基于python和JavaScript的框架,...
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后就非常不正常,当时想了好...
SxqVM v0.0.1
去年校赛的题目 当时没做出来….后来也没做出来,今天平台更新,抱着试试看的心理答了这道题 难度还可以接受,因为是在实现一个很正常的汇编,所以可以看懂 逻辑分析 主函数逻辑很简单,输入flag后验证长度是否能被3整除,随后传入函数中,进行加密的操作,然后一个逐字符比较 123456789101112131415161718192021222324252627282930313233int __cdecl main(){ signed int status; // [esp+8h] [ebp-10h] signed int v2; // [esp+Ch] [ebp-C...
avatar
MozhuCY
witness me