背景
從去年開始,工信部對APP個人隱私要求越來越多,之后各大應用市場也開始要求,有違規(guī)情況的會導致APP下架或者無法上架。
技術方案簡介
方案很簡單,動態(tài)代理+反射hook系統服務,攔截方法調用堆棧產出Excel結果. 按需自取
項目地址
支持的hook函數列表

接入方式
1. 在根目錄的build.gralde下添加
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
2. 在項目中的build.gralde下添加
implementation 'com.github.allenymt:PrivacySentry:0.0.7'
3. 初始化方法最好在attachBaseContext中第一個調用?。。?
4.1 簡易版初始化
在代碼中調用,越早越好,建議在application中調用
kotlin:PrivacySentry.Privacy.init(this)
java:PrivacySentry.Privacy.INSTANCE.init(this);
4.2 完成功能的初始化
// 完整版配置
var builder = PrivacySentryBuilder()
// 自定義文件結果的輸出名
.configResultFileName("demo_test")
//自定義檢測時間,也支持主動停止檢測 PrivacySentry.Privacy.stopWatch()
.configWatchTime(5 * 60 * 1000)
// 文件輸出后的回調
.configResultCallBack(object : PrivacyResultCallBack {
override fun onResultCallBack(filePath: String) {
PrivacyLog.i("result file patch is $filePath")
}
})
PrivacySentry.Privacy.init(this, PrivacySentry.Privacy.defaultConfigHookBuilder(builder))
java
// 完整版配置
PrivacySentryBuilder builder = new PrivacySentryBuilder()
// 自定義文件結果的輸出名
.configResultFileName("buyer_privacy")
//自定義檢測時間,也支持主動停止檢測 PrivacySentry.Privacy.stopWatch()
.configWatchTime(30 * 1000)
// 文件輸出后的回調
.configResultCallBack(new PrivacyResultCallBack() {
@Override
public void onResultCallBack(@NonNull String s) {
}
});
PrivacySentry.Privacy.INSTANCE.init(this, PrivacySentry.Privacy.INSTANCE.defaultConfigHookBuilder(builder));
4.3 在隱私協議確認的時候調用,這一步非常重要!,一定要加
kotlin:PrivacySentry.Privacy.updatePrivacyShow()
java:PrivacySentry.Privacy.INSTANCE.updatePrivacyShow();
5 支持多進程,多進程產出的文件名前綴默認增加進程名
傳送門
結果查看
1. 默認攔截隱私方法時間為3分鐘,支持自定義設置時間排查結果可參考目錄下的demo_result.xls
2. 排查結果支持兩個維度查看,第一是結合隱私協議的展示時機和敏感方法的調用時機,第二是統計所有敏感函數的調用次數
3. 排查結果可觀察日志,結果文件會在 /storage/emulated/0/Android/data/yourPackgeName/files/privacy/yourFileName.xls,需要手動執(zhí)行下adb pull
傳送門
在這里放一張截圖,隱私確認和隱私函數調用順序一目了然

結語
在引入SDK時,注意不要把代碼帶到線上
本SDK檢測結果只做參考~
本文轉自 https://juejin.cn/post/7037046252881575944,如有侵權,請聯系刪除。