allenymt / PrivacySentry

Android隐私合规整改检测工具,注解+Asm修改字节码的检测方案
MIT License
2.05k stars 262 forks source link

请教个问题,怎么hook Activity的onCreate函数? #120

Open jambooid opened 1 month ago

jambooid commented 1 month ago

我参照这ServiceHookTransform写了一个ActivityHookTransform,但是没有hook到,反编译activity发现也没有插入自定义的代码 test

class ActivityHookTransform: BaseHookTransform() {
    override fun ignoreClass(context: TransformContext, klass: ClassNode): Boolean {
        var ignore = super.ignoreClass(context, klass)
        if (klass.isInterface) {
            return true
        }
        if (!ignore) {
            ignore = !PrivacyPluginUtil.privacyPluginUtil.isActivity(klass.formatName(), klass.formatSuperName())
        }
        return ignore

    }

    override fun transform(
        project: Project,
        privacyExtension: PrivacyExtension,
        context: TransformContext,
        klass: ClassNode
    ): ClassNode {
        println("onCreate tranform"+klass.formatName())
        HookedDataManger.MANAGER.addHookService(klass.formatName())
        val onStartCommandMethod = klass.methods.find { it.name == "onCreate" }
        if(onStartCommandMethod!=null){
            println("onCreate tranform"+klass.formatName())
        }

        onStartCommandMethod?.instructions?.iterator()?.asSequence()?.forEach {
            if (it is InsnNode) {
                if (it.opcode == Opcodes.RETURN || it.opcode == Opcodes.IRETURN) {

                    val newInstructions = InsnList()
                    newInstructions.add(LdcInsnNode("xxxxx") )
                    newInstructions.add(LdcInsnNode("onCreate end======") )
                    newInstructions.add(MethodInsnNode(Opcodes.INVOKESTATIC, "android/util/Log", "i", "(Ljava/lang/String;Ljava/lang/String;)I", false) )
                    newInstructions.add(InsnNode(Opcodes.POP))

                    onStartCommandMethod.instructions.insertBefore(it, newInstructions)
                }
            }
        }
        return klass
    }
}