成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用鉤子技術改進Android程序安全性

譯文
移動開發
本文屬于《使用鉤子技術改進Android程序安全性》系列的下篇,我們將繼續探討使用鉤子技術改進Android程序安全性的問題。

[[167296]]

本文屬于《使用鉤子技術改進Android程序安全性》系列的下篇,我們將繼續探討使用鉤子技術改進Android程序安全性的問題。

一、 libtest_PIC.so庫中的PIC代碼研究

如果對象是以PIC模式編譯的,那么重定位方式是不同的。通過觀察圖1所示的libtest_PIC.so庫文件的節信息,你會注意到函數printf()重定位信息位于兩個重定位節處:一個是rel.dyn節,另一個是rel.plt節。這里使用了兩個新的重定位類型R_386_GLOB_DAT和R_386_JMP_SLOT;因此,應該使用這樣的偏移地址來填充替代函數的32位絕對地址。

圖1︰libtest_PIC.so庫文件的重定位節

圖2顯示了非PIC模式編譯的函數libtest2()的匯編代碼。用紅色標出的函數printf()的入口地址在圖1中的重定位節rel.dyn和rel.plt中指定。

圖2︰libtest2()的反匯編代碼——使用-PIC參數編譯而成

圖3:語句'printf("libtest2: 1st call to the original printf()\n");'的工作流程

圖4:語句'global_printf2("libtest2: global_printf2()\n");'的工作流程

圖5:語句local_printf ("libtest2: local_printf()\n");'的工作流程

從圖1-5中我們看到,當使用PIC參數生成動態庫時,libtest2()中的代碼將跳轉到放在偏移地址0x1fe0、0x2010和0x2000處的地址,而這正是函數printf()的入口處。

二、 鉤子方案

如果鉤子模塊要攔截對printf()的調用并重定向到另一個函數,那么,在鏈接器把動態庫加載到內存后,它應該把重定向的函數地址寫入定義在重定位節中‘printf’符號的偏移量地址處。

為了把對printf()函數的調用替換成對重定向的hooked_printf()函數的調用(如圖6中的軟件流程圖中所示),應該在對dlopen()和libtest()的調用之間實現一個鉤子函數。這個鉤子函數將首先取得符號printf的偏移量地址,此地址是從命名為rel.dyn的重定位節開始的。在本例中,這個地址值是0x1fe0。然后,鉤子函數把hooked_printf()函數的絕對地址寫入偏移量地址。之后,當libtest2()中的代碼調用printf()時,它將進入到對hooked_printf()的調用。

圖6:鉤子函數攔截對printf()的調用并重定向到對hooked_printf()的調用。

綜合以前列出的所有可能的情形,圖7展示鉤子函數的完整的流程圖。main()函數中的變化部分使用圖8來描述。

圖7:ELF鉤子模塊的流程圖示意

圖8:建立鉤子后的main()函數中的代碼

程序的輸出顯示在圖9中,你可以看到當第一次對libtest1()/libtest2()的調用執行時,函數內部調用了printf()。當再一次調用這兩個函數時,在鉤子函數執行之后,對printf()函數的調用被重定向到hooked_printf()函數。Hooked_printf()函數將字符串“is HOOKED”附加到正常打印字符串的末尾。圖10顯示了創建掛鉤后的程序執行流程,與圖8所示的原流程進行比較,你會注意到hooked_printf()函數被注入到了libtest1()和libtest2()中。

圖9:測試程序的輸出情況,printf()函數被鉤住。

圖10:在創建鉤子后的測試項目運行流程示意圖。

三、 案例分析——Android應用中基于鉤子的保護方案

基于在前面幾節中鉤子技術的研究,我們開發出一個插件來幫助Android應用程序開發人員改善其應用程序的安全性。開發人員需要將僅有的一個Android 的本機庫添加到他們的項目并在程序啟動時添加一行Java代碼來加載此本機庫。然后,此庫會把一些保護代碼注入到應用程序中其他第三方庫中。該保護代碼將會有助于加密本地文件的輸入/輸出流,以及繞過函數__android_log_print()來避免通過對Logcat的調用來打印調試信息,進而實現避免一些用戶隱私的泄漏。

為了驗證該保護插件的有效性,我們寫了一個Android應用程序來模擬一個包含第三方庫的應用程序的情形。在此測試程序中,此第三方庫做兩件事情:

