加固后性能问题
作者你好,我用你这个工具加固apk,只加固了包名下的所有类,apk运行时很卡顿,时不时应用停止运行,请问怎么分析问题出在哪呢?
指令虚拟化就是局部加固重要逻辑的,不适合用于全局,demo全加固只不过为了验证兼容性。第三方开源库,大量数组相关操作这些别转换。加固第三方开源库纯粹给逆向分析的人提供指令映射关系,数组相关操作效率极低。
指令虚拟化就是局部加固重要逻辑的,不适合用于全局,demo全加固只不过为了验证兼容性。第三方开源库,大量数组相关操作这些别转换。加固第三方开源库纯粹给逆向分析的人提供指令映射关系,数组相关操作效率极低。
感谢大佬回复,我把包含数组操作相关的函数过滤掉就可以了,除了数组操作比较耗时还有其他的耗时操作吗?
if (instruction.getOpcode()== Opcode.AGET ||instruction.getOpcode()== Opcode.AGET_BOOLEAN||instruction.getOpcode()== Opcode.AGET_BYTE||instruction.getOpcode()== Opcode.AGET_CHAR ||instruction.getOpcode()== Opcode.AGET_OBJECT||instruction.getOpcode()== Opcode.AGET_WIDE||instruction.getOpcode()== Opcode.AGET_SHORT ||instruction.getOpcode()== Opcode.APUT||instruction.getOpcode()== Opcode.APUT_BOOLEAN||instruction.getOpcode()== Opcode.APUT_BYTE||instruction.getOpcode()== Opcode.APUT_CHAR ||instruction.getOpcode()== Opcode.APUT_OBJECT||instruction.getOpcode()== Opcode.APUT_WIDE||instruction.getOpcode()== Opcode.APUT_SHORT)
其他没那么明显,还有就是循环中反复创建,删除引用,这个基本没法自动处理。实际使用时尽量缩小加固范围。
instruction
兄弟,你这个过滤条件是在哪块逻辑加的?是在InstructionRewriter这个抽象类的具体实现类里吗?
实现ClassAndMethodFilter接口,两个过滤方法参数是dexlib2的ClassDef和Method,可以依据它们获得方法信息以及遍历指令之类。
实现ClassAndMethodFilter接口,两个过滤方法参数是dexlib2的ClassDef和Method,可以依据它们获得方法信息以及遍历指令之类。
我在MyMethodUtil里应该也可以做吧?遍历方法的指令,涉及数组相关操作方法的就加到白名单,这样效果一样吗?
实现ClassAndMethodFilter接口,两个过滤方法参数是dexlib2的ClassDef和Method,可以依据它们获得方法信息以及遍历指令之类。
佬,目前哪些指令操作会对性能损耗比较大呢?
最明显就是数组操作,每次访问vm中要做额外的边界检查,以及可能出现的复制整个数组。其他的很难有简单的方法解决性能问题,这别用于处理整个应用,性能下降很明显,只适用于部分重要逻辑进行虚拟化。而且如果处理开源库几乎会导致opcode随机化效果失效。
我现在就是整个应用都进行了处理,但是只处理应用包名,不会去处理开源的或者三方SDK ,确实发现很多相关的ANR 问题。把oncreate 和数组相关以及线程同步相关的指令过滤掉后,低端机提升很明显,没有那种肉眼可见的卡顿了
---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2025年04月16日 19:24 | | 收件人 | maoabc/nmmp @.> | | 抄送人 | JhinSir @.>, Comment @.> | | 主题 | Re: [maoabc/nmmp] 加固后性能问题 (Issue #119) |
最明显就是数组操作,每次访问vm中要做额外的边界检查,以及可能出现的复制整个数组。其他的很难有简单的方法解决性能问题,这别用于处理整个应用,性能下降很明显,只适用于部分重要逻辑进行虚拟化。而且如果处理开源库几乎会导致opcode随机化效果失效。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
maoabc left a comment (maoabc/nmmp#119)
最明显就是数组操作,每次访问vm中要做额外的边界检查,以及可能出现的复制整个数组。其他的很难有简单的方法解决性能问题,这别用于处理整个应用,性能下降很明显,只适用于部分重要逻辑进行虚拟化。而且如果处理开源库几乎会导致opcode随机化效果失效。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>