Android中利用AXMLEditor工具不进行反编译就篡改apk文件

原创 2017年08月28日 08:46:03

一、问题描述

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


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


二、案例操作

第一步:修改代码

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


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


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


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


第二、修改清单文件

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


所以我们第一步得先用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文件中这么定义:


然后命令也很简单:

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文件夹即可。


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


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


四、操作总结

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


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

  • 第一步:利用baksmali和smali工具直接修改器对应的dex文件
  • 第二步:利用AXMLEditor.jar工具直接修改对应的xml文件

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


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


五、总结

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


更多内容:点击这里

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

编码美丽技术圈
微信扫一扫进入我的"技术圈"世界

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

CSDN日报20170828——《4个方法快速打造你的阅读清单》

程序人生 | 4个方法快速打造你的阅读清单作者:foruok 下面提供四种方法,无论你是否经常读书,都可以使用它们快速构建起你的阅读清单: 从问题到图书 信息缺口 关联 跟...

DOM 0级事件和DOM2级事件的认识

简单点说0级DOM主要分为2个: 一是在标签内写onclick事件     二是在JS写onlicke=function(){}函数1) 2)document.get...
  • osdfhv
  • osdfhv
  • 2016-10-21 13:29
  • 1812

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

? extend 和 super 分析

ArrayList al = new ArrayList; Listextends A> l = al; // l.add(new A()); // l.a...

关注CSDN程序人生公众号,轻松获得下载积分

关注公众号 在公众号里回复“”秘密“”两个字 返回 http://task.csdn.net/m/task/home?task_id=398 领取奖励 提示:根据公众号里的自动回复,完成...

转载:TCP为什么要三次握手而结束要四次

转载:TCP为什么要三次握手而结束要四次转自:http://blog.csdn.net/scythe666/article/details/519260421、连接为什么3次握手举个打电话的例子:  ...

分销系统获得一个用户的所有下级

在做分销系统的时候,上下级的关系只有父id的情况下,获得这个id的所有下线,下线的下线.... public function countLine($parentId,$router,$rou...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)