逆向某安卓游戏native层登录协议的过程记录

news2024/12/23 5:23:05

前言

主要参考白龙哥的unidbg学习:SO逆向实战十三篇
用到工具: frida(HOOK看参数) + unidbg(模拟) + ida(静态分析)+ charles(抓包)

准备

此处省略一大堆获取So文件流程,可以用反射大师获取

apk分析

经过分析,登录首先需要sdkEncrypt加密账号和密码,再用返回结果签名处理后,作为参数Post到服务端那边进行验证。

在这里插入图片描述

抓包分析

对登录进行抓包,会发现Contents是一串base64的字符串,但是解密后并不能看出原文,所以肯定是经过了处理

在这里插入图片描述

继续跟踪

在这里插入图片描述发现所需要的全部函数都在DatabaseUtil,并且在Native层在这里插入图片描述

分析全过程

初步分析

把dcn_encrypt拉入Ida进行分析,发现是动态注册
在这里插入图片描述

unidbg

多说无益,直接拉入unidbg看看函数地址
具体代码参考 : https://www.cnblogs.com/Eeyhan/p/17353245.html
在这里插入图片描述
发现sdkEncrypt在0x109d

回到IDA

按G跳转到0x109d,再按F5查看C伪代码
在这里插入图片描述
卧槽什么情况,看到这里就一脸懵逼,这也是卡我最久的地方,网上也差不到相关资料。

继续分析Java部分

后来在DatabaseUtil看到这样一段代码
在这里插入图片描述
好像会执行dcn_encrypt里面的load函数,这个load是动态加载另外一个so文件dcn_dynamic
根据unidbg的地址再查看相对应的load函数
在这里插入图片描述
答案一目了然,这个load通过dlsym加载另外一个so,调用这个so文件相当于调用另外一个so文件,只要分析另外一个so文件dcn_dynamic即可。

转折

上面找到了问题所在,用unidbg直接调用dcn_dynamic即可完成除sign以外的函数。
因为dcn_encrypt的sign要调用一堆java的环境,再作为参数传给dcn_dynamic的sign在这里插入图片描述
新问题来了,我不能跳过dcn_encrypt的sign直接去执行dcn_dynamic的sign,因为我需要那些参数

两种思路

1、用frida HOOK得到dcn_encrypt执行dcn_dynamic的sign时的参数,然后直接用这个参数模拟。
2、直接调用dcn_encrypt的sign

两种思路的问题

第一种思路的问题是参数涉及到设备信息等,这可能会影响sign的结果,后面如果设备信息不一致,会导致sign无效。
第二种思路的问题是我无法调用load去加载dcn_dynamic
因为load函数中有一行代码

j_dlsym(v9, "JNI_OnLoad");

会报错,因为dcn_dynamic根本没有JNI_OnLoad这个函数(求高手解答,为什么IDA看没有这个函数,但是app自己去调用仍能正常调用)

这里卡得我一度想放弃,因为网上实在找不到案例。后来我对比分析load和sign伪代码发现

load中的代码:

  v11 = dword_5094;
  *(v11 + 12) = j_dlsym(v9, "native_parm_sign");

sign中代码:

 v6 = *(dword_5094 + 12);
  
 return v6(a1, a2, strs);

这个实现方法是通过j_dlsym动态加载库,返回内容是该函数加载到内存后的地址dword_5094 + 12
那我能不能自己加载dcn_dynamic,然后将dword_5094 + 12修改成加载后的地址?
以下是加载的代码,其中module是dcn_encrypt,module2是dcn_dynamic
在这里插入图片描述
以下是sign执行的代码
在这里插入图片描述
调试发现成功运行!
在这里插入图片描述
至此,困难的部分基本完成,剩下的就是补环境——非常漫长的流程(耗时三天)

运行结果

在这里插入图片描述
将加密后的body放入post测试

在这里插入图片描述
成功返回结果

decryptBody看看结果明文
在这里插入图片描述

尾声

补环境的流程不想写了,网上一大堆资料,都大同小异,这个so文件调用一大堆环境,补了我三天时间,注意补环境是参数尽量不要瞎写,可以用fridaHook获取真实参数
例如
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机编程要求的C语言水平和技能

如果你想从事单片机工作,你需要具备一定水平的C语言编程技能。以下是一些建议的技能和知识,可以帮助你为单片机编程做好准备: 熟悉C语言基础:掌握C语言的基本语法、数据类型、控制结构和函数等。这是你开始学习单片机编程的基础。…

实操:用Flutter构建一个简单的微信天气预报小程序

​ 微信小程序是一种快速、高效的开发方式,Flutter则是一款强大的跨平台开发框架。结合二者,可以轻松地开发出功能丰富、用户体验良好的微信小程序。 这里将介绍如何使用Flutter开发一个简单的天气预报小程序,并提供相应的代码示例。 1. 准备…

《C语言初阶篇》循环语句还没搞懂?这篇文章带你轻松学会循环语句!

🎬 鸽芷咕:个人主页 🔥 个人专栏:《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言💬 循环语句的介绍💬 while 语句的介绍💭 while中的break💭…

numpy 多项式函数回归与插值拟合模型;ARIMA时间序列模型拟合

参考: https://blog.csdn.net/mao_hui_fei/article/details/103821601 1、多项式函数回归拟合 import numpy as np from scipy.optimize import leastsq import pylab as plx np.arange(1, 17, 1) y np.array([4.00, 6.40, 8.00, 8.80, 9.22, 9.50, 9.70, 9.86,…

ELK 企业级日志分析系统----elk的部署

