大神论坛

找回密码
快速注册
查看: 659 | 回复: 0

[iOS] Flutter iOS App https抓包

主题

帖子

25

积分

初入江湖

UID
16
积分
25
精华
威望
50 点
违规
大神币
68 枚
注册时间
2021-02-19 10:10
发表于 2021-02-23 23:20
本帖最后由 ttgogo 于 2021-02-23 23:20 编辑

#0x1

工具准备:rvictl、Wireshark、Charles


#0x2

1、手机USB连上mac后,使用指令rvictl -s (手机UDID)打开虚拟网络接口rvi。



2、macOS共享WiFi网络,手机链接共享后的wifi,访问APP任意接口Wireshark开始抓包,此步骤用来获取App API接口域名地址。



3、获取到域名后,修改手机hosts,将该域名解析指向macOS。



4、macOS启动Charles,打开菜单Proxy->Reverse Proxies Settings,打开反向代理设置,添加之前Wireshark抓到域名。



5、开始愉快的抓包吧!




#0x3 frida脚本(无需手动改手机hosts)
/*
*
* @creantan
*
* Example usage:
* # frida -U -f com.xxx.yyy -l flutter_connect_.js --no-pause
*
*/

var sIP = 'xxx.xxx.xxx.xxx' //目标IP地址
var xIP = '192.168.2.1'//代理电脑IP地址

//IP字符串转int
function ipToInt(ip){
var result = ip.split('.');
return (parseInt(result[3]) << 24
| parseInt(result[2]) << 16
| parseInt(result[1]) << 8
| parseInt(result[0]));
}

//int转IP字符串
function parseIp (number) {
var ip = ''
if (number <= 0) {
return ip
}
const ip3 = (number << 0) >>> 24
const ip2 = (number << 8) >>> 24
const ip1 = (number << 16) >>> 24
const ip0 = (number << 24) >>> 24
ip += ip0 + '.' + ip1 + '.' + ip2 + '.' + ip3
return ip
}

function parsePort(number) {
return ((number & 0xFF) << 8) | ((number & 0xFF00) >> 8);
}

Interceptor.attach(Module.findExportByName(null, "connect"), {
onEnter: function(args) {
var fd = args[0].toInt32()
if (Socket.type(fd) !== 'tcp')
return;

var ipAddr = args[1].add(4)
var ip = parseIp(Memory.readU32(ipAddr))
var portAddr = args[1].add(2)
var port = parsePort(Memory.readUShort(portAddr));

//判断是否为目标地址
if (ip === sIP) {
console.log("[+] connect: " +ip+ ':'+ port);

//替换IP地址为代理主机
Memory.writeU32(ipAddr,ipToInt(xIP))

//打印替换后地址
console.log(hexdump(ptr(args[1]), {
length: 32,
header: true,
ansi: true
}))
}
}
})


版权声明:本文由 creantan 原创,欢迎分享本文,转载请保留出处 。更多逆向学习 请点击这里


返回顶部