-
-
[原创]2018看雪CTF第三题WP
-
发表于:
2018-6-20 21:27
3277
-

test函数中调用了ptrace

把welcome函数中调用test处nop掉就能用gdb调试了。
从这起,F5大法就不好用了,直接分析汇编
call指令把pop rax的地址压栈,随后又弹入rax中。动态获取当前的地址(还记得罗云彬的汇编书里说这是病毒常用的手段。。。)
syscall为linux的系统调用,rax是功能号。
rdi,rsi,rdx对应着前三个参数。即为syscall(rdi,rsi,rdx)

●syscall调mprotect把text段的读写执行属性都打开。(因为下面要动态解密)
●syscall调read读入6个字节。(后面可知这是6段shellcode解密的xor_key)。
●从下面相邻的代码出开始解密,取输入的第一个字节逐字节异或,当解密后遇到\x90时停止解密,跳入解密完成的代码。
最直接的想法是输出256种可能下的反汇编代码,人工判断是否合理,事实证明可行。

shellcode2先把之前执行过的破坏掉(应该是为了防止我们后面利用这部分代码),然后利用输入的第二个字节异或解密并执行shellcode3。
穷举解密的套路相同,不再赘述。
[注意]看雪招聘,专注安全领域的专业人才平台!
最后于 2018-6-21 15:56
被mratlatsn编辑
,原因: