xposed hook 带壳app 万能代码

前言

hook 带壳的app,都要先先想法找到目标hook点的ClassLoader。

发现

然后发现一篇文章
不是文章内容,而是文章下面第一条评论。
肉丝姐称之为 万能代码
关键代码:

if (loadPackageParam.packageName.equals("com.cz.babySister")) {
            XposedBridge.log(" has Hooked!");
            XposedBridge.log("inner  => " + loadPackageParam.processName);
            Class ActivityThread = XposedHelpers.findClass("android.app.ActivityThread",loadPackageParam.classLoader);
            XposedBridge.hookAllMethods(ActivityThread, "performLaunchActivity", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    Object mInitialApplication = (Application) XposedHelpers.getObjectField(param.thisObject,"mInitialApplication");
                    ClassLoader finalCL = (ClassLoader) XposedHelpers.callMethod(mInitialApplication,"getClassLoader");
                    XposedBridge.log("found classload is => "+finalCL.toString());
                    Class BabyMain = (Class)XposedHelpers.callMethod(finalCL,"findClass","com.cz.babySister.activity.MainActivity");
                    XposedBridge.log("found final class is => "+BabyMain.getName().toString());
                    fart(finalCL);
                }
            });
        }

测试

阻碍

示例代码的包名百度一下就能看到是什么软件,这个软件我打算测试一下的时候,总是注册不上。。。。
后来打算自己开发一个简单的app。但是通过360加固再签名之后。软件闪退。暂不清楚原因。

换app。

这里使用的是最新版的封面新闻。

脱壳

使用葫芦娃大佬的frida脱壳工具。
github地址
使用过程中脱到一半,app就被卡死掉了。没脱全。但是没啥事。关键代码找到了。

image.png

xposed hook

package com.example.baohuo;

import android.app.Application;
import android.content.Context;
import android.util.Log;

//import com.example.gantb.hook_method.Hook_android_app_Application;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

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


public class HookEntry implements IXposedHookLoadPackage {
    private static final String TAG = "gantb";
    public static XC_LoadPackage.LoadPackageParam lpparam = null;
    public static ClassLoader classLoader1 = null;

    @Override
    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

        HookEntry.lpparam = lpparam;

        if (lpparam.packageName.equals("cn.thecover.www.covermedia")) {
            XposedBridge.log(" has Hooked!");
            XposedBridge.log("inner  => " + lpparam.processName);
            Class ActivityThread = XposedHelpers.findClass("android.app.ActivityThread",lpparam.classLoader);
            XposedBridge.hookAllMethods(ActivityThread, "performLaunchActivity", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    Object mInitialApplication = (Application) XposedHelpers.getObjectField(param.thisObject,"mInitialApplication");
                    ClassLoader finalCL = (ClassLoader) XposedHelpers.callMethod(mInitialApplication,"getClassLoader");
                    XposedBridge.log("found classload is => "+finalCL.toString());
                    Class BabyMain = (Class)XposedHelpers.callMethod(finalCL,"findClass","cn.thecover.lib.common.manager.SignManager");
                    XposedBridge.log("found final class is => "+BabyMain.getName().toString());
                    fart(finalCL);
                }
            });
        }


    }
    private void fart(ClassLoader classLoader) {


        XposedHelpers.findAndHookMethod("cn.thecover.lib.common.manager.SignManager", classLoader, "getSign", String.class, String.class,String.class,new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                XposedBridge.log(" 》》》》》》》》》》》》》》》》。《《《《《《《《《《《《《《《《《");
                Log.e(TAG, "hook anti_token");
                super.afterHookedMethod(param);
                String ss = (String) param.getResult();
                XposedBridge.log(" has getResult!"+ss);
            }
        });

    }

}

结果

image.png

能打印出来。说明成功了。

结尾

至于说,是不是万能的。我还不太理解。但是360的壳是没问题的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,761评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,965评论 1 6
  • 我是一名过去式的高三狗,很可悲,在这三年里我没有恋爱,看着同龄的小伙伴们一对儿一对儿的,我的心不好受。怎么说呢,高...
    小娘纸阅读 3,417评论 4 7
  • 这些日子就像是一天一天在倒计时 一想到他走了 心里就是说不出的滋味 从几个月前认识他开始 就意识到终究会发生的 只...
    栗子a阅读 1,646评论 1 3