爱某查APP - Abtk

news/2024/10/24 11:12:36/

⚠️前言⚠️

本文仅用于学术交流。
学习探讨逆向知识,欢迎私信共享学习心得。
如有侵权,联系博主删除。
请勿商用,否则后果自负。

接口网址

aHR0cHM6Ly9haXFpY2hhLmJhaWR1LmNvbS9hcHAvYWR2YW5jZUZpbHRlckFqYXg=
在这里插入图片描述

加密位置分析

app版本:2.27.0

jadx 全局检索一下

在这里插入图片描述

结果不多,有两个可疑的位置我们尝试 hook 一下

> 首先第一个位置发现结果存在于形参中,是传递过来的值,先放一放,看一下第二个位置

在这里插入图片描述

> 位置2,token.trim() 用于删除 token 首尾的空白字符,结果是由 Entrance.getToken(NewBridgeApplication.context) 得到的 在这里插入图片描述

在这里插入图片描述

> frida hook - Entrance.getToken, 成功hook到加密结果
Java.perform(function () {send('**********************');var Entrance = Java.use('com.baidu.abymg.Entrance');Entrance.getToken.implementation = function(a1){send('arg1 -> ' + a1);var result = this.getToken.apply(this, arguments);send('result -> ' + result);return result;};
});

在这里插入图片描述

> 下面来说一下另一种找加密位置的方式,hook - HashMap 打印堆栈,同样也可以找到这个 f 方法
Java.perform(function () {var linkerHashMap=Java.use('java.util.HashMap');linkerHashMap.put.implementation = function(arg1,arg2){var data=this.put(arg1,arg2);if(arg1=='Abtk'){send("=================linkerHashMap.put====================");send(arg1+"|||||||||||||"+arg2);send(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));}return data;}
});

在这里插入图片描述
在这里插入图片描述

参数分析 + Xposed hook

> getToken 方法只有一个参数是 Context 类型

这种参数类似于app执行上下文,最好获取app本身得到,模拟的话可能会缺失信息

> Xposed hook 逻辑

被动触发: 获取 getToken 上下文参数信息,并保存全局

Xposed 关键代码:
XposedHelpers.findAndHookMethod("com.baidu.abymg.Entrance", lpparam.classLoader, "getToken", Context.class, new XC_MethodHook() {@Override  // beforeHookedMethod 刚进入该方法还未执行。。afterHookedMethod 方法执行完毕 return 之前protected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedBridge.log("hook before param--: 进来了");super.afterHookedMethod(param);// 获取 getToken 方法参数, 并赋值为 静态变量 contextHookaqc.context = (Context) param.args[0];}})

主动调用: 使用全局保存的上下文参数信息,主动调用 getToken 获取密值

Xposed 关键代码:
@Action("Abtk")
public class aqcHandler  implements RequestHandler {@Overridepublic void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) {final Class<?> clazz = XposedHelpers.findClass("com.baidu.abymg.Entrance", Hookaqc.loadPackageParam.classLoader);String result = (String) XposedHelpers.callStaticMethod(clazz,"getToken", new Object[]{Hookaqc.context});HashMap<String, String> result_hp = new HashMap<String, String>();result_hp.put("Abtk", result);sekiroResponse.success(result_hp);}
}

效果展示

在这里插入图片描述

本人安卓水平有限,有不严谨之处欢迎私信交流 😀 😀 😀 。。。


http://www.ppmy.cn/news/1444680.html

相关文章

2024年Q1季度白酒行业数据分析:消费升级下,白酒均价上涨

前段时间&#xff0c;飞天茅台被曝批发参考价再次下探。而从线上市场的整体情况来看&#xff0c;白酒行业均价同比去年却有所上涨。鲸参谋数据显示&#xff0c;白酒均价在750元左右&#xff0c;同比去年上涨了14%。 尽管白酒行业均价有所上涨&#xff0c;但今年第一季度表现不…

duilib 原理分析 之 Button的click 事件

相关文章: duilib 之 鼠标按下事件是如何处理的? 这个click事件,是duilib中自定义的事件, 原理,就是监听wm_lbuttiondown 事件,当左键点击的是 button控件时,就转换成click事件,发送出去,以表面,鼠标点击到了button 或 buttonBox等控件。 目录 一、按钮模版类定义…

cocos-lua资源管理

本文介绍cocos-lua项目的资源管理和工作流&#xff0c;适用人群包括初学者和有经验开发者&#xff0c;故读者可根据自己的需要有选择性的查阅自己需要的内容&#xff0c;下文以ccs代指Cocos Studio 一.简单案例解析 下文通过介绍一个简单demo&#xff0c;介绍合图和资源目录结…

【Hive】自定义函数从编写到应用的整个流程(以UDF为例)

1. 编写UDF程序 以Java为例&#xff0c;编写一个字符串反转的函数&#xff08;工程依赖部分略&#xff09;&#xff1a; package com.example;import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hiv…

[XR806开发板试用] XR806 调用cjson 实现数据序列化

很荣幸获得极术设区提供的这次试用机会&#xff0c;可以接触鸿蒙操作系统。我工作接触最多的是linux 平台的嵌入式ARM平台较多&#xff0c;这次跑了下鸿蒙&#xff0c;也非常有趣。 不过接进年底了&#xff0c;日常大小琐碎事情突然多了起来&#xff0c;测评的比较匆忙&#x…

php curl_init proxy type

PHP的curl库提供了多种代理类型供选择。在使用curl库时&#xff0c;您可以设置代理类型&#xff0c;以便curl可以使用不同类型的代理来发出请求。 以下是curl支持的代理类型列表&#xff1a; HTTP代理&#xff08;CURLOPT_PROXYTYPE > CURLPROXY_HTTP&#xff09;&#xf…

【Qt】无法创建或打开CMake项目

无法创建或打开CMake项目 没有CMake选项 原因 卸载重装了qt&#xff0c;安装时勾选了cmake&#xff0c;发现还是一样没有。。。 后面发现是插件里没有勾选上CMake。。。很无语 不是应该默认就有的吗 不懂了 解决 插件勾选重启就好了

JAVASE 数组相关知识

递归 A方法调用B方法&#xff0c;我们很容易理解 递归就是:A方法调用A方法&#xff0c;即自己调用自己 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#xff0c;递归策略只需少量的程序就可…