文章预览
先看main,似乎没有直接的溢出。 sub_804898F比较简单是限制长度450,重点看sub_80488C2。 看起来是输入符合条件的字符串游戏,最后进入a1+50执行shellcode,a1在栈上,那么看看保护。 果然是全关,gdb里执行一下。 诡异的事情发生了,居然会直接退出。这种情况可以用starti命令断最早的start,然后慢慢跟到__libc_start_main找原因。 最终可以发现,是start()->init()->init_proc()->sub_8048AC0()->ctor_001()存在反调试检测。 其中sub_8048AC0()->ctor_001()这一环可能不是很明显,在汇编中可以发现。 因此我们只需要patch一下就行了,这里最合适的当然是patch gdb的字符串。 接着开始分析sub_80488C2(),先来看第一部分限制。 strtol(x,x,10)是取十进制数,也就是a1得是个十进制数开头。转化完得到v4,v4%10 = 4,也就是个位数是4,v4-52000 < =999,也就是v4为52004到52994。 接着看第二部分,v5也是a1
………………………………