linux动态代码注入
参考网上文章:http://www.freebuf.com/articles/system/6388.html
按照文章,实现了代码的动态注入,即对一个正在运行的进程,在不重启的情况下执行一段不在原程序内的代码。
我的实验环境:
Ubuntu 14.10系统
1.Makefile编译:
ALL:
gcc -g -Wall dynlib.c -fPIC -shared -o libdynlib.so
gcc app.c -g -o app -ldynlib -L./
gcc -Wall injection.c -c -o injection.o
CLEAN:
rm -f libdynlib.so
2.我的实验记录:
gdb) call open("injection.o",2)
$2 = 3
(gdb) call mmap(0, 1056, 1|2|4, 1, 3, 0)
$3 = -1216774144
(gdb) p &print
$4 = (void (*)()) 0xb7782575 <print>
(gdb) p /x *0x0804a010
$5 = 0xb7782575
(gdb) p /x *0x08
Cannot access memory at address 0x8
(gdb) p /x *0x0804a010
$6 = 0xb7782575
(gdb) p /x *0x0804a010
$7 = 0xb7782575
(gdb) set *0x0804a010 = 0xb7798000 + 0x000034
(gdb) p &system
$8 = (<text variable, no debug info> *) 0xb7612770 <__libc_system>
(gdb) p *(0xb7798000 + 0x000034 + 0x00000014)
$9 = -4
(gdb) set *(0xb7798000 + 0x000034 + 0x00000014) = 0xb7612770 - (0xb7798000 + 0x000034 + 0x00000014) - 4
(gdb) p &print
$10 = (void (*)()) 0xb7782575 <print>
(gdb) p *(0xb7798000 + 0x000034 + 00000007)
$11 = -4
(gdb) set *(0xb7798000 + 0x000034 + 00000007) = 0xb7782575 - (0xb7798000 + 0x000034 + 00000007) - 4
(gdb) p *(0xb7798000 + 0x000034 + 0x0000000f)
$12 = 0
(gdb) set *(0xb7798000 + 0x000034 + 0x0000000f) = 0xb7798000 + 0x000051
(gdb)
linux动态代码注入的更多相关文章
- dyci——IOS动态代码注入
有时候用xib,更改了布局需要重新运行才可以看到效果,对于比较复杂的应用尤其浪费时间,下面介绍一个工具dyci-不需要重Run应用,也能看到效果 yci的网址:https://github.com/D ...
- Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind
实际上,Linux的调试方法非常多,针对不同的问题,不同的场景,不同的应用,都有不同的方法.很难去概括.本篇文章主要涉及本专栏还没有涵盖,但是的确有很重要的方法.本文主要包括动态库注入调试:使用ltr ...
- 手把手教你调试Linux C++ 代码(一步到位包含静态库和动态库调试)
手把手教你调试Linux C++ 代码 软件调试本身就是一项相对复杂的活动,他不仅要求调试者有着清晰的思路,而且对调试者本身的技能也有很高的要求.Windows下Visual Studio为我们做了很 ...
- Dynamic Code Evaluation:Code Injection 动态代码评估:代码注入
- 静态库和动态库的区别和win平台和linux平台代码实现
静态库和动态库的区别 什么是库 库是写好的,现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说,库是一种可 ...
- linux动态库编译和使用详细剖析
引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, 预编译,编译,生成机械码最后链接输 ...
- linux动态库编译和使用
linux动态库编译和使用详细剖析 引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, ...
- 【技巧总结】Penetration Test Engineer[3]-Web-Security(SQL注入、XXS、代码注入、命令执行、变量覆盖、XSS)
3.Web安全基础 3.1.HTTP协议 1)TCP/IP协议-HTTP 应用层:HTTP.FTP.TELNET.DNS.POP3 传输层:TCP.UDP 网络层:IP.ICMP.ARP 2)常用方法 ...
- 第三次阅读赵炯博士的《linux内核代码完全注释》:序
这是我第三次阅读linux内核代码完全注释了,当然前两次也没有读完,第一次读到第五章,第二次第七章. 所以说,赵炯博士对我最大的帮助时介绍了intel386的结构,以及内核编程的方法. 至于真正的内核 ...
随机推荐
- O365(世纪互联)SharePoint 之调查列表简单介绍
前言 SharePoint中为了提供了很多开箱即用的应用程序,比如调查列表就是其中之一,同样,在O365版本里(国际版和世纪互联版本均可),也有这样的调查列表可以供我们使用,而使用起来非常方便和快速, ...
- dagger2记录篇
作为一个码农,什么都不用多讲,贴代码 build project build module Application public class App extends Application { pri ...
- 用Android Studio开发最常用到的快捷键
Android Studio常用快捷键 Android Studio日常开发常用快捷键. 快捷键版本: Mac OS X 10.5+ 搜索查看类 用途 Mac快捷键 搜索所有文件 double Shi ...
- javascript函数的几种写法集合
1.常规写法 function fnName(){ console.log("常规写法"); } 2.匿名函数,函数保存到变量里 var myfn = function(){ co ...
- 关于web端功能测试的测试方向
一.功能测试 1.1链接测试 链接是web应用系统的一个很重要的特征,主要是用于页面之间切换跳转,指导用户去一些不知道地址的页面的主要手段,链接测试一般关注三点: 1)链接是否按照既定指示那样,确实链 ...
- 批量创建10个用户stu01-stu10
1.批量创建10个用户stu01-stu10,并且设置随机8位密码,要求不能用shell循环(例如:for,while等),只能用命令及管道实现. ##方法1: [root@server tmp]# ...
- 5-udev多路径
udev多路径 查看scsi的唯一标识符 用这个计算机可以识别 重启服务 想要看到下面的,可能重启服务也不行,那就需要重启计算机了 虚拟磁盘 安装这个包multipath 重启服务生效 重启计算机生效 ...
- 使用Servlet和JSP实现一个简单的Web聊天室系统
1 问题描述 利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...
- Python任务调度模块 – APScheduler
APScheduler是一个Python定时任务框架,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.并以daemon方式运行应用.目前最新版本为3.0 ...
- 【转】 XenServer架构之HA概述
一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池 ...