专栏首页日常学python某数分析第二弹

某数分析第二弹

今天我们继续上次的接着分析,上次说了我们把eval动态运行的拿出来放到主页面方便调试,但是我们看到他这一段都是混淆过的

递归方式+混淆+简单扁平化

首先市面上有混淆工具可以达到这个效果,我自己也基于ast写了一个混淆工具,扯远了,我们来看下他这个都是数组方式读取字符串,在源码搜索的时候

我们发现了他初始化的位置,

因为他是动态解析的这个数组,我们只需要拿到他数组的成员放进去就行了,

其实我看到这里是很疑惑的,这个字符串竟然没有加密码,赤裸裸啊。

然后我们把字符串数组手动赋值之后我们拷贝这一段js到我写的混淆还原工具来看看

没压力,瞬间还原,工具自动计算作用域替换的。然后我们粘贴到notepad看看

这么看的话基本上他的所有东西都出来了,万事俱备,就差调试, 我们把这还原出来的js 替换上去,怎么替换呢,就是把昨天分析的ret = eval (伪代码把这个直接拷贝上去就行了,这样也方便调试。刷新之后debugger我们忘了处理,直接跳过算了,然后我们看到了这个

然后本着测试的精神,我又刷新了七八遍,发现一个问题

这个页面我是和js一起保存的并没有从服务器拉取最新的然是依旧可以正常使用,因为他有两处,我们尝试下这个

这段如果固定了js直接报错,不固定正常加密,这就头大了,因为这是一段加密后的字符串我们不管他是什么反正一会都要解密我们先不管。

到了现在我们可以固定的调试他的第一层解密出来的js,因为大家都知道他的url是hook过的,也就是业务和反爬是分开的,所以我们不需要刷新页面来让他走到断点,我们可以这样

我们在控制台模拟他的其中一个接口然后回车

已经成功请求了,我们看他提交部分

到这里说明是任意的url,因为他是hook了ajax的api而他又是可以任意url不限制的,我们可以使用xhr断点

点击这个加号我们设置好他请求包含指定字符串的url就会断下来

$.get("/tmrpToken.token")

然后控制台回车

断在了真正提交url的地方,我们看到他是this.send

我们看到他的this就是XMLHttpRequest 对象,看到他的url已经完全计算好了

顺着堆栈看,我们先看send,点进去我们把断点下到这里,因为他的变量之类的是根据作用域算的,复杂的话从头来算比较好,上层变量有可能会重叠

,下好断点我们在重新提交一次

第二次提交我们可以看到非常干净,我们按f10单步走

走到这一行我们发现url出现了

非常清楚他在231这个对象,我们往上看

他在这个函数执行完就有了我们进去这个函数下断点看看

我们f10单步发现他直接最后了,再进去这个函数继续_$7e

传入三个参数

继续单步

又一个_$p5,继续

还是三个参数一样,然后有个Function,我们抠出来看下

new一个函数然后传进去三个参数,还是这三个参数

生成一个参数一调用参数二方法,传入参数三我们看下这三个参数

我们可以直接这样

打印出位置我们双击进去

断点进去之后我们看

这个函数没有什么蹊跷,继续走下去

this._$oM = arguments[1] = _$ok(arguments[1])[0];

隐藏的很深啊

我们跟进去这个函数

然后我们单步发现他走到这里就有结果了我们看下它穿的参数

姑且认为参数2有用,我们看下参数2那里出来的

参数2我们看下他的参数

var _$s2 = _$HW(_$59(_$qt("/tmrpToken.token")));

我们看看

_$qt 

编码剩下的不管他是什么 函数,到时候直接扣就行了,我们只分析

到现在我们看到了_$HW,_$59,_$6p这三个是加密用的,至于内部逻辑,先不管,先测试下能不能加密

把他单独拿出来,然后写一个加密函数

function url_encry(_$di){
  var _$s2 = hm._$HW(hm._$59(encodeURIComponent("/tmrpToken.token")));
  return hm._$6p(769, 0, _$s2, _$di);
}

现在看来我们思路没有错,分析逻辑和加密逻辑是没问题的,好了

篇幅有限,分析解密留着下次讲解,慢慢吸收这次的

本文分享自微信公众号 - 日常学python(daily_learn),作者:海绵

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MmEwMD分析

    我们发现他是hook了 请求的对象,断点断在send上,我们知道js的请求对象send是post提交数据,而url是在请求对象的open方法所以我们看下他这个函...

    sergiojune
  • 某数算法分析

    今天我们来分析一下某数的js 很多网站都用的,听说是有好几个版本,我也不知道,随便找一个,因为我们之前分析过,那是直接怼混淆,大家也许有点懵,这次我们来细细分析...

    sergiojune
  • ​一个超有意思的 Python 综合能力测试网站

    最近在网上看到一个非常有意思的 Python 游戏通关网站,一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关。很考验对 Pyt...

    sergiojune
  • Leetcode 124 Binary Tree Maximum Path Sum

    Given a binary tree, find the maximum path sum. For this problem, a path is de...

    triplebee
  • Python数据分析实战基础 | 清洗常用4板斧

    这是Python数据分析实战基础的第三篇内容,主要对前两篇进行补充,把实际数据清洗场景下常用但零散的方法,按增、删、查、分四板斧的逻辑进行归类,以减少记忆成本,...

    用户2769421
  • 调用系统联系人列表

    用户3135539
  • 李彦宏新年内部放狠话:反思虚假信息和过度广告,不行换人

    镁客网
  • 入门 | 蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?

    机器之心
  • Apache 的架构师们遵循的 30 条设计原则

    原则1:KISS(Keep it simple,sutpid) 和保持每件事情都尽可能的简单。用最简单的解决方案来解决问题。

    lyb-geek
  • 细数Intellij Idea的10个蛋疼问题!

    Intellij Idea以下简称IJ。 昨天细数了IJ上的10大666的姿势,IJ确实很智能,在很多方便可以完爆Eclipes,可在某些方面真的被Eclips...

    Java技术栈

扫码关注云+社区

领取腾讯云代金券