陈司机 发表于 2021-1-12 18:03

[玩转APP之二]Xposed对手机App进行安装卸载或升级限制

本帖最后由 陈司机 于 2021-1-12 18:06 编辑

**上文:**
[玩转App之一 利用ROOT权限或Xposed随意对apk进行保资料降级](https://www.52pojie.cn/thread-1347313-1-1.html)

**本文:**
有时候应用商店或应用自身会悄咪咪地把我们的应用升级,很讨厌。
本文我们分析下如何限制APK进行卸载或安装(升级),希望大家对xp使用和系统服务有所了解,造出好玩的黑科技,嘿嘿嘿。
系统应用都是由应用大管家PMS管理的。
代码位于
frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java

举例子,核心代码如下:
#### 安装或升级管理
```kotlin
hookAllMethods("android.content.pm.PackageParser.parsePackage"){
      after { m ->
                try {
            // 这里我们偷懒,或者提高兼容性,hook所有parsePackage, 注意这里判断一下调用链,是不是安装才解析的。
                        if (m.args.size == 2 && getNowStackString().contains("installPackage")) {
                              val parsePackageName = m.result.get<String>("packageName")
                              val parsePackageVersionName = m.result.get<String>("mVersionName")
            // 定义一个中断应用包解析的函数,就是抛一个异常出来
                              fun interrupt() {
                                        Log.w(Tag, " forbid install package $parsePackageName")
                                        m.throwable = newObj("android.content.pm.PackageParser\$PackageParserException", 9,"Sorry, you can't install $parsePackageName") as Exception
                              }
            
            // 可以进行版本判断
                              if (parsePackageName == "com.tencent.mm" && !listOf("7.0.19").contains(parsePackageVersionName))
                                        interrupt()

            // 禁止头条系
                              if (parsePackage!!.startsWith("com.ss.android"))
                                        interrupt()
                        }
                } catch (e: Throwable) {
                        Log.e(Tag, "parsePackage hook exception:\n" + e.stackTraceString)
                }
      }
}

```

#### 卸载管理
```kotlin
hookAllMethods("com.android.server.pm.PackageManagerService.deletePackageLIF") {
      before { m ->
                Log.w(Tag, " Uninstall" + getMArgsString(m))
// 卸载的时候需要调这个函数传入包名,我们直接给他置空,就会报错(注意,这个错误系统会拦截才能这样弄,否则会导致系统服务崩溃)
                if (banUninstallPackage.contains(m.args)) m.args = null
      }
}
```

自己测试安卓7.0-9.0有效,其它未测。
我们把插件装上,发现无论是Adb安装还是手动安装,都是安装不上的。
在进行ADB安装的时候,还能看到“Sorry, you can't install $parsePackageName”的提示。

在写系统插件的时候,有可能会把系统搞死,这时候我们的手机可能还在卡logo,不用担心,但是adb进程已经启动了,我们把电脑连接把插件直接删掉就可以了。
```
su
rm -rf /data/app/插件包名*
```
*下篇[玩转APP之三]防止App被杀,即使卸载了也不退出 研究下如何锁定app运行,可以让我们的APP安心在后台工作,喜欢的请关注留意,欢迎评论交流。*


陈司机 发表于 2021-1-12 20:08

先有我后有天 发表于 2021-1-12 20:00
弄个核心破解也可以,小米手机方法就更多了

谢谢,重在了解思路学习嘛,学会了思路,才是不变应万变。

陈司机 发表于 2021-1-13 22:27

本帖最后由 陈司机 于 2021-1-13 22:30 编辑

hfxiaozi 发表于 2021-1-13 22:23
可否帮我解答一个疑惑:如何完美的隐藏xposed(反检测)?躲避BAT的检测?
新申请了个微信新号,再次登录 ...
直接用edxposed就是裸奔,微信会反射加载进微信的Xposed类, 能够知道你hook了那个函数。
完美的隐藏xposed(反检测),这是商业机密,没人会随便给你透露的,除非你有同等筹码兑换。
wx给你的建议是用低版本 + 去xposed字符。

先有我后有天 发表于 2021-1-12 20:00

弄个核心破解也可以,小米手机方法就更多了

先有我后有天 发表于 2021-1-12 20:19

陈司机 发表于 2021-1-12 20:08
谢谢,重在了解思路学习嘛,学会了思路,才是不变应万变。

说得对        

pojiepojie52 发表于 2021-1-13 13:57

先有我后有天 发表于 2021-1-12 20:00
弄个核心破解也可以,小米手机方法就更多了

水果呢?

先有我后有天 发表于 2021-1-13 13:58

pojiepojie52 发表于 2021-1-13 13:57
水果呢?

??什么水果

slamdunk 发表于 2021-1-13 13:59

先有我后有天 发表于 2021-1-12 20:19
说得对        

核心破解和小米的能详细解答一下吗

我从未懂过 发表于 2021-1-13 14:10

pojiepojie52 发表于 2021-1-13 13:57
水果呢?

他说苹果手机。Xposed只对安卓系统,苹果只能通过越狱安装其他app

先有我后有天 发表于 2021-1-13 15:16

pojiepojie52 发表于 2021-1-13 13:57
水果呢?

就是因为苹果的封闭性,我才选择安卓,虽然这也让他流畅安全,但是却没了可玩性.苹果就不了解了.

wwqkcb 发表于 2021-1-13 16:23

先有我后有天 发表于 2021-1-12 20:00
弄个核心破解也可以,小米手机方法就更多了

请问核心破解怎么限制 APP升级呢?手机里的翼支付老是自动升级,装的SKY的ROM,最新版本用不了。。。
页: [1] 2 3
查看完整版本: [玩转APP之二]Xposed对手机App进行安装卸载或升级限制