JNI层SSL通信抓包与溯源
在一些场景下对App与服务端交互的数据安全程度要求较高,可能会对通信进行加密传输 使用HTTPS/TLS:使用HTTPS协议,在传输层使用TLS进行加密,确保数据在传输过程中不会被窃取或篡改。 SSL Pinning:通过SSL...
Java层SSL通信抓包与溯源
http/https都是建立在tcp/udp之上应用层的协议,SSL/TLS又是HTTPS工作的一个基础,所以对socket进行字段溯源的时候绕不开的一个就是HTTPS协议。但是HTTPS是加密的,另外它中间还有证书验证,所以通过抓包工具无法直接抓到数据包。 在这篇文章中我们先尝试通过源码分析HTTPS的加密流程,获取hook点。通过FridaHook的方式抓到数据包。 这里同样写一个使用okhttp去访问https://www.baidu.com的Demo App 环境: 环境跟前两篇文章用的不同,因为pixel XL的手机电池鼓包game over了,可能电脑连接的USB接口上电流不稳定+时间长没拔发热严重的原因。换了一台pixel 5来测试,虚拟机换了kali,因为安装的在Ubuntu上安装了新版Charles界面显示有点问题,还是新版kali更好看点 Android版本:11.0 虚拟机:kali...
Java层socket抓包与源码分析(下)
创建demo作为分析案例本章将创建一个简单的udp通信demo,来进行分析并编写Frida Hook脚本 服务端:Python接收器 客户端:App Demo 代码分析跟上篇一样对接收和发送数据的流程进行hook来获取hook点 调试分析在receive()和send()处下断点进行调试 以调试模式运行之后会首先断在receive()处 这里继续F7步入 记录下来最后的调用,等下在源码中查找 java.net.DatagramSocket->receive java.net.PlainDatagramSocketImpl->doRecv 继续往下执行断在send() F7步入 记录下来最后的调用 java.net.DatagramSocket->send java.net.PlainDatagramSocketImpl->send 源码分析在源码中查找我们刚才记录到的最后的调用 receivejava.net.DatagramSocket->receive ...
Ubuntu配置静态ip
例如要将Ubuntu虚拟机的IP地址更改为192.168.1.23,并且使用VMware的桥接模式,可以按照以下步骤进行: 环境:这里示例环境是Ubuntu22.04,在其它环境下可能也有所不同 在VMware中设置桥接模式 打开VMware并启动虚拟机: 确保你的Ubuntu虚拟机已启动并正在运行。 进入虚拟机的设置: 右键点击虚拟机,然后选择“Settings”或“虚拟机设置”。 选择网络适配器: 在设置窗口中,找到并选择“Network Adapter”(网络适配器)。 选择桥接模式: 在网络适配器设置中,选择“Bridged: Connected directly to the physical network”(桥接:直接连接到物理网络)。确保取消勾选“Replicate physical network connection state”(复制物理网络连接状态)。 在Ubuntu中设置静态IP地址 打开终端: 在Ubuntu虚拟机中打开终端。 编辑Netplan配置文件:...
i茅台+葫芦娃预约平台搭建
i茅台直接使用docker安装就可以,然后再把葫芦娃平台也添加进去就ok docker安装 系统:Ubuntu 更新软件源并添加Docker官方证书 sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg 添加Docker在线安装源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(....
App抓包工具教程汇总
HTTPS抓包详解 HTTP + SSL + 认证 + 完整性保护 = HTTPS 预共享证书的非对称加解密技术 HTTPS通信完整流程 中间人抓包核心原理 Charles、Burp Suite开启SSL抓包 把Charles和burp的证书安装在手机里面是为了通过HTTPS的证书校验 认证机关的公开密钥必须安全的转交给客户端。使用通信方式时,如何安全转交是一件很困难的事情。因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥 中间人抓包流程 在这种情况下,app本质上是和Charles通信,服务器本质上也是跟Charles通信 所以在这个时候需要把Charles的证书放在手机里面 在把证书放到手机信任凭据的根目录之后,App和抓包工具之间以及抓包工具与服务器之间的校验就没有问题了 HTTPS到底是什么HTTP作为一种被广泛使用的传输协议,也存在一些缺点: 无状态(可以通过Cookie或Session解决) 明文传输 不安全 为了解决“明文”和“不安全“两个问题,就产生了HTTPS。HTTPS不是一种单独的协议,它是由HTTP +...
linkHook_init_array自吐
本章的主要内容为 通过源码分析init_array原理so加载执行流程 hook_linker init_array 自吐 在对linker进行hook之前先分析一下so文件的加载流程 在so被加载之后,如果so文件中存在.init和.init_array段的话它们会先被动态链接器调用进行一些初始化的操作。所以这两个函数无论有没有被调用它都会优先执行 例如这里我们并没有主动调用这个_init(),但是它还是会在so加载的时候主动执行 去源码中搜索一下加载so的dlopen函数调用过程 源码分析测试用的设备是Android 10.0所以这里以Android 10.0的源码为例,到目前最新的Android14为止对so的加载都是通过dlopen()进行的 void* do_dlopen(const char* name, int flags, const android_dlextinfo* extinfo, const void* caller_addr) { //...
libcHook
libc函数符号hook libc函数参数、返回值打印和替换 主动调用libc读写文件 本章主要是对libc中的线程创建函数进行hook以拦截将要执行的函数,以及主动调用libc中创建文件的一系列函数 hook libc中的函数这里我们以hook下面的反调试函数为例,一般反调试都是新开一个线程来执行的。那我们能不能直接hook线程创建函数来拦截反调试函数的执行呢 我们先来hook *pthread_create()*把它的参数和返回值打印出来,然后主动调用init函数看看它的执行效果。 function beginAnti(){ Java.perform(function(){ Java.choose("com.xiaoeryu.demoso1.MainActivity",{ onMatch: function(instance){ console.log("found instance") instance.init() },...
JNIHook
JNI函数符号hook JNI函数参数、返回值打印和替换 动态注册JNI_OnLoad hook RegisterNatives jnitrace 本章对系统框架层的函数进行了hook、以及hook Registernatives获取其中的信息 Frida相对于Xposed的优势在于可以对Native层进行hook、对内存进行搜索 除了对用户层native代码进行hook之外也可以对系统框架层进行hook,而对更深层进行hook有时候可以更容易得到需要的信息。 jnitrace脚本是hook了所有的JNI函数,app经过了JNI的任何函数都可以打印出操作流程。 这里还是以之前写的demo中的JNI函数为例 例如这里hook env->GetStringUTFChars 要hook这个函数还是首先要找到它的地址,查找函数的地址可以用上一章的方法从导出表或者导出符号中找到函数地址,但是首先要知道这个函数在哪个so中,如果对源码不熟悉不确定在哪个so中的话可以上网搜索一下这个函数所在的so hook...
Frida基础hook汇总
本章主要总结对Java层代码以及native代码的hook Java以及Native函数的hook以及主动调用 Native静态注册函数参数、返回值打印和替换 这里对自己写的demo为例进行hook(代码中包含了Java、JNI、C各种实现),源码链接放文末附件。 安装Frida的源码包,可以方便写Frida的时候随时查看函数实现 npm install --save @types/frida-gum 基础hook包括Java层和native层的基础hook Java层的静态函数 hook和主动调用的代码 Java.use("com.xiaoeryu.demoso1.MainActivity").stringFromJNI.implementation = function(){ var result = this.stringFromJNI(); console.log("stringFromJNI result is => ", result); return result; ...