首页 > android > dexposed hook android signtrue
2015
12-20

dexposed hook android signtrue

dexposed 的简介:

> 简介及项目地址:dexposed
> dexposed enable 'god' mode for single android application.

编译jar库文件:

>此过程省略。。。可以使用我编译好的下载地址(提取码:afa7)

如何使用

  • 1.首先用IDEA新建一个android工程,
    将jar文件拷贝到libs文件夹下

  • 2.菜单->file->Project Structure->Project Settings->Libraries(快捷键ctrl+shift+alt+A
    点击"+" 将jar文件添加到路径中来,接着 点击ok即可。

  • 3.新建一个APP.java类并继承Application,覆写父类方法(快捷键:ctrl+o)

相关代码如下

package com.xiaobai.deposed;
import android.app.Application;;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.util.Log;
import com.taobao.android.dexposed.DexposedBridge;
public class APP extends Application {
@Override
public void onCreate() {
super.onCreate();
//判断当前设备是否支持dexposed
if (DexposedBridge.canDexposed(this)) {
//如果支持 。。。开始hook 相关方法
//hook之前 进行方法调用
String before=getsign(this);
Log.v("msg","the sign before is:"+before);
//执行hook
Hook.hookSign();
String after=getsign(this);
Log.v("msg","the sign after is:"+after);
} else {
Log.e("erro ", "the device not support dexposed");
}
}
//获取签名
public String getsign(Context context) {
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Signature sign[] = packageInfo.signatures;
//这里获取到签名的字符串
String str = sign[0].toCharsString();
return str;
}
}

4.接着新建一个类 Hook.java代码如下:

package com.xiaobai.deposed;

import android.app.Application;
import android.content.Context;
import android.content.pm.Signature;
import android.util.Log;
import com.taobao.android.dexposed.DexposedBridge;
import com.taobao.android.dexposed.XC_MethodHook;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Created by xiaobai on 2015/12/15.
 * 方法将原有的apk安装包下的META-INF/.RSA文件拷贝assets目录下
 * 当调用方法的时候 返回原安装包的的签名值
 */
public class Hook {

  public static void hookSign() {
    /*
    * 三个方法的详细可以参考Signature.class源码文件
    * */
    DexposedBridge.findAndHookMethod(Signature.class, "toCharsString", new XC_MethodHook() {
      @Override
      protected void afterHookedMethod(XC_MethodHook.MethodHookParam arg0) throws Throwable {
        //hook toCharsString 方法
        //得到当前app的Context
        Context context =getAppliction().getApplicationContext();
        //读取RSA文件
        InputStream inputStream = context.getAssets().open("old.RSA");
        byte by[] = new byte[inputStream.available()];
        inputStream.read(by);
        inputStream.close();
        //new 一个Signature 并给出方法
        //这里我们做个测试 让签名字符返回一个我们想要的字符串:
        Signature signature = new Signature(by) {
          public String toCharsString() {
            //这里输出日志让我们知道调用了此方法
            Log.e("test", "use toCharsString");
            return super.toCharsString();
          }
        };
        arg0.setResult("啦啦啦~ 德玛西亚");
      }
    });
    DexposedBridge.findAndHookMethod(Signature.class, "toByteArray", new XC_MethodHook() {
      @Override
      protected void afterHookedMethod(XC_MethodHook.MethodHookParam arg0) throws Throwable {
        //hook toByteArray 方法
        Context context = getAppliction().getApplicationContext();
        InputStream inputStream = context.getAssets().open("old.RSA");
        byte by[] = new byte[inputStream.available()];
        inputStream.read(by);
        inputStream.close();
        Signature signature = new Signature(by) {
          public byte[] toByteArray() {
            Log.e("测试", "use toByteArray");
            return super.toByteArray();
          }
        };
        arg0.setResult(signature.toByteArray());
      }
    });
    DexposedBridge.findAndHookMethod(Signature.class, "toChars", new XC_MethodHook() {
      @Override
      protected void afterHookedMethod(XC_MethodHook.MethodHookParam arg0) throws Throwable {
        //hook toChars 方法
        Context context = getAppliction().getApplicationContext();
        InputStream inputStream = context.getAssets().open("old.RSA");
        byte by[] = new byte[inputStream.available()];
        inputStream.read(by);
        inputStream.close();
        Signature signature = new Signature(by) {
          public char[] toChars() {
            Log.e("测试", "use toChars");
            return super.toChars();
          }
        };
        arg0.setResult(signature.toChars());
      }
    });
  }

  public static Application getAppliction() {
    // TODO Auto-generated method stub
    Class localClass;
    try {
      localClass = Class.forName("android.app.ActivityThread");
      Method getapplication=localClass.getMethod("currentApplication");
      Object myapplication=getapplication.invoke(localClass);
      Application application=(Application) myapplication;
     // System.out.println("====ok===== 获取包名:"+application.getPackageName());
      return application;
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (NoSuchMethodException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IllegalArgumentException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (InvocationTargetException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return null;
  }
}

 测试运行 

    结果如下

12-19 13:07:48.140  14802-14802/com.xiaobai.deposed W/ActivityThread﹕ Application com.xiaobai.deposed is waiting for the debugger on port 8100…

12-19 13:07:49.820  14802-14802/com.xiaobai.deposed V/msg﹕ the sign before is:3082030d308201f5a00302010202046f88cb37300……..

12-19 13:09:33.130  14802-14802/com.xiaobai.deposed V/msg﹕ the sign after is:啦啦啦~ 德玛西亚

优点缺点比较

优点

  • 无需xposed框架即可实现hook

缺点

  • 不支持x86 和 5.0 以上的机器

工程文件:

https://yunpan.cn/c3hTPQzktbB7k (提取码:0ff8)

最后编辑:
作者:xiaowu
这个作者貌似有点懒,什么都没有留下。

dexposed hook android signtrue》有 2 条评论

  1. 葱白 说:

    请教一下 ,web应用如何破解?所有的积分啥的都是从服务器获取的~

留下一个回复

你的email不会被公开。