接触
android
开发也有
2
年多时间了。对于
APP
的安全方面虽然接触的不算全面,但是也做过好多反编译人家
APP
,看代码,或者抓他们数据的勾当。
- -
。来谈谈个人对
APP
安全这方面的一些见解吧。
一:APP的安全主要有几方面?
1.代码安全:
对于很多个人开发者或者公司来说,有些功能代码是自己独有的东西。最怕的就是自己的代码被被人窃取。在
android
市场上,只要是比较火的游戏。经常都会被人反编译加广告。例如年初的时候为了了解一个直播的实现,我就反编译了某个直播软件。偷偷看了他们的实现。了解到了直播视频需要用到的一些库。以及他们自己请求服务器的一些代码。因此代码这方面的保护措施对于一些比较看重自己功能点的
APP
来说是非常必须的。要不然。没发布多久就出现了一堆山寨应用。这让精心设计了
N
久的你来说。是不是想屎的心都有了。
2.数据安全:
对于一些
APP
。功能的实现并不是很独特。只要稍微知道功能都能做出来。这些
APP
更偏向于自己的一些数据资源。这种类型的
APP
分两种:
(1).
离线数据型:有些
APP
数据会存放在
sqlite
数据库上。作为用户离线使用,
sqlite
数据我们都知道。只要能获取到文件。打开就能直接看到数据 了。
(2)在线数据请求型:这类
APP
数据普遍都是放在服务器上,需要的时候就通过
http
,
websevice
等方式来获取数据。这种时候需要担心的就是,某些人会去研究你的
APP
怎么请求到的数据。自己写相应的请求去读取你的数据。
二:APP是怎么被窃取这些私密内容的?
1.代码-反编译:
对于一个
APK
文件,想要看到具体实现的源码或者是布局文件,一般采用的就是反编译的方式。反编译的软件网络上有很多。最主要的还是通过
apktool+jd-gui.
很多集成工具也只是把这两个工具集合在一起而已。这里介绍我自己使用的软件:
ApkDec-Release-0.1
。使用方法:
打开
ApkDec-Release-0.1.exe,
选择你想要反编译的
APK
。选择发编译后文件存放的路径。可以选择只反编译
Jar
或者全部。点击开始反编译。
等待完成后打开设置的目录。可以看到如下列表。
.jar
文件就是我们所得到的代码。使用
jd-gui
打开
.jar
文件。
代码是不是很清楚的能看到呢。既然能看到代码了。就没什么秘密好隐藏的了。
2.数据库-root获取
Android
的
APP
如果有使用到数据库,一般来说默认是建到
data
底下本
APP
包名下的
databases
目录下。使用
eclipse
的
DDMS
可以很容易的把该目录底下的数据库文件给下载到本地查看。部分手机需要
root
权限。拿到数据库文件。用
sqlite
管理工具打开,就能看到有关数据了。我使用的是SQLite Expert Professional
3.接口-数据抓包
对于一些数据比较重要的
APP
。很多人的做法就是抓包,把
APP
怎么请求服务器的链接给获取到。自己写请求去模拟请求。这样服务器的数据就都被他们给拿到了。有些人有个疑问。请求都是在手机上做的。我怎么抓到呢。我有
2
个方法,
第一种,使用
android
的抓包软件。市场上搜有很多,只需要打开抓包软件,打开您要抓包的
APP
,执行完需要的操作之后。抓包软件就会把手机上所有请求网络的链接都保存到一个文本文件。打开这个文本文件就能看到在什么事件请求的数据链接。
第二种,有点取巧。买一个随身
wifi
。或者是笔记本接网线,然后用无线把网络共享出去,建立一个
wifi
。将手机连到这个
wifi
上,记住只能要抓包的手机连。其他设备一个都不能连上。然后电脑上下一个抓包软件抓取共享
wifi
网卡的数据。我用的是影音嗅探专家。步骤如下:
打开影音嗅探专家,点击顶部的设置,选择网卡,选择共享的那个网卡。然后点击开始嗅探。底下的列表就会显示一堆的链接。就是手机所请求的各种网络接口。
这些数据我们可以进行筛选。得到我们所需要的接口,包括地址,参数等等东西。
这样就能把这个
APP
怎么请求网络数据都给拿到手了。
三:提高APP安全性的几种方法
看了以上的几种方式,对安全没怎么在意的你是不是发现。自己的
APP
处在了十分危险的环境下呢。这是没有办法滴。但是别担心。既然有破解措施,那就有对应的防护措施。
对于代码的安全方面。现在能用到的主要有几种,
一个是在打包
APK
的时候对代码进行混淆。把代码混淆成
abcd
这种惨无人道的名字。基本可以阻止一些水平较低来看懂你的代码。但是水平高一些的人还是能跟踪到你的代码逻辑。
第二种,将重要的代码用
C++
来写,编译成
.so
文件,使用
ndk
调用
so
文件中的
C++
代码。这个方法需要有
NDK
基础。现在很多的应用都是采用这种方式,保护代码。
第三种方法。
APK
加密。市面上有很多,梆梆加密就是一个。具体的用法很简单。
注册,
上传
APK
。
加密,下载加密后的
APK
。
对加固后的
APK
进行重新签名。可以使用梆梆提供的签名工具。
完成后。就不怕
APK
被反编译出源代码了。
数据方面的安全,也是分
2
个,数据库和服务器数据。
数据库,网上有个方法是数据库文件加密,加密之后用户下载
.db
文件之后是没法打开的。但是这个有个坏处。请求数据库的代码都要改过。不太实际,因此大部分人的做法是,对数据内容进行加密保存。用对应的算法对数据进行加密。保存到数据库,使用的时候取出加密数据,使用对应的解密规则解密数据。这样子你的数据就算被别人拿到。看到的也都是一堆加密后的数据。没有解密规则,根本没法拿到具体数据。
服务器数据,主要靠的是
APP
请求接口获取,因此我们要在请求上做文章。常用的方式有几种;
(1)使用
session,cookie
等安全措施。同时对每个
APP
绑定手机的
mac
地址等。年初的时候反编译一个软件,它的请求就做的很完美。生成一个随机数,请求接口的时候带上这个随机数,已经手机
mac
地址。服务端根据解密规则得到随机数,然后根据这个随机数将返回的数据加密。
APP
只要根据随机数就能取到正常的解密数据。而
MAC
地址则是判断请求方是否合法的标志。注册时,会将
MAC
与用户
ID
绑定,每次请求数据需要
mac
地址参数一致才允许请求数据。这样很大程度上能避免别人模拟你的请求来获取到服务端的数据。
(2)使用
post
请求及
Webservice
等方式。使用这些请求方式的时候。抓包没办法抓到
post
的参数。少了几个参数。就没办法请求到数据。这一点可能有争议。我到目前为止是还没找到方法抓
Post
及
webservice
数据。但是不代表没有。可能有朋友有方法。可以提供下。
总结:
对于
APP
的各方面安全。个人觉得需要做的就是把以上几点结合起来。单单使用一点的话也还是会被拿到的。比如说数据加密。解密的规则在代码中肯定能知道。如果你没有混淆或者加密
APK
。那么只要拿到加密数据。再反编译你的
APK
取到解密的规则。一样能拿到正确的数据。综合一起使用才能最有效的保护自己的知识财产。
以上就是个人对
APP
安全的一些看法。不足的地方望大家见谅。
附上使用到的几个工具
|
#梆梆安全杯#个人对APP安全的一些看法
最新推荐文章于 2024-09-24 10:23:52 发布