五大反逆向技術:
代碼混淆、針對不同逆向工具保護技術、增加逆向難度(java代碼native化)、動態加載技術、代碼驗證技術
代碼混淆:
工具:proguard
常用操作:保留選項、壓縮、優化、混淆。
功能:
混淆代碼(注意使用混淆文件的時候需加入自己的具體操作以防程序無法運行)
刪除無用Log:可刪除調試和分析代碼邏輯時的log,也可刪除不使用的調試接口和測試環境
問題:
混淆錯誤:用到第三方jar時要指明proguard不要檢查
運行錯誤:代碼不能混淆的情況下
調試定位較為痛苦,開發者需要自己備份一份map記錄對應混淆映像
DEX保護:
工具:dex文件混淆器dalvik-obfuscato、DexGuard
原理:fill-array-data-payload指令,隱藏原始字節碼
加殼處理:android平台的加殼公司:APKProtect、Bangcle、LIAPP、Qihoo
脫殼工具:android-unpacker(Github)
so文件保護:
so文件:Native C/C++代碼編譯得到的文件
問題:對ELF文件加殼、對Android系統中so文件的加載、調用機制的處理
防止jd-GUI查看代碼
方法:添加無意義的代碼段、針對jd-GUI的bug使其運行時崩潰。最常用的是添加無意義switch代碼。
防止二次打包
APK機器識別原理:包名及簽名
1、java層簽名驗證
定位簽名方式:搜索Landroid/content/pm/PackageInfo:->signatures
2、服務器驗證
可行性不高,依賴網絡,可偽造。
3、NDK技術底層獲取簽名和驗證
將獲取和驗證的方法封裝在so文件中,破解難度加強。但是用IDA PRO工具等也可以完美獲取驗證簽名的具體位置
4、自定義文件指紋驗證
自定義一天簽名和校驗機制算法
防止動態分析
Anti-debug和Anti-Anti-debug之間的博弈
檢測運行環境:
檢測IDA等工具:使用IDA或者gdb等工具的時候,會在android進程中啟動一些本地進程,如android_server、gdbserver等
查看是否存在模擬器:使用設備的imei和build.MODE判斷
防止動態注入:防止對方調用ptrace函數或保證平台進行注入檢測
Android滲透測試:
主要方向:網絡調試、數據表嗅探、網絡攻擊、口令破解、私有文件排查、逆向代碼分析
工具:
Drozer(又稱Mercury),針對android系統地安全審計與攻擊框架
瑞士軍刀busybox,安裝步驟:
(1)root設備
(2)busybox二進制文件,選擇對應架構的最新版本
(3)將busybox傳入到android設備:adb push busybox /mnt/sdcard
(4)重新掛載/system目錄讀寫權限
adb shell
su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
(5)復制busybox文件到/system/xbin並將其修改為“可執行”的權限
cp /mnt/sdcard/busybox /system/xbin
chomd 755 busybox
(6)安裝busybox
busybox --install
集成化工具:dSploit、zANTI
加固問題
1、加固廠商:加固寶360、娜迦nagapt、梆梆bangcle、愛加密ijm、阿里、百度,盛大,騰訊,網秦通付盾
2、加固廠商對應的特征:
娜迦libchaosvmp.so,libddog.so,libfdog.co
愛加密libexec.so,libexemain.so
梆梆libsecexe.so,libsecmain.so,libDexHelper.so
360libprotectClass.so,libjiagu.so
通付盾libegis.so
網秦libnqshield.so
百度libbaiduprotect.so
3、脫殼方法:
修改系統源碼自動脫殼
通過hook方式對關鍵函數脫殼
開源工具ZjDroid,DexHunter脫殼
IDA或者GDB動態調試脫殼