吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5471|回复: 17
收起左侧

[Android 原创] 实现Xposed的Rpc远程调用

[复制链接]
behindeye 发表于 2021-9-26 00:29

实现Xposed的Rpc远程调用

某些App的加解密算法,分析起来十分费劲,分析下来也十分耗时,基于xposed的话,可以知道代码调用流程,我们只需传参进去,hook对应方法或者调用内部某个函数,则可以获取加密之后的sign、key、cookie等

一、搭建 Android 端 Server

1、NanoHTTPD介绍

官方介绍:NanoHTTPD is a light-weight HTTP server designed for embedding in other applications, released under a Modified BSD licence.(NanoHTTPD是一个轻量级的 HTTP 服务器,设计用于嵌入其他应用程序,在修改后的 BSD 许可下发布 by Google翻译)

Github地址:https://github.com/NanoHttpd/nanohttpd

2、引入代码

两种方式,第一种把官网的代码clone 下来,然后 copy 放到工程;第二种使用别人适配过的库。博主这里使用第二种方式,更加快捷些。

gradle里面添加依赖

implementation 'org.nanohttpd:nanohttpd:2.2.0'

3、启动服务

//自定义一个Server继承NanoHTTPD
public class AndroidWebServer extends NanoHTTPD {

    public AndroidWebServer(int port) throws IOException {
        super(port);
    }

    @Override
    public Response serve(IHTTPSession session) {
        String msg = "<html><body><h1>Hello AutoPy</h1>\n";
        Map<String, String> parms = session.getParms();
        if (parms.get("code") == null) {
            msg += "<form action='?' method='get'>\n  <p>Your code: <input type='text' name='code'></p>\n" + "</form>\n";
        } else {
            msg += "<p>Hello, " + parms.get("code") + "!</p>";
            return newFixedLengthResponse(msg + "</body></html>\n");
        }
        return newFixedLengthResponse(msg + "</body></html>\n");

    }
}
//启动服务
new AndroidWebServer().start();

二、搭配Xposed插件使用

1、hook时机

ApplicationonCreate 方法,进行注入,同时启动服务

  XposedHelpers.findAndHookMethod(Application.class, "onCreate", new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                }

                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);

                    String currentProcessName = ProcessUtil.getCurrentProcessName(Ct);
                    log("进程:" + currentProcessName);

                    //启动Server
                    if ("com.xxx.xxx".equals(currentProcessName)) {
                        // 监听 8000 端口
                        new AndroidWebServer(8000);
                    } else {
                       // 对于多进程,监听进程ID
                        new AndroidWebServer(Process.myPid());
                    }
                }
            });

2、adb  forward

手机安装完插件之后,确保手机usb连接上电脑(wifi模式可以不连),然后验证手机是否连接上电脑,可执行以下adb命令:

adb devices

image-20210607153248095

执行adb forward 命令

adb forward的细节:https://blog.csdn.net/u013553529/article/details/80036227

下图,摘抄上面文章

image-20210607153619917

adb forward tcp:8000 tcp:8000

image-20210607153521631

3、验证Server

在手机和电脑在同一个局域网的情况下,打开网址:http://127.0.0.1:8000/ ,如果正常显示一个网页 ,则配置成功

三、搭配花生壳的内网穿透

搭配花生壳的内网穿透,实现外网访问(也就是别人电脑也能访问你的接口),记住选择 HTTP 的映射类型,此时需要给 6 Rmb 的认证费用,其他免费。对于我这种需求简单的,目前测试还是完全够用。

image-20210607154236024

配置完成之后,会给你一个外网域名,你就可以访问你的接口了

image-20210607154443033

验证外网域名

image-20210607154840346

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
blindcat + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

china08 发表于 2021-9-26 06:17
思路挺好,学习学习
爱的天使 发表于 2021-9-26 06:29
cjc3528 发表于 2021-9-26 07:57
Juce 发表于 2021-9-26 08:22
膜拜技术大佬,谢谢分享
ljpzl1984 发表于 2021-9-26 09:06
膜拜技术大佬,学习ing
思念曹操 发表于 2021-9-26 09:08
感谢分享,认真学习
blindcat 发表于 2021-9-26 17:10
向大佬学习
ming1993vip 发表于 2021-9-26 22:13
如果在详细一点就更好了
ZLJ13697750126 发表于 2021-9-27 15:40
感谢分享,认真学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 19:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表