天天看點

android so 簽名校驗,一個so中的簽名驗證繞繞過

0x00 前言

本文僅供安全技術交流,請勿用于不正當的用途,造成的一切後果與本文作者無關.

(其實也不是啥高深的技術,就是修改位元組碼繞過,就是想簡單記錄一下 )

0x01 樣本分析

用AndroidKiller反編譯打包後

android so 簽名校驗,一個so中的簽名驗證繞繞過

手機打開後會閃退

檢視一下崩潰日志

android so 簽名校驗,一個so中的簽名驗證繞繞過

發現這裡函數回溯,so層中的一個函數報錯了,跟過去看看

android so 簽名校驗,一個so中的簽名驗證繞繞過

可以看到java層調用的函數以及JNI_Onload函數,先看看JNI_Onload,下面是結構修複後的(怎麼操作就不多羅嗦了)

android so 簽名校驗,一個so中的簽名驗證繞繞過

可以看到這裡有幾個全局引用,看函數名就知道是在擷取一些全局資訊,報名,簽名之類的,應該是為後面的校驗做準備

然後分析那三個native函數

可以看到這裡是校驗失敗後的邏輯分支

android so 簽名校驗,一個so中的簽名驗證繞繞過

那麼就來修改,此處本意是不相等則跳轉,那麼可以修改為相等則跳轉,那麼二次打包後因為簽名以及不想等了,便不會執行報錯操作

隻需要講D1位元組碼修改為D0,那麼指令就是BEQ

然後儲存一下修改

android so 簽名校驗,一個so中的簽名驗證繞繞過

第二處也同上分析

android so 簽名校驗,一個so中的簽名驗證繞繞過

全部修改完後,替換即可正常運作

0x02 總結

這個樣本能這樣修改是因為apk本身并沒有加強,so層也沒有加密,比較容易分析出校驗邏輯