一直提示:请关闭开发者选项。应该怎么处理啊
学习正大佬的课程,自己拿个辅助软件试试,用雷电模拟器启用了ROOT模式,安装了辅助软件,一打开它就弹出提示,请关闭开发者选项。按照网上查找ADB,结果找出来一大堆,蒙圈了,请教大佬们,该怎么关闭软件自动检测开发者选项啊! 正己 发表于 2023-9-7 22:21弹窗定位到了就去分析弹窗的调用堆栈,然后删除调用就不会弹了
按照老师的指点,再次尝试寻找关键位置.
使用LSPosed启用算法助手模块并勾选(系统框架和辅助软件)
在算法助手应用页面选择辅助软件并点击进入功能选择页面,
选择了弹窗定位,Activity记录,Log捕获三个功能后,点击右上角运行按钮
辅助软件开启,点击添加目标软件,出现请关闭开发者选项弹窗。
返回算法助手,回到主页面,中间的日志页面,出现辅助软件图标,
点开,出现很多Log.*日志,拉到最下面,看到了Dialog弹窗
日志:
--------------------------------------------------------------
日志名称:Dialog弹窗
弹窗内容:请关闭开发者选项!
去关闭
OK
返回结果类型:void
返回结果值:void
调用堆栈:
at de.robv.android.xposed.XposedBridge
$AdditionalHookInfo.callback(Unknown Source:147)
at 游戏包名.cloud.util.MsgBox.msg_box1_with_choice2
(MsgBox.java:167)
at 游戏包名.cloud.MainActivity.onGameClick(MainActivity.java:2689)
at 游戏包名.cloud.MainActivity$25.onClick(MainActivity.java:3342)
-----------------------------------------------------------
然后用某管理器对包含游戏包名的三项进行了方法名搜索
在其中MainActivity.onGameClick的方法中看到较多内容,转java查看
发现该方法里面一堆判断,取出一部分最可疑的展示一下:
public void onGameClick(View view) {
if (AppInstance.s_nEnableD2 == 0) {
MsgBox.msg_box1("此版本已停用,请联系客服使用新版本!");
} else if (!check_paired_ble_device()) {
MsgBox.msg_box1_with_choice2(this, 0x7f100278, 0x7f10017b, 0x7f100188, new MainActivity$15(this));
} else {
int i = 0;
if (Settings.Secure.getIntgetContentResolver(),"development_settings_enabled", 0) != 0) {
MsgBox.msg_box1_with_choice2(this, 0x7f1000fe, 0x7f10017b, 0x7f100187, new MainActivity$16(this));
} else if ......等等,后面就是判断设备连接信息。
这里面有0x7f1000fe一些资源ID目标,随后对它们逐一进行资源ID查询:
=====================================================
Value
@7f1000fe
entry
@string/dev_option_close_remind
string
请关闭开发者选项
string-zh-rCN
请关闭开发者选项!
Hex
0x7F1000FE
Dec
2131755262
====================================================
得到了这些信息,0x7f10017b对应:OK,0x7f100187对应:去关闭,
0x7f1000fe对应:请关闭开发者选项。而且还包含"development_settings_enabled"
到此可以确定关键判断和调用应该就是它:
-------------------------------------------------------
if (Settings.Secure.getIntgetContentResolver(),"development_settings_enabled", 0) != 0) {
MsgBox.msg_box1_with_choice2(this, 0x7f1000fe, 0x7f10017b, 0x7f100187, new MainActivity$16(this));
------------------------------------------------
返回Smali查看:
.line 2687
:cond_22
invoke-virtual {p0}, Lcom/netease/cloud/MainActivity;-
>getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
const-string v2, "development_settings_enabled"
const/4 v3, 0x0
invoke-static {v0, v2, v3}, Landroid/provider/Settings$Secure;-
>getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v0
if-eqz v0, :cond_3e
const p1, 0x7f1000fe
const v0, 0x7f100187
.line 2689
new-instance v2, Lcom/netease/cloud/MainActivity$16;
invoke-direct {v2, p0}, Lcom/netease/cloud/MainActivity$16;-><init>
(Lcom/netease/cloud/MainActivity;)V
invoke-static {p0, p1, v1, v0, v2}, Lcom/netease/cloud/util/MsgBox;-
>msg_box1_with_choice2(Landroid/content/Context;IIILandroid/os/Handler;)V
return-void
----------------------------------------------------
感觉应该是在这段中修改,但是改什么,怎么改,还要想想。也不知道对不对,
慢慢来。 侃遍天下无二人 发表于 2023-9-5 12:30
应该是deviceUtils里那个,你仔细看看
感谢老师回复,按照您的指点,搜索DEX文件,找到了DeviceUtils.java中的代码区,确实有相关内容:
public final class DeviceUtils {
private DeviceUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
//isDeviceRooted: 检查设备是否ROOT.
public static boolean isDeviceRooted() {
String[] strArr = {"/system/bin/", "/system/xbin/", "/sbin/", "/system/sd/xbin/", "/system/bin/failsafe/", "/data/local/xbin/", "/data/local/bin/", "/data/local/"};
for (int i = 0; i < 8; i++) {
String str = strArr;
if (new File(str + "su").exists()) {
return true;
}
}
return false;
}
//isAdbEnabled:检查设备是否启用ABD
public static boolean isAdbEnabled() {
return Settings.Secure.getInt(Utils.getApp().getContentResolver(), "adb_enabled", 0) > 0;
}
================================================================
回到Smali模式,发现是这样写的:
.method public static isDeviceRooted()Z
.registers 8
const-string v0, "/system/bin/"
const-string v1, "/system/xbin/"
const-string v2, "/sbin/"
const-string v3, "/system/sd/xbin/"
const-string v4, "/system/bin/failsafe/"
const-string v5, "/data/local/xbin/"
const-string v6, "/data/local/bin/"
const-string v7, "/data/local/"
.line 45
filled-new-array/range {v0 .. v7}, [Ljava/lang/String;
move-result-object v0
const/4 v1, 0x0
const/4 v2, 0x0
:goto_16
const/16 v3, 0x8
if-ge v2, v3, :cond_3d
.line 47
aget-object v3, v0, v2
.line 48
new-instance v4, Ljava/io/File;
new-instance v5, Ljava/lang/StringBuilder;
invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v5, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v3, "su"
invoke-virtual {v5, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-direct {v4, v3}, Ljava/io/File;-><init>(Ljava/lang/String;)V
invoke-virtual {v4}, Ljava/io/File;->exists()Z
move-result v3
if-eqz v3, :cond_3a
const/4 v0, 0x1
return v0
:cond_3a
add-int/lit8 v2, v2, 0x1
goto :goto_16
:cond_3d
return v1
.end method
对比java代码和Smali代码,都有两个return,分别对应true和false.如果返回1就是真,0就是假。在Smali代码块中,V1的值在第14行就赋值了0,v0的值在倒数第8行,赋值了1,尝试吧V0该成0,重新签名,打包,安装,运行,点击添加目标软件,依旧弹出关闭开发者选项。{:1_937:},ε=(′ο`*)))唉,慢慢在想想 会有弹窗提示是吧,那你就算法助手拦截弹窗 搜它提示的关键词,不要直接搜adb 直接点击提示框,会由关闭选项的 应该是deviceUtils里那个,你仔细看看 正己 发表于 2023-9-5 09:51
会有弹窗提示是吧,那你就算法助手拦截弹窗
首先,感谢正己大佬的回复,原以为帖子太水,没有审核通过,万万没想到,迅速得到了回复,感谢所有回帖的老师们!
我按照教程的办法试过,算法助手中的功能之一:弹窗定位(返回键可取消),可以暂时取消掉请关闭开发者选项,但是,一操作添加对象软件,立刻又弹出来了,让我想起了一个广告词:弹!弹!弹!让我们弹的更爽!功能之二:屏蔽关键词弹窗,则,完全没有效果,不知道是我的操作问题,还是别的什么问题。 klxn0-0 发表于 2023-9-5 10:51
搜它提示的关键词,不要直接搜adb
感谢老师回复,它提示的是:请关闭开发者选项。提供两个选项:去关闭 和 OK。点击去关闭,就进入雷电模拟器的开发者页面。点击OK,弹窗消失,但是,选择目标软件添加,就又出现了。 1096315079a 发表于 2023-9-5 11:09
直接点击提示框,会由关闭选项的
感谢老师回复,它提供两个选项去关闭和OK,选择去关闭就去到雷电的开发者页面,选择OK弹窗消失,可以一操作目标软件添加,又出来了。 tangbo8629597 发表于 2023-9-7 21:20
首先,感谢正己大佬的回复,原以为帖子太水,没有审核通过,万万没想到,迅速得到了回复,感谢所有回帖的 ...
弹窗定位到了就去分析弹窗的调用堆栈,然后删除调用就不会弹了
页:
[1]
2