当前位置:操作系统 > 安卓/Android >>

.Android hook——LD_PRELOAD

《移动互联网之智能终端安全揭秘》中提到了android hook的一种方法,可以通过设置LD_PRELOAD环境变量来改变函数的执行流程从而达到hook的目的。书中的示例代码与陈皓博客:http://www.zzzyk.com/kf/201212/178312.html中一样,博客对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环境变量,在主程序调用其他动态链接库前,优先调用自己编写的动态链接库,覆盖正常的函数库,从而达到目的。
 
  
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,