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

 

1.思考

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

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

那就只能另寻他路了,可以这样想,app在杀掉进程之前肯定有一个判断,判断这个apk是否被回编译过,如果是,就杀掉当前进程,而这个判断的依据是什么呢?那就是跟Android逆向实例(一)-绕过搜狗输入法的签名验证一样的签名验证。

 

2.定位

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

函数代码如下:

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

 

3.修改

该函数所在的文件为:

找到smali文件中的verifySignature函数:

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

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

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

我的公众号!

posted @ 2021-06-02 19:00  国名老公阿航  阅读(785)  评论(0编辑  收藏  举报