#梆梆安全杯#个人对APP安全的一些看法

接触 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 安全的一些看法。不足的地方望大家见谅。
附上使用到的几个工具



android反编译工具(ApkDec-Release-0.1)-正式版.zip

7.46 MB, 下载次数: 19, 下载积分: e币 -5 元

售价: 5 元e币  [记录]  [购买]

反编译工具

影音嗅探专家.zip

7.71 MB, 下载次数: 19, 下载积分: e币 -5 元

售价: 5 元e币  [记录]  [购买]

抓包工具

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值