文档章节

Android当道,不加密的APP必死

科技创造
 科技创造
发布于 2014/09/24 17:29
字数 1810
阅读 557
收藏 21

我的题目有点夺人眼球,也当然有喷喷不平者觉得我是危言耸听,那就好好听听我说的是不是有那么一丁点道理。


标题中的APP请排除那些只想靠APP推送广告的小众开发者,诚然这些开发者的出发点并不高,只是想靠Android平台简单易上手的APP开发挣两个小广告钱(当然也包括我自己),他们目标并不是开发出一款高质量、饱含创意、凝结心血的APP,如果一款APP是由那些满腔热血、热心创业并凝结无数心血的创业团队、公司或者个人开发出来的,那我可以很负责的告诉你如果你的APP不加密那只有三种结局:


第一种结局:尽管你的APP是你日夜不辞辛劳开发而出的,但是本身质量不高、毫无新意或者本身同质化很严重,那你这个APP投到市场上就像是大海里面扔出的一颗石子,并无多回报,加密不加密无所谓,真所谓死的无怨无悔啊。


第二种结局:立意新颖、创意十足、目前软件市场几乎没有同类产品,并且能快速被大众认可接受,如果你不加密、不申请专利,那这个不加密的APP必死。


因为人在山寨之国,小小的团队方案,不是被收购就是直接被一个一模一样的替代品吃死!!!


那么如果你宁死不屈不想被收购并且不想被一个一模一样的替代品吃死的话,你的APP就必须要加密,因为不加密你的APP被人一研究,那好无需多日你会发现你的好idea你的心血全部付之东流。


第三种结局:没有必要山寨你的APP,但是你提供的服务我很感兴趣哦,如果不是要注册就好了?如果能把你提供资源直接全部拿出来共享就就好了,嘻嘻~~哦,对了我会破解:)嘻嘻~~如果不加密,被破解后果也很严重啊,以内容为王的APP,得小心了。


下面谈谈爱加密提供的服务吧:爱加密推出“APK源代码安全保护”平台,目前的三层加密保护:DEX加壳保护,DEX指令动态加载保护,高级混淆保护。可以有效防止APP的动态破解和静态破解,黑客将没有机会进行任何破解。爱加密更在年前推出了SO库保护,使C++层面的代码也得到了保护。


还是结合实例来一一说说这三个需要保护的地方吧,如果不保护会出现什么情况:


DEX指令改写,破解你的程序没商量


Android的DEX指令(确切的叫Dalvik指令更合适)和smali文件格式很相似,利用baksmali和smail就可以直接改写你的Android:


这里使用HelloOurAndroid.apk程序作为sample,我们可以使用baksmali反编译dex文件来生成smali文件,如下:


1walfred@ubuntu :reserve$ unzip -q HelloOurAndroid.apk -d HelloOurAndroid

2walfred@ubuntu :reserve$ java -jar baksmali-1.4.2.jar HelloOurAndroid/classes.dex

这样就会在当前目录下生成一个out目录,out目录:


1walfred@ubuntu :reserve$ ls out/org/ourunix/helloourandroid/

2BuildConfig.smali R$attr.smali R$id.smali R$menu.smali R$string.smali

3MainActivity.smali R$drawable.smali R$layout.smali R.smali R$style.smali

当然如果你熟悉smali语法规则的话,你就可以自由的修改这些smali文件,然后在通过smali工具重新生成dex文件:


1walfred@ubuntu :reserve$ java -jar smali-1.4.2.jar out/ -o classes.dex

只要对smali格式有所认识,那么破解你的程序真的没有商量:


这里示范有一款集成smali和baksmail的工具apktool,如果已经有了Android开发环境就能很快使用上apktool了,这里假设你已经可以直接使用apktool了。


反编译decode


1walfred@ubuntu :~/lab/apktool$ apktool d HelloOurAndroid.apk

http://ourunix.b0.upaiyun.com/2013/12/apktool1.png

