Android中如何不进行反编译就篡改apk文件

一、问题描述

在上一篇文章,我们已经介绍了如何修改arsc文件,直接利用AXMLEditor工具进行二进制文件修改,可以实现对属性和标签的增删改。这样我们就不需要在反编译apk文件,然后修改xml在回编译了。而本文就用一个案例来分析这个工具的用法,我们用一个回编译失败的apk包文件,那就是我们常用的WX,我们想实现的效果很简单,在WX的启动页面篡改一下,启动的是我们插入的广告页面,效果如下:

Android中如何不进行反编译就篡改apk文件_第1张图片

看到这里,我们要做的很简单,定义一个广告Activity启动页面,然后把这个广告Activity配置到清单文件入口即可。我们需要做两件事:修改代码+修改AndroidManifest.xml文件了。

二、案例操作

第一步:修改代码

这个比较简单了,也是我们后续修改代码不进行反编译的一个重要操作。直接利用压缩文件解压出WX的apk包中的主dex文件classes.dex,然后利用baksmali.jar和smali.jar工具进行反编译成smali代码。当然这里看到有一个操作就是反编译了。不过反编译代码一般都很多报错情况,如果更牛逼的是二进制修改dex文件。哎,感觉那个操作就太费劲了。真心不敢尝试了。所以就还是利用这个工具进行需更修改吧。一般这里报错几乎很少的。这个工具网上很多,自行搜索下载即可。我们也可以利用这个工具去修改jar文件,可以先把jar文件利用dx命令转化成dex然后在反编译成samli文件进行修改即可。工具用法很简单:

Android中如何不进行反编译就篡改apk文件_第2张图片

如果真的没找到这个工具,可以留言单独发给你们吧。

那么这个插入广告的smali代码难道要手动编写?那是肯定不是的,我们可以定义一个demo工程,然后编写好这个广告开平Activity,然后在反编译我们的demo应用拿到对应的smali语法。然后直接将代码文件拷贝到刚刚用baksmali工具反编译之后的文件夹目录下即可:

Android中如何不进行反编译就篡改apk文件_第3张图片

一定要注意文件的包名是对应的文件夹名称。所以没有对应的文件夹需要手动新建文件夹。放完之后直接利用smali工具在进行回编译成dex文件即可。然后在利用压缩文件直接替换apk文件中的classes.dex文件即可。

第二、修改清单文件

上面我们就成功的把代码插入到了dex文件中了,下面还需要修改他的清单配置文件,把我们的广告Activity配置成启动页面,但是WX默认的启动页面是:

Android中如何不进行反编译就篡改apk文件_第4张图片

所以我们第一步得先用AXMLEditor.jar工具删除这个activity标签,为什么是删除呢?其实我们是想修改这个标签,让他不要成为启动页面,但是直接删除intent-filter操作有点费劲,所以直接删除这个标签,然后在插入即可:

java -jar AXMLEditor.jar -tag -r activity com.tencent.mm.ui.LauncherUI AndroidManifest.xml AndroidManifest_out.xml

我们依然利用压缩工具解压出他的AndroidManifest.xml文件进行操作,操作完成之后,我们需要插入操作了,因为我们需要插入广告页面和刚刚被我们删除的页面,所以直接在插入的xml文件中这么定义:

Android中如何不进行反编译就篡改apk文件_第5张图片

然后命令也很简单:

java -jar AXMLEditor.jar -tag -i insert.xml AndroidManifest.xml AndroidManifest_out.xml

这样我们就把xml中的内容插入到了WX的清单配置文件中了。有的同学会好奇,关于WX原来的那个启动页面,我们在插入的时候删除了好几个属性,其实是因为现在AXMLEditor.jar不支持引用的属性操作。所以这里就直接删除了,而这些属性其实不是太影响使用的。所以可以忽略不管了。

三、签名安装

然后我们把修改之后的xml替换WX的apk中的xml文件即可。这时候我们就完成了代码和配置的全部替换工作,接下来我们还得做一步,就是需要删除WX之前的签名文件,这个可以直接在压缩文件中删除META-INF文件夹即可。

Android中如何不进行反编译就篡改apk文件_第6张图片

删除之后,我们就可以利用jarsigner工具直接签名即可。签名之后安装,我们如果在这个过程中操作不当会出现安装包损坏的错误信息。所以可以简单的排查文件,可能是我们修改xml文件出错了。我们可以直接用jadx打开apk文件:

Android中如何不进行反编译就篡改apk文件_第7张图片

正常的情况下,是不会报错的,插入成功的,如果包损坏的话,这里就打不开xml文件了。

四、操作总结

到这里我们就成功插入了广告页面,看看效果如下:

Android中如何不进行反编译就篡改apk文件_第8张图片

这样我们就省去了反编译和回编译的复杂操作,也可以避免了很多错误处理。所以从这里可以看到二进制修改文件的需求还是有的。下面就来总结一下,对于我们在使用apktools工具进行反编译失败的时候,我们可以这么做来避免:

第一步:利用baksmali和smali工具直接修改器对应的dex文件

第二步:利用AXMLEditor.jar工具直接修改对应的xml文件

而我们只需要利用压缩文件直接解压出dex文件和xml文件即可。修改之后在替换原来的文件,删除签名文件。再次签名即可使用了。这样的操作问题少也方便。

工具源码下载地址:https://github.com/fourbrother/AXMLEditor

五、总结

关于Android中资源文件修改后面还会继续进行,我们需要直接二进制修改resource.arsc文件,插入资源文件的功能,不过这个工作会比这个难点,因为resource.arsc文件格式更为复杂。不过如果完成了,以后可以不用在担心回编译遇到的各种错误问题了。也不需要再一次反编译和回编译操作了就可以实现篡改apk文件了。

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

Android中如何不进行反编译就篡改apk文件_第9张图片

编码美丽技术圈

微信扫一扫进入我的"技术圈"世界

Android中如何不进行反编译就篡改apk文件_第10张图片

扫一扫加小编微信添加时请注明:“编码美丽”非常感谢!

Android中如何不进行反编译就篡改apk文件_第11张图片

你可能感兴趣的:(Android中如何不进行反编译就篡改apk文件)