由于工作一直会遇到frida来执行各种Hook,现在梳理整个frida的相关使用场景。由于安装的资料以及文档网上已经特别多了,本系列教程忽略相关安装步骤。
通常我们想要知道一个app内部存储的相关数据,这个时候我们可以直接hook对应的系统api的赋值函数来直接获取。
明确Hook目标
- hook SharedPreferences:putBoolean
- hook SharedPreferences:putString
- hook SharedPreferences:putInt
- hook SharedPreferences:putFloat
- hook SharedPreferences:putLong
编写JS代码
setImmediate(function() {
Java.perform(function () {
Java.use('android.app.SharedPreferencesImpl$EditorImpl').putBoolean.overload('java.lang.String', 'boolean').implementation = function(k, v) {
console.log('[SharedPreferencesImpl putBoolean]', k, '=', v);
return this.putBoolean(k, v);
}
Java.use('android.app.SharedPreferencesImpl$EditorImpl').putString.overload('java.lang.String', 'java.lang.String').implementation = function(k, v) {
console.log('[SharedPreferencesImpl putString]', k, '=', v);
return this.putString(k, v);
}
Java.use('android.app.SharedPreferencesImpl$EditorImpl').putInt.overload('java.lang.String', 'int').implementation = function(k, v) {
console.log('[SharedPreferencesImpl putInt]', k, '=', v);
return this.putInt(k, v);
}
Java.use('android.app.SharedPreferencesImpl$EditorImpl').putFloat.overload('java.lang.String', 'float').implementation = function(k, v) {
console.log('[SharedPreferencesImpl putFloat]', k, '=', v);
return this.putFloat(k, v);
}
Java.use('android.app.SharedPreferencesImpl$EditorImpl').putLong.overload('java.lang.String', 'long').implementation = function(k, v) {
console.log('[SharedPreferencesImpl putLong]', k, '=', v);
return this.putLong(k, v);
}
});
});
frida调用
启动frida进行hook。
现在可以直观的看到frida获取成功腾讯视频的SharedPreferences。