参考了以下大佬的文章:
文章一
文章二
文章三
工具:iptables + redsocks2 + Charles
前期准备
配置charls证书
要使用charles抓https的流量,就需要正确配置证书,并将证书设置为系统证书,这里开始踩了坑,我只是配置了用户证书,在安卓7之后的版本中,一般的直接安装证书,只是安装到用户证书,而要想实现抓app包,只能是系统证书。
证书下载保存后 为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
通常是u0_a236这样的,那么后面的命令,uid相关的可以写成u0_a236,也可以写成10236这样。
iptables + redsocks2转发
https://mp.weixin.qq.com/s/P0ESUUXBmq2aQnrqDHsDaw
下面就要改iptables了,首先可以保存下配置文件(重启也可恢复iptables-save > /data/local/tmp/iptables.rules
恢复iptablesiptables-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这样来限定一个或者多个端口文章来源:https://www.toymoban.com/news/detail-619483.html
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'
这样就成了
文章来源地址https://www.toymoban.com/news/detail-619483.html
到了这里,关于【安卓安全】透明代理定向抓APP包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!