Wgpsec CTF——Re部分wp
一、ezConfuse
先查壳,32位无壳

直接拖进ida,这里出现了一个问题,在本机里,直接把这个文件拖进ida,ida会崩溃,但是用xp虚拟机里的ida就没问题,不清楚这里是什么原因
进来找到main函数,这里夹杂了几条无用指令,让ida分析失败了
直接把call $+5那三条指令nop掉就可以

这里修复好之后,发现摁f5还是没反应,那就只能硬看了

先判断输入字符串的长度是否是16位

在向下,找到了加密函数和检验函数,先看加密函数

加密函数和main函数一样,也是加了无用的call指令,直接nop掉,重新p一下就可以了

一个简单的累加算法
然后再看检验函数

也没有什么亮点,
直接写脚本跑出来
#include<iostream> #include<windows.h> #include<stdio.h> using namespace std; int main() { int a2[] = {2,3,3,3}; DWORD l3[4] = {0xd3ba857,0x36c8aa8a,0x6d8a126d,0x17bc4d16}; DWORD v6 = 0xd3ba857; DWORD v5 = 0x36c8aa8a; DWORD v4 = 0x48d159c0; for (int i = 0; i < 0x40; ++i ) { v5 -= (*(DWORD *)(a2 + ((v4 >> 11) & 3)) + v4) ^ (v6 + ((v6 >> 5) ^ 16 * v6)); v4 -= 19088743; v6 -= (*(DWORD *)(a2 + (v4 & 3)) + v4) ^ (v5 + ((v5 >> 5) ^ 16 * v5)); } printf("%x\n%x\n",v5,v6); v6 = 0x6d8a126d; v5 = 0x17bc4d16; v4 = 0x48d159c0; for (int i = 0; i < 0x40; ++i ) { v5 -= (*(DWORD *)(a2 + ((v4 >> 11) & 3)) + v4) ^ (v6 + ((v6 >> 5) ^ 16 * v6)); v4 -= 19088743; v6 -= (*(DWORD *)(a2 + (v4 & 3)) + v4) ^ (v5 + ((v5 >> 5) ^ 16 * v5)); } printf("%x\n%x\n",v5,v6); return 0; }
# 3340657b # 67616c66 # 7d36645f # 30635f5a l = [0x66,0x6c,0x61,0x67,0x7b,0x65,0x40,0x33,0x5a,0x5f,0x63,0x30,0x5f,0x64,0x36,0x7d] for i in l: print(chr(i),end='')
二、easyRe
先查壳,发现是ASPACK壳,之前的文章有讲过ASPACK怎么脱,可以去看之前的文章,这个题的ASPACK很简单,一次esp定律法就可以了,这里不在演示

脱完壳的程序直接拖进ida

要输入用户名的密码,并且分别校验,校验放到了switch里,switch的执行顺序放到了数组里


下面是每个函数的作用


关键部分在检验用户名和密码处

跟进这个函数

用户名可以直接通过异或得到

passwd部分是tea加密之后的结果,直接把v5tea解密即可
给出python脚本
def fun1(source,y): source[y+1] += y source[y] -= y def fun2(source,y): source[y+3] = (y ^ source[y+3]) source[y+2] = (y ^ source[y+2]) def fun3(source,y): source[y+2] = (source[y+2] - 4 * y) source[y+1] = (source[y+1] + 2 * y) def fun4(source,y): source[y+2] = (source[y+2] - 5 * y) source[y] ^= (y+2) l1 = [100, 108, 97, 103, 121, 56, 88, 41, 123, 92, 109, 123, 122,12,-25,33,107,68,-51,116,82,-15,33,123,-105,42,13,122,-97,31,100,97] i = 28 for j in range(0,8): fun4(l1,i) fun3(l1,i) fun2(l1,i) fun1(l1,i) i -= 4 print(l1) for i in l1: print(chr(i&0x7f),end='') #Wgpsec

浙公网安备 33010602011771号