以soul为样本的APP测试总结(待详细)

1. 安装包签名测试

jarsigner.exe -verify G:\soul.apk -verbose -certs
sm    1091972 Fri Nov 30 00:00:00 CST 1979 resources.arsc
X.509, CN=shijiu
  [证书的有效期为16-4-1 上午11:22至41-3-26 上午11:22]
  [CertPath 未验证: Path does not chain with any of the trust anchors]

    1089 Fri Nov 30 00:00:00 CST 1979 META-INF/CERT.RSA
  436847 Fri Nov 30 00:00:00 CST 1979 META-INF/CERT.SF
  s     436804 Fri Nov 30 00:00:00 CST 1979 META-INF/MANIFEST.MF
    X.509, CN=shijiu
  [证书的有效期为16-4-1 上午11:22至41-3-26 上午11:22]
  [CertPath 未验证: Path does not chain with any of the trust anchors]
    s = 已验证签名
  m = 在清单中列出条目
  k = 在密钥库中至少找到了一个证书
  i = 在身份作用域内至少找到了一个证书

- 由 "CN=shijiu" 签名
摘要算法: SHA1
签名算法: SHA1withRSA, 2048 位密钥

jar 已验证。

警告:
此 jar 包含证书链未验证的条目。
此 jar 包含的签名没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2041-03-26) 或以后的任何撤销日期之后, 用户可能无
法验证此 jar。

<strong>2. 反编译保护</strong> 
1. soul.apk 修改后缀名为 soul.zip / 或者直接用解压的方式解压 2. 把soul.rar 解压后,找见 classes.dex 3. java -jar dex2jar.bat G:\soul\classes.dex
1
Error: Invalid or corrupt jarfile
PS:直接使用 smali2java 打开 apk 文件,也可反编译回 Java 代码
soul.apk
    +src
        +a
        +android
        +anet
        +anerwork
        +b
            -a.java
            -b.java
                    /**
                      * Generated by smali2java 1.0.0.558
                      * Copyright (C) 2013 Hensence.com
                      */

                    package b;

                    import java.awt.event.WindowAdapter;
                    import java.awt.event.WindowEvent;

                    final class b extends WindowAdapter {
                            private final a a;
                    }
            -c.java
            -d.java
        +butterknife
        +c
        +cn
        +com
        +io
        +javax
        +me
        +org
        +pl
        +retrofit2

3. 应用完整性校检