1.當外部Java指令調用庫中的函數時,它將通過調用__android_log_print()來打印一些信息。

2.在這個庫中,代碼會創建一個文件 (/ sdcard/data.dat)來把數據保存在本地存儲中而且沒有加密,然后再把它讀回來并將其打印在屏幕上。此操作是模擬應用程序嘗試將一些敏感的信息保存在本地文件系統中的。

圖11-14中比較了放置鉤子前后測試程序的屏幕快照,Logcat輸出,以及在設備的本地文件系統中保存文件的內容。

 

圖11:這里使用的Android*平臺是Teclast X89HD,Android 4.2.2

 

圖12:應用程序輸出——在建立鉤子后沒有變化

 

圖13:Logcat輸出——在建立鉤子后輸出為空

 

圖14:在建立鉤子后在/sdcard中的本地文件'data.dat'已加密

如圖中所展示的,程序運行流程在設置鉤子后與設置鉤子前完全一樣。然而,Logcat在設置鉤子后從本機庫中獲取不到輸出內容。進一步來看,本地文件的內容不再以純文本格式存儲。

我們開發的插件可以幫助測試應用程序提高安全性,以防止通過Logcat這樣的方式收集信息的惡意攻擊,以及防止對本地文件系統的離線攻擊。

四、 結論

歸納來看,鉤子技術可以應用在許多開發領域,從而提供對Android應用程序的無縫安全保護。進一步來看,基于鉤子的保護方案不僅可以應用在安卓系統,還可以擴大到其他操作系統,如 Windows *、嵌入式 Linux或其他為物聯網設備設計的操作系統。它可以大大減少開發周期和降低維護成本。實戰應用中,開發人員可以開發他們自己的基于鉤子的安全方案或者使用市場上可用的專業的第三方安全解決方案。

五、 參考資料

1.Redirecting functions in shared ELF libraries,Apriorit Inc, Anthony Shoumikhin, 25 Jul 2013,http://www.codeproject.com/Articles/70302/Redirecting-functions-in-shared-ELF-libraries。

2. x86 API Hooking Demystified,Jurriaan Bremer,http://jbremer.org/x86-api-hooking-demystified/。

3.Android developer guide,http://developer.android.com/index.html。

4.Android Open Source Project,https://source.android.com/

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:李英杰 來源: 51CTO
相關推薦

2016-06-03 10:21:05

2013-06-05 10:37:06

OracleJava安全

2015-06-15 10:48:25

2020-10-08 10:15:15

LynisLinux系統安全

2009-02-12 09:55:28

2021-06-07 14:54:42

Chrome強化擴展下載安全

2009-11-30 09:41:38

2017-07-27 19:35:34

2024-06-11 08:00:00

.NET開發網絡攻擊

2023-05-18 14:43:35

2009-12-10 10:20:04

2022-06-22 09:00:00

安全編程語言工具

2011-02-13 14:36:35

2013-02-18 16:12:55

2011-11-03 09:41:35

Android簽名安全性

2020-09-10 16:30:05

AI人工智能

2021-12-13 06:36:14

SpoolSploit安全漏洞滲透測試

2009-05-26 16:37:23

2010-09-16 11:14:50

2023-07-30 15:00:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91在线视频观看免费 | 久久久久网站 | 国产成人精品免高潮在线观看 | 在线观看 亚洲 | 精品在线一区 | 久久久久无码国产精品一区 | 成人在线影视 | 日韩免费av | 亚洲欧美日韩中文在线 | 福利一区二区 | 欧美a区 | 日本在线看片 | 免费看国产片在线观看 | 国产亚洲精品久久久久久牛牛 | 美日韩免费 | 免费在线观看h片 | 欧美二区在线 | 欧美在线a | 国精产品一品二品国精在线观看 | 国产午夜久久久 | 另类视频在线 | 欧美电影免费观看高清 | 亚洲日韩欧美一区二区在线 | 亚洲一区二区三区在线免费 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | av中文在线观看 | 欧美精品黄 | 97精品久久 | 自拍偷拍精品 | 999免费网站 | 精品视频免费 | 综合国产第二页 | 国产免费麻豆视频 | 天堂网avav| 一区二区小视频 | 中文字幕第一页在线 | 欧美中文在线 | 国产乱码精品1区2区3区 | 欧美日韩国产精品一区二区 | 久久久性色精品国产免费观看 | 91免费在线视频 |