Android逆向分析实例(二)-修复输入法回编译后闪退问题

5 篇文章 2 订阅
4 篇文章 1 订阅

1.思考

apk回编译后闪退,那肯定是这个app做了保护措施。开始我是这样想的,app闪退?那不就是被杀掉了进程嘛,直接去找KillProcess函数(杀死现有进程,也就是自己杀自己)不就行了么,或者找System.exit()函数(用 java api 退出当前线程)应该也可以,于是我根据这两个函数我找到了这个:apk下载链接

既然找到了函数,那么直接把对应的smali文件里的A02()函数里的内容全都删掉,然后返回一个空值(return null)应该就可以了。思路应该是没问题的,但是问题出现了,我在解压出的文件中找不到A02()所在的那个smali文件😂。

那就只能另寻他路了,可以这样想,app在杀掉进程之前肯定有一个判断,判断这个apk是否被回编译过,如果是,就杀掉当前进程,而这个判断的依据是什么呢?那就是跟上一篇一样的签名验证。

2.定位

有思路了,接下来就是定位代码,还是一样用jadx打开apk,然后全局文本搜索signature,直接找到了verifySignature()函数:

函数代码如下:

把这个false改为true,应该就没问题了。

3.修改

该函数所在的文件为:

找到smali文件中的verifySignature函数:

0x0改为0x1,也就是将return的值从false改为true

改完后重新打包签名,这个时候又出现了一个问题:重打包后的apk文件可以正常安装使用,但是签名后安装就会显示该apk未签名无法安装。这是怎么回事呢?我明明签名了啊,后面发现是因为没有删除原签名文件导致的:

把这两个文件删除后,再次打包签名就没问题了。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿航的博客

我比你有钱,请不要打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值