CTF真(太)好(难)玩(了)

0%

0x00 UPX Introduction

假期在家里做了一下各类upx壳和脱壳方法的整理,这里做一个分享。
广义来说壳主要分两种:压缩壳与加密壳 即缩小文件体积和加密代码以提高逆向难度。 UPX、ASPack等壳均属于压缩壳,其可将文件体积缩小50%-70%。而本文讲的UPX因其逆向难度过于简单,故妄图用UPX达到保护代码的效果几乎不存在,但脱壳的思想确实是值得思考的。
其实现压缩的方法是在程序原先代码之前再插入一段代码,因此在加壳程序运行前这段代码会先被运行,其作用则是解压缩加壳程序的代码到某一内存段或临时文件上,在全部解压缩完毕后跳至该内存段执行程序的真正代码,通常的,称这个入口为OEP。因为upx壳具有先解压缩后执行程序的特点,那么我们在加壳程序运行至解压缩完毕时暂停程序(即动调断点到OEP),将已经完成解压缩的代码段或临时文件抠出来生成一个新的文件,那么这个文件将不再带有壳了。

Read more »

前言:

南京邮电大学网络攻防大赛 NJUPT 2019 CTF
比赛入口:https://nctf.x1c.club/notice

这次比赛难度适中,同时也是我们Nepnep战队参加的第一场比赛

最终我们解出了32道题(师傅们Tql, Web Pwn都AK了,misc差一题AK),位居第三

Read more »

0x00

首先非常Syclover团队举办这次比赛,题目对于我这种新手非常友好,在做题的过程中也让我学到了很多。因此写这个wp以记录与纪念这次比赛。

0x01 Find tools

这题没有给出样本(所以也没法复现),只有一行提示:Find tools: Find right tools,so easy!

Read more »

0x00 为什么需要万能gadget

众所周知,在 64 位程序中,函数的前 6 个参数是通过寄存器传递的,分别是rdi、rsi、rdx、rcx、r8、r9。而当我们构建ROP时,往往我们很难找到每一个寄存器对应的 gadgets。 比如,用于控制第三个参数的rdx寄存器一般情况下就是不可控的。当然,这篇文章就是为了解决这一问题而写的,将介绍如何用利用 x64 下的 __libc_csu_init 中的两个特殊 gadgets实现万能传参。

Read more »

0x00 Cython静态类型再提速

在上一节中,已经介绍了将Python代码通过Cython编译为低级的机器码作为库来提速的方法,但实际上,上一节的代码中,pyx文件里用到的函数与变量依旧属于python的动态类型。Python的动态类型可以使变量关联到不同类型的对象,正是这个特点使Python灵活而动态,但正是这个特点也会给解释器带来大量的负担,因为解释器必须在运行的过程中动态的类型与其包含的方法。Cython是Python语言的一个超类,它支持显示的类型声明,可使编译出的拓展在极大程度上再优化。

Read more »