某某analysis参数算法分析

2023-11-15

作者:TheWeiJun
来源:逆向与爬虫的故事

今天给大家带来一个干货分享,由于想要查看某些APP的详细信息,需要通过APP名称去某麦网站进行搜索查看。而整个过程中涉及到逆向分析,为了方便大家学习,本次完整流程记录如下:

目录

一、确定要获取的内容 

二、确定需要还原的参数

三、JS断点调试

四、JS算法还原

一、确定要获取的内容

首先我们要查询指定内容,如下:

我们想要获取APP信息,需要去获取这个搜索接口。具体链接不方便展示!考虑到安全问题。

通过浏览器Network分析,我们可以定位到数据地址如上!

二、确定需要还原的参数

其次我们通过分析url及参数信息如下:

params = (
    ('analysis', 'bFYNRVQDfUh+f1V/ChxadAxdXHhfG1lxV3ENXncQGhddVERTWB9ZXlRVG3cQBFcIBgcCBwgJAgUEIxQC'),
    ('country', 'cn'),
    ('search', '\u738B\u8005\u8363\u8000'),
    ('version', 'ios14'),
)

通过分析params参数,确定加密参数为: analysis

初次分析怀疑analysis应该是一个base64加密,故做如下尝试:

哈哈,果然不出我所料,没有想象的这么简单,那么接下来我们就要进行分析了,这个参数是如何产生的。

三、JS断点调试及算法还原

1. 查询指定关键字,定位参数坐标

   在Network下点击搜索按钮进行查询,初次定位是不是通过接口返回的参数,搜索结果如下:

查看搜索结果,我们发现查询的内容不在response返回体内!那么我们就要看看是不是在sources搜索框中,可查看下图:

说明:经过查询,发现也定位不到关键字,那么搜索关键字analysis定位可以忽略掉了,我们可以肯定的是代码中没有用到这个变量名,但是加密的方式我们可以去搜索下,初步怀疑是base64,那么就搜下base64试试吧。搜索如下:

果然能查询到base64加密的js内容,那么这么多文件,我们如何查找是哪个呢?首先可以排除css格式结尾的文件,可以直接查看js格式的文件。

通过搜索,定位到了base64加密的坐标,如上图所示。那么我们接下来就要进行断点调试了!

2. 对js内容进行断点调试

   先给如上js函数打断点,断点打完如下图所示:

查看断点内容,我们发现变量e即为我们要搜索的内容,可以肯定这个加密和函数h关系很大。

然后通过断点调试定位问题,可以查看如下展示:

通过分析上面两张图片,可以判断第一张图片的a属性与第二张图片的analysis的值是一致的,都是:

"bFYNRVQDfUh+f1V/ChxadAxdXHhfG1lxV39VLF4YXCVQUF9+XxtZcVdxXgpzFktLUFdCU1gfU1hVAFx7VBd5RUZZVHATAQMAUA4BDFIBAwAEcBMB"

可以证明,这个js变量a就是我们要查找的加密值analysis。那么我们接下来要做的就是算法还原了!

三、JS算法还原

/*  r = 'Y25pb3MxNOeOi+iAheiNo+iAgOeOi+iAheiNo+iAgA==@#/search/checkHasAppid@#130392969664@#1';    说明:js中r的结果为上面,r的算法如下。    1. 通过js Console打印d的值为:'@#'    2. 通过js Console打印e.url.replace(e.baseURL, "")的值为:/search/checkHasAppid    3. 通过算法逆推,可以得出。       r = (0,       n.cv)(r);的结果为:Y25pb3MxNOeOi+iAheiNo+iAgOeOi+iAheiNo+iAgA==    4. 查看n.cv发现是对指定内容进行一个base64加密,解密得到结果如下:       r = "cnios14王者荣耀王者荣耀"; 也就是r = r.sort().join("") == "cnios14王者荣耀王者荣耀";    */    var a, o = +new Date - true - 1515125653845, r = [];    o = 130392969664; // 将o的值与js调试的值保持一致    var r_ori = 'Y25pb3MxNOeOi+iAheiNo+iAgOeOi+iAheiNo+iAgA==@#/search/checkHasAppid@#130392969664@#1';    var r = "cnios14王者荣耀王者荣耀";    var e = "/search/checkHasAppid";    var d = "@#";    r = (0,        n.cv)(r),        r += d + e,        r += d + o,        r += d + 1;    console.log(r);    console.log(r_ori);

通过打印展示初始的加密值和人工还原的加密值,对比结果如下:

Y25pb3MxNOeOi+iAheiNo+iAgOeOi+iAheiNo+iAgA==@#/search/checkHasAppid@#130392969664@#1Y25pb3MxNOeOi+iAheiNo+iAgOeOi+iAheiNo+iAgA==@#/search/checkHasAppid@#130392969664@#1

