tangbo8629597 发表于 2023-9-4 22:08

一直提示:请关闭开发者选项。应该怎么处理啊

学习正大佬的课程,自己拿个辅助软件试试,用雷电模拟器启用了ROOT模式,安装了辅助软件,一打开它就弹出提示,请关闭开发者选项。按照网上查找ADB,结果找出来一大堆,蒙圈了,请教大佬们,该怎么关闭软件自动检测开发者选项啊!

tangbo8629597 发表于 2023-9-8 23:08

正己 发表于 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
----------------------------------------------------
感觉应该是在这段中修改,但是改什么,怎么改,还要想想。也不知道对不对,
慢慢来。

tangbo8629597 发表于 2023-9-7 22:44

侃遍天下无二人 发表于 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:},ε=(′ο`*)))唉,慢慢在想想

正己 发表于 2023-9-5 09:51

会有弹窗提示是吧,那你就算法助手拦截弹窗

klxn0-0 发表于 2023-9-5 10:51

搜它提示的关键词,不要直接搜adb

1096315079a 发表于 2023-9-5 11:09

直接点击提示框,会由关闭选项的

侃遍天下无二人 发表于 2023-9-5 12:30

应该是deviceUtils里那个,你仔细看看

tangbo8629597 发表于 2023-9-7 21:20

正己 发表于 2023-9-5 09:51
会有弹窗提示是吧,那你就算法助手拦截弹窗

首先,感谢正己大佬的回复,原以为帖子太水,没有审核通过,万万没想到,迅速得到了回复,感谢所有回帖的老师们!
我按照教程的办法试过,算法助手中的功能之一:弹窗定位(返回键可取消),可以暂时取消掉请关闭开发者选项,但是,一操作添加对象软件,立刻又弹出来了,让我想起了一个广告词:弹!弹!弹!让我们弹的更爽!功能之二:屏蔽关键词弹窗,则,完全没有效果,不知道是我的操作问题,还是别的什么问题。

tangbo8629597 发表于 2023-9-7 21:26

klxn0-0 发表于 2023-9-5 10:51
搜它提示的关键词,不要直接搜adb

感谢老师回复,它提示的是:请关闭开发者选项。提供两个选项:去关闭 和 OK。点击去关闭,就进入雷电模拟器的开发者页面。点击OK,弹窗消失,但是,选择目标软件添加,就又出现了。

tangbo8629597 发表于 2023-9-7 21:29

1096315079a 发表于 2023-9-5 11:09
直接点击提示框,会由关闭选项的

感谢老师回复,它提供两个选项去关闭和OK,选择去关闭就去到雷电的开发者页面,选择OK弹窗消失,可以一操作目标软件添加,又出来了。

正己 发表于 2023-9-7 22:21

tangbo8629597 发表于 2023-9-7 21:20
首先,感谢正己大佬的回复,原以为帖子太水,没有审核通过,万万没想到,迅速得到了回复,感谢所有回帖的 ...

弹窗定位到了就去分析弹窗的调用堆栈,然后删除调用就不会弹了
页: [1] 2
查看完整版本: 一直提示:请关闭开发者选项。应该怎么处理啊