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文件)的二次打包的更多相关文章

  1. cocos2d-x 编译 安卓(android)apk文件

    摘要: 一.下载Android环境 搭建Android环境需要用到Android SDK.NDK.Ant和JDK: 下载Android SDK  下载Android NDk  下载Android JD ...

  2. IIS配置安卓下载.apk文件

    前提:你的.apk文件所在路径正确,例如:www.grainnews.com.cn:8002/Attach/Images/201807/20180712091842127.apk 1.打开IIS 2. ...

  3. Android 自动编译、打包生成apk文件 4 - 多渠道批量打包

    相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式 > < ...

  4. linux下安卓编译apk环境搭建

    ubuntu下linux安卓编译环境搭建. 配置好编译环境 (前提是已经安装了jdk,可以用java -verison 命令查看) 一.设置环境变量 用vi  ~/.bashrc  打开编译环境 JA ...

  5. 如何给apk文件签名

    1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本 ...

  6. 使用Advanced Installer进行二次打包

    使用Advanced Installer进行二次打包 在上一篇使用InstallerShield打包VS程序中,我已经叙述过,为什么要进行二次打包的问题,在此我就不再赘述.本次长枪直入,说一说如何使用 ...

  7. HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置

    在 HBuilder 云打包功能中,生在 .apk 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...

  8. 基于nginx实现二维码下载安装apk文件

    将apk文件置于nginx目录下 <!--进入nginx安装路径--> /usr/local/nginx <!--新建放apk的目录--> mkdir -p resources ...

  9. Mac 下安装安卓 apk 文件

    Mac 下安装安卓 apk 文件 在windows上有比较多的第三方软件可以使用,双击就可以将apk文件安装到手机上. 在Mac 上要实现这样还是挺难得,目前还没有像Windows那样的第三方软件可以 ...

随机推荐

  1. Sending data to USB printer in C#?

    using System; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Run ...

  2. 18款 非常实用 jquery幻灯片图片切换

    1.jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 jquery图片特效制作仿腾讯QQ商城首页banner焦点图片轮播切换效果,带索引按钮控制和左右按钮控制图片切换. 查看演示>& ...

  3. MVC View基础

    View主要用于呈现数据.由于Controller和相关的Service已经处理完业务逻辑并将结果打包成model实体,View只需要怎么去获得model并将其转为Html 1选择需要渲染的视图 在上 ...

  4. JD-GUI反编译后代码逻辑分析

    一,用jd-gui.exe等工具查看源代码.如何你不会,可以参看此文章: http://blog.csdn.net/hp_2008/article/details/8207879 可以到以下连接下载可 ...

  5. JS 变量提升

    var a = 1; function foo() { console.log(a); var a = 2; } foo(); //undefined 根据变量提升机制,最后得出undefined; ...

  6. 【HTML】Beginner6:Link

    1.Link HTML wich basically means a system of linked text     link to another HTML file or any file a ...

  7. NOIP2000 单词接龙

    题三.  单词接龙                (27分)    问题描述    单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的 ...

  8. boj1267 Infinite’s Cave 树形dp + 背包

    题目链接:http://acm.bupt.edu.cn/onlinejudge/newoj/showProblem/show_problem.php?problem_id=1267         / ...

  9. hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】

    The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  10. SQL注入专题

    SQL注入专题--整理帖 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被 ...