人生如果错了方向,停止就是进步。
客户端和服务器通讯,key的存储方式一般有两种
一:动态从服务器获有时效性的key,失效的时候再去请求,这种额外增加了请求次数还要处理key失效的情况,如果用抓包软件还是可以破解key,相对来说不是太理想。
二:将私有的key通过native方法获取,打包后在so文件里面。但别人可以反编译代码,将你的so文件加载到自己代码里面,然后通过你的native方法去获取key,所以这边要解决下自己的so防止别人使用。
解决这个就是在native那边验证签名,不是自己签名不返回key,还可以让程序崩溃。这样基本上可以确保key的安全。
c代码
1 | static bool checkSignature = false; |
1 | // 获取签名信息 |
反编译apk
工具介绍
- apktool 资源文件获取,可以提取出图片文件和布局文件进行使用查看
- dex2jar 将apk反编译成java源码(classes.dex转化成jar文件)
- jd-gui 查看APK中classes.dex转化成出的jar文件,即源码文件
常用命令
- apktool d -f app-release.apk -o app-release1
- apktool b app-release1 重新打包apk(打包好的apk放在app-release1/dist目录里面)
- 直接安装app-release1/dist里的apk会出现
[INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]错误,所有需要重新签名 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name重新签名查看apk代码,将要反编译的APK后缀名改为.rar或则 .zip并解压,得到其中的额classes.dex文件,将获取到的classes.dex放到之前解压出来的工具dex2jar-0.0.9.15 文件夹内。
./dex2jar.sh classes.dex
Demo
发发牢骚:
最近刚换了份工作,上一家创业公司融资一直没拿到,创业这年头也不好创,老板也挺不容易的。
虽然工作了六年,android和ios虽然都会做,但是找个满意的工作也相当不容易啊,app坑少萝卜多,加上学历不高,以后的以后该怎么发展呢!
参考代码
http://www.androidchina.net/4187.html
http://m.blog.csdn.net/article/details?id=51927631
http://blog.csdn.net/hui12581/article/details/44832651 JNI详解—从不懂到理解
http://kiya.space/2015/11/12/check-signature-for-avoiding-fake-app-java-level-check/