package mobi.acpm.inspeckage.hooks; import java.nio.ByteBuffer; import java.security.MessageDigest; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.callbacks.XC_LoadPackage; import mobi.acpm.inspeckage.util.Util; import static de.robv.android.xposed.XposedHelpers.findAndHookMethod; /** * Created by acpm on 21/11/15. */ public class HashHook extends XC_MethodHook { public static final String TAG = "Inspeckage_Hash:"; private static StringBuffer sb; public static void initAllHooks(final XC_LoadPackage.LoadPackageParam loadPackageParam) { findAndHookMethod(MessageDigest.class, "getInstance", String.class, new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam param) throws Throwable { sb = new StringBuffer(); sb.append("Algorithm(" +param.args[0]+") ["); } }); findAndHookMethod(MessageDigest.class, "update", byte[].class, new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam param) throws Throwable { sb.append("" + Util.byteArrayToString((byte[]) param.args[0])+" : "); } }); findAndHookMethod(MessageDigest.class, "update", byte[].class, "int", "int", new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam param) throws Throwable { sb.append("" + Util.byteArrayToString((byte[]) param.args[0])+" : "); } }); findAndHookMethod(MessageDigest.class, "update", ByteBuffer.class, new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam param) throws Throwable { ByteBuffer bb = (ByteBuffer) param.args[0]; sb.append("" + Util.byteArrayToString(bb.array()) + " : "); } }); //the computed one way hash value findAndHookMethod(MessageDigest.class, "digest", new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam param) throws Throwable { sb.append(Util.toHexString((byte[]) param.getResult())+"]"); XposedBridge.log(TAG + sb.toString()); sb = new StringBuffer(); } }); findAndHookMethod(MessageDigest.class, "digest", byte[].class, new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam param) throws Throwable { //XposedBridge.log(TAG + "digest2 = " + Util.byteArrayToString((byte[]) param.args[0])); //sb.append(" : " + Util.toHexString((byte[]) param.getResult())+"]"); //XposedBridge.log(TAG + sb.toString()); //sb = new StringBuffer(); } }); findAndHookMethod(MessageDigest.class, "digest", byte[].class, "int", "int", new XC_MethodHook() { protected void afterHookedMethod(MethodHookParam param) throws Throwable { //sb.append(" : " + (Integer) param.getResult()+"]"); //XposedBridge.log(TAG + sb.toString()); //sb = new StringBuffer(); } }); } }