Chinaunix首页 | 论坛 | 博客
  • 博客访问: 359786
  • 博文数量: 89
  • 博客积分: 3178
  • 博客等级: 中校
  • 技术积分: 965
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-09 15:31
文章分类

全部博文(89)

文章存档

2013年(10)

2012年(33)

2011年(41)

2008年(5)

分类: iOS平台

2013-03-29 16:42:45

阅读了碳基体的关于劫持环境变量运行程序,改变运行结果,做下mark

linux下:
dylib.c
gcc -shared -o dylib.so dylib.c -fPIC

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>

  3. int strcmp(const char*s1, const char*s2){
  4.     printf( "hack by DQ ! s1 = <%s> s2 = <%s>", s1, s2);
  5.     return 0;
  6. }
ld_preload.c
gcc ld_preload.c -o ld_preload

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main(int argc, char**argv)
  3. {
  4.     char passwd[]="123456";

  5.     if (argc < 2)
  6.     {
  7.         printf("usage: %s \n", argv[0]);
  8.     return;
  9.     }

  10.     //setenv("LD_PRELOAD", "./dylib.so", 1);
  11.     //printf( "env is %s", getenv("LD_PRELOAD"));
  12.     if (!strcmp(passwd, argv[1])){
  13.     printf("correct ! \n");
  14.     return;
  15.     }else
  16.     printf("invaild ! \n");
  17. }
export LD_PRELOAD="./dylib.so"
./ld_preload 11111
结果能惊悚,其实想通过setenv在程序中设置环境变量,但是貌似不行,因为LDPRELOAD不是给自己进程用的,而是loader来使用的,这样,他的父进程(shell)并没有这个变量,所以在shell下export有效,程序貌似不行!



阅读(1180) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~