当前位置: 首页 > news >正文

IOS - 抓包通杀篇

IOS中大多数情况,开发者都会使用OC提供的api函数,CFNetworkCopySystemProxySettings来进行代理检测;

CFNetworkCopySystemProxySettings

在这里插入图片描述

在这里插入图片描述

检测函数直接会检测这些ip和端口等:
在这里插入图片描述

采用直接附加页面进程:

frida -UF -l 通杀代理抓包.js

上通杀脚本:

var _imports = Process.findModuleByName("XXX").enumerateImports();
var _CFNetworkCopySystemProxySettings = null;
for (var i = 0; i < _imports.length; i++) {//查找CFNetworkCopySystemProxySettings系统代理函数if (_imports[i].name.indexOf("CFNetworkCopySystemProxySettings") !== -1) {console.log(_imports[i].name, _imports[i].address);_CFNetworkCopySystemProxySettings = _imports[i].address;}
}if (_CFNetworkCopySystemProxySettings) {Interceptor.attach(_CFNetworkCopySystemProxySettings, {onEnter: function (agrgs) {}, onLeave: function (retval) {console.log("retval: ", ObjC.Object(retval));//将返回值全部nopretval.replace(0);}})
}

NSURL URLWithString:

> frida-trace -U -f 包名 -m "+[NSURL URIWithString:]"

更改url得传入得参数,及堆栈打印,也叫url定位

/** Auto-generated by Frida. Please modify to match the signature of +[NSURL URLWithString:].* This stub is currently auto-generated from manpages when available.** For full API reference, see: https://frida.re/docs/javascript-api/*/{/*** Called synchronously when about to call +[NSURL URLWithString:].** @this {object} - Object allowing you to store state for use in onLeave.* @param {function} log - Call this function with a string to be presented to the user.* @param {array} args - Function arguments represented as an array of NativePointer objects.* For example use args[0].readUtf8String() if the first argument is a pointer to a C string encoded as UTF-8.* It is also possible to modify arguments by assigning a NativePointer object to an element of this array.* @param {object} state - Object allowing you to keep state across function calls.* Only one JavaScript function will execute at a time, so do not worry about race-conditions.* However, do not use this to store function arguments across onEnter/onLeave, but instead* use "this" which is an object for keeping state local to an invocation.*/onEnter(log, args, state) {console.log('CCCryptorCreate called from:\n' +Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n') + '\n');log(`+[NSURL URLWithString:]` + ObjC.Object(args[2]));},/*** Called synchronously when about to return from +[NSURL URLWithString:].** See onEnter for details.** @this {object} - Object allowing you to access state stored in onEnter.* @param {function} log - Call this function with a string to be presented to the user.* @param {NativePointer} retval - Return value represented as a NativePointer object.* @param {object} state - Object allowing you to keep state across function calls.*/onLeave(log, retval, state) {}
}

双向证书:

资源路径操作,可以入手关键函数;

> frida-trace  -UF  -m "-[NSBundle pathForResource*]"
/** Auto-generated by Frida. Please modify to match the signature of -[NSBundle pathForResource:ofType:].* This stub is currently auto-generated from manpages when available.** For full API reference, see: https://frida.re/docs/javascript-api/*/{/*** Called synchronously when about to call -[NSBundle pathForResource:ofType:].** @this {object} - Object allowing you to store state for use in onLeave.* @param {function} log - Call this function with a string to be presented to the user.* @param {array} args - Function arguments represented as an array of NativePointer objects.* For example use args[0].readUtf8String() if the first argument is a pointer to a C string encoded as UTF-8.* It is also possible to modify arguments by assigning a NativePointer object to an element of this array.* @param {object} state - Object allowing you to keep state across function calls.* Only one JavaScript function will execute at a time, so do not worry about race-conditions.* However, do not use this to store function arguments across onEnter/onLeave, but instead* use "this" which is an object for keeping state local to an invocation.*/onEnter(log, args, state) {console.log('NSBundle pathForResource called from:\n' +Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n') + '\n');log(`-[NSBundle pathForResource:${ObjC.Object(args[2])} ofType:${ObjC.Object(args[3])}]`);},/*** Called synchronously when about to return from -[NSBundle pathForResource:ofType:].** See onEnter for details.** @this {object} - Object allowing you to access state stored in onEnter.* @param {function} log - Call this function with a string to be presented to the user.* @param {NativePointer} retval - Return value represented as a NativePointer object.* @param {object} state - Object allowing you to keep state across function calls.*/onLeave(log, retval, state) {}
}

HOOK抓包

基于底层ssl库来实现:

//请求
var ssl_write = Module.findExportByName("libboringssl.dylib", "SSL_write");
console.log("ssl_write", ssl_write);   //ssl input len
Interceptor.attach(ssl_write, {onEnter: function (args) {console.log("=================================================");console.log("CurrentThreadId: ", Process.getCurrentThreadId(), ", ssl_write onEnter args[1]: ", hexdump(args[1], {length: args[2].toInt32()}));}, onLeave: function (retval) {}
});//返回响应
var ssl_read = Module.findExportByName("libboringssl.dylib", "SSL_read");
console.log("ssl_read", ssl_read);  //ssl output len
Interceptor.attach(ssl_read, {onEnter: function (args) {this.args1 = args[1];this.args2 = args[2];}, onLeave: function (retval) {console.log("=================================================");console.log("CurrentThreadId: ", Process.getCurrentThreadId(), ", ssl_read onLeave args[1]: ",this.args1.readByteArray(this.args2.toInt32()));}
});

r0Capture 肉师傅的安卓应用层抓包通杀脚本

这个在之前安卓也说过,ios和安卓都通用的;
详见:https://codeooo.blog.csdn.net/article/details/127123371

function initializeGlobals() {var resolver = new ApiResolver("module");var exps = [[Process.platform == "darwin" ? "*libboringssl*" : "*libssl*", ["SSL_read", "SSL_write", "SSL_get_fd", "SSL_get_session", "SSL_SESSION_get_id"]], // for ios and Android[Process.platform == "darwin" ? "*libsystem*" : "*libc*", ["getpeername", "getsockname", "ntohs", "ntohl"]]];

源码里三目运算符,也说明了,ios用 libboringssl 动态库 , 安卓 libssl库;

同时还hook了,”SSL_read", “SSL_write” ,等等~

Interceptor.attach(addresses["SSL_read"],{onEnter: function (args) {var message = getPortsAndAddresses(SSL_get_fd(args[0]), true);message["ssl_session_id"] = getSslSessionId(args[0]);message["function"] = "SSL_read";message["stack"] = SSLstackread;this.message = message;this.buf = args[1];},onLeave: function (retval) {retval |= 0; // Cast retval to 32-bit integer.if (retval <= 0) {return;}send(this.message, Memory.readByteArray(this.buf, retval));}});Interceptor.attach(addresses["SSL_write"],{onEnter: function (args) {var message = getPortsAndAddresses(SSL_get_fd(args[0]), false);message["ssl_session_id"] = getSslSessionId(args[0]);message["function"] = "SSL_write";message["stack"] = SSLstackwrite;send(message, Memory.readByteArray(args[1], parseInt(args[2])));},onLeave: function (retval) {}});

相关文章:

IOS - 抓包通杀篇

IOS中大多数情况&#xff0c;开发者都会使用OC提供的api函数&#xff0c;CFNetworkCopySystemProxySettings来进行代理检测&#xff1b; CFNetworkCopySystemProxySettings 检测函数直接会检测这些ip和端口等&#xff1a; 采用直接附加页面进程&#xff1a; frida -UF -l 通…...

盒子模型的简介

盒子的组成 一个盒子由外到内可以分成四个部分&#xff1a;margin&#xff08;外边距&#xff09;、border&#xff08;边框&#xff09;、padding&#xff08;内边距&#xff09;、content&#xff08;内容&#xff09;。会发现margin、border、padding是css属性&#xff0c;因…...

Kubernetes 101,第二部分,pod

在上一篇文章中,我们了解了Kubernetes 的基础知识以及对其主要架构的介绍。 介绍完毕后,就该探索如何在 Kubernetes 中运行应用程序了。 容器包装器 在 Kubernetes 中,我们无法直接创建单个容器。相反,为了更好,我们可以将容器包装成一个单元,其中包括: 规范:多个容器可…...

protobuf序列化解码原理

Protobuf的编码方式 Varints是一种紧凑表示数字的办法。他用一个或者多个字节表示一个数字&#xff0c;值越小的数字节节数越少。相对与传统的用4字节表示int32类型的数字&#xff0c;Varints对于小于128的数值都可以用一个字节表示&#xff0c;大于128的数值会用更多的字节来表…...

OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。

学习OpenCV的过程中&#xff0c;画图是不可避免的&#xff0c;本篇文章旨在介绍OpenCV中与画图相关的基础函数。 1、画线条——line()函数 介绍&#xff1a; cv2.line(image, start_point, end_point, color, thickness)参数&#xff1a; image: 图像start_point&#xff1a…...

性能平台数据提速之路

作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践&#xff0c;如何高性价比满足大数据生产端提速&#xff1f;如何…...

Dns域名解析服务器

前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址&#xff1f; 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议&#xff0c;用来获取域名对应的IP地址 域名解析服务器的介绍 DNS&#xff08;Dom…...

关于 JavaScript 中的 Promises

在 JavaScript 中&#xff0c;Promise 是一个对象&#xff0c;它表示一个可能还不可用&#xff0c;但会在未来解决的值。Promises 用于处理异步操作&#xff0c;例如发出网络请求或访问数据库&#xff0c;其中结果不是立即可用的。如果你准备好了&#xff0c;我想开始我们的冒险…...

PMP考前冲刺题——错题集

3、 [多选] 采购部门需要向全球不同的供应商采购项目所需的各种商品&#xff0c;所有采购订单均己发送给供应商并已按要求处理。项目经理后来收到客户提出的变更请求。由于项目经理未及时通知采购部门&#xff0c;运抵的所有物品都是按原来的需求所提供。 项目经理本应做什么来…...

【C++】30h速成C++从入门到精通(多态)

多态的概念多态&#xff1a;通俗来说就是多种心态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。多态的定义及实现多态的构成条件多态是在不同继承关系的类对象&#xff0c;去调用同意函数&#xff0c;产生了不同的行为&#xff0…...

从proc文件系统中获取gateway的IP地址

在linux的命令行下获取当前网络环境的gateway的IP并不是一件难事,常用的命令有ip route或者route -n,其实route -n也是通过读取proc文件系统下的文件来从内核获取路由表的,但ip route是通过netlink来获取的路由表;本文将讨论如何编写程序从proc文件系统中获取路由表,并从路…...

【LeetCode】剑指 Offer(17)

目录 题目&#xff1a;剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;剑指 Offer …...

MySQL索引类型

MySQL 是最流行的关系型数据库管理系统&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系数据库管理系统) 应用软件之一。 索…...

你了解HashMap吗?

一、前言&#xff1a;面试过的人都知道&#xff0c;HashMap是Java程序员在面试中最最最经常被问到的一个点&#xff0c;可以说&#xff0c;不了解HashMap都不好意思说自己是做Java开发的。基本上你去面试十家公司&#xff0c;有七八家都会问到你HashMap。那么今天&#xff0c;就…...

我一个女孩子居然做了十年硬件……

2011年&#xff0c;一个三本大学的电子信息专业的大三女学生跟2个通信专业的大二男生组成了一组代表学校参加2011年“瑞萨杯”全国大学生电子设计大赛&#xff0c;很意外的获得了湖北赛区省三等奖&#xff0c;虽然很意外&#xff0c;但还是挺高兴的&#xff0c;毕竟第一次为喜欢…...

【Linux】编译器gcc g++和调试器gdb的使用

文章目录1.编译器gcc/g1.1C语言程序的翻译过程1.预处理2.编译3.汇编4. 链接1.2 链接方式与函数库1.动态链接与静态链接2.动态库与静态库1.3 gcc与g的使用2.调试器gdb2.1debug和release2.2gdb的安装2.3gdb的使用2.4gdb的常用指令3.总结1.编译器gcc/g 1.1C语言程序的翻译过程 1…...

高效能自动化港口数字化码头智慧港航,中国人工智能企业CIMCAI世界港航人工智能领军者,成熟港口码头人工智能产品中国人工智能企业

打造高效能自动化港口数字化码头智慧港航&#xff0c;中国人工智能企业CIMCAI中集飞瞳世界港航人工智能领军者&#xff0c;成熟港口码头人工智能产品全球顶尖AI科技CIMCAI成熟AI产品全球前三船公司及港口落地&#xff0c;包括全球港口/堆场智能闸口验箱&#xff0c;全球港口岸边…...

HTTP协议(一)

HTTP协议&#xff08;一&#xff09; 什么是HTTP协议 客户端连上web服务器后&#xff0c;如果想要获得web服务器中的某个web资源&#xff0c;需要遵守一定的通讯格式&#xff0c;HTTP协议用于定义客户端与web服务器之间通讯的格式&#xff1b;基于TCP连接的传输协议&#xff…...

计算神经网络参数量Params、计算量FLOPs(亲测有效的3种方法)

1.stat&#xff08;cpu统计&#xff09; pip install torchstat from torchstat import statstat(model, (3, 32, 32)) #统计模型的参数量和FLOPs&#xff0c;&#xff08;3,32,32&#xff09;是输入图像的size 结果&#xff1a; 问题&#xff1a;当网络中有自定义参数时&am…...

sizeof与一维数组和二维数组

&#x1f355;博客主页&#xff1a;️自信不孤单 &#x1f36c;文章专栏&#xff1a;C语言 &#x1f35a;代码仓库&#xff1a;破浪晓梦 &#x1f36d;欢迎关注&#xff1a;欢迎大家点赞收藏关注 sizeof与一维数组和二维数组 文章目录sizeof与一维数组和二维数组前言1. sizeof与…...

【紧急预警】PlayAI新政策已生效!ElevenLabs未披露的商用语音水印机制曝光——2024年AI语音合规红线与替代方案速览(仅剩72小时窗口期)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;【紧急预警】PlayAI新政策已生效&#xff01;ElevenLabs未披露的商用语音水印机制曝光——2024年AI语音合规红线与替代方案速览&#xff08;仅剩72小时窗口期&#xff09; 水印机制逆向验证结果 通过对…...

别再折腾了!Windows 10/11下用VS2019编译ActiveMQ-CPP库的保姆级避坑指南

Windows平台下VS2019编译ActiveMQ-CPP库的终极解决方案 在Windows环境下使用Visual Studio 2019编译ActiveMQ-CPP库&#xff0c;对于需要实现高效消息队列通信的C开发者而言&#xff0c;是一个既关键又充满挑战的任务。不同于其他语言生态中"一键安装"的便捷&#x…...

SDR++终极指南:如何快速掌握跨平台软件定义无线电

SDR终极指南&#xff1a;如何快速掌握跨平台软件定义无线电 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus SDR软件定义无线电是一款开源的跨平台SDR软件&#xff0c;以其轻量级架构和直观界…...

从IEEE 1588到EtherCAT DC:深入对比两种工业网络时间同步协议的核心差异与应用选型

工业网络时间同步技术深度解析&#xff1a;EtherCAT DC与IEEE 1588的实战选型指南 在智能制造和自动化控制领域&#xff0c;毫秒级的响应时间早已成为过去式。现代工业网络对时间同步精度的要求已经进入纳秒时代——这相当于光在真空中仅能传播30厘米的时间跨度。当多个伺服电…...

如何快速集成KYGooeyMenu:iOS粘液菜单的完整实现指南

如何快速集成KYGooeyMenu&#xff1a;iOS粘液菜单的完整实现指南 【免费下载链接】KYGooeyMenu A not bad gooey effects menu. 项目地址: https://gitcode.com/gh_mirrors/ky/KYGooeyMenu KYGooeyMenu是一款为iOS应用打造的粘液效果菜单组件&#xff0c;能为你的应用添…...

企业级网络模拟:用eNSP搭建USG6000v双机热备+NAT的完整实验环境

企业级网络高可用实战&#xff1a;基于eNSP的USG6000v双机热备与NAT深度解析 当企业核心业务对网络连续性要求达到99.99%时&#xff0c;单台防火墙的部署就像走钢丝——任何硬件故障或链路中断都可能导致服务瘫痪。这正是我在为某电商平台设计灾备方案时遇到的痛点&#xff1a;…...

终极解决方案:VisualCppRedist AIO一站式修复Windows运行库问题

终极解决方案&#xff1a;VisualCppRedist AIO一站式修复Windows运行库问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否经常在Windows系统上遇到"…...

现代化WPF可视化设计引擎:从XAML代码到拖拽式开发的效率革命

现代化WPF可视化设计引擎&#xff1a;从XAML代码到拖拽式开发的效率革命 【免费下载链接】WpfDesigner The WPF Designer from SharpDevelop 项目地址: https://gitcode.com/gh_mirrors/wp/WpfDesigner 在WPF应用程序开发中&#xff0c;手动编写XAML代码进行界面布局是每…...

告别虚拟机臃肿:用QEMU用户模式(qemu-user)快速运行跨架构程序的完整指南

告别虚拟机臃肿&#xff1a;用QEMU用户模式&#xff08;qemu-user&#xff09;快速运行跨架构程序的完整指南 在开发跨平台应用或研究嵌入式系统时&#xff0c;开发者经常需要处理不同CPU架构的二进制文件。传统解决方案是启动完整的虚拟机&#xff0c;但这会消耗大量系统资源&…...

【AI研发知识管理终极指南】:SITS2026权威框架首次深度解密,3大认知盲区正在拖垮你的AI工程化落地?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;SITS2026框架的诞生背景与范式革命 传统智能系统开发长期受限于异构协议耦合、时序语义模糊及跨域协同低效三大瓶颈。2024年全球工业智能峰会&#xff08;GIISS&#xff09;发布的《智能时序系统白皮书…...