关于安卓应用(APK文件)的二次打包
http://blog.csdn.net/baiyuliang2013/article/details/40426681
很多开发者,不管是个人或是公司都不太注重自己开发的应用的安全性,即是 否会被不法分子篡改代码,插入恶意代码,发一些垃圾广告,甚至盗用用户信息。包括我在内,也并不太在意,直到前几天在市场上发布的一款应用被盗版并上传到 了某些应用市场才发现问题的严重性!期初我并不知道该市场上的应用是盗版的,还在沾沾自喜呢,并且下载了一个装在了手机里,后来发现手机通知栏莫名其妙的 出现许多垃圾广告,还有一些应用我并没有安装,但却出现在了我的手机上,我纳闷了,长按通知栏信息可以显示发布该通知的应用的信息,进去一看竟然来自我的 应用,妈呀!这是怎么回事,我并没有上广告啊!于是,我就将此安装包反编译了下,一看原包里竟然多出了一个包叫做y6,并且清单文件中也加了许多代码包括 Service,Receiver之类的,最郁闷的是包名竟然被改了,最后我把植入的广告代码统统删除掉,包名也改回来后,重新打包,竟然又成功了,看到 这里,大家有何感想??您在发布自己的应用时时候会考虑到这些??
啰嗦了这么多,那么此时我们看看那些坏银是如何进行二次打包的!反编译大家应该都不陌生,apktool就可以了,但是如何修改或者插入代码,最后再回编 成apk呢?(注:对于此过程已经倒背如流的“大神”可以离开了)我们在用apktool反编译apk后生成的文件夹中包含了一个smali文件夹,如 图:
这个即是该应用的精华所在,所有代码都在这里了,打开之后看到的全是后缀为.smali的文件,再打开某一文件看看其代码,好像没怎么见过,对了,它便是Dalvik虚拟机指令语言,修改代码也是在这里修改的,大家可以百度下,普及一下知识,好了,下面将举一个简单的例子,包括利用apktool反编译——修改代码——回编译并签名——安装修改后的应用以测试等一系列过程:
1.利用利用apktool反编译apk:
首先我写了一个简单的例子,用Eclipse生成了一个测试apk(签名后的),主代码及运行结果如图:
MainActivity.java
接下来开始反编译:
将测试文件放进apktool文件夹中,并改名为123.apk,运行APKTool.cmd:
选择1反编译后,生成一文件夹名字为APK,打开文件夹及可看到如第一张图片所显示的目录了,打开smali文件夹并找到MainActivity.smali文件打开。找到如下代码:
这些代码其实和我们的源代码是一一对应的,源代码中有的,在这里都可以找到,只是smali用的是汇编语言,所以,想进行复杂的修改还是要去学学smali语法了。
2.修改代码:
因为此例比较简单,所以不会进行太复制的修改,我们把"test my application"修改为"哈哈,你的应用被破解啦"测试一下即可!
3.回编译:
修改完毕后保存,回到apktool根目录,打开刚才的cmd,选择2或3开始执行回编译,执行成功后记得按一下回车进行签名,重新签名的应用再安装的话是会报签名不一致错误的,所以需要把原来的卸载掉再重新安装,运行如图:
到此,二次打包成功!我在写这篇文章之前,也对几个游戏进行了反编并重新打包,里面所
付费的什么金币了钻石了再找到相应代码后都是可以修改的,不过有时在使用时修改后的金币或钻石时可能会联网检测,并带有签名参数,重新打包的签名肯定和原
签名是不一致的,这个其实要在再深入研究也是可以破解的!
看到这里,大家又有何感想呢?当我们发布一款应用时,一定要检查下我们的应用是否存在被二次打包的风险,可以用以上方法测试下,有问题的就要想办法加固了(注:只进行代码混淆是不能防止被二次打包的),不然被一些不法分子利用后,损失的不到是自己,公司也还包括用户的利益了,对自身的名誉也会造成一定的伤害!
回过头来,我们猜测一下开头提到的我的应用被安插恶意广告是怎么实现的?个人觉得,就是利用上面这种方法反编译后,把已经写好并生成的smali文件放进
了我的包里,然后在清单文件中进行一些配置,并修改了包名,最后重新打包(得出这个结果是有依据的,我对二次打包的apk又进行了一次反编译,并将其安插
的代码及配置代码全部删除,包名改回,第三次打包,安装后仍然没有任何问题,而且也去除了广告,除了签名不同外),最后再提一点就是二次打包是,清单文件
中的版本,版本号,包名都是可以修改的,这个大家一定要注意了!
最后附上apktool工具下载地址:http://download.csdn.net/detail/baiyuliang2013/8077501
说明:若使用时出现问题,可以尝试将其中的aapt.exe换成自己Eclipse中的aapt.exe。
关于安卓应用(APK文件)的二次打包的更多相关文章
- cocos2d-x 编译 安卓(android)apk文件
摘要: 一.下载Android环境 搭建Android环境需要用到Android SDK.NDK.Ant和JDK: 下载Android SDK 下载Android NDk 下载Android JD ...
- IIS配置安卓下载.apk文件
前提:你的.apk文件所在路径正确,例如:www.grainnews.com.cn:8002/Attach/Images/201807/20180712091842127.apk 1.打开IIS 2. ...
- Android 自动编译、打包生成apk文件 4 - 多渠道批量打包
相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式 > < ...
- linux下安卓编译apk环境搭建
ubuntu下linux安卓编译环境搭建. 配置好编译环境 (前提是已经安装了jdk,可以用java -verison 命令查看) 一.设置环境变量 用vi ~/.bashrc 打开编译环境 JA ...
- 如何给apk文件签名
1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本 ...
- 使用Advanced Installer进行二次打包
使用Advanced Installer进行二次打包 在上一篇使用InstallerShield打包VS程序中,我已经叙述过,为什么要进行二次打包的问题,在此我就不再赘述.本次长枪直入,说一说如何使用 ...
- HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置
在 HBuilder 云打包功能中,生在 .apk 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...
- 基于nginx实现二维码下载安装apk文件
将apk文件置于nginx目录下 <!--进入nginx安装路径--> /usr/local/nginx <!--新建放apk的目录--> mkdir -p resources ...
- Mac 下安装安卓 apk 文件
Mac 下安装安卓 apk 文件 在windows上有比较多的第三方软件可以使用,双击就可以将apk文件安装到手机上. 在Mac 上要实现这样还是挺难得,目前还没有像Windows那样的第三方软件可以 ...
随机推荐
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.1.3
Use the QR decomposition to prove Hadamard's inequality: if $X=(x_1,\cdots,x_n)$, then $$\bex |\det ...
- BZOJ 2588: Spoj 10628. Count on a tree 主席树+lca
分析:树上第k小,然后我想说的是主席树并不局限于线性表 详细分析请看http://www.cnblogs.com/rausen/p/4006116.html,讲的很好, 然后因为这个熟悉了主席树,真是 ...
- CodeForces 287B Pipeline
思路:二分答案,时间复杂度O(nlgn). 若个数为x,那么算出这种情况下提供的水管的最大值和最小值与n比较即可,注意x个分离器需要减去x-1个水管. #include<cstdio> # ...
- Phonegap3.4 环境搭建及新建项目
一.环境准备 1.到这里安装Node.js. 2.到这里下载Adroid ADT Bundle for Windows,下载后解压,我的放在:F:\MobileDev\adt-bundle-windo ...
- Clean Code – Chapter 3: Functions
Small Blocks and Indenting The blocks within if statements, else statements, while statements, and s ...
- 最新版springside4基于Quickstart项目,创建自己的项目
直接输入 mvn archetype:generate -DarchetypeGroupId=org.springside.examples -DarchetypeArtifactId=quickst ...
- 第4章 类型基础 -- 4.1 所有类型都从System.Object派生
4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证 ...
- java中的"goto"--label
java中没有goto,但是goto是保留字.例如int goto;是不合法的. 但是java中有标签,仅作用在多重循环的continue和break中. continue和break只能作用于本层循 ...
- storm-starter项目概述
storm-starter项目包含使用storm的各种各样的例子.项目托管在GitHub上面,其网址为: http://github.com/nathanmarz/storm-starter stor ...
- 教程-Delphi调用C# WEBSERVICE(二)
第二步:将webserivce的WSDL导入到该dll工程中,如何导,方法至少有两种,我说简单的一种: file->new->other->WebService->WSDL ...