美文网首页
逆向实践之are_u_ok_HCTF2017

逆向实践之are_u_ok_HCTF2017

作者: 苏州暮雨 | 来源:发表于2017-11-15 22:58 被阅读0次

    题目链接:http://pan.baidu.com/s/1jH9ILoU 密码:iann

    题目分析:这是一个多进程运行,使用ptrace函数进行进程间通信的程序。函数识别参数个数,来设置进程走向,利用scanf来接收flag。默认是允许输入%48s,刷新了缓存区,使得不会出现pwn的情况。函数主体流程经历了一次RC4加密,使用ptace进行了程序内存的更换。

    解决方案:

    函数参数由argc与argv表示,例如:执行 ./edit edit.txt 时,argc 的值为 2, argv[0] 为 ./edit,argv[1] 为 edit.txt .在没有带参数进入的时候,fork出一个子进程,子进程使用execve执行本程序,函数参数添加上了parent_pid。

    父进程fork子进程重创程序 父进程进入debugloop

    其中使用ptrace函数进行调试交互,获取进程的寄存器,判断是否可写,进而控制内存,使用一行代码来设置终端,其中的0xcc就是Int 3的对应汇编码:ptrace(PTRACE_POKEDATA,pid,brk_addr,0xcccccccccccccccc);需要提出来的是,在一些文章中谈到ptrace函数的时候,函数每一次进行POKEDATA请求的时候只写入一个字节,这道题的编程语言表示为一个long数据,或者说,这个写入的大小可以控制。

    新进程进行交互

    其中的is_trace函数是自己定制的,通过读取/proc/self/status进程状态来控制进程是否循环loop等待交互。

    在debugloop中,先设置一个中断

    跳转到很长的一段字符串处,在IDA中转变成代码如下:其中有一处为decrpt_data函数,主要功能是将rc6的加密区域使用rc4进行加密,再数据段中的表示如下:

    在恢复进程运行之后,设置新的起点,将跳转到leijun字符串处,也就是下面对应的代码,在jnz处函数跳转到上图的函数处(此时已经解密过了):

    最后利用网上RC6算法进行解析,得到结果。

    参考官方WP

    相关文章

      网友评论

          本文标题:逆向实践之are_u_ok_HCTF2017

          本文链接:https://www.haomeiwen.com/subject/gmwhvxtx.html