对比发现,r变量的值和原始值完全一致,那证明我们的r算法还原没有任何问题。接下来,我们分析一下a变量的生成!

/*    a 的值为:'bFYNRVQDfUh+f1V/ChxadAxdXHhfG1lxV39VLF4YXCVQUF9+XxtZcVdxXgpzFktLUFdCU1gfU1hVAFx7VBd5RUZZVHATAQMAUA4BDFIBAwAEcBMB'    说明:js中a的值为上面的结果,a的算法如下。    1. 通过js Console打印l的值为:"0000000c735d856",经过多次调试,这个值为固定值。    2. n.cv方法为base64加密。    3. n.oZ方法我们要进行还原,代码如下:     */    //     a = (0,    //         n.cv)((0,    //         n.oZ)(r, l));var a_ori = 'bFYNRVQDfUh+f1V/ChxadAxdXHhfG1lxV39VLF4YXCVQUF9+XxtZcVdxXgpzFktLUFdCU1gfU1hVAFx7VBd5RUZZVHATAQMAUA4BDFIBAwAEcBMB';var l = "0000000c735d856";a = (0,    n.cv)((0,    n.oZ)(r, l));console.log(a_ori);console.log(a);

代码已经构造完成,我们直接打印结果,展示内容如下:

我们发现和原始的变量a值结果一致,那么整合算法如下:

