反编译和逆向出现:java.lang.VerifyError(新问题样本)

#PS:要转载请注明出处,本人版权所有

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

前序

某日,遇到一个App,突然想来一发,于是,直接下到这个app的老一点的版本,用某自动脱壳机脱壳后,得到Dex文件。并通过工具(AndroidKiller)生成Smali文件(此文件不完整)。

修复

首先,把Smali文件放回到我们反编译后的Apk文件目录去,修复相关的类目录。这时候,在通过工具,把整个工程重新编译生成Apk,是可以正常安装的,但是不能够正常打开,并且得到java.lang.VerifyError错误。
经过大量的搜索和整理,得到如下结论。
此错的原因为:由于smali指令序列不符合相关的规范(指令丢失,反编译失败了,或者指令反编译错误,得到了错误的smali指令。对于反编译失败,相关的反编译工具(AndroidKiller)可能会在当前字段出现标注,根据标注解决就好)。
网上现存的不规范的原因:
1 寄存器使用数量和定义个数不一致(用脚本很容易出现此问题)
2 函数体不完整,丢失相关标识符.end method等

java.lang.VerifyError 新问题样本

1 反编译出问题的东西大部分在构造函数,init()方法大部分都出现在缺少return-void
2 当前类继承的interface,父类为java object ,出现 没有调用java object - > init()方法

对于以上问题,其实相关工具会在smali文件里面存在 #disallowed odex opcode错误,直接搜索就可以解决。

#PS:请尊重原创,不喜勿喷

#PS:要转载请注明出处,本人版权所有.

有问题请留言,看到后我会第一时间回复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值