Unix操作系统LD_PRELOAD简介
http://blog.csdn.net/ieearth/article/details/49952047
Unix操作系统的动态链接库的知识中,这个功能主要就是用来有选择性的载入Unix操作系统不同动态链接库中的相同函数。
在Unix操作系统的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。
这个功能主要就是用来有选择性的载入Unix操作系统不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入恶意程序,从而达到那不可告人的罪恶的目的。
我们知道,Linux的用的都是glibc,有一个叫libc.so.6的文件,这是几乎所有Linux下命令的动态链接中,其中有标准C的各种函数。Unix操作系统中对于GCC而言,默认情况下,所编译的程序中对标准C函数的链接,都是通过动态链接方式来链接libc.so.6这个函数库的。
OK。还是让我用一个例子来看一下用LD_PRELOAD来hack别人的程序。
Unix操作系统LD_PRELOAD示例一
我们写下面一段例程:
/* 文件名:verifypasswd.c */
/* 这是一段判断用户口令的程序,其中使用到了标准C函数strcmp*/
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char **argv)
- {
- char passwd[] = "password";
- if (argc < 2) {
- printf("usage: %s <password>\n", argv[0]);
- return;
- }
- if (!strcmp(passwd, argv[1])) {
- printf("Correct Password!\n");
- return;
- }
- printf("Invalid Password!\n");
- }
在上面这段Unix操作系统程序中,我们使用了strcmp函数来判断两个字符串是否相等。下面,我们使用一个动态函数库来重载strcmp函数:
- /* 文件名:hack.c */
- #include <stdio.h>
- #include <string.h>
- int strcmp(const char *s1, const char *s2)
- {
- printf("hack function invoked. s1=<%s> s2=<%s>\n", s1, s2);
- /* 永远返回0,表示两个字符串相等 */
- return 0;
- }
编译程序:
- $ gcc -o verifypasswd verifypasswd.c
- $ gcc -shared -o hack.so hack.c
测试一下程序:(得到正确结果)
- $ ./verifypasswd asdf
- Invalid Password!
设置LD_PRELOAD变量:(使我们重写过的strcmp函数的hack.so成为优先载入链接库)
$ export LD_PRELOAD="./hack.so"
再次运行程序:
- $ ./verifypasswd asdf
- hack function invoked. s1=<password> s2=<asdf>
- Correct Password!
1)我们的hack.so中的strcmp被调用了。
2)主程序中运行结果被影响了。
如果这是一个Unix操作系统登录程序,那么这也就意味着我们用任意口令都可以进入Unix操作系统了。
Unix操作系统LD_PRELOAD简介的更多相关文章
- 了解unix操作系统发展阶段
UNIX操作系统简介 UNIX操作系统(尤尼斯),是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson.Dennis Ritchi ...
- Unix操作系统中UUCP知识详细讲解
导读 Unix操作系统有很多值得学习的地方,这里我们主要介绍Unix操作系统中的uucp,大家一起来学习下吧!UUCP系统是一组程序,完成文件传输,执行系统之间的命令,维护系统使用情况的统计,保护安全 ...
- MAC地址查询 Linux/Unix操作系统mac地址怎么查
Linux/Unix操作系统熟悉的人都通常是用console命令控制台来进行相应的操作. Linux/Unix操作系统查看网卡mac地址的方法可以通过以下命令获得: 1.ifconfig -a 2. ...
- UNIX网络编程---简介
UNIX网络编程---简介 一. 概述 a) 在编写与计算机通信的程序时,首先要确定的就是和计算机通信的协议,从高层次来确定通信由哪个程序发起以及响应在合适产生.大多数 ...
- linux是类unix操作系统
linux是类unix操作系统,linux与unix使用的基础命令是一样的,没有区别.Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程 ...
- Unix操作系统监控详解(一)
一.描述 监控在检查系统问题运行状况以及优化系统性能工作上是一个不可缺少的部分.通过操作系统监控工具监视操作系统资源的使用情况,间接地反映了各服务器程序的运行情况.根据运行结果分析可以帮助我们快速定位 ...
- 类UNIX操作系统概念
摘要:对unix os上的一些基本概念做一个统一的梳理,以下内容转自互联网和相关书籍 一 进程组.会话.控制终端 进程组---------------------------------------- ...
- 机器人操作系统ROS | 简介篇
同样,从个人微信公众号Nao(ID:qRobotics)搬运. 前言 先放一个ROS Industrial一周年剪辑视频. ROS已经发布八周年了,在国外科研机构中非常受欢迎.目前,以美国西南研究院为 ...
- Unix domain socket 简介
Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信.socket 原本是为网络通讯设 ...
随机推荐
- Spring框架bean的注解管理方法之一 使用注解生成对象
首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/1qXLH ...
- c++ 结构体,设置物品体积并输出物品属性
#include <iostream> using namespace std; struct box { char maker[40]; float height; float widt ...
- C++系统学习之二:字符串
上一篇文章主要学习的是C++的基本类型,它们是C++语言直接定义的,它们体现了计算机硬件本身具备的能力.而本篇文章将主要学习内置类型之外的标准库所定义的类型,分别是string和vector,此外还将 ...
- 【贪心】bzoj1572: [Usaco2009 Open]工作安排Job
先是没怎么理解这个贪心……然后贪心又被细节弄挂…… Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. ...
- python中enumerate()函数的用法
描述: enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中.其英文意为:枚举,列举. 函数说明: 语法 ...
- PyCharm(一)——PyCharm设置SSH远程调试
一.环境 系统环境:windows10 64位 软件:PyCharm2017.3 本地Python环境:Python2.7 二.配置 2.1配置远程调试 第一步:运行PyCharm,然后点击设置如下图 ...
- python面向对象(C3算法)(六)
1. 了解python2和python3类的区别 python2在2.3之前使用的是经典类, 2.3之后, 使用的是新式类 2. 经典类的MRO 树形结构的深度优先遍历 -> 树形结构遍历 cl ...
- 生物信息学练习2- Biom-format
The Biological Observation Matrix (BIOM) format http://biom-format.org/ biom-format有两种方式安装: 1. pytho ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph
"Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...
- Thymeleaf模板引擎+Spring整合使用方式的介绍
尊重原创,原文地址为:https://www.cnblogs.com/jiangchao226/p/5937458.html 前言 这个教程介绍了Thymeleaf与Spring框架的集成,特别是Sp ...