前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android app 抓包

android app 抓包

作者头像
tea9
发布2022-09-08 12:15:03
2.9K0
发布2022-09-08 12:15:03
举报
文章被收录于专栏:tea9的博客

BurpSuite抓包

burp安装:

可以参考国光大佬的文章 BurpSuite Pro 2020.11.3 For Windows macOS 下如何优雅的使用 Burp Suite (2020.11.3)

设置代理:

burp拦截禁用先关掉

打开burpsuite-proxy-options-add 添加代理 先ifconfig查看ip地址 在burp中找到对应的ip

手机设置 连接wifi 长按修改网络-高级选项-代理-手动 配置主机名 端口 主机名填写

配置后浏览器访问 http://ip111.cn/ 然后看burp上是否有ip111的抓包记录 有的话就代表配置成功

证书安装:

导出证书 Proxy-Options-导出CA证书

传输证书到手机上

代码语言:javascript
复制
adb push cacert.cer /sdcard/Download

安装证书 以我的手机Pixel为例,选择设置-安全性和位置信息-加密与凭据-从存储设备安装-选择证书 填写证书名称 提示已安装 就安装成功了

返回选择信任的凭据-用户 有PortSwigger就代表证书安装成功了

android7.0以后安装证书 导出后的证书der转pem格式

代码语言:javascript
复制
openssl x509 -inform DER -in cacert.der -out cacert.pem

然后adb push到/sdcard/Download文件夹下,然后设置→安全性和位置信息→加密与凭据→从存储设备安装,选择pem证书 拷贝证书到系统证书目录

代码语言:javascript
复制
adb shell
su
cd /data/misc/user/0/cacerts-added
ls
9a5ba575.0
mount -o remount,rw /
cp * /etc/security/cacerts/
mount -o remount,ro /

查看
cd /etc/security/cacerts
ls -alit
total 1036
 710 drwxr-xr-x 2 root root 4096 2021-03-02 14:16 .
2568 -rw-r--r-- 1 root root  973 2021-03-02 14:16 9a5ba575.0

重启后查看系统证书列表是否存在burp的证书

打开浏览器测试抓包

如果用了magisk框架可以使用magisk movecert插件 移动证书 android ssl证书插件 https://github.com/Magisk-Modules-Repo/movecert (另外一个插件https://github.com/NVISO-BE/MagiskTrustUserCerts)

burpsuie导入客户端证书 User options -> SSL -> Client SSL Certificate


Charles抓包

如果抓不到包的情况下 反安卓防抓包–no_proxy Android 禁止代理抓包

Burp Suite只能对HTTP,HTTPS,websocket进行抓包。如果当APP使用了socket端口进行通信也可以使用postern+charles进行抓包 Postern: https://github.com/postern-overwal/postern-stuff Charles: https://www.charlesproxy.com/ Charles 在线破解工具 https://www.zzzmode.com/mytools/charles/ https://www.charlesproxy.com/download/

Charles抓包配置 HTTP Proxy-Proxy Settings-Port 默认8888 ifconfig查看本机ip 手机配置 设置-WLAN-修改网络

浏览器访问http://ip111.cn 查看charles是否有抓到的包

HTTPS 在上面两步的基础上,你需要为charles添加SSL Proxiyng。具体的步骤是:Proxy - SSL Proxiyng Settings -勾选“Enable SSL Proxying”,并点击下方的Add,你可以这样配置: host是你要抓的域名或者ip(这里用通配符*,表示抓去所有的https请求),port为443。 下载手机的SSL证书。charles里点击help -SSL Proxying-Save Charles Root Certificate,然后选择目录,保存一个类似于这样的“charles-ssl-proxying-certificate.pem”文件 3)给手机安装证书: 

代码语言:javascript
复制
adb push charles-ssl-proxying-certificate.pem /sdcard/Download/charles.pem

