代碼混淆、針對不一樣逆向工具保護技術、增長逆向難度(java代碼native化)、動態加載技術、代碼驗證技術java
工具:proguardandroid
經常使用操做:保留選項、壓縮、優化、混淆。算法
功能:shell
混淆代碼(注意使用混淆文件的時候需加入本身的具體操做以防程序沒法運行)安全
刪除無用Log:可刪除調試和分析代碼邏輯時的log,也可刪除不使用的調試接口和測試環境服務器
問題:網絡
混淆錯誤:用到第三方jar時要指明proguard不要檢查架構
運行錯誤:代碼不能混淆的狀況下框架
調試定位較爲痛苦,開發者須要本身備份一份map記錄對應混淆映像函數
工具:dex文件混淆器dalvik-obfuscato、DexGuard
原理:fill-array-data-payload指令,隱藏原始字節碼
加殼處理:android平臺的加殼公司:APKProtect、Bangcle、LIAPP、Qihoo
脫殼工具:android-unpacker(Github)
so文件:Native C/C++代碼編譯獲得的文件
問題:對ELF文件加殼、對Android系統中so文件的加載、調用機制的處理
方法:添加無心義的代碼段、針對jd-GUI的bug使其運行時崩潰。最經常使用的是添加無心義switch代碼。
APK機器識別原理:包名及簽名
一、java層簽名驗證
定位簽名方式:搜索Landroid/content/pm/PackageInfo:->signatures
二、服務器驗證
可行性不高,依賴網絡,可僞造。
三、NDK技術底層獲取簽名和驗證
將獲取和驗證的方法封裝在so文件中,破解難度增強。可是用IDA PRO工具等也能夠完美獲取驗證簽名的具體位置
四、自定義文件指紋驗證
自定義一天簽名和校驗機制算法
Anti-debug和Anti-Anti-debug之間的博弈
檢測運行環境:
檢測IDA等工具:使用IDA或者gdb等工具的時候,會在android進程中啓動一些本地進程,如android_server、gdbserver等
查看是否存在模擬器:使用設備的imei和build.MODE判斷
防止動態注入:防止對方調用ptrace函數或保證平臺進行注入檢測
主要方向:網絡調試、數據表嗅探、網絡攻擊、口令破解、私有文件排查、逆向代碼分析
工具:
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
一、加固廠商:加固寶360、娜迦nagapt、梆梆bangcle、愛加密ijm、阿里、百度,盛大,騰訊,網秦通付盾
二、加固廠商對應的特徵:
娜迦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
三、脫殼方法:
修改系統源碼自動脫殼
經過hook方式對關鍵函數脫殼
開源工具ZjDroid,DexHunter脫殼
IDA或者GDB動態調試脫殼