1. java -jar apktool.jar d -f G:\Test\aa\soul.apk -o G:\Test\bb
注:java -jar apktool.jar d -f apk 文件路径 -o 解包目标文件夹
1
2
3
4
5
6
7
8
9
10
11
12
13
I: 使用 ShakaApktool 3.0.0-20160625
I: 正在加载资源列表...
I: 反编译 AndroidManifest.xml 与资源...
I: 正在从框架文件加载资源列表: C:\Users\shiyan\AppData\Local\apktool\framework\1.apk
I: 常规资源列表...
I: 反编译资源文件...
Cleaning up unclosed ZipFile for archive C:\Users\shiyan\AppData\Local\apktool\framework\1.apk
I: 反编译 values */* XMLs...
I: 反编译 classes.dex...
I: 反编译 classes2.dex...
I: 复制 assetslibs...
I: 复制未知文件...
I: 复制原始文件...
  1. 建议修改替换图标类文件,首先进去该 APP 主文件夹里,在上面的搜索里先搜索 jpg , 然后找见图片目录进去,选择合适的图片直接进行替换。
  2. 然后对该目录进行打包
  3. java -jar apktool.jar b -f G:\Test\bb -o G:\Test\cc.apk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
I: 使用 ShakaApktool 3.0.0-20160625
I: 编译 smali 到 classes.dex...
I: 编译 smali_classes2 到 classes2.dex...
I: 正在编译资源...
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\logo.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\logo_soul_circle.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\pic_achieve_avatar.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\portrait_1_new.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\portrait_2_new.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\portrait_3_new.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\portrait_4_new.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\portrait_5_new.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\portrait_6_new.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\share_image_bottom.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\share_img_avatar.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\share_logo.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\share_wechat_qrcode.png
I: WARIN: Failure processing PNG image G:\Test\bb\res\drawable-xxhdpi-v4\user_info.png
I: 正在拷贝libs目录... (/lib)
I: 正在编译apk文件...
I: 复制未知文件/目录...
Cleaning up unclosed ZipFile for archive C:\Users\shiyan\AppData\Local\Temp\APKTOOL5496202005661084417.tmp

注:java -jar apktool.jar b -f 待打包的文件夹 -o 输出 apk 路径

  1. 用 ApkToolBox 对未签名的 APK 文件进行签名
  2. 然后使用模拟器去安装看看是否存在效验等机制
我安装完成后,在登录的时候显示如下信息,说明存在应用效验。
1
网络错误,联系官方微信soulandu解决把!
4. 组件安全
1
2
3
4
5
安卓系统的组件共有四种,其主要用途分别为: 
Activity:呈现可供用户交互的界面,是最常见的组件;
Service:长时间执行后台作业,常见于监控类应用;
Content Provider:在多个 APP 间共享数据,比如通讯录数据;
Broadcast Receiver:注册特定事件,并在其发生时被激活;
1
2
3
4
5
6
7
8
9
AndroidManifest.xml

显式声明了 android:exported="true",则可导出。
显示声明了 android:exported="false",则不可导出。
未显示声明 android:exported:
若组件不是 Content Provider:
若组件包含<intent-filter>则可导出,反之不可
若组件是 Content Provider
若 SDK 版本<17 则可导出,反之不可
android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。 如果设置了导出权限,都可能被系统或者第三方的应用程序直接调出并使用。 组件导出可能导致登录界面被绕过、信息泄露、数据库SQL注入、DOS、恶意调用等风险。 主要作用是:是否支持其它应用调用当前组件。 默认值:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。 请参考:android:exported 属性详解 PS:组件的导入导出,主要为导出,是根据具体的业务逻辑代码来分析,具体判断是否为构成了安全问题。 部分案例 android:allowBackup 属性的设置可能会引起用数据被任意备份的风险
1
<application android:allowBackup="true" android:icon="@drawable/logo" android:label="@string/app_name" android:largeHeap="true" android:name="com.jzkj.soul.SoulApp" android:supportsRtl="true" android:theme="@style/AppTheme">
Android API Level 8 及其以上 Android 系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中 AndroidManifest.xml 文件中的 allowBackup 属性值,其属性值默认是 True。当 allowBackup 标志为 true 时,用户即可通过 adb backup 和 adb restore 来进行对应用数据的备份和恢复。 一旦应用程序支持备份和恢复功能,攻击者即可通过 adb backup 和 adb restore 进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将 allowBackup 标志值设置为 false 来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。 5. 敏感信息安全 本地铭感信息
1. 在模拟器里成功安装 APP 后,然后用 RE文件管理器 去寻找该APP的一些文件。 2. 我只找到了 cn.soulapp.android 这个文件夹,然后把该文件打包到本地电脑上,进行翻阅。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cn.soulapp.android
+app_accs
+app_bugly
+app_crashrecord
+app_td-cache
+app_webview
-Cookies
-Cookies-journal
+cache
+code_cache
+databases
-空文件夹
+files
+lib
+shared_prefs
3. 只看到了一两个 cookie 的文件,数据库没有发现什么东西。
log日志
1. 这里我使用的是 AndroidKiller 的 Android 模块。 2. 通过搜索设备,然后开启右边的日志进行审计
1
2
3
4
5
6
7
8
9
10
11
12
13
......
======================releaseAllVideos=====================
releaseAllVideos
Bugtags Agent is not started yet, using NullAgentImpl.
Bugtags Agent is not started yet, using NullAgentImpl.
START u0 {cmp=cn.soulapp.android/com.jzkj.soul.ui.post.PostDetailActivity (has extras)} from uid 10049 on display 0
AUDIO_OUTPUT_FLAG_FAST denied by client
addAppToken: AppWindowToken{239d81e5 token=Token{24561cdc ActivityRecord{1eafd4f u0 cn.soulapp.android/com.jzkj.soul.ui.post.PostDetailActivity t20}}} to stack=1 task=20 at 1
did not receive expected priority boost
out_write() limiting sleep time 44149 to 23219
releaseAllVideos
Bugtags Agent is not started yet, using NullAgentImpl.
......
6. 密码安全
1. 键盘劫持
软件自带的软键盘,非系统默认。
2. 随机布局软键盘
软件盘上的数字布局是随机的。 7. 安全策略 1. 密码复杂度检测 2. 账号登陆限制 3. 账户锁定策略 4. 问题验证(修改密码等操作问题验证) 5. 会话安全(长时间不操作,回话超时) 6. 界面切换保护(切换之后台等出现提醒显示) 7. UI信息泄露(低危,用户标识等标志) 8. 验证码安全(可识别可爆破性) 9. 安全退出(是否失效) 10. 密码修改验证(修改密码时验证旧密码) 8. 通信安全 1. 通信加密(https) 2. 证书有效性(待完善) 3. 关键数据加密和校检(是否对关键信息进行整体性效验加密等措施) 4. 访问控制(仅限手机设备登录) 5. 客户端更新安全性(利用抓包工具进行串改更新apk下载地址,是否可覆盖检测) 6. 短信轰炸漏洞 9. Web接口测试
「接口测试就归咱们的老本行了,就不整理了,光记录下代理问题。」
Fiddler 1. 打开 fiddler ,然后点击 t00ls ,选择第一行第一个 Options 点击。 2. 选择第二个 HTTPS 分项,在 Capture HTTPS COMMECTs 和 Decrypt HTTPS traffic 还有 ignore server certificate errors(unsafe) 这三个打上勾。 3. 然后选择 connections 分项,设置端口号8888,然后在 Allow remote computers to connect 和 Reuse client connecrions 都打上勾,然后点击确定。 4. 用 win + R 打开 cmd ,输入 ipconfig 查看本机 ip 地址。 5. 打开模拟器,在浏览器中输入刚才查询的本机的 ip 地址,再在后面加上端口号8888,访问。 6. 点最下面那个字母,安装下证书。 7. 点击设置,选择 WiFi ,点击高级,设置代理。 8. 开始测试 web 接口把! 10+ 待完善 .................

以soul为样本的APP测试总结(待详细)
https://sh1yan.top/2018/11/16/soulapp-test/
作者
shiyan
发布于
2018年11月16日
许可协议