基于 Android APP 安全测试流程(一)

        基于 Android APP APK解包与逆向 安全测试流程 客户端程序安全、敏感信息安全

        1. 大纲

        APK 解包与逆向

        客户端程序安全 

        敏感信息安全

        部分测试会用到 jdk   Eclipse+ADT+Android SDK 这开发平台弄会比较麻烦 可能会放到后面讲

        如果你只是想快速测试某 APP 不妨用阿里云 MQC    以及网易易盾

        特别需要说的  ?#33322;?#35758;移动安全适合专人来做,因为需要专门的电脑环境配置也比较麻烦。

        2. 需要的环境以及工具

        SDK:Java JDK,Android SDK。 

        apk 工具:android 组件安全测试工具,activity 劫持测试工具,android 击键记录测试工具,

        代理工具(proxydroid),MemSpector,Host Editor。

        工具:7zip,dex2jar,jd-gui,apktool,IDA pro,ApkAnalyser,Eclipse,dexopt-wrapper,010 editor,SQLite Studio,ApkIDE。

        3.apk 解包与逆向

        APK 解包和逆向是所有 APP 安全分析的开始。?#27604;?#25105;这里说的比较浅显。

        一般 APK 用压缩包软件即可打开解压 我这里使用的 7zip  好处无广告无捆绑速?#28982;?#34892;,这里随便找的一个游戏 APP 具体就不透露了

        工具  dex2jar  jd-gui

        3.1 下载与使用 dex2jar 

        下载地址:https://sourceforge.net/projects/dex2jar/

        使用:

        解压之后输入  d2j-dex2jar.bat 文件名  一般为 classes.dex  (见上图)  APK 解压放到了桌面 test 文件夹中

        会在 dex2jar 目录生成一个这个文件

        那么如何查看该 jar 文件的内容呢?#30475;?#26102;?#25176;?#35201;安装 jd-gui。 

        3.2 下载与使用 jd-gui

        下载地址: http://jd.benow.ca/ 

        使用没什么好说 windows 就一个 exe  打开之后就这样  下图中打开 classes.dex2jar-jar 代码是经过混淆处理的 最明显就是其中有 a.b.c.d 这样的内容。

        如果没有混淆处理这里应该明文,混淆处理是一?#22336;?#27490;逆向的手段,混淆处理后虽?#28784;?#26377;逆向分析手段但是这里不具体分析了。

        没有混淆处理基本说明 apk 发开人员安全意识不够。

        3.3 反编译 so 库

        工具 IDA PRO   大名鼎鼎的工具 – - 下载地址应该不需要了

        APK 解压之后在 lib/armeabi 有个.so 文件  用 IDA pro  打开 可以看到 so 文件中包含的函数,ARM 汇编代码,导入导出函数等信息

        4. 客户端程序安全

        4.1 安装包签名

        检测客户端是否经过恰当签名(正常情况下应用?#21152;?#35813;是签名的,否则无法安装),签名是否符合规范。

        工具 jarsigner    

        jarsigner 这个是命令行执行工具  ?#28784;?#23433;装了 jdk  会在 jdk 中的 bin 目录里 用来执行(具体 JDK 安装要配置环境变量不赘述)

        C:\Program Files\Java\jdk1.8.0_121\bin>jarsigner.exe

        用法: jarsigner [选项] jar-file 别名

               jarsigner -verify [选项] jar-file [别名...]

        [-keystore <url>]           密钥库位置

        [-storepass <口令>]         用于密钥库完整性的口令

        [-storetype <类型>]         密钥库类型

        [-keypass <口令>]           私有密钥的口令 (如果不同)

        [-certchain <文件>]         替代证书链文件的名称

        [-sigfile <文件>]           .SF/.DSA 文件的名称

        [-signedjar <文件>]         已签名的 JAR 文件的名称

        [-digestalg <算法>]        摘要算法的名称

        [-sigalg <算法>]           签名算法的名称

        [-verify]                   验证已签名的 JAR 文件

        [-verbose[:suboptions]]     签名/验证时输出详?#24863;?#24687;。

                                    子选项可以是 all, grouped 或 summary

        [-certs]                    输出详?#24863;?#24687;和验证时显示证书

        [-tsa <url>]                时间戳颁发机构的位置

        [-tsacert <别名>]           时间戳颁发机构的公共密钥证书

        [-tsapolicyid <oid>]        时间戳颁发机构的 TSAPolicyID

        [-tsadigestalg <算法>]      时间戳请求中的摘要数据的算法

        [-altsigner <类>]           替代的签名机制的类名

        [-altsignerpath <路径列表>] 替代的签名机制的位置

        [-internalsf]               在签名块内包含 .SF 文件

        [-sectionsonly]             不计算整个清单的散列

        [-protected]                密钥库具有受保护验证路径

        [-providerName <名称>]      提供方名称

        [-providerClass <类>        ?#29992;?#26381;务提供方的名称

          [-providerArg <参数>]]… 主类文件和构造器参数

        [-strict]                   将警告视为错误

        警告

        第一条 是因为签名密钥不在本地密钥库中

        第二条 没有时间戳

        再执行命令

        jarsigner.exe -verify -verbose -certs C:\Users\Administrator\Desktop\test.apk

        显示内容比较多看部分就可以 红框部分有地点:成都  名称为 darknights   

        若客户端安装包签名有异常(例如签名证书为第三方开发商而不是客户端发布方),此?#22791;?#39118;险;若无异常则无风险。

        4.2 客户端程序保护

        反编译 使用 apktool  

        章节 3 基本讲的反编译内容。这里在补充一个 apktool 反编译为 smali 代码

        工具 apktool  

        下载:https://ibotpeaches.github.io/Apktool/install/

        根据?#23548;是?#20917;选择

        我这里只下载 jar  放到 windows 目录

        然后会生成一个 跟 apk 同名的文件夹  下面会有一个 smali 的文件夹

        因为这个应用在之?#30333;?#20102;混淆   现在看 在 alipay(支付宝接口) 关键部分也是做了混淆

        判定:此时应用为低风险

        大部分代码(包括核心代码)经过混淆,此时低风险。

        部分代码混淆,关键代码(?#29992;?#25110;通信等)可以获知其关键代码,此时中风险

        客户端全部进行加壳保护,此?#27604;?#20026;无风险。

        5. 敏感信息安全

        5.1 数据文件

        主要的是在安卓环境中测试,安装解包后的文件是否权限合理,这里需要用到 Eclipse+ADT+Android SDK   但是作为简单简介可以用任意一个安卓模拟器来做

        这里我使用的是逍遥模拟器(安卓)新装的一个 ES 文件浏览器   最左边是测试的 APP

        ES 文件浏览器 的好处 

        1:安卓处于保护自己的目的,一般系统自带文件管理?#24378;?#19981;到所有文件的。

        2:?#34892;?#25991;件修改需要 ROOT 权限 es 文件浏览器有 ROOT 工具

        打开 ES 文件浏览器点击应用 可以看到这样应用 package Name  可以根据这个关键字去目录里搜索

        ROOT 工具箱打开不然你看不到隐藏的文件

        根据关键字搜索找到文件

        基本权限跟 LINUX 表示方法是一样 关键要观察这个应用所在目录下的所有文件权限(除 LIB 目录下外)

        判断:

        正常的文件权限最后三位应为空(类似「rw-rw—-」),即除应用自己以外任何人无法?#21015;矗?/p>

        目录则允许多一个执行位(类似「rwxrwx—x」)。如果文件任何人可写就存在安全问题。

        如下图(开头字母是 D 的目录)  安卓也有命令行具体调用这里不多说了 因为模拟器我搞半天没调用出来

        特别说明的:

        当客户端使用 MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE 模式创建文件时,shared_prefs 目录下文件的权限也会多出一些,这不一定是安全问题(Google 已不推荐使用这些模式)

        先到这里吧 估计要写拆成三个文章来写。

        1

        发表评论

        已有 1 条评论

        取消
        Loading...
        css.php 永利彩票是骗局吗