js逆向:探索一下某里的UA

前言:

一直在群里听别人说,某某公司招人,要高级的,要将某里的UA,某验,某数这种级别的逆向问题玩弄于股掌之间才行。所以今天就看一下这个UA到底是个什么玩意。

我们将通过一个大数据网站的登录接口,一步一步的把这个小东西找出来。

废话不多说,直接开始吧~~

目标网站:aHR0cHM6Ly93d3cubmV3cmFuay5jbi91c2VyL2xvZ2lu

正文:

打开目标网址,选择账号登录,会出现一个滑块。

我们输入错误的账号和密码,然后将滑块划到右端。会在调试工具中出现两个请求。

图一

我们点击第一个网络请求,从图二中可以看到请求参数中,有一个n参数特别长。凭借我那么些许的直觉来看,这个n里面应该包含了很多猫腻。那么接下来,我们来就追溯一下,这个参数是怎么生成的。

图二

将鼠标移至图三红色框位置,会显示该请求的调用栈,可以看到有五处调用。一次点击,然后打开js文件相应位置打上断点。类似于图四所示。

图三
图四

再次滑动滑块。当鼠标碰到滑块的那一刹那,程序已经被断住了。可以看到上面黄色背景色的部分表示的是鼠标事件。这个是后面某个函数的参数,有兴趣的同学可以自己研究下,我们这里主要找n参数。

那么,这里没有n参数,那么我们继续跳到下一个断点。

图五

我们点击继续按钮,这时鼠标事件继续执行

图六

我继续跳到下一个断点,发现这里也没有提到n的事,那就继续到下一个断点。

图七

我们来到4067行,这里黄色背景部分给了我们很多提示信息。我们也可以看到红色箭头部分,好像是在给一个n的参数赋值,那么这个n是不是就我们找的n呢?

图八

我们继续点击调试按钮,来到下一个断点处。我们从控制台输出参数t,发现t.data里就是我们在刚开始分析请求时遇到的参数,n也位列其中。那么这个n是怎么生成的呢?

图九

想必大家也已经看到了,4566行通过逻辑表达式给参数n赋值。赋值的函数叫:me.__uab.getUA,对,这就是文章标题里说的某里的UA。

图十

我们跟进去看一下这个到底是个什么东西。发现是e函数传了两个参数,一个是数字:23;一个是一个o对象。继续跟进去看一下e函数长什么样子

图十一

发现e是这个函数,将这个函数整个拷贝出来,放到vscode里

图十二

好嘛, 一个函数一万三千行。

图十三

这个函数里面有20多个case,他调用的另一个函数有40多个case。

图十四
图十五

其实这就是控制流平坦化。将本来按照逻辑执行的代码,改成switch..case的形式。从而阻碍了我们的逆向调试。

总结:

本案例通过请求追溯的方式,一步步的找到加密函数位置,然后发现加密函数为一个经过控制流平坦化后的函数。这也就是某里的UA难以搞定的原因。如果用同学想进一步研究下如何解决这类问题,推荐去看“菜鸟学Python编程”的关于AST的文章。


相关推荐:

网虫Spider-公众号
网虫Spider-CSDN

你可能感兴趣的:(js逆向:探索一下某里的UA)