Android逆向开发处理unknown文件&AppsFlyer库中classes.jar中的a-,b-资源合并问题

unknown文件如何产生

  • 我们来使用apktool d 命令,可以看到I: Copying unknown files...日志打印,这个表示apktool正在拷贝unknown文件
    G:\workspace\apktool>apktool d dc.apk
    I: Using Apktool 2.4.1 on dc.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Baksmaling classes2.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
  • 我们可以看到反编译产物的目录里面有个unknown的文件夹,里面放了一些文件或目录
  • 我们再打开apktool.yml,在文件的最下面可以看到一个unknownFiles字段,其后配置的就是unknown文件夹下的所有文件的路径,后面跟上": '0'",或者": '8'",这里面的配置很重要,决定了后面apk重新构建时unknown目录下的文件能否打进去,如果不配置apktool进行回编译的时候回丢弃掉没有配置的文件
  • apktool官方文档对unknownFiles有个说明:unknownFiles - Used to record name/location of non-standard files in an apk in order to place correctly on rebuilt apk(用于记录 apk 中非标准文件的名称/位置,以便正确放置在重建的 apk 上 )
  • 当我们对uunknown文件有了初步的认识后,在我们进行逆向开发的时候,就能解决有些莫名其妙的问题,下面我举个现实中遇到例子吧

AppFlyer aar包合并问题

  • 最开始我们接入的AppsFlyer的版本都是5.0以下,在进行打包合并代码的时候都没有什么问题,后来AppsFlyer要求升级到5.0版本以上,本来以为升级了SDK应该没啥问题,但是自从升级后,市场那边就反馈AF后台没有数据,我们这边查了好久都没查到问题,只有先回退到5.0以下的版本出包了,然后想AF的技术人员发了一个工单,帮我们定位下问题,他们反馈缺失了两个资源文件
  • 然后我们顺着AF技术反馈的,去他们的aar包中查看,果然还真的有这么两个文件,但是为啥我们的打包工具将这两个文件吃掉了呢,原来这两个文件是保存在classes.jar中的,打包工具在将classes.jar转成dex文件,再转smali文件的时候是没有提取这个两个文件的,而且现有的工具也处理不了
  • 我们直接把aar进行解压,然后再解压classes.jar文件,可以看到里面的a-和b-文件
  • 其实有了这两个文件还是没法正确的合并到母包中去,前面我们说了需要配置apktool.yml中的unknownFiles字段,里面需要加上这两个文件在unknown文件下路径,而且后面还要配置": '0'",或者": '8'",但是这个我们这没法确定该配置0还是8的
  •  还好我们有其他手段去获取这两个文件该配哪个数字,我们新建一个空的android工程,不要引入任何三方库,只引入AF的库,然后出个apk,将这个apk使用apktool进行反编译,反编译后的产物里面果然看到了unknown文件夹和apktool.yml文件
  • 然后可以看到看apktool.yml里面的unknownFiles下a-,b-配置的后缀两个都是0
  • 然后我们原封不动的将  com/appsflyer/internal/a-: '0'和com/appsflyer/internal/b-: '0'  拷贝到母包的apktool.yml中,并将unknown目录下的文件拷贝到母包的unknown目录下,然后再将其他文件合并到母包中去,重新走出包流程,再进行测试,后面这个AppsFyler后台的数据终于正常了。
  • 其实还有很多第三方库,我们在做合并的时候是没有注意到这个问题的,这个得靠经验去整了,当第一次遇到,还真不好找问题出现在哪里,所以这里记录下这个问题,分享给大家,当你们遇到的时候可能有些帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值