WP-318
[RE] 0-year-0ld
啊这。。直接明文吗。。。唉。。re惨被沦为签到题呜呜
[RE] 1-year-0ld
咦,base64嘛
判断输入长度是48,刚好那个伪flag是36位,嗯,base64
不过好像也没那么简单,中间还有一次异或运算。。
实话说sub_1400015D0那个函数我没看懂,静态不行用动态,走到异或那一步
循环了几次,0x59, 0x6F, 0x75。。。这是什么呢
好家伙,第一次看到跟一句话异或的。。。伪装的很可以
啧。。乱码。。有点慌,不过base64加密后就正常多了
Bingo!
[RE] easyvm
这道题。。。纯靠蒙
据说这种switch结构是模拟虚拟机。。emmmmm不是很懂
可以看到调用了很多次的这两个函数,好像是模拟push和pop的 ?
继续找哪里才是加密运算,,唉。。switch结构我也不会动调啊。。。
应该是这里吧,盲猜一波异或了
1 | int aa[48] = { 0x01, 0x66, 0x1D, 0x04, 0x1E, 0x0B, 0x1C, 0x1F, 0x2A, 0x2F, |
按位异或,诶对了。。( lmy大善人!
AA tql,但vm不easy。。。。
[RE] babyre
想做完这道题再交wp就给耽搁了。。
smc自修改代码,是反静态逆向的一种方法。这个最开始的函数就是修改的地方了
ida是可以动调的,走到加密函数步入,f5就可以看到改变了的函数了
emmmm但这是出题人放水了。。。。
其实这个函数就是把加密函数(Src)的地址传入,然后可以看到它修改了7,8,13,14,15位
看一下加密前和加密后的hex,对比一下就挺明显的。。。。
唉找到正确的加密函数了,往回逆的时候又卡了。。逆不动了呜呜。。等官方wp了
[PWN] baby_rop
第一次做栈溢出之外的pwn啊,得认真记录一下。。。
查看保护,开了NX和CANARY
开了canary如果出发栈溢出漏洞就会报错,所以先canary绕过,再构造rop链
绕过的方法是泄露出canary的值,这样构造rop时加上canary就能绕过了
有printf,好耶,可以利用格式化字符串漏洞泄露出canary
( 这个地方的9,是用(0x20-0x08)/4+6算的
1 | sh.sendline("%9$p") |
然后加上canary时注意填充的位数 (详情看栈。。。
1 | payload = 'A' * (0x20-0x08) + p64(canary) +'a'*8 |
绕过canary就可以按常规rop做了(之前培训有讲,照着写就完事了)
1 | from pwn import * |
居然做出一道pwn,太感动了!
[PWN] sandbox
前面计算libc_base就是按正常rop做,但最后不能用system
orw就是open, read, write
用了好多pop_rdi, pop_rdx 的指令,额我是个不会汇编的废物,不抄现成脚本绝对写不出来。。。到libc里找要用的gadget
1 | ROPgadget --binary libc.so.6 | grep "****" |
照着学长的脚本改了改,终于通了,但还有很多地方不明白。。。有空再看看吧
[PWN] bor_pivot
栈迁移。。。。就不知道应该迁哪儿呜呜。。。
目前只知道输出的gift的位置
[Crypto] EZXOR
hint : 推荐使用工具xortool
flag出来了但不完整,其实可以猜了
但总归拿到key了,先看一下异或完的txt里是什么
我们不知道key完整是什么。。但可以把这个几段英文改正确呀
异或就是好,有两个完整的txt,照样也能把key异或出来
1 | fin=open('enc.txt','rb') |
拿到了,flag:
[Misc] 签到到到
hint: 五八四十
base58 + base85
[Misc] 2048
说实话这游戏我是玩不到2048的,幸好它好像256就给flag了。。。