本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关.本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责站点:aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLw==目标:某某验点选配套视频:视频提前打开F12,进入网站点击登录,手动点错一次提交后,观察发包:这5次请求为核心请求,依次分析。发现其主要参数为gt,且能搜索到是来自于capthca这个接口,再看看这个接口有什么:观察主要返回这些内容,在接下来的流程中可能会用到。响应内容:返回了很多字段,可能后续有用请求参数:gt,challenge上一步我们已经拿到。w看起来似乎要处理。这里就不贴图了,跟第2步的请求参数一样,可能要处理w。至于响应内容,则返回的是当前验证码类型:响应内容:pic返回了图片,以及一些字段后续可能用到请求参数:没有需要特别处理的,此前全都能取到。响应内容:返回fail,正是点击失败的返回,这一步就是去验证验证码了请求参数:除了w,其他参数并无特别以上5次请求,发现2,3,5三个步骤中都有w需要处理,目标则为逆向w值。先说结论,实测下来其实2,3步骤中的w并不校验,本次不分析,着重于分析最后一步提交验证码的w参数分析。先大概看看调用栈,发现都来自于click.3.1.1.js这个文件,那目标明确。发现有大量这种调用,显然是个混淆。我的习惯是面对这种混淆,优先看看AST还原一部分,便于调试。将js拿出来放到vscode收起来观察,4个大方法,一个自执行方法,并不是传统的OB混淆尝试拿自执行方法中的某个调用,来本地执行打印,发现没问题能正常出值。整个自执行的方法中包含大量$_CFAn(86)这种类型调用,结合我们本地能执行的情况,也就是说其实跟OB中的解密函数也差不多一个意思,那就好办了。AST思路,详细过程在:视频将还原后的js本地替换浏览器js后,直接搜索参数之一client_type可以直接定位到目标,接下来开始繁杂的debug可以看到w = p + u,u = n["$_CDGJ"](),p = w["$_EEn"](h),而h = X["encrypt"](ae["stringify"](o), n["$_CDHy"]())。那就先看u吧。跟进 n["$_CDGJ"]()看看。混淆部分在视频中有讲理解,就是赋值新变量+concat+取值,由于我们已经AST处理掉了,这一部分就属于无用代码,后续分析其他方法看到这种直接不用管就是。得益于解混淆后,直接就能跟到:e是undefined,不用管;需要再看new H()["encrypt"] 和 this["$_CDHy"](e)。分别往下看跟进来发现主要逻辑有来自于ve = Q(),继续往下跟: 结论:发现这个方法是加在k的原型上的,向上找就能找到var H = function(){}把整个H拿下来,再把4个方法加上,稍微补一补环境,就能搞定。跟网站生成的值一对比,发现不一样,其实也正常,这个算法是rsa,非对称加密,也可以用标准库去解决试试,反正这里我已经扣下来js了就这样不管了。到这里,u已经搞定。重头戏来了,这里p的组成比较复杂,需要逆向的值有好几个。X["encrypt"](ae["stringify"](o), n["$_CDHy"]())p来自于h,那先解决h。观察n["$_CDHy"]()的值跟上一步一样,其实也就是一个加密key值,流程如下:所以h的重点在于X["encrypt"]和(ae["stringify"](o)以及o是什么,那就一个个来,先看oo的组成很复杂,有这么多东西a:其实是点击的坐标,但经过处理ep:看起来像轨迹和环境h9s9:可能要逆向lang、pic:固定或者之前能取到rp、tt:不知道含义,要逆向其实就是JSON.stringify,直接改写就好
回复或点赞可查看完整内容
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-286163.htm
【JS逆向】某验三代点选逆向分析
349 浏览
18 回复
感谢分享
学习一个
学习一下
学习一下
学到了
感谢分享
感谢大佬分享
看看啊宝贝的
感谢分析
感谢分析
学习了
感谢分享
aopo
曾经研究过 最终难的不是js逆向及算法分析 难的是轨迹处理 从鼠标进入浏览器区域后的真实轨迹到轨迹二次跳跃处理到参与加密 他们的后端应该是具备一定学习能力的 即使生成的轨迹可以过验证 一段时间后就会失 ...
是的应用起来要处理的风控还多着呢
曾经研究过 最终难的不是js逆向及算法分析 难的是轨迹处理 从鼠标进入浏览器区域后的真实轨迹到轨迹二次跳跃处理到参与加密 他们的后端应该是具备一定学习能力的 即使生成的轨迹可以过验证 一段时间后就会失 ...
是的应用起来要处理的风控还多着呢
曾经研究过 最终难的不是js逆向及算法分析 难的是轨迹处理 从鼠标进入浏览器区域后的真实轨迹到轨迹二次跳跃处理到参与加密 他们的后端应该是具备一定学习能力的 即使生成的轨迹可以过验证 一段时间后就会失效 需要不停的改变算法去模拟轨迹 最终懒得去折腾了
谢谢分享