文章目录 一、ELK 简介1.1 ElasticSearch介绍1.2 ELK的组件ElasticSearchKiabanaLogstash可以添加的其它组件 1.3 为什么要使用 ELK1.4 完整日志系统基本特征1.5 ELK 的工作原理: 二、elk环境部署2.1 ELK Elasticsearch 集群部署(在Node1、Node2节点上操…

vue3 处理elementPlus的Tree树状结构的选中和编辑数据回显

<!-- 添加角色 请求菜单:props"{ children: children, label: name }" children:后端返回的子集结构的key label&#xff1a;name后端返回的名字&#xff1a;data"menus" menus是后端返回的菜单权限列表--><el-treeref"elTreeRef":dat…

Studio One6免费版音乐人常用的编曲软件

Studio One是Pre sounds公司首次研究开发宿主软件的成果。Studio One在其研发环节就吸取了市面上其他宿主软件的优缺点并且做了专业的调研整改。将其他宿主软件的优点经过改良融合在一起&#xff0c;将不足之处进行舍弃或者优化。 Studio One是一款功能强大的编曲软件&#xff…

clickonce 发布winform 桌面快捷键打不开程序

错误应用程序名称: applaunch.exe&#xff0c;版本: 4.8.9032.0&#xff0c;时间戳: 0x6250a8ba 错误模块名称: KERNELBASE.dll&#xff0c;版本: 10.0.22621.1778&#xff0c;时间戳: 0x63f72683 异常代码: 0xe0434352 错误偏移量: 0x000000000006536c 错误进程 ID: 0x0x3E84 …

arm学习stm32之spi总线数码管倒计时,裸机开发,soc

由于时间没有用时间计时器操作&#xff0c;有些误差&#xff0c;后续有空会翻新计时器版本 main.c #include "spi.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int num[10…

pdf怎么进行分割,三个实用的方法!

许多朋友在使用PDF文件时&#xff0c;常常遇到需要拆分文件的问题。那么该如何进行操作呢&#xff1f;实际上&#xff0c;我们通常所说的拆分也可以理解为分割&#xff0c;即将一个PDF文件分成两个或多个部分。现在&#xff0c;我将推荐三款工具&#xff0c;通过记灵在线工具&a…

漏洞复现 || eGroupWare spellchecker.php 远程命令执行漏洞

0x01 阅读须知 我爱林的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用…

Java-通过IP获取真实地址

文章目录 前言功能实现测试 前言 最近写了一个日志系统&#xff0c;需要通过访问的 IP 地址来获取真实的地址&#xff0c;并且存到数据库中&#xff0c;我也是在网上看了一些文章&#xff0c;遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法&#xff0c;可…

chinese_lite ocr使用教程

一、简介 超轻量级中文ocr&#xff0c;支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) crnn(2.5M) anglenet(378KB)) 总模型仅4.7M 二、环境 python3.6linux/macos/windows 三、项目地址 https://github.com/DayBreak-u/chineseocr_lite 下载项目后, 执行 pip…

服务器上的Notebook在本地运行

3090TI的服务器&#xff0c;用的是Ubuntu系统&#xff0c;在使用的时候&#xff0c;如何让服务器资源在本地的JupyterNotebook运行呢&#xff1f; 目录 一、在3090TI服务器上指定一个特定的访问端口 二、本地端口配置 三、本地JupyterNotebook访问服务器 一、在3090TI服务器…

数据结构(Map、Set)

文章目录 一、搜索树1.1 概念1.2 操作1.3 与java类集的关系 二、Map 和 Set2.1 概述2.2 Map2.3 Set 三、哈希表3.1 概念3.2 冲突3.3 其他 一、搜索树 1.1 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为…

字符串函数和字符函数

文章目录 前言strlen()实现strlen&#xff08;&#xff09; strcpy&#xff08;&#xff09;模拟实现 strcat()strcat()模拟实现 strcmp()模拟实现strcmp() strstr()模拟实现strstr() strncpy(),strncmp(),strncat()strtok()memcpy()memcpy()的模拟实现 memmove()memmove()的模…

ELK + Filebeat 部署及 logstash 的四大插件(grok、date、mutate、multiline)

目录 FilebeatFilebeat 结合 logstash 带来好处&#xff1a;FluentdELK Filebeat 部署1&#xff0e;安装 Filebeat & Httpd2&#xff0e;设置 filebeat 的主配置文件4&#xff0e;在 Logstash 组件所在节点上新建一个 Logstash 配置文件5&#xff0e;浏览器访问 http://19…

凯迪正大数显电动调压控制台

数显电动调压控制台使用方法 1、核对试验变压器&#xff0c;测量绕阻额定输出电压&#xff0c;使之与操作箱&#xff08;台&#xff09;相吻合。 2、按接线示意图接好试验变压器与操作箱&#xff08;台&#xff09;及感应调压器之间的联线。 3、接通电源&#xff0c;通电源指…

el-select 右侧icon样式问题

el-select 右侧icon样式问题 样式问题如图&#xff1a; 解决方法&#xff1a; el-input__suffix {display: flex;align-items: center;justify-content: center; }注意&#xff1a;样式需写在没有scoped的style标签里

在VSCODE编辑器是用ctrl+c和ctrl+s(复制粘贴)失效怎么办

有时我们在开发过程中&#xff0c;由于使用vsccode太长时间导致复制ctrlc和ctrls会失效&#xff0c;之前我的处理方式是重启浏览器&#xff0c;但有时候这样太耗时间了&#xff0c;但发现一个方法可以解决&#xff0c;就是刷新下编辑器的timeline就行&#xff0c;如下图&#x…