var n = {};
function i(e) {    var t, a = (t = "",        ["66", "72", "6f", "6d", "43", "68", "61", "72", "43", "6f", "64", "65"].forEach((function (e) {                t += unescape("%u00" + e)            }        )),        t);    return String[a](e)}
function h(e) {    return function (e) {        try {            return btoa(e)        } catch (t) {            return base64(e)        }    }(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g, (function (e, t) {            return i("0x" + t)        }    )))}
function g(e, t) {    t || (t = s());    for (var a = (e = e.split("")).length, n = t.length, o = "charCodeAt", r = 0; r < a; r++)        e[r] = i(e[r][o](0) ^ t[(r + 10) % n][o](0));    return e.join("")}
n.cv = h;n.oZ = g;
function get_encdata(keyword) {    var l = "0000000c735d856";    var d = "@#";    var o = +new Date - 1515125653845;    var r = ["cn", "ios14", keyword];    r = r.sort().join("");    console.log(r);    r = n.cv(r);    var s = "/search/index"; // 根据url路径变动    r += d + s + d + o + d + 1;    a = (0,        n.cv)((0,        n.oZ)(r, l));    console.log(a);    return a}

直接上python代码headers = {    'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',    'accept': 'application/json, text/plain, */*',    'sec-ch-ua-mobile': '?0',    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',    'sec-ch-ua-platform': '"macOS"',    'sec-fetch-site': 'same-site',    'sec-fetch-mode': 'cors',    'sec-fetch-dest': 'empty',    'accept-language': 'zh-CN,zh;q=0.9',}ctx = js_load()keyword = "王者荣耀"params = (    ('analysis', ctx.call("get_encdata", keyword)),    ('country', 'cn'),    ('search', keyword),    ('version', 'ios14'),)response = requests.get('https://xxxxx/search/index', headers=headers, params=params, proxies=get_proxy())print(response.text)打印结果如下图所示:

本次分析到这里就结束了,欢迎大家阅读和交流!

    我是TheWeiJun,分享工作或日常学习中关于爬虫、逆向和分析的一些思路,文中若有错误的地方,恳请大家联系我进行批评指正!

    做一个爱分享的程序员,做一个爱学习的程序员!⛽️⛽️⛽️  

如果喜欢我的文章,可以进学习群一起交流哦。

文章来源:逆向与爬虫的故事

微信搜:逆向与爬虫的故事;给我一个关注!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

某某analysis参数算法分析 的相关文章

随机推荐

  • Redis——认识Redis

    简单介绍 Redis诞生于2009年 全称是Remote Dictionary Server 远程词典服务器 是一个基于内存的键值型NoSQL数据库 特征 键值 Key value 型 value支持多种不同数据结构 功能丰富 单线程 每个
  • Qt简单的异步操作实现方法

    Qt简单的异步操作实现方法 在实际应用中 经常会遇到一些耗时操作 导致了主线程的阻塞 这时候可以使用异步操作来避免阻塞 Qt的异步操作需要使用下面的库 include
  • python写邮箱验证工具_Python编写的Linux邮件发送工具

    之前有用过Linux自带的mail工具来定时发送邮件 但是要装mailx还有配mail rc 这还比较正常 关键是到了ubantu下这工具用起来真是操蛋 如果哪天其他的unix like操作系统也有需求 那就太麻烦了 所以我用自带的pyth
  • QT界面布局和设计

    一 设计 对功能和模块进行分析 然后设计对应的模块 将每个模块都用widget展示作为组件 工程结构示例 二 完成模块 代码分别设计各个组件 合适即可 三 主界面连接 主界面连接各个子模块 在这里插入代码片 include AutoFlaw
  • CAN总线详解及STM32的CAN通信编程指南

    对于CAN通信而言 本人之前也未接触了解过 由于实习的技术要求 因此也花费了一段时间对CAN通信进行学习 并且实现了基于STM32的CAN环回静默模式通信 因此写一遍比较详细的文章对该内容进行总结 本文的参考资料有STM32的中文参考手册
  • 【JAVA】Could not resolve all dependencies for configuration ‘:detachedConfiguration1‘

    build gradle 中添加 id net linguica maven settings version 0 5 plugins id org springframework boot version 2 3 3 RELEASE id
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • centos7 安装jdk17

    默认情况下 yum 仓库中是没有jdk 17 的 只有jdk 11 所以我们不能直接用yum 安装 需要手动下载进行配置工作 下载文件 wget https download oracle com java 17 latest jdk 17
  • 网页与服务器数据库数据交互,网页与ACCESS数据库如何实现数据交互?

    1 打开access 单机菜单栏创建 选择表 单击列 选择下拉菜单中的字段类型 单机列名更改字段名称 2 添加完成后单击保存成test accdb 新建c 窗体程序 3 using System using System Collectio
  • 今日算法中数据结构知识练习 (7-19)【4】

    Date 2019 07 19 1 两个指针 P 和 Q 分别指向单链表的两个元素 P 所指元素是 Q 所指元素前驱的条件是 P gt next Q 2 串是一种特殊的线性表 其特殊性体现在 数组元素是一个字符 3 下列文件中属于逻辑结构文
  • uniapp onHide()和onUnload()的使用

    小程序onHide 和onUnload onHide 触发的场景 导航页1 gt gt 导航页2 会触发导航页1 onHide 导航页 gt gt 子页面 会触发导航页 onHide 子页面1 gt gt 子页面2 会触发子页面1 onHi
  • linux查询mysql内存使用率_MySQL内存使用率无限增长

    背景 收到内存报警的信息以后 从监控中发现MySQL服务器的内存使用率在不断的增长 附图 虽然进行了重启 但是内存占用率依然会不停的增长 大约在半个月左右的时间内又把内存消耗完毕 场景 未搭建场景 数据库版本 5 7 12 分析 PS 时间
  • 精简CUDA教程——CUDA Runtime API

    精简CUDA教程 CUDA Runtime API tensorRT从零起步迈向高性能工业级部署 就业导向 课程笔记 讲师讲的不错 可以去看原视频支持下 Runtime API 概述 环境 图中可以看到 Runtime API 是基于 Dr
  • (C语言)在屏幕上输出对应的图案(* ** *** *****.....)

    在屏幕上输出如下的图案 根据上面图片可以看出来 前7行中下一行的星比前一行多出两个星 第8行到第13行是下一行比前一行少2个星 代码为 include
  • el-select远程搜索:remote-method遇到的坑

    在使用远程搜索的时候 就是每次发请求获取数据然后选择 会出现选择后总是会出现选择紊乱的情况 在使用debugger后排查了很久 发现每次选择内容后 都会触发 remote method这个事件 也就是继续会发请求 然后获取到新的数据重新赋值
  • 什么是值传递,什么是引用传递

    一般认为 java中基础类型数据传递都是值传递 java中实例对象的传递是引用传递 值传递是对基本型变量而言 传递的是该变量的一个副本 不影响该原变量 而引用传递是一般对于对象型变量而言 传递的是该对象地址的副本 并不是原对象本身 1 值传
  • linux bash环境配置文件

    linux bash环境配置文件 你是否会觉得奇怪 怎么我们什么动作都没有进行 但是一进入 bash 就取得一堆有用的变量了 这 是因为系统有一些环境配置文件案的存在 让 bash 在启动时直接读取这些配置文件 以规划好 bash 的操作环
  • ubuntu切换国内镜像源,加速apt-get下载速度

    ubuntu切换国内镜像源 加速apt get下载速度 如题 使用apt get命令安装包时 由于系统自带的下载源在国外服务器上 故下载速度较慢 若切换为国内源 将显著提升下载速度 下列是设置步骤 STEP 1 查找适合自己系统的镜像源配置
  • 深入理解线程的原理和用法

    Java中的线程 程序 进程和线程 1程序是一段静态的代码 它是应用程序执行的蓝本 2进程是程序的一次动态执行过程 它对应了从代码加载 执行到执行完毕的一个完整过程 作为蓝本的程序可以被多次加载到系统的不同内存区域分别执行 形成不同的进程
  • 某某analysis参数算法分析

    作者 TheWeiJun 来源 逆向与爬虫的故事 今天给大家带来一个干货分享 由于想要查看某些APP的详细信息 需要通过APP名称去某麦网站进行搜索查看 而整个过程中涉及到逆向分析 为了方便大家学习 本次完整流程记录如下 目录 一 确定要获