android加密參數(shù)定位實(shí)現(xiàn)方法
在逆向一個(gè)Android程序時(shí),如果只是盲目的分析需要閱讀N多代碼才能找到程序的關(guān)鍵點(diǎn)或Hook點(diǎn),本文將分享一下如何快速的找到APP程序的加密參數(shù)位置,其實(shí)不論是找關(guān)鍵位置、找hook點(diǎn),找加密參數(shù)、代碼邏輯追蹤,都是類似的處理方法。
巧用搜索-靜態(tài)分析
一般靜態(tài)分析找加密參數(shù)的流程都是先查殼(脫殼)、反編譯、查找程序的入口方法、分析程序的執(zhí)行流程。
假設(shè)已經(jīng)使用Android killer反編譯了未加殼的app,直接使用工程搜索檢索需要查找的參數(shù)名,根據(jù)AK的反饋信息進(jìn)行對(duì)比,找到其對(duì)應(yīng)的參數(shù)位置。也可以根據(jù)應(yīng)用執(zhí)行流程逐行向下分析代碼,比較累。
objection定位
objection是基于Frida的動(dòng)態(tài)分析工具包,可以免root動(dòng)態(tài)調(diào)式apk,同時(shí)支持iOS和Android。安裝方法可以到github查看。Github:https://github.com/sensepost/objection
在通過搜索之后如果有幾個(gè)不確定的位置,則正好可以使用Objection,Objection就是專業(yè)的定位小能手,從定位流程上來說也只有三步。
1、注入目標(biāo)進(jìn)程
objection -g com.xxx.xxx explore
2、跟蹤類
android hooking watch class 'com.xxx.xxx.lx.ApiSign'
3、查看入?yún)⒑头祷刂?/p>
android hooking watch class_method 'com.xxx.xxx.lx.ApiSign.a' --dump-args --dump-return
然后通過參數(shù)和返回值與請(qǐng)求接口中的協(xié)議進(jìn)行對(duì)比就可以卻確定究竟是在哪一個(gè)位置了。
frida-hook
frida、xposed這類hook工具也是動(dòng)態(tài)分析的一種。假設(shè)某App的接口有 signature 簽名,并且該參數(shù)值看上去非常像是Base64,并且長(zhǎng)度為定長(zhǎng)且少于20位。這個(gè)時(shí)候如果通過工具全局搜索沒有找到,則可以通過frida憑感覺Hook下App中所有操作Base64的位置。
Frida代碼如下:
var Base64Class = Java.use("android.util.Base64"); Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){ var resault = this.encodeToString(a,b); console.log(">>> Base64 " + resault); if(resault.length <= 20){ var stackAdd = threadinstance.currentThread().getStackTrace(); console.log("resault stackAdd is:" + Where(stack)); } return rc; }
通過這種方式大概率能打印出簽名計(jì)算的位置,這也屬于巧計(jì)的一種,大家一定不要忘記這種定位方式。
log注入
代碼注入也屬于動(dòng)態(tài)分析,流程是先修改apk的smali代碼,既是在某關(guān)鍵函數(shù)前加入 android/util/Log 輸出,配合LogCat 查看程序執(zhí)行時(shí)的log數(shù)據(jù)。
關(guān)于android/util/Log的 Log extends Object 一共有5個(gè)方法:Log.v() Log.d() Log.i() Log.w() and Log.e()
一般使用Log.v() 日志輸出函數(shù)就可以了,不做案例了,詳細(xì)內(nèi)容會(huì)往書中寫。
動(dòng)態(tài)調(diào)試
其實(shí)定位的方法只有兩種靜態(tài)分析和動(dòng)態(tài)分析,動(dòng)態(tài)調(diào)試也屬于動(dòng)態(tài)分析,和上面的方法異曲同工。
動(dòng)態(tài)調(diào)試這里可以理解為堆棧調(diào)試,有時(shí)候需要利用到不同的工具和方法,
比如 JEB調(diào)試、smali調(diào)試、IDA調(diào)試等等。
不再細(xì)說了,本文簡(jiǎn)單總結(jié)一下。
到此這篇關(guān)于android加密參數(shù)定位方法的文章就介紹到這了,更多相關(guān)android加密參數(shù)定位方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android制作一個(gè)錨點(diǎn)定位的ScrollView
- Android 簡(jiǎn)單服務(wù)定位器模式實(shí)現(xiàn)
- Android Studio使用Profiler來完成內(nèi)存泄漏的定位
- 解決Android原生定位的坑
- Android實(shí)現(xiàn)點(diǎn)擊某個(gè)按鈕指定位置彈出布局
- Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)
- Android 百度地圖定位實(shí)現(xiàn)仿釘釘簽到打卡功能的完整代碼
- android studio 使用Mocklocation虛擬定位
- 解決Android 10/Android Q手機(jī)在后臺(tái)無法正常定位問題
- Android實(shí)現(xiàn)高德地圖顯示及定位
- Android如何實(shí)現(xiàn)模擬定位
相關(guān)文章
Android實(shí)現(xiàn)簡(jiǎn)單手電筒功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單手電筒,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Input系統(tǒng)分發(fā)策略及其應(yīng)用示例詳解
這篇文章主要為大家介紹了Input系統(tǒng)分發(fā)策略及其應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Android RecyclerView 滾動(dòng)到中間位置的方法示例
這篇文章主要介紹了Android RecyclerView 滾動(dòng)到中間位置的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03Android程序開發(fā)之ListView 與PopupWindow實(shí)現(xiàn)從左向右滑動(dòng)刪除功能
這篇文章主要介紹了Android程序開發(fā)之ListView 與PopupWindow實(shí)現(xiàn)滑動(dòng)刪除功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07Android中判斷當(dāng)前API的版本號(hào)方法
下面小編就為大家分享一篇Android中判斷當(dāng)前API的版本號(hào)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03Android實(shí)現(xiàn)沉浸式通知欄通知欄背景顏色跟隨app導(dǎo)航欄背景顏色而改變
這篇文章主要介紹了Android實(shí)現(xiàn)沉浸式通知欄通知欄背景顏色跟隨app導(dǎo)航欄背景顏色而改變的相關(guān)資料,需要的朋友可以參考下2016-02-02詳解Android自定義控件屬性TypedArray以及attrs
這篇文章主要為大家介紹了android自定義控件屬性TypedArray以及attrs,感興趣的小伙伴們可以參考一下2016-01-01Android開發(fā)使用Activity嵌套多個(gè)Fragment實(shí)現(xiàn)橫豎屏切換功能的方法
這篇文章主要介紹了Android開發(fā)使用Activity嵌套多個(gè)Fragment實(shí)現(xiàn)橫豎屏切換功能的方法,結(jié)合實(shí)例形式分析了Android使用Activity嵌套多個(gè)Fragment進(jìn)行橫豎屏切換的原理與具體操作技巧,需要的朋友可以參考下2017-11-11