csapp里的“异常流”,没有听过这个
第一步,先查壳,是小端序
直接丢ida里
应该是加花了
看看有什么字符串,有个right,定位一下right的反编译
可以看到有一个cmp函数
看看sub_12E9的交叉引用,是逐位异或
上层的交叉引用
signal:
应该是根据异常的信号去调用相应的handler函数
现在看看加花的那段汇编
瞄了好久,都没看到典型的加花,倒是有一些数据插在里面
先转化为data,再将0ff.....nop了
再将这下面的转化成代码
回到函数开头处undefine再create function,可以看到成功反编译了
现在下断点调试,f8
第一步是“SIGSEGV”异常流,f9后点击yes
f8后是“SIGILL”
继续f9+yes,而后是赋值
break后,对这个byte数组进行23次+操作
一直f8,最后有一个异常流“SIGFPE”
这是过程
1:60指向68的地址(其实数组循环加的就是68里的值)
2.没有实质性动作
3.加&68(实际上是&60的)的值
4.开始加密
可以写解密代码了
data=[ 0x4F, 0x54, 0x48, 0x53, 0x60, 0x45, 0x37, 0x1A, 0x28, 0x41,
0x26, 0x16, 0x3B, 0x45, 0x14, 0x47, 0x0E, 0x0C, 0x70, 0x3B,
0x3C, 0x3D, 0x70]
print(len(data))
for i in range(0,len(data)):
data[i]=data[i]^i
data[i]=(data[i]-233)&0xff
print(''.join(chr(i) for i in data))
flag{WH47_C4N_1_54y???}