这次比赛,有点坑逆向选手,再次感谢各位宽容大方善良美丽可爱小伙伴们。。。。
RE
Re1
用peid查壳,发现是upx加壳,直接脱壳(ESP定律或者直接找脱壳工具),用IAD打开
发现关键函数
发现sub_4110E6功能如下(简单xor),发现key
发现sub_41102D函数,如果做过类似题的话,知道这是一个迷宫题目,因为发现正好是上下左右,并且一步都会判断是否出错,因为是+16,判断为宽16
OD加载,发现迷宫,s是开始 ,d是结束,每一步都是1(否则失败),l向左,r向右,f向下,b向上
flag: It_is_upx_and_map_you_kn0w!!
Re3
有ida打开,发现tls,脱去TLS可以参考https://esebanana.github.io/2017/10/10/re_tls/
发现第一个加密用户名函数
解密代码
输入flag后、判断flag长度35位,
加密一、flag异或得到flag1
然后将flag1将中间21个字符分为3组,每一组分别加密
最后和key1比较
key1 = [0x10,0x1a ,0x17 ,0x11 ,0xd,0x22 ,0x1e ,0xe3 ,0xc6 ,0xda ,0xe3 ,0xc6 ,0xda ,0xdd ,0xf6 ,0xee ,0x6d ,0xe4 ,0xad ,0xe7 ,0x6d ,0xdf ,0x6f ,0x7f ,0x9a ,0xde ,0x6c ,0xff ,0x13 ,0x17 ,0x4 ,0x29 ,0x57 ,0x57 ,0xb ]
解密
Re4
IDA打开找到
找到攻击函数
改为,这样自己不会掉血
然后,慢慢,把每一层都修改,最后一层因为调用自杀函数,这里直接nop掉,最后修改保存,得到flag
flag : flag{I_1ike_hard_w0rk_484_RE_and_never_up}
apk1
用工具apk_to_java.jar打开,发现是一个re4加密
放在java里运行
最后没有想到的是,java的编码问题导致有些人没有解出来,有点难以接受,我用的是utf-8
flag : flag{Th1s_is_only_Rc4_you_Should_know_more}
apk2
用工具apk_to_java.jar打开,发现是一个简单的文件加密,直接复制出来运行
然后用010打开,发现是一个压缩包,解压得到flag
flag{This_easy_encrypto_t0_filehi$!><}
PWN
1、babypwn1
程序就不放了,这里可以下载(https://betamao.me)
分析程序,检查发现程序无任何保护
我们只需要v5=abcd,就可以得到shell(意味着拿到flag),但v5=233了,所以这里我们需要覆盖v5的值
这里第一个箭头是函数的栈顶eps=0x3f4(同时我们输入的s也是存放在这里),第二个箭头v5=0xc,所以我们算出两者的距离d=0x3f4-0xc=1000,就可以覆盖了,构造payload(小端序,v5是int型的):payload = 'a'*1000+'dcba'
测试成功poc.py
2、babypwn2
分析程序,检查发现程序无任何保护
发现这个函数,同时发现getShell函数
那我们只有覆盖返回地址到getShell函数就好啦,发现函数栈帧0x3f4=1012,函数栈是这样的:
那么我们只需要输入1012+4+ret(getShell的地址)就成功啦
测试成功poc.py
3、babypwn3
分析程序,检查发现程序无任何保护
发现存在溢出,并且当v2=127的时候,会去执行输入的代码
可是这里溢出后并没有执行得到shell的函数,因为没有任何保护,所以栈上的代码可以执行。那么我们就自己写一个执行shell的代码输入就可以了——shellcode,可以在网上找,它的功能就是system(“/bin/sh”)
方法一
1、输入shellcode
2、覆盖v7=127
测试成功poc.py
方法二
1、存在jmp esp指令
2、栈溢出到jmp esp位置,执行shellcode
测试成功poc.py
4、babypwn4
分析程序,检查发现程序只有NX保护
潘师傅说这道题出题有点失误,但是还是很基础的,这里我就把我当poc.py献给大家
测试成功poc.py
这里我要睡觉了,就不解释了。有任何问题欢迎来问