推广

【Android】免Root实现静默安装和点击任意位置(非无障碍)

iseeyu2年前 (2024-02-21)推广137

image

我们新建个包,存放我们要在 shell 下运行的 Java 代码:

image

这里我们补全 Main 方法,因为我们这个不是个 Android 程序,只是编译成 dex 的纯 Java 程序,所以我们这个的入口是 Main :

package shellService;

public class Main {
    public static void main(String[] args){
        System.out.println("我是在 shell 里运行的!!!");
    }
}

我们在代码里只是打印一行「我是在 shell 里运行的!!!」,因为这里是纯 Java 所以也用的 println。现在编译 apk:

image

因为 apk 就是 zip 所以我们直接解压出 apk 文件里的classes.dex,然后执行 :

adb push classes.dex /data/local/tmp
cd /data/local/tmp
app_process -Djava.class.path=/data/local/tmp/classes.dex /system/bin shellService.Main

这时就能看到已经成功运行啦:

image

这里因为 utf8 在 Windows shell 里有题,所以乱码了,但是还是说明我们成功了。

4 具有实用性

只能输出肯定是不行的,不具有实用性。我们之前说过,我们应该建立个本地 socket 服务器来接受命令并执行,这里的「Service」类实现了这个功能,因为如何建立 socket 不是文章的重点,所以大家只要知道这个类内部实现了一个「ServiceGetText」接口,在收到命令之后会把命令内容作为参数回掉 getText 方法,然后我们执行 shell 命令之后,吧结果作为字符串返回即可,具体实现可以看查看源码Service。

我们新建一个「ServiceThread」来运行「Service」服务和执行设立了命令:

public class ServiceThread extends Thread {
    private static int ShellPORT = 4521;

    @Override
    public void run() {
        System.out.println(">>>>>>Shell服务端程序被调用<<<<<<");
        new Service(new Service.ServiceGetText() {
            @Override
            public String getText(String text) {
                if (text.startsWith("###AreYouOK")){
                    return "###IamOK#";
                }
                try{
                    ServiceShellUtils.ServiceShellCommandResult sr =  ServiceShellUtils.execCommand(text, false);
                    if (sr.result == 0){
                        return "###ShellOK#" + sr.successMsg;
                    } else {
                        return "###ShellError#" + sr.errorMsg;
                    }
                }catch (Exception e){
                    return "###CodeError#" + e.toString();
                }
            }
        }, ShellPORT);
    }
}

其中 ServiceShellUtils 用到了开源项目 ShellUtils 在此感谢。这个类用来执行 shell 命令。

然后在 Main 中调用这个线程:

public class Main {

    public static void main(String[] args){
        new ServiceThread().start();
        while (true);
    }

}

这样,我们服务端就准备好了,我们来写控制服务端的 app 。我们新建类「SocketClient」用来和服务端进行通信,并在活动里调用他(完整代码请参看SocketClient和MainActivity):

private void runShell(final String cmd){
        if (TextUtils.isEmpty(cmd)) return;
        new Thread(new Runnable() {
            @Override
            public void run() {
              new SocketClient(cmd, new SocketClient.onServiceSend() {
                  @Override
                  public void getSend(String result) {
                      showTextOnTextView(result);
                  }
              });
            }
        }).start();
    }

然后重复 3 小节的操作,运行这个服务端:

image

然后安装 apk ,运行:

input text HelloWord

image

可以看到,在不 root 的情况下,成功的执行了需要 shell 权限的命令

5 最可爱的人

最后,我真的是要由衷的感谢各种技术分析文章和开源项目,真的太感谢了,没有无条件的奉献就没有互联网这么快的进步。

我对 app_process 利用方法的研究离不开以下项目和前辈的汗水:

Brevent 最早利用app_process进程实现无 root 权限使用的开源应用(虽然已经闭源,仍然尊重并感谢 liudongmiao)

Android system log viewer on Android phone without root. 利用app_process进程实现无 root 权限使用的优秀开源应用

Android上app_process启动java进程 通俗易懂的教程

使用 app_process 来调用高权限 API 分析的很深刻的教程

本文的项目可以在GitHub上获取:https://github.com/gtf35/app_process-shell-use

作者:gtf
链接:https://www.jianshu.com/p/86253b2c49f3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论

hengbaby
11楼
拔掉数据线就停止运行的可以试试在 app-process 前加 nohup 试试,我加了这个拔掉数据线就正常了

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57658.html

相关文章

【商业思维工具】贝叶斯大脑:吊打常识,区别事实和表达 ...

【商业思维工具】贝叶斯大脑:吊打常识,区别事实和表达 ...

这篇文章是整理南添老师,在B站上发的第一节课《【商业工具】贝叶斯大脑:吊打常识,区别事实和表达,教你做出好决策》的一节课,这节课实在是给了我很多很多的启发,整理出来,也算是自己的笔记吧。分享是初心,如果有收获,皆是意外。感觉这节课还有很多可以分享的点,这篇,就先分享这个思维...

网络推广的战略有哪些。

网络推广的战略有哪些。

跟着互联网在中国的普及,越来越多的人喜欢经过网络去看国际,也可所以说网络去拿逐渐的改动咱们的现在日子。一些网络推广也已经出现在咱们日子中发现,虽然中国企业的网络推广才刚刚开始起步,可是也正是由由于刚刚起步,所以在未来,网络推广在我国会有着巨大的潜力。 既然如此关于网络推广战略有哪些呢?首要...

分享企业网站推广计划是如何做的。

分享企业网站推广计划是如何做的。

一份详细的优化方案书对企业来说是很重要的,直接影响到公司的一个业务,只有按照前期所拟定的网站推广方案去认真的落实到位,那么推广效果才会大幅提升。 在建立一个网站的时候,最初的网站推广优化分析应该要分析网站是属于什么类型的站点?网站主要的盈利点在哪里?网站的受众用户群体有哪些?网站未来的发...

SEO的专业术语。

SEO的专业术语。

对于很多刚进入到SEO的新手来说,当听到黑帽白帽,关键词密度和蜘蛛之类的专业名词时都是一脸懵逼的,这些看似只是一个名词但是对SEO的学习以及工作的开展是十分重要的。毕竟千里之行始于足下,只有一步步的积累才能造就最终的成功,如果你不是天才,那么脚踏实地,打好基础才能给你带来成功。 1、关键词...

网站H1标签是什么有什么作用。

网站H1标签是什么有什么作用。

对于网站优化,大家并不陌生,优化涉及到的内容有很多,包括站内优化和站外优化,图片优化,或者谁代码框架优化,其中代码优化也是很多seoer忽略的因素,代码优化除开基本的js压缩等还要注意到h标签的使用,h1标签就是代码优化中一个重要的部分。那h1标签是什么东西呢?它有什么作用呢? 一、H1标签概...

小编分享网站推广应该从策划阶段就开始实施。

小编分享网站推广应该从策划阶段就开始实施。

由于网站建设的“推广”存在一些困难,从策划阶段实施似乎有点理想化,但这不是一个不切实际的幻想。只要指导思想明确,控制方法得当,就完全有可能将网站推广的理想与现实结合起来。接下来小编就为大家介绍详细的方法。 网站建设前的专业策划。网络营销导向的网站建设并不只是关注网站的外观视觉效果和基本技...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片