SmaliInjector (对重度混淆过的apk处理得比dex2jar更好)
来源:互联网 发布:达观数据现在多少人 编辑:程序博客网 时间:2024/04/28 09:57
说明:
===================================================================
1). dex 转 jar 用的 enjarify,比目前常用的 dex2jar(d2j) 要稳定可靠得多,尤其是在处理重度混淆过的apk时
2). 用于对apk进行代码修改,扫描目标apk中函数,并在指定函数的开头部分 添加 调用自定义静态函数的代码
3). 省略 jar 转 smali 再回转的步骤,转而使用 objectweb.asm(ow2) 直接对 jar 文件进行 smali 注入
4). dex2jar 的步骤使用的是 google 自家的 enjarify 工具,没使用老掉牙的、对部分混淆apk处理极不准确极不稳定的 dex2jar(d2j)
5). jar2dex 使用的是 android studio 自带的 dx.bat 工具,貌似 dex2jar(d2j) 在做jar回转的时候也是调用dx.jar
===================================================================
1). dex 转 jar 用的 enjarify,比目前常用的 dex2jar(d2j) 要稳定可靠得多,尤其是在处理重度混淆过的apk时
2). 用于对apk进行代码修改,扫描目标apk中函数,并在指定函数的开头部分 添加 调用自定义静态函数的代码
3). 省略 jar 转 smali 再回转的步骤,转而使用 objectweb.asm(ow2) 直接对 jar 文件进行 smali 注入
4). dex2jar 的步骤使用的是 google 自家的 enjarify 工具,没使用老掉牙的、对部分混淆apk处理极不准确极不稳定的 dex2jar(d2j)
5). jar2dex 使用的是 android studio 自带的 dx.bat 工具,貌似 dex2jar(d2j) 在做jar回转的时候也是调用dx.jar
6). 手机无需 root
下载地址:
http://download.csdn.net/detail/jizhitp/9904209
public static int processJarFile(String fnOldjar, String fnNewjar) {int nFunctionProcess = 0; try { JarFile Oldjar = new JarFile(new File(fnOldjar)); File Newjar = new File(fnNewjar); try (final JarOutputStream output = new JarOutputStream(new FileOutputStream(Newjar))) { Enumeration<JarEntry> enumeration = Oldjar.entries(); while (enumeration.hasMoreElements()) { //<editor-fold defaultstate="collapsed" desc="遍历jar文件中的所有.class文件"> JarEntry next = enumeration.nextElement(); if (next.getName().endsWith(".class")) { ClassNode cn = new ClassNode(ASM5); ClassReader cr = new ClassReader(Oldjar.getInputStream(next)); cr.accept(cn, 0); //<editor-fold defaultstate="collapsed" desc="根据类名来判断当前类是否为需要注入smali的类"> if (cn.name.equals("com/test/u/t")) { for (Object methodNodeObj : cn.methods) { MethodNode methodNode = (MethodNode) methodNodeObj; //<editor-fold defaultstate="collapsed" desc="根据函数名判断该函数是否需要注入"> if (methodNode.name.equals("a")) { //new MethodHelper(methodNode.access, cn.name, methodNode.name, methodNode.desc, (MethodVisitor) methodNode); String tmpInject_ClassName = SmaliInjector.pc.Injector.Inject_ClassName.replace(".", "/"); String tmpInjectMethodName = SmaliInjector.pc.Injector.InjectMethodName; //<editor-fold defaultstate="collapsed" desc="根据函数的参数列表来判断是否为需要注入的函数"> if (methodNode.desc.equals("([B[BLcom/test/pointers/PInt;Lcom/test/protocal/c/asb;)[B")) { System.out.println("\tfound: "+cn.name+"."+methodNode.name+methodNode.desc);nFunctionProcess++; InsnList injectCode = new InsnList(); injectCode.add(new VarInsnNode(Opcodes.ALOAD, 1)); injectCode.add(new MethodInsnNode(Opcodes.INVOKESTATIC, tmpInject_ClassName, tmpInjectMethodName, "([B)V", false)); AbstractInsnNode firstIns = methodNode.instructions.get(0);//.getFirst();// methodNode.instructions.insertBefore(firstIns, injectCode); } else if (methodNode.desc.equals("(I[B[B)Z")) { System.out.println("\tfound: "+cn.name+"."+methodNode.name+methodNode.desc);nFunctionProcess++; InsnList injectCode = new InsnList(); injectCode.add(new VarInsnNode(Opcodes.ALOAD, 3)); injectCode.add(new MethodInsnNode(Opcodes.INVOKESTATIC, tmpInject_ClassName, tmpInjectMethodName, "([B)V", false)); AbstractInsnNode firstIns = methodNode.instructions.get(0);//.getFirst();// methodNode.instructions.insertBefore(firstIns, injectCode); } //</editor-fold> } //</editor-fold> } // end of methods loop } // end of java class name filter //</editor-fold> ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); cn.accept(cw); output.putNextEntry(new JarEntry(cn.name.replaceAll("\\.", "/") + ".class")); output.write(cw.toByteArray()); output.closeEntry(); } // end of if jarEntry == .class //</editor-fold> } // end of .class loop } Oldjar.close(); } catch (IOException e) { e.printStackTrace(); }return nFunctionProcess; }
阅读全文
0 0
- SmaliInjector (对重度混淆过的apk处理得比dex2jar更好)
- 没人比得过的游吧看吧
- 如何利用dex2jar反编译APK及代码混淆
- 对开发者来说,没有比现在更好的时代
- 我们是不怕困难的,我相信有人会比我做得更好
- 代码混淆对APK加固所起的作用
- 通过eclipse对apk加密混淆的方法
- APK的代码混淆
- Apk的混淆
- Android studio配置progard工具生成混淆APK,并使用dex2jar、JD反编译查看效果
- APK_Android APK 签名比对
- Android APK 签名比对
- Android APK 签名比对
- Android APK 签名比对
- Android APK 签名比对
- Android APK 签名比对
- Android APK 签名比对
- Android APK 签名比对
- 斐波那契数列衍生:求青蛙跳台阶
- 【联系】二项分布的对数似然函数与交叉熵(cross entropy)损失函数
- java-匿名内部类
- Vue 生产环境部署
- Codeforces Round #386 (Div. 2) 746A Compote
- SmaliInjector (对重度混淆过的apk处理得比dex2jar更好)
- 左偏树 总结
- 6、表单
- linux opendir计算目录大小
- Centos7x 自定义开机脚本服务
- 使用线程池的好处
- Play framework Action、Controller和Result
- java-内部类
- hdu4920 滚动数组的矩阵相乘