目标应用:com.secret.prettyhezi
核心目标:
1)启动检测绕过
2)广告绕过
主要方法:
jadx 静态分析
Frida Java / native hook 请求与响应明文关联分析
反编译工具:
jadx
IDA pro 运行时工具:
Frida
具体分析流程:1. 启动阶段安全检测绕过
用已经被root以及安装了Magisk的实验机打开APP,发现打开一直白屏,对于正常手机来说是可以直接进入APP的,现在就要怀疑是不是有一些启动检测手段
用MT打开安装包查看一下:没有加壳,直接用jadx打开
第一步:手动搜索root有关代码/system/bin/su
/system/xbin/su
/sbin/su
/vendor/bin/su
/data/adb/magisk
/data/adb/modules
/system/app/Superuser.apk发现检测代码段,我们跟踪一下经典的root检测手段
我们看一下函数调用链追到了一个onCreate函数
onCreate() 是 Android 里非常核心的生命周期回调方法,意思是:某个组件第一次被创建时,系统会调用它的 onCreate(),让你做初始化工作
对逆向分析来说,它是寻找启动逻辑、检测逻辑、跳转逻辑的重要位置。 可以发现我们之前追到的root检测方法:p0.e.b().d()
整个onCreate()还有提示“破解要小心”的字符串,说明整个逻辑可能更偏向于APP的启动检测
接下来我们仔细分析一下每个调用的函数会不会是检测函数
看到很多都调用m0(),分析一下具体作用是调用system.exit()函数 public void m0() {
for (int size = f8217n.size() - 1; size >= 0; size--) {
((Yclh4J3zF) f8217n.get(size)).finish();
f8217n.clear();
System.exit(0);
}追一下调用m0()的条件函数// 模拟器 / 虚拟机环境检测
if (p0.d.b().d(this, null)) {
m0();
return;
// p0.d.b().d() 代码
//这段代码是一个模拟器 / 虚拟机环境检测函数
//1. 基带版本是否异常
//2. build flavor 是否包含 vbox / sdk_gphone
//3. product board 是否包含 android / goldfish
//4. board platform 是否异常
//5. hardware 是否包含 ttvm / nox
//6. 是否支持闪光灯
//7. 传感器数量是否太少
//8. 用户安装 App 数量是否太少
//9. /proc/self/cgroup 是否可读取
//10. 把检测信息通过 cVar 回调输出
//通过多个设备特征打分,i6 分数大于 3,就认为当前运行环境像模拟器。
public boolean d(Context context, c cVar) {
if (context == null) {
throw new IllegalArgumentException("context must not be null");
String strA = a("gsm.version.baseband");
int i6 = (strA == null || strA.contains("1.0.0.0")) ? 1 : 0;
String strA2 = a("ro.build.flavor");
if (strA2 != null && (strA2.contains("vbox") || strA2.contains("sdk_gphone"))) {
i6++;
String strA3 = a("ro.product.board");
if (strA3 != null && (strA3.contains("android") | strA3.contains("goldfish"))) {
i6++;
String strA4 = a("ro.board.platform");
if (strA4 == null || strA4.contains("android")) {
i6++;
String strA5 = a("ro.hardware");
if (strA5 == null) {
i6++;
} else if (strA5.toLowerCase().contains("ttvm") || strA5.toLowerCase().contains("nox")) {
i6 += 10;
boolean zHasSystemFeature = context.getPackageManager().hasSystemFeature("android.hardware.camera.flash");
if (!zHasSystemFeature) {
i6++;
String str = zHasSystemFeature ? "support CameraFlash" : "unsupport CameraFlash";
int size = ((SensorManager) context.getSystemService("sensor")).getSensorList(-1).size();
if (size < 7) {
i6++;
String str2 = "sensorNum" + size;
int iC = c(p0.b.c().a("pm list package -3"));
if (iC < 5) {
i6++;
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290983.htm
[原创]某box App逆向分析(启动检测绕过+广告跳过)
478 浏览
0 回复
暂无回复,快来抢沙发吧!