打开手机设置 -更多设置 -系统安全 -从存储设备安装 -选择charles.pem,点击安装 测试访问https://www.baidu.com 尝试访问 已经可以看到请求包 访问爱奇艺app会提示 Connection established 说明证书不被信任

拷贝证书到系统证书目录

代码语言:javascript
复制
adb shell
su
cd /data/misc/user/0/cacerts-added
ls
9a5ba575.0 af5d8655.0
mount -o remount,rw /
cp * /etc/security/cacerts/
mount -o remount,ro /

查看
cd /etc/security/cacerts
ls -alit
total 1036
 710 drwxr-xr-x 2 root root 4096 2021-03-02 14:16 .
2568 -rw-r--r-- 1 root root  973 2021-03-02 14:16 9a5ba575.0

打开爱奇艺app-登录注册-获取验证码

SOCKS Proxy-Proxy Settings-勾选Enable SOCKS proxy

Postern设置 配置代理

配置规则

打开VPN测试抓包效果,要不wifi代理设置先关掉 选择allow

Charles流量转发到BurpSuite Charles设置:Proxy-External Proxy Settings-勾选Use external proxy servers-勾选Secure Web Proxy Secure Web Proxy Server填写127.0.0.1:8080 Burp Suite设置: Proxy-Options勾选127.0.0.1:8080

自签名证书校验

启动frida

代码语言:javascript
复制
cd /data/local/tmp
./frida-server 

找证书文件 解包后查找证书文件 一般查找后缀名为p12的文件

代码语言:javascript
复制
tree -NCfhl |grep -i p12 
find . -name "*.p12"

找证书密码 使用肉丝大佬万能脚本实用FRIDA进阶:内存漫游、hook anywhere、抓包

代码语言:javascript
复制
function hook_KeyStore_load() {
    Java.perform(function () {
        var StringClass = Java.use("java.lang.String");
        var KeyStore = Java.use("java.security.KeyStore");
        KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) {
            printStack("KeyStore.load1");
            console.log("KeyStore.load1:", arg0);
            this.load(arg0);
        };
        KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
            printStack("KeyStore.load2");
            console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);
            this.load(arg0, arg1);
        };

        console.log("hook_KeyStore_load...");
    });
}

执行脚本

代码语言:javascript
复制
获取包名
frida-ps -U|grep -i xx
执行脚本
frida -U -f  com.xx.xx --no-pause -l xx.js
导出证书
adb shell
cd /sdcard/Download
mv android.content.res.AssetManager\$AssetInputStream@82749d9.p12  soul.p12
adb pull /sdcard/Download/soul.p12

可以看到证书密码已经暴露出来了

charles导入证书 导入证书后所有的请求都是使用该证书进行访问的建议抓完包去除

Charles设置: Proxy-SSL Proxying Settings-Client Certificates 导入证书-输入密码-ip和端口都填* 或者填写对应的ip和端口

尝试抓包

sxxl 抓包提示网络错误 脚本

代码语言:javascript
复制
//打印自签名证书
function hook_KeyStore_load2(){
    Java.perform(function()
    {
        var ByteString = Java.use("com.android.okhttp.okio.ByteString");
        var myArray=new Array(1024);
        var i = 0;
        for(i=0;i<myArray.length;i++){
            myArray[i]=0x0;
        }
        var buffer = Java.array('byte',myArray);

        var StringClass = Java.use("java.lang.String");
        var KeyStore = Java.use("java.security.KeyStore");
        KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) {
            console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));

            console.log("KeyStore.load1:", arg0);
            this.load(arg0);
        };
        KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
            console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));

            console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);

            if (arg0){
                var file =  Java.use("java.io.File").$new("/sdcard/Download/"+ String(arg0)+".p12");
                var out = Java.use("java.io.FileOutputStream").$new(file);
                var r;
                while( (r = arg0.read(buffer)) > 0){
                    out.write(buffer,0,r)
                }
                console.log("save success!")
                out.close()
            }
            this.load(arg0, arg1);
        };

        console.log("hook_KeyStore_load...");

    });
}

