2回答

0收藏

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

信息分享 信息分享 2831 人阅读 | 2 人回复 | 2020-11-08


前言:


一直在群里听别人说,某某公司招人,要高级的,要将某里的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-公众号

网虫Spider-CSDN
分享到:
回复

使用道具 举报

回答|共 2 个

duhongyu

发表于 2020-12-15 15:55:11 | 显示全部楼层

说了和没说差不多。。。
回复

使用道具 举报

荞荞

发表于 2021-1-8 13:33:49 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报