HermesAgent群控系统使用教程

HermesAgent是virjar大神写的一个Android群控系统,基于xposed+RPC实现方法级别的群控。HermesAgent是hermes系统的客户端模块,他是种植在手机里面的一个agent,同时也是一个xposed的模块插件。

一、原理

agent本身启动了一个service,agent插件模块将会自动注册钩子函数,并且和service通信。Android设备外部请求可以通过暴露在agent上面的一个http端口,和agent通信,然后agent和目标apkRPC。 如此实现外部请求到任何一个app的任何功能的外部调用。

HermesAgent群控系统使用教程

二、使用教程

2.1 安装

下载hermesagent项目源码,编译后安装到手机上,然后在Xposed模块界面开启hermesagent模块,重启手机既可。

2.2 代码编写

本教程以调用我前面写的Xposed Hook教程《Xposed框架Hook Demo实例教程》中MainActivity类中的toastMsg方法为例

在hookagent包下新建类TestAgent,实现AgentCallback接口,并重写targetPackageName、needHook、invoke、onXposedHotLoad四个方法。

  • targetPackageName方法返回目标APK包名,此处为”com.hyb.hookdemo”;
  • needHook方法返回一个boolean类型,一个app可能有多个进程,当进程为你需要hook的进程时,返回True;
  • invoke方法为远程调用时执行的方法,可根据你请求中传入的参数反射调用你hook到的目标方法,反正方法的执行结果;
  • onXposedHotLoad方法内部可编写具体的hook代码,可对目标方法进行hook,并存储方法对象和类对象,以便invoke方法中调用;

具体代码见文章最后。

2.3 测试

  • 代码编写完毕后,首先需重新编译安装到手机并重启;
  • 重启后,hermesagent程序会自动打开(如无法自动打开,请检查手机自启动权限),并且还会自动打开HookDemo程序;
  • 通过浏览器访问app所在ip的5597端口,查看服务列表;
  • 通过invoke接口,调用服务api,此处地址为http://127.0.0.1:5597/invoke?invoke_package=com.hyb.hookdemo,执行后返回如下界面就代码调用成功:
HermesAgent群控系统使用教程

ps:如果调用后,返回异常,则可能是未hook到方法导致方法对象为空,你需要现在HookDemo程序中点击按钮调用一次,使Xposed能Hook到方法并保存方法。

三、最终代码

package com.virjar.hermes.hermesagent.hookagent;

import com.virjar.hermes.hermesagent.aidl.InvokeRequest;
import com.virjar.hermes.hermesagent.aidl.InvokeResult;
import com.virjar.hermes.hermesagent.plugin.AgentCallback;
import com.virjar.hermes.hermesagent.plugin.SharedObject;

import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

/**
 * HookDemo Test
 *
 * @author HuaYunBin
 */
public class TestAgent implements AgentCallback {

    private Object toastMsgMethodObject;
    private Method toastMsgMethod;

    @Override
    public String targetPackageName() {
        return "com.hyb.hookdemo";
    }

    @Override
    public boolean needHook(XC_LoadPackage.LoadPackageParam loadPackageParam) {
        return StringUtils.equalsIgnoreCase(loadPackageParam.processName, "com.hyb.hookdemo");
    }

    @Override
    public InvokeResult invoke(InvokeRequest invokeRequest) {
        String returnMsg = null;
        try {
            returnMsg = (String) toastMsgMethod.invoke(toastMsgMethodObject);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
        return InvokeResult.success(returnMsg, SharedObject.context);
    }

    @Override
    public void onXposedHotLoad() {
        ClassLoader classLoader = SharedObject.loadPackageParam.classLoader;
        try {
            Class clazz = classLoader.loadClass("com.hyb.hookdemo.MainActivity");
            XposedHelpers.findAndHookMethod(clazz, "toastMsg", 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);
                    toastMsgMethodObject = param.thisObject;
                    toastMsgMethod = (Method) param.method;
                }
            });
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/5606

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月7日 下午4:33
下一篇 2022年5月7日 下午10:33

相关推荐

  • 我C,一个库里Curry几百个表,这谁受得了?

    随着业务越来越复杂,数据量越来越大,并发量越来越大,数据库的性能越来越低。好不容易找运维申请了两台机器,让DBA部署了几个实例,想把一些业务库拆分出来,却发现一个库里几百个表,拆不出来,扩不了容,尴尬!   因为数据库强关联在一起,无法通过增加数据库实例扩容,就是一个耦合的典型案例。   什么样的场景会出现这类耦合? 举个栗子。   有一个公共用户数据库DB...

    2022年5月11日
    1200
  • OpenVPN + Ldap + OTP

    OpenVPN 服务端的一些配置 VPN是企业内比较重要的一个资产,不能从网上乱下载,去官网看看 https://openvpn.net/,第一次不懂事,不清楚OpenVPN还有商业版,OpenVPN Access Server 和 OpenVPN Community,直接就安装了OpenVPN AS,没有网上说的那么难,还有图形化界面,登陆进行发现2个并发...

    技术 2022年5月28日
    62700
  • proxychains_error

    在使用proxychains代理时,报了个错误 1 2 ProxyChains-3.1 (http://proxychains.sf.net) ERROR: ld.so: object 'libproxychains.so.3' from LD_PRELOAD cannot be preloaded (cannot open shared object fi...

    技术 2022年6月13日
    3000
  • Burp插件

    burp中除了BApp Store,还有很多好用的第三方插件,这里手机了一些比较好用也是我自己使用的插件,也欢迎留言推荐其他好用的插件以及burp使用的技巧 burp的一些技巧请参考Burp Suite使用中的一些技巧   HackBar ,火狐的hackbar插件收费了,几个替代品都不怎么好用,这个插件功能比火狐的多且强大 reCAPTCHA自动...

    技术 2022年6月13日
    3800
  • Redis的一些漏洞复现利用

    0x00 Redis REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 它通常被称为数据结构服务器,因为值(...

    2022年6月13日
    3800

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信