我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:一品彩票 > 反汇编程序 >

linux动态注入(含视频演示)

归档日期:05-20       文本归类:反汇编程序      文章编辑:爱尚语录

  如果纯粹用文字来描述什么是动态注入,可能还是不太容易理解,所以本篇文章从如下一段代码开始:

  这段代码本身没有什么意思,执行gccwho.c -o who -g -Wall完成编译并启动who程序,每隔2s会向终端打印一句who are you ?,但有意思的是,可能会出现一种诡异的现象,比如屏幕上突然冒出一句its me ~。

  如果who进程执行到某条指令(比如e8c5feffff)时暂停了,并且在恢复执行之前,0x400586处的指令块被替换成打印its me ~的代码,那么who进程下次执行,自然就会打印its me ~。

  用蓝色、绿色标记出来的16进制内容,即为打印its me ~的机器码,但有2点需要说明:

  绿色部分其实是its me ~\n\0这串字符的ascii码值,也被objdump解释成汇编指令了,这是反汇编工具很难避免的一个问题,用gdb/disassemble反汇编的结果也是一样的,因为它们选择的都是线性扫描算法,递归下降算法效果会好一些,但仍然不能保证得到精确的结果;

  C程序实现打印its me ~,写一条printf(its me ~)语句不就可以了么,为什么要写成这种奇奇怪怪的样子?因为如果用C语法来实现的话,its me ~这个字符串会被编译器安排到isme64程序的.data段,就没办法随着指令块一起注入到目标进程中,而且这段代码中取its me ~地址的技巧,对于汇编初学者是很有意思的,代码不长,建议在大脑里执行一遍,并找到其中的奥妙。

  本篇文章仅仅用于学习目的,注入的场景和方法都比较简单,思路在文章第1节已经介绍过了,就是暂停被注入进程 - 替换即将执行的指令块 - 通知被注入进程继续执行,由于有些场合还需要保证注入操作的隐蔽性,所以以下程序还在注入指令块完整执行后,将被注入进程恢复到了注入前的状态:

  (理解这段代码,至少需要学习ptrace系统调用的作用,如果有内核基础,也可以更深入的学习一下ptrace的内部原理,另外,CODE宏对应的内容,即为利用文章第2节描述的方法,提取的机器码。)

  wait(NULL); // 收到回复信号,保证后续过程在attach完成的情况下执行

  查看who进程号N,并执行sudo inject N,进行动态注入操作;

  回到inject程序执行窗口,按任意键结束inject进程,并恢复who进程到注入前的状态,继续不停的打印who are you ?。

本文链接:http://explodingspec.com/fanhuibianchengxu/284.html