这时我们可以看到在当前目录下已经生成HelloOurAndroid/文件夹了,我们来查看下反编译后的AndroidManifest.xml文件和strings.xml文件:

AndroidManifest.xml文件反编译之后和工程下的时候几乎是一模一样,所以我们可以来check下该Android应用的所有权限。

同样可以查看这些hardcode的内容:


rebuild重打包

重打包刚刚修改过的HelloOurAndroid.apk,我们就修改strings.xml目录下的“hello”为:Hello,OurUnix!

然后使用apktoo重新打包,命令如下:


1walfred@ubuntu:~/lab/apktool$ apktool b HelloOurAndroid


最后将重新编译之后的APK进行签名就可以运行了,DEX被破解之后,将有可能


1 修改AndroidManifest.xml文件中广告投放代码;


2 修改注册条件,强心登入等。


dex2jar 你的dex被一览无余


如果程序的dex没有被加壳保护,你的dex没有经过混淆,你的dex将被一览无余,你的逻辑,你的idea,你的心血,天哪,将被赤裸裸的被别人看个透!


dex2jar我想Android开发者都知道吧,很自豪这个工具开发者和我是同事。


SO库不保护,你在为他人做嫁衣


dex风险太大了,很多人有转向了使用native code编写关键代码,觉得so不好破解的同时又能提高性能并不受内存的制约,什么ida什么elf之类的工具也无法从容的查看代码,所以so成了上上策。可是我觉得你的jni一旦被别人攻下,那么恭喜你的so,我直接拿来用!!


 


之前破解了某一数一数二的杀毒软件,其代码混淆程度高,关键代码都用了so,可是殊不知这个JNI接口信息却被我找出来了,有了这些接口,你的so就是我的了,我也能山寨一个和你一样的程序!


以上这三种Android程序开发常用破解手段,我看爱加密都有提到,可是不知道他们的治疗效果究竟咋样,真想好好体验下。


另外一种话题中也提高的动态破解,我稍微带下,毕竟这个使用方式更高,破解更容易,运行你的APP,你的行为,你的debug log(呵呵,我改你的smali打开你的debug开关),当然如果想获取网络资源,使用tcpdump、wireshark对Android应用程序进行抓包并分析。真是so easy。


© 著作权归作者所有

科技创造
粉丝 37
博文 199
码字总数 174505
作品 0
徐汇
程序员
私信 提问
加载中

评论(2)

windhuiyi
windhuiyi
这不是广告?
肖滔
肖滔
这让html5的app情何以堪
CLEARTEXT communication to xxx not permitted by network security policy

Android P http网络请求不通,报出异常:java.net.UnknownServiceException: CLEARTEXT communication to xxxx not permitted by network security policy Google表示,为保证用户数据和设备......

醉雨
05/24
38
0
加密传输才是王道!谷歌在 Android P 上默认启用 TLS

上周四谷歌表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 ...

局长
2018/04/16
3.7K
10
安卓反编译揭秘,伪加密APK文件如何被破坏

源码混淆 如上图,对Android APP的源码进行混淆后混淆器将代码中的所有变量、函数、类的名称加密为简短的英文字母代号,在APP被破解后增加破解者对代码的阅读难度。 但是混淆的功效只能运作在...

科技创造
2014/09/05
369
1
易安卓携手爱加密,畅享安全服务,参与赢取好礼!

在2014上半年采集的2440万份样本文件中,发现有220万份属于恶意应用,增长速率是2013年全年的2.5倍,是2012年数量的20多倍。对众多移动应用开发者来说应用山寨、篡改植入、恶意破解打包等给用...

科技创造
2014/10/17
63
0
(转)畅享安全服务,参与赢取好礼!

在2014上半年采集的2440万份样本文件中,发现有220万份属于恶意应用,增长速率是2013年全年的2.5倍,是2012年数量的20多倍。对众多移动应用开发者来说应用山寨、篡改植入、恶意破解打包等给用...

科技创造
2014/10/17
108
3

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
13
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
9
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
87
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部