function hook_ssl() {
    Java.perform(function() {
        var ClassName = "com.android.org.conscrypt.Platform";
        var Platform = Java.use(ClassName);
        var targetMethod = "checkServerTrusted";
        var len = Platform[targetMethod].overloads.length;
        console.log(len);
        for(var i = 0; i < len; ++i) {
            Platform[targetMethod].overloads[i].implementation = function () {
                console.log("class:", ClassName, "target:", targetMethod, " i:", i, arguments);
                //printStack(ClassName + "." + targetMethod);
            }
        }
    });
}

function printStack(str_tag)
 {
    var Exception=  Java.use("java.lang.Exception");
    var ins = Exception.$new("Exception");
    var straces = ins.getStackTrace();

    if (undefined == straces || null  == straces)
    {
        return;
    }

    console.log("==" + str_tag + " Stack strat ===");
    console.log("");

    for (var i = 0; i < straces.length; i++)
    {
        var str = "   " + straces[i].toString();
        console.log(str);
    }

    console.log("");
    console.log("===" + str_tag + " Stack end ===\r\n");
    Exception.$dispose();
 }

function main(){
    hook_KeyStore_load2();
}
setImmediate(main)
代码语言:javascript
复制
查找包名
pm -l |grep -i soul 
package:cn.soulapp.android
执行脚本
frida -U -f  cn.soulapp.android --no-pause -l xx.js 

已经获取成功了,把证书导入charles抓包

已经可以抓到包了

统一xx查询 https://ss.cods.org.cn/mobile/download 双向证书校验 使用脚本获取证书和密码

已经获取到证书 导入证书到charles 发现还无法抓到包sslpinning了

sslpinning 使用objection

代码语言:javascript
复制
objection -g com.xx.xx explore -s " android sslpinning disable"

或者脚本

代码语言:javascript
复制
function hook_ssl() {
    Java.perform(function() {
        var ClassName = "com.android.org.conscrypt.Platform";
        var Platform = Java.use(ClassName);
        var targetMethod = "checkServerTrusted";
        var len = Platform[targetMethod].overloads.length;
        console.log(len);
        for(var i = 0; i < len; ++i) {
            Platform[targetMethod].overloads[i].implementation = function () {
                console.log("class:", ClassName, "target:", targetMethod, " i:", i, arguments);
                //printStack(ClassName + "." + targetMethod);
            }
        }
    });
}

使用大佬的脚本进行hook ssl

代码语言:javascript
复制
function main(){
    
    hook_ssl();
}
setImmediate(main)

frida -U -f  com.ninemax.ncsearchnew --no-pause -l xx.js      

已经可以抓到包了

抓包其他工具: ClashForAndroid https://github.com/Kr328/ClashForAndroid/releases brook https://github.com/txthinking/brook/releases/tag/v20210214 HttpCanary https://httpcanary.com/zh-hans/install.html 安卓应用层抓包通杀脚本 https://github.com/r0ysue/r0capture

tcpdump

Tcpdump+wireshark tcpdump是linux下的抓包工具,在android中没有,需要下载对应的工具。 下载地址:https://www.androidtcpdump.com/android-tcpdump/downloads 然后通过adb放到对应的目录: adb push tcpdump /data/local/ tcpdump -i any -p -vv -s 0 -w capture.pcap 抓到的包到wireshark中查看

LINKS

实用FRIDA进阶:内存漫游、hook anywhere、抓包 如何全面的抓取手机流量,避免丢失 为你的android App实现自签名的ssl证书(https) Frida 学习笔记 自动定位webview中的SLL_read和SSL_write 安卓应用层抓包通杀脚本发布!

Android Https抓包实践

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BurpSuite抓包
    • burp安装:
      • 设置代理:
        • 证书安装:
        • Charles抓包
        • 自签名证书校验
        • tcpdump
        • LINKS
        相关产品与服务
        验证码
        腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档