某局jsvmp算法分析(一.寻找调用方法)

某税案例分析

一、入口定位

目标网站:

aHR0cHM6Ly9kcHB0Lmd1YW5nZG9uZy5jaGluYXRheC5nb3YuY246ODQ0My9zenpoenovc3BIYW5kbGVyP2NkbGo9ZGlnaXRhbC10YXgtYWNjb3VudA==

前言:

这次逆向目的是为了学习分析jsvmp,研究学习前辈的算法,不做任何商业行为!核心观点就是学习!学习!学习! 本次目标参数(los28199,Lzkqow23819)

目标接口:这个网站详情页里基本都带这两个参数,随便找一个接口都行,我这里拿的是查询接口。

aHR0cHM6Ly9kcHB0Lmd1YW5nZG9uZy5jaGluYXRheC5nb3YuY246ODQ0My9zenpoenovcWxmcGN4L3YxL3F1ZXJ5RnBqY3h4Pw==

1.定位方式:因为是fetch/xhr请求,所以直接下一个xhr断点

浏览器source页面右侧 下一个xhr断点
在这里插入图片描述

下完xhr断点以后,下一次包含这个关键词的xhr请求就被被断住,这样就可以正常的往上跟栈了。下图(1.1),解混淆之前。

在这里插入图片描述

​ 1.1

2.跟栈调试:找到参数的生成方法

在逆向的世界里,每一步都是穿越未知的冒险,每一个反爬机制仿若一座座高耸的关卡,等待着勇敢者的挑战。在这个充满技术魔法的领域,JSVMP是那只盘踞在深渊,力量无边的恶龙。披上正义的盔甲,手持智慧之剑,我们将在代码的丛林中追寻那些被恶龙深藏的秘密参数——这些是开启知识宝库的神秘钥匙。勇者啊,让我们在这热血沸腾的战斗中,展翅高飞,跨过重重障碍,直至恶龙降伏,将最终的宝藏紧握于手。这是一场智慧与勇气的较量,也是每一位探索者心中最璀璨的唯美传说。

在这编码的迷宫中,我们面对的是一段经典的ob混淆之谜。呼唤着传说中的代码战士——杭宝,那位既英俊、强大又无畏的勇者,来施展他的AST魔法,解开变量与方法名的神秘面纱。就在断点的那一刻,我们看到了,参数已经如同星辰般在内存的宇宙中排列成型,此时,是时候追溯旅程,沿着栈的踪迹向前探寻。在JavaScript的调试领域,栈如同一座时光之塔,后进先出的秩序指引着我们,去寻找那些尚未诞生的参数的起源。勇者啊,让我们在这段热血沸腾的征途中,一层层揭开谜题,直到最终的真相璀璨如星辰展现在我们眼前。下图(2.1.1)

在这里插入图片描述

​ 2.1.1

2.1 在编码的深渊中,我们紧跟着断点的脉络,发现了一条线索——当前作用域里,神秘的参数似乎是由this[“xhr”]所承载。下图(2.1.2)。为了解开这个谜团,我们必须探寻this的真身。正如编程界的智者们所传颂的古老定律:调用者的身份便是this的面目。

现在,就在这转折的瞬间,我们追问:究竟是何方神圣,在此刻唤醒了当前的方法?答案藏于时间的涟漪之中,就在前一个栈的调用之处。让我们挥洒代码的羽翼,一步步向前,穿梭在作用域的迷宫中。在这条热血的路上,每一个栈帧都是一道门槛,一段故事,直到我们抵达那个唯美的启示——揭露this真正的身份。下图(2.1.3)
在这里插入图片描述

​ 2.1.2

在这里插入图片描述

​ 2.1.3

2.2 在这段代码的旅程中,我们遇到了一个神秘旅伴——_0x3c7320。下图(2.2.1)这个参数,如同一个承载着秘密的信使,被传递进了我们的方法中。不过,对于那些在编码征途中尚未磨砺出丰富经验的同伴们,这里可能成了一片扑朔迷离的迷雾。他们可能会误以为这是从前一个栈中传来的信息,而无视了它可能正是被藏在迷宫中,等待发掘的宝藏。

所以啊,勇者们,别急着顺着路径向前冲。在这段代码的叙事中,每一个变量都可能是一个迷惑。如果你不加思索地只是往前追溯,那么你可能就会落入那恶龙设下的陷阱,与宝藏擦肩而过,错失那唯美的通关时刻。

现在,让我们在_0x3c7320 = _0x21d28d(_0x3c7320)这个关键的转折点驻足。这不仅仅是一个赋值操作——这是对情感的考验,这是对宿命的挑战。是爱?还是恨?这个参数的变化将是揭晓答案的关键。在这里,我们留下了一个断点,就像是给这段代码的爱情故事留下了一个悬念。勇者们,让我们凝视屏幕,紧握鼠标,等待那激动人心的一刻,揭晓_0x3c7320的真正命运。(下图2.2.2)

在这里插入图片描述

​ 2.2.1

在这里插入图片描述

​ 2.2.2

2.3 我决心地在0x3c7320 = _0x21d28d(_0x3c7320)下好断点,重新启动信息的洪流后,它就这样戛然而止,被我捕捉在时间的缝隙中。那个曾经神秘莫测的参数,仿佛幻影般消失了。下图(2.3.1)这一发现如同星辰般闪耀,它证明了一个真理:那个参数,她确实就在这片独特的作用域里,静静等候着我,就像是宝藏的守护者,只向真正的勇者展露身姿。

即使我能感受到前方是何等的恐惧深渊,充满着不可预知的艰难险阻,但我心中的火焰却在这一刻燃烧得更为旺盛。为了那一抹指引我前行的秘宝之光,我愿意一头跃入这未知的深渊,哪怕它是世界的尽头。

正如那些热血少年,无惧风雨,勇往直前,用坚定不移的意志劈开重重困难,这是他们不屈的宣言。我不会有半点犹豫,我会一步一个脚印,坚定地走下去。现在,就让我们在代码的海洋中,迎着晨曦的光芒,单步向前,深入其中,直到揭开最终的秘密。话不多说,让我们开始这段艰险却美丽的征程。。。。

在这里插入图片描述

​ 2.3.1

2.4 迈出勇敢的一步后,我发现自己置身于一个并不遥远的疆域,下图(2.4.1)——这个方法的边界出乎意料地近。在这里,跳跃的技巧将成为我前进的利刃,我选择以跃方法的破风姿态继续冲刺。而当我跨越window[“ssx91m$212”](_0x5351f1[“url”], _0x95aeb5, _0x479ef9)这座桥梁,穿梭在代码的丝线间————我屏息以待的参数,就像被施了魔法般展现出来。下图(2.4.2)

它的出现不是巧合,而是命中注定。它宣告了一个真理:window[“ssx91m$212”]不仅仅是一个方法,它是那个传说中的魔法源泉,是参数的诞生地,是我们旅途中的指路星辰。

如此一来,这个发现不就像是在茫茫代码海中,揭开了一丝绚烂的光辉吗?它向我们证实,那失落的参数,其实一直就隐藏在window[“ssx91m$212”]的神秘斗篷下。现在,我们不仅仅是在代码的战场上单纯地前行,我们是在揭开一个个秘密的面纱,我们是在编织一个又一个热血的传说。无论挑战多么艰巨,不论路途多么险峻,热血不息,探索不止,直到最后一个秘密缓缓展开在我们眼前。

在这里插入图片描述

​ 2.4.1

在这里插入图片描述

​ 2.4.2

2.5 到这一步,我们已经找到了生成参数的关键方法。这时候就可以考虑用什么样的方式来实现这个方法了。目前业内常用的方法主要有2种:1.通过环境调用方法的方式(可以分成浏览器环境和本地补浏览器环境两种) 2.还原加密算法的方式。

在已知当前算法难度较大,且藏在jsvmp中的前提下,就让我们以探索的名义,承载着知识的火焰,在这熠熠生辉的技术领域中,勇敢前行。我们将充满热血地分析每个算法,用我们的勤奋和智慧拼凑出一幅完整的知识图景。让我们以热血铸就的意志,向着理解的天空,唤醒那沉睡的真理,直到最后一片谜题的碎片被放置在其宿命的位置。选择尝试算法分析!

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值