【安卓安全】透明代理定向抓APP包

文章介绍了如何在Android设备上配置Charles证书以抓取HTTPS流量,通过iptables和redsocks2进行流量转发,详细步骤包括证书转换、系统证书安装、iptables规则设置以及redsocks2的配置和运行。在过程中还提到了应对应用的SSLPinning检测的方法。
摘要由CSDN通过智能技术生成

参考了以下大佬的文章:
文章一
文章二
文章三

工具:iptables + redsocks2 + Charles

前期准备

配置charls证书

要使用charles抓https的流量,就需要正确配置证书,并将证书设置为系统证书,这里开始踩了坑,我只是配置了用户证书,在安卓7之后的版本中,一般的直接安装证书,只是安装到用户证书,而要想实现抓app包,只能是系统证书。
help这里可以下载保存SSL证书
证书下载保存后 为cer或pem后缀,此时不能直接装在手机里,需要进行一些转换。
进入到安卓系统证书目录:/system/etc/security/cacerts
证书文件
可以看到都是一串字符加上 .0 这样的后缀,这里前面的字符生成是有讲究的
证书的名称可以用openssl获取,用命令计算出证书的名字:
Cer格式
openssl x509 -inform DER -subject_hash_old -in 1.cer
Pem格式
openssl x509 -inform PEM -subject_hash_old -in 1.pem
计算文件名
这串字符就是前面的名字了,之后直接重命名就行了,网上有文章还要用命令,没必要,而且会出错。
重命名
之后把该文件push到手机上,这个时候直接放在 /system/etc/security/cacerts 目录下是失败的,会显示该目录只读(root后)。此时需要新的挂载点

# 创建一个临时目录,保存当前证书
mkdir /sdcard/tmp/
# 复制现有证书到临时目录
cp /system/etc/security/cacerts/* /sdcard/tmp/
# 创建内存挂载
mount -t tmpfs tmpfs /system/etc/security/cacerts
# 将现有证书复制回 tmpfs 挂载
mv /sdcard/tmp/* /system/etc/security/cacerts/
# 更新 perms 和 selinux
chown root:root /system/etc/security/cacerts/* 
chmod 644 /system/etc/security/cacerts/* 
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*

ok了
这下证书就配置完成了
后面不出意外的话就能抓到并解密https了
一会儿这里要记得打开

查询UID

打开相应应用,使用ps -ef命令查询到应用uid
UID
通常是u0_a236这样的,那么后面的命令,uid相关的可以写成u0_a236,也可以写成10236这样。

iptables + redsocks2转发

https://mp.weixin.qq.com/s/P0ESUUXBmq2aQnrqDHsDaw

下面就要改iptables了,首先可以保存下配置文件(重启也可恢复
iptables-save > /data/local/tmp/iptables.rules
恢复iptables
iptables-restore /data/local/tmp/iptables.rules
下面的命令将uid为10428所请求的在0-65535端口上的tcp流量,转发到127.0.0.1:16666,但是排除了来自127.0.0.1的请求
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666
透明代理直接设置为Charles的透明代理地址,对于https将会出现invalid first line in request错误,只有http的请求数据会被正常解析

文章四

接下来下载并配置redsocks转发流量
可直接下载编译好的:https://fh0.github.io/assets/android-redsocks2.tgz

创建配置文件,名为redsocks.conf,内容如下:

base {
    log_debug = off;
    log_info = on;
    log = stderr;
    daemon = off;
    redirector = iptables;
}

redsocks {
    bind = "127.0.0.1:16666";
    relay = "192.168.1.14:8889";
    type = socks5;
    autoproxy = 0;
    timeout = 13;
}

其中bind就是透明代理地址,relay就是Charles的代理地址
注意这里配置文件最好在linux环境下生成,我在win生成的配置文件失败了

现在把redsocks.conf和redsocks2_arm push到/data/local/tmp
然后在root用户下运行redsocks2_arm64即可

adb push redsocks2_arm64 /data/local/tmp/redsocks
adb shell chmod +x /data/local/tmp/redsocks
adb shell
su
cd /data/local/tmp
./redsocks

如果是只想对特定端口抓包,那么应该使用-m multiport --dports 80,443这样来限定一个或者多个端口

iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10428 -m multiport --dports 80,443 -j DNAT --to-destination 127.0.0.1:16666

结束了?

按理来说应该可以了,但是我抓的这个app
竟然还做了证书检测!
搞了半天 我一直以为是我配置错了 下面绕过检测就行了
objection直接就有命令
objection -g 12313213 explore -s 'android sslpinning disable'
这样就成了
前面红色是没开objection

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Godams

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值