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,对其中的声明的各个组件根据下面的规则判断是否可以导出.

     

      

    垂緌饮清露,流响出疏桐。 居高声自远,非是藉秋风。
  • 相关阅读:
    UVA 1386
    疯狂Android演讲2 环境配置
    七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
    【iOS发展-44】通过案例谈iOS重构:合并、格式化输出、宏观变量、使用数组来存储数据字典,而且使用plist最终的知识
    jQuery选择
    一个月操作总结
    C++易vector
    oracle rac 在完成安装错误。
    NginX issues HTTP 499 error after 60 seconds despite config. (PHP and AWS)
    解决Eclipse中文乱码的方法
  • 原文地址:https://www.cnblogs.com/xinxianquan/p/14297388.html
Copyright © 2011-2022 走看看