zoukankan      html  css  js  c++  java
  • AP渗透测试学习

    1、测试指标

     2、测试环境

    SDK: Java JDK  ,Android SDK

    工具: 7zip    dex2jar   jd-gui     apktool  activity 劫持工具

    3、安装包签名

     在Android中,包名相同的两个APK会被认为是同一个应用,新版本覆盖旧版本的时候签名证书必须一致。如果APK没有使用自己的证书进行签名,将失去对版本管理主动权。

        检测:   jarsinger.exe  -verify APK  文件路径  -verbose -certs

    需要注意的是只有使用直接客户端的证书签名的时候,才认为是安全的,Debug 证书、第三方(开发)证书均存在安全风险。

     2、反编译保护

      测试客户端的安装程序,判断是否能够反编译成代码, JAva代码和SO文件是否存在代码混淆等保护,未做保护的Java 代码,可以分析器运行的逻辑,并对代码中的缺陷对客户端和服务器端进行测试

         测试步骤,将APK当成ZIP并解压,得到Classes.dex文件,使用 dex2java.bat  执行   dex2jar.bat   classes.dex 文件路径

    得到 classes.dex.jar 文件,然后使用  jd-GUI 打开 JAVA文件,可以得到JAVA代码

    (注意,直接使用 smali2java打开 apk文件 ,也可以反编译 JAVA代码)

    (注意:有时候使用 Apktool 能够解包并查看  Smali,但是dex2jar却不行,如果 dex2jar反编译失败的时候,可以试试能否恢复smali代码)

     逆向之后如果源代码没有混淆则表明 不安全的,如果代码经过混淆,或者加壳措施,不能完整恢复代码,则是安全的

    安全建议,建议客户端程序可以把关键的代码一JNI方式放在SO 库里,SO库中是经过编译的ARM汇编代码,可以对其进行夹壳保护,防止逆向分析。

    3、应用完整性校验

       测试客户端程序是否对自身完整性进行完整性校验,

        java -jar  apktool.jar  d -f   apk 文件路径 -o  解包目标文件夹

     随便找一个解包目录里面的资源文件,修改它,推荐找logo之类的图进行修改。使用APKTool 将解包的目录重新打包成未签名的APK文件。 命令如下 : 

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

     用SignAPK ,对未前面的APK文件进行签名,命令如下;

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

     将签名的APK安装 ,运行 ,确认是否存在自校验    需要注意之前安装的APK和修改之后的APK签名不同,就不能直接覆盖安装,二是需要卸载之前安装额APP。若应用完整性校验不适用MANIFEST.MF中的数据,且核心代码通过JNI技术写入  .so库,同时服务端进行相关校验,此时无风险。 若应用完整性与本地进行验证二不存在与其他问题或使用MANIFEST.MF 中的数据作为验证凭据(有新文件时它提示应用完整性验证失败) 此时低风险。 若在本地进行验证的基础上只通过MANIFEST,MF 对客户端原有文件进行校验二忽略性增文件校验,此时中风险,若未进行完整性校验此时高风险。

        安全建议客户端每次开机启动时进行客户端自身的应用完整性校验,在验证逻辑中不适用MANIFEST.MF中的数据作为验证凭证,同时血药验证是否不属于客户端版本的新文件添加 ,验证过程服务器端完成。

    组件安全:

       描述 :  本项主要测试客户端是否包含后天服务,COntent Provider ,第三方调用和广播等组件,Internt权限的设置是否安全,应用不通过组成部分之间的机密数据传递是否安全,检查客户端是否存在组件劫持风险,产看客户端程序具有导出那些应用信息的权限,反编译APK文件之后,检查Android QMainfest文件中是否有多余的android:export  声明, 客户端是否存在导出其他应用信息的权限.

    组件 ;  安卓APP 以组件未单位急性权限声明和生命周期管理

    组件有什么用: 安卓系统额组件共有四张,主要用途分别是  :

          Activity :  呈现可供用户交互的界面,是最常见的组件

         Service : 长时间执行后台作业,常见于监控之类应用

          Content Provice :  在多个APP之间共享数据,比如通讯录数据

           Broadcast Receiver ;注册特定事假 ,并在其发生时激活。

      什么是权限声明 :  安卓系统低音了许多权限声明项,分别对应一些操纵系统功能 .

    权限声明有什么用 :

        因为权限是以组件为单位,A组件调用组件B的的功能类访问操作系统API时,使用组件B的权限声明。 如果B作为导出组件,没有进行严格的访问控制,那么A就可以通过B来访问原本没有声明权限的功能构成本地权限提升。

         使用APKtools解包 ,打开解包目录中的Androidmainfest.xml,对其中的声明的各个组件根据下面的规则判断是否可以导出.

     

      

    垂緌饮清露,流响出疏桐。 居高声自远,非是藉秋风。
  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/xinxianquan/p/14297388.html
Copyright © 2011-2022 走看看