经过上次的简单的hook,自己对frida的使用有了基本的了解(看这篇文章的你也应该能够了解)。

在上次的sign值成功解密了加密参数之后,又遇到了许多恶心的APP。

一类是因为不走系统的代理,这样像fiddler这种抓包软件就不抓不到了,查了网上的方法,安装了JustTrustMe也是行不通,暂时没有很好的解决方法

(倒是有两种方法,个人还没时间探索。这里给出两种方法的思路,第一种就是反编译APP,修改代码,打包回APP,让APP的请求走系统代理,使用fiddler的证书。第二种就是使用谷歌亲儿子手机,从底层入手,刷机,改系统,将代理永远设为系统,这样一劳永逸。)

嗨呀,不知道扯得对不对,反正废话不多说,直接开始。

一类则是今天要记录的,和上次的APP一样,通过抓包软件能够抓到请求,分析请求发现有个加密值。但是比上次那个多了一丝丝的趣味。(多了一点难度)

不废话了,直接搞。

APP名称:5a6c5pil5omL5py65Y+w

使用工具:frida + 夜神模拟器 + APP + jadx + fiddler + postman

使用fiddler抓取请求包

先来分析一下请求的信息

内心:芜湖~ 找到了这个url不就完事了。

但是,经过测试,这个链接一天之后就失效了。

通过postman分析出来这些参数

这还分析啥,失效的原因就是sign!

除了sign一目了然,通过参数名字和参数就能对应上。(ip areas啥的我就打码了,这时候就需要做到心中无码了)

再一分析,sign是个md5加密

内心:这时候经验主义一波,根据以往的sign加密的经验,有的同学就会说了,这肯定就是这些参数通过&和=链接起来,一起做了个md5加密,这算完事了。

非也非也,通过简单的测试发现并不是这样,虽然是MD5加密,但是加密参数动了一点点手脚。

所以,我们就分析一下源码吧,测试了一波,并没有加壳。那就直接上jadx

PS:这里说一下,关于jadx怎么寻找sign加密方法,这完全是经验,通常就是sign=或者token=或者通过函数名,需要自己多积累,我是没有啥好的方法,如果有,请你评论告诉我,一起学习!

通过搜索sign",发现有个config很可疑,追进去!

查找一下用例,发现这个getrequest很可疑嗷,进去看看

这不找到了嘛,看这熟悉的请求参数名。

简单分析一下,SignUtil.getSignStr就是那个加密算法

至此,我们完成了重要的一步,找到了加密算法。

下面我们想知道这个方法传进来的参数长什么样,这时候就需要frida

还记得上次的frida代码吗?

通过apkhelper查找一下包名,这里就不演示啦。

但是这里有个问题

我们想看的参数是放在map里面的,之前我们都是直接send(a)这样查看字符串a

这要是map,该如何查看呢? js是弱类型语言,所以需要转换一下。

好啦,代码改好,环境之前都配置好了,运行frida-server和程序来看一下结果。

注意:要模拟器要先打开APP哦,不然报错啦。

这样我们就得到了map里面是啥了

至于getSignStr的其余参数

str:一段固定的字符串

str2:时间戳

这样,我们就完成了,下面就是编码构造sign值啦。

下面是代码参考

(ip地址和设备id自己填上就好啦)

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;public class main {public static void main(String[] args) {Map<String, String> urlParams = new HashMap<String, String>();urlParams.put("siteid", "10005");urlParams.put("clientid", "1");urlParams.put("modules", "common:100");urlParams.put("share_menu_id", "1");urlParams.put("app_version", "3.06.02");urlParams.put("thumbrate", "2");urlParams.put("device_id", "****************");urlParams.put("system_name", "android");urlParams.put("ip", "********");urlParams.put("areas", "福建省,漳州市,芗城区");urlParams.put("page", "1");urlParams.put("slide", "0");urlParams.put("type", "android");urlParams.put("pagesize", "20");urlParams.put("menuid", "42");Map<String, String> linkedHashMap = new LinkedHashMap<>();Object[] array = urlParams.keySet().toArray();Arrays.sort(array);for (Object obj : array) {try {linkedHashMap.put(obj.toString(), URLEncoder.encode(urlParams.get(obj).toString(), "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}StringBuilder sb = new StringBuilder();for (Map.Entry entry : linkedHashMap.entrySet()) {if (sb.length() > 0) {sb.append("&");}sb.append((String) entry.getKey());sb.append("=");sb.append((String) entry.getValue());}String str = "e62c2beda505f5ffcf0d6a9f989ab83d";String str2 = System.currentTimeMillis() + "";String result = md5(md5(sb.toString().replace("*", "%2A").replace("%7E", "~").replace("+", "%20")) + str + str2);System.out.println(result);System.out.println(str2);System.out.println(sb);}public static final String md5(String str) {char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};try {byte[] bytes = str.getBytes();MessageDigest instance = MessageDigest.getInstance("MD5");instance.update(bytes);byte[] digest = instance.digest();int length = digest.length;char[] cArr2 = new char[(length * 2)];int i = 0;for (byte b : digest) {int i2 = i + 1;cArr2[i] = cArr[(b >>> 4) & 15];i = i2 + 1;cArr2[i2] = cArr[b & 15];}return new String(cArr2);} catch (Exception unused) {return null;}}}

这样,我们再次测试,发现构造出的sign值和请求里面的sign值完全一样啦。

欢迎交流~~ 溜了溜了

再来!使用frida框架hook来获取APP的加密算法的参数相关推荐

  1. 安卓逆向_24( 一 ) --- Hook 框架 frida( Hook Java层 和 so层) )

    From:Hook 神器家族的 Frida 工具使用详解:https://blog.csdn.net/FlyPigYe/article/details/90258758 详解 Hook 框架 frid ...

  2. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取 IActivityManager 对象 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  3. 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “宿主“ 应用中的 Element[] dexElements )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  4. 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “插件包“ 中的 Element[] dexElements )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  5. 安卓逆向Xposed HOOK TB直播APP的x-sign参数

    最近学习安卓逆向,接触一下TB系的APP,了解大厂APP是做数据安全的,这篇文章主要介绍某宝直播APP的签名参数x-sign的HOOK过程,当然,其他的参数也是可以HOOK的.本文只用于学习交流,请勿 ...

  6. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  7. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  8. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  9. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

最新文章

  1. word怎么根据点画曲线_圆锥曲线联解公式
  2. python相关性分析特征过滤_特征选择-Filter过滤法后续(相关,互信息法)
  3. Linux TC(Traffic Control)框架原理解析
  4. 人工智能到底是什么?人工智能如何改变社会?中国的人工智能应该做怎样的探索?
  5. aop简介-基于cglib的动态
  6. mysql 视图锁_如何诊断和处理锁等待
  7. 增压的jstack:如何以100mph的速度调试服务器
  8. Redis:13--常用功能之redis-cli redis-server等命令
  9. 核销规则配置好之后 验证核销规则和本地测试过程
  10. 自定义轮播图以及bug优化
  11. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_19-CMS前端页面查询开发-页面原型-Table组件测试...
  12. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7
  13. java程序设计精编教程第3版电子版课后答案_java程序设计精编教程第3版答案
  14. 【前端性能优化】雅虎35条军规
  15. 服务器芯片将填补中国空白,3年迭代4次技术,芯片黑马填补国产空白,韩企的垄断被打破...
  16. 【游戏】GBA经典游戏《逆转裁判》1、2、3合集发布
  17. 关于 Anaconda 创建环境后没有名字的问题
  18. java实现俄罗斯方块项目
  19. Web前端之HTML 与 CSS基础知识
  20. 案例:谷歌人工智能算法Dropout申请专利

热门文章

  1. 2022摄影摄像行业年度分析报告:单反小幅下滑,微单销额增长超32%
  2. Microsoft Teams 深度使用体验——创建团队
  3. 小学计算机二课活动记录,小学教研活动记录
  4. 推荐10部最有影响力的韩剧,如未上榜的请留言下期推荐
  5. 华硕无畏15 2023款和华硕无畏15i 2023区别 对比评测选哪个好
  6. jquery 自动触发a 标签的click()方法
  7. 使用 Docker Compose 构建复杂的多容器 App
  8. 微信h5支付,微信外浏览器支付实现
  9. ShowType=0,交换机命令showinterfacestype0/port_#switchport|trunk用于显 - 信管网
  10. 服务器和售票系统,网上售票系统的开发与实现.doc