为维护网络绿色健康发展,代码仅供学习交流,请勿用于非法用途,加密部分已省略,如有疑问,请点击这里与我交流
虽然说该app对root设备不做限制,但是出于技术研究,就做了一下基本的分析,以下是完整的分析流程。

首先,打开app,可以看到有一个风险提示,上脚本检测一下,查看一下检测点。

可以看到,检测点挺多的,这里没什么特别的,挨个hook掉在看情况,到包里面找到对应代码查看情况。



这里就不一一举例所有检测点了,基本没有用到很特殊的root检测手段且都在java层检测的,所以还是比较好处理,挨个hook掉。



Java.perform(function () {
var c1 = Java.use("cn.ijia*****lm.m.f");
c1.b.implementation = function(){
console.log("call c1 !!!!!!!");
console.log("call c1 !!!!!!!");
console.log("call c1 !!!!!!!");
return false;
}
var c2 = Java.use("com.andr*****.a.c");
c2.h.implementation = function(){
console.log("call c2 !!!!!!!");
console.log("call c2 !!!!!!!");
console.log("call c2 !!!!!!!");
return false;
}
var c3 = Java.use("com.ijm*****p.d.b");
c3.a.overload('android.content.Context').implementation = function(a){
console.log("call c3 !!!!!!!");
console.log("call c3 !!!!!!!");
console.log("call c3 !!!!!!!");
return false;
}
var c4 = Java.use("com.tencen*****.info.b");
c4.q.implementation = function(){
console.log("call c4 !!!!!!!");
console.log("call c4 !!!!!!!");
console.log("call c4 !!!!!!!");
return false;
}
function showStacks() {
console.log(
Java.use("android.util.Log")
.getStackTraceString(
Java.use("java.lang.Throwable").$new()
)
);
}
Java.use("java****le").$init.overload("java.lang.String").implementation = function (str) {
if (str.toLowerCase().endsWith("/su") || str.toLowerCase() == "su") {
console.log("发现检测su文件");
showStacks();
}
return this.$init(str);
}
Java.use("java****time").exec.overload("java.lang.String").implementation = function (str) {
if (str.endsWith("/su") || str == "su") {
console.log("发现尝试执行su命令的行为");
showStacks();
}
return this.exec(str);
}
Java.use("java****ntime").exec.overload("[Ljava.lang.String;").implementation = function (stringArray) {
for (var i = 0; i < stringArray.length; i++){
if (stringArray[i].includes("su") || stringArray[i].includes("/su") || stringArray[i] == "su"){
console.log("发现尝试执行su命令的行为");
showStacks();
break;
}
}
return this.exec(stringArray);
}
Java.use("java.****uilder").$init.overload("[Ljava.lang.String;").implementation = function (stringArray){
for (var i = 0;i < stringArray.length; i++) {
if (stringArray[i].includes("su") || stringArray[i].includes("/su") || stringArray[i] == "su") {
console.log("发现尝试执行su命令的行为");
showStacks();
break;
}
}
return this.$init(stringArray);
}
});
代码部分仅供参考,为维护网络绿色环境,就不提供具体算法源码了。

hook之后再次启动,不在提示风险点。