注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

碳基体

http://weibo.com/tanjiti

 
 
 
 
 

日志

 
 

Android hook——LD_PRELOAD  

2012-12-15 15:04:21|  分类: Android app secu |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
《移动互联网之智能终端安全揭秘》中提到了android hook的一种方法,可以通过设置LD_PRELOAD环境变量来改变函数的执行流程从而达到hook的目的。书中的示例代码与陈皓博客http://blog.csdn.net/haoel/article/details/1602108中一样,博客对LD_PRELOAD的危害阐述的非常清楚。

示例代码
1. 以下是一段判断用户口令的程序,用到了标准c函数strcmp

root@bt:~/programe# cat verify.c
#include <stdio.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 ! \n");
return;
}

printf("Invalid! \n");
}


测试程序结果

root@bt:~/programe# ./verify dani
Invalid!
root@bt:~/programe# ./verify password
Correct !

2.以下程序重载了strcmp函数,永远返回0,即永远认为两个字符串是相等的

root@bt:~/programe# cat hack.c
#include <stdio.h>
#include <string.h>
int strcmp(const char*s1, const char*s2)
{
printf("hack invoked. s1=<%s> s2=<%s> \n", s1, s2);

return 0;
}


编译成so,然后设置LD_PRELOAD环境变量,观察运行后的结果

root@bt:~/programe# gcc -shared -o hack.so hack.c

root@bt:~/programe# export LD_PRELOAD="./hack.so"
root@bt:~/programe# ./verify dani
hack invoked. s1=<password> s2=<dani>
Correct !

从运行结果看,程序优先调用hack.so的strcmp,看来利用这种方式进行hook的原理就是通过设置LD_PRELOAD环境变量,在主程序调用其他动态链接库前,优先调用自己编写的动态链接库,覆盖正常的函数库,从而达到目的。

  评论这张
 
阅读(2034)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017