Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> .Android hook——LD_PRELOAD

.Android hook——LD_PRELOAD

編輯:關於Android編程

《移動互聯網之智能終端安全揭秘》中提到了android hook的一種方法,可以通過設置LD_PRELOAD環境變量來改變函數的執行流程從而達到hook的目的。書中的示例代碼與陳皓博客:/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環境變量,在主程序調用其他動態鏈接庫前,優先調用自己編寫的動態鏈接庫,覆蓋正常的函數庫,從而達到目的。     
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved