博士生
阿巴阿巴
  
- 金币
- 2219
- 好评
- 244
- 信誉
- 190
|
在逛求助帖时发现了一篇关于包名共存的帖子,楼主说是共存后闪退?
用mt的共存功能,生成共存的APP闪退是哪儿的问题?
于是便下载下来看了一下,一开始还以为只是加载so的问题,后来在一看,原来是so层校验,那就用IDA来手撕它吧
设置个隐藏,免得看了不回复一点也不好玩
首先先下载原包MT去签然后安装看看,这一步是排查是不是签名没过的问题
不难看出,软件正常进入,那么就可以排除是签名校验的问题,那么,我们试一下修改包名
这下子确定了,是包名校验
接下来便是看一下闪退日志(这一步很简单我不细讲,如果你连这个都不会的话还是先去学基础吧)定位到com.zing.zalo.utils.NativeLoader.q这个方法,转Java分析一下
看到43行代码,可以确定了,这是一个加载so的代码,但是它加载的是哪个so呢?在看一下可以发现是调用了aVar.j()这个方法 , 进入看一下可以看到,它的返回值类型是一个字符串,调用了a变量来获取,那么,System.loadLibrary它接受的参数类型就是一个字符串,那么,是不是在它要加载的时候,j方法会返回它要加载的so呢?那我们Hook一下j方法的返回值看看
可以看到,被修改过后的软件加载到native_utils这个so就不动了, 因此,可以怀疑是这个so搞得鬼了,话不多说,IDA启动!!
我们去/lib/arm64-v8a/把native_utils这个so给拿出来push到电脑上,随后用IDA打开
, 用IDA64新建一个工程(新手注意:so分32位以及64位 , arm64-v8a放着64位so,armeabi-v7a放着32位so),等他载入成功之后,SHIFT+F12打开字符串窗口,看看有没有什么有用的信息, 一番查看看到了exit,这不就是闪退吗?点进去来到图中位置
注意黄色的地方,点进去 , F5转伪C , 很明显的闪退逻辑,那么软件是不是检测到不对就会来到这里?所以点一下函数名然后按x查找交叉引用
三个引用。一个一个看 , 第一个
等于0就闪退,不必理会,暴力修改
这是个跳转指令,让他不要执行下面的条件,那就
nop掉,nop代表什么也不做也就是空指令防止它跳转走 , 并未消失,好吧,那就给他调用的指令nop掉
接下来第二个调用
黄色的地方是个标签 , 我们往上面看看哪里跳转了这个标签
给它nop掉不让他跳转 , 好了第二个搞定,最后一个调用和上面两个同理
最后保存放回64位so文件夹里面
非常完美,教程!完
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
查看全部评分
总评分:好评 +3
金币 +5
|