最近破解一个app,逆向tcp传输的时候,发现对方用的是netty,传输的是序列化的对象,定义的对象用到了谷歌的包,如果完全还原得自己照着写一个app,还得导入各种开发包,比较麻烦,有没有什么其他办法。。目前自己用的办法是hook对象,使用反射,不断调用,但是还是觉得比较麻烦。,想问问有没有比较其他的好的方式?
关于之前自己写的app调试插件的问题。。。
好几位小伙伴私信我问我有没有更加完善的版本。。
当然有啊。。。
成品就不发了。。。
关键问题发一下,基本全能hook,
有些私信的问题是。。字节,等转换显示不出来内容的问题,还有返回值的问题。,。。
这些其实自行学习一下,自己就可以写一个自己的工具,也不难。,。。望努力。
下面说一下自己hook期间遇见的问题。
多个dex
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
ClassLoader cl = ((Context) param.args[0]).getClassLoader();
Class c = cl.loadClass(xs.getString("classes", null));
Utils.findMethod(c);
}
}
});
findMethod 方法:
public static void findMethod(Class hookclass) {
if(!hookclass.isInterface()){
for (Method method : hookclass.getDeclaredMethods()) {
if (!Modifier.isAbstract(method.getModifiers())) {
findParamFormMethod(method, hookclass.getName(),hookclass);
}
}
}
}
findParamFormMethod :
public static void findParamFormMethod(final Method method, final String className,final Class cc) {
XposedBridge.hookMethod(method, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// TODO Auto-generated method stub
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//输出内容
}
});
}
第二个问题,app动态加载jar的问题
XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(final MethodHookParam param) throws Throwable {
if (param.hasThrowable()) return;
Class<?> cls = (Class<?>) param.getResult();
String name = cls.getName();
/* if ("*****************".equals(name)) {
// 所有的类都是通过loadClass方法加载的
// 所以这里通过判断全限定类名,查找到目标类
// 第二步:Hook目标方法
XposedHelpers.findAndHookMethod(cls, "xXXxOoOOxoXXoXoO", URL.class,byte[].class,String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log(param.method + " params: " + Arrays.toString(param.args));
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log(param.method + " return: " + param.getResult());
}
});
}*/
每个jar都需要通过 loadClass加载,所以就是这个原理
跟踪一个app的行为:
eacK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4y4%4K9h3#2E0k6i4t1J5x3o6l9H3i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5#2x3U0x3^5y4o6R3I4y4H3`.`.
加以修改,可以看到整个app的流程
[培训]科锐逆向工程师培训第53期2025年7月8日开班!