我的题目有点夺人眼球,也当然有喷喷不平者觉得我是危言耸听,那就好好听听我说的是不是有那么一丁点道理。
标题中的APP请排除那些只想靠APP推送广告的小众开发者,诚然这些开发者的出发点并不高,只是想靠Android平台简单易上手的APP开发挣两个小广告钱(当然也包括我自己),他们目标并不是开发出一款高质量、饱含创意、凝结心血的APP,如果一款APP是由那些满腔热血、热心创业并凝结无数心血的创业团队、公司或者个人开发出来的,那我可以很负责的告诉你如果你的APP不加密那只有三种结局:
第一种结局:尽管你的APP是你日夜不辞辛劳开发而出的,但是本身质量不高、毫无新意或者本身同质化很严重,那你这个APP投到市场上就像是大海里面扔出的一颗石子,并无多回报,加密不加密无所谓,真所谓死的无怨无悔啊。
第二种结局:立意新颖、创意十足、目前软件市场几乎没有同类产品,并且能快速被大众认可接受,如果你不加密、不申请专利,那这个不加密的APP必死。
因为人在山寨之国,小小的团队方案,不是被收购就是直接被一个一模一样的替代品吃死!!!
那么如果你宁死不屈不想被收购并且不想被一个一模一样的替代品吃死的话,你的APP就必须要加密,因为不加密你的APP被人一研究,那好无需多日你会发现你的好idea你的心血全部付之东流。
第三种结局:没有必要山寨你的APP,但是你提供的服务我很感兴趣哦,如果不是要注册就好了?如果能把你提供资源直接全部拿出来共享就就好了,嘻嘻~~哦,对了我会破解:)嘻嘻~~如果不加密,被破解后果也很严重啊,以内容为王的APP,得小心了。
下面谈谈爱加密提供的服务吧:爱加密www.ijiami.cn推出“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
这时我们可以看到在当前目录下已经生成HelloOurAndroid/文件夹了,我们来查看下反编译后的AndroidManifest.xml文件和strings.xml文件:
AndroidManifest.xml文件反编译之后和工程下的时候几乎是一模一样,所以我们可以来check下该Android应用的所有权限。
同样可以查看这些hardcode的内容:
rebuild重打包
重打包刚刚修改过的HelloOurAndroid.apk,我们就修改strings.xml目录下的“hello”为:Hello,OurUnix!
然后使用apktoo重新打包,命令如下:
[email protected]:~/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。