qi2017 发表于 2020-11-8 22:12:10

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


前言:


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

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

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

目标网站:aHR0cHM6Ly93d3cubmV3cmFuay5jbi91c2VyL2xvZ2lu

正文:


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


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

https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCzibqmWZibwzKSQEuqSRxCTW4SR1LlWeXCcpKLcIMTy99bNwGGzgb0DgA/640?wx_fmt=png图一

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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPC0JP0l90vjDRjNB1iaFD8icoDfgbibOGFqR0waKWMOL8kKuqDBxj2Zg1Yg/640?wx_fmt=png

图二


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



https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCt7Kf7p2chTtak9JYJDIBPq6AoHgm1g6RnPEgEusoD9A73oiaNtplOkw/640?wx_fmt=png

图三

https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCKMWxxXwULG2vHyVId9wxlTHibavlGhwYw51S78Lcxf8xPO1yHxicLUDw/640?wx_fmt=png

图四


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


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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCib6zUfjicwrU79rXWqEa1FWWg2mtJ4r1FHHf1YRicibeq0keYQdGXfI4cQ/640?wx_fmt=png

图五

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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCTdcu6gdct9mkNaDIXCECWog33AnfMbPW8o6G20KUy2iaZ4FFKSp3Oog/640?wx_fmt=png

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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCBpcvxQ6pyTxQ781OgzaOSsZic7ibs32dJKk2XDLSe8lYcoEWqzG5S35A/640?wx_fmt=png

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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCLz4Z5sFzrg6nbu34tWLFqxkWk85St1NZrsAnDqo6ejKTPOhEia43ic7A/640?wx_fmt=png

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

https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPC2u6vlicJKbgBpPlrib1HlyYM1h6g5icQYfJagsycKrYiaJ1wsJydp2qxzg/640?wx_fmt=png

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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCl6MicAZSTkyT9wt6nyo0OpSWd7WficnMYKTvQjglch2o1n4H92nZibL5g/640?wx_fmt=png

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

https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCibm1dknl9QicBA86eGADhwxX9riaJz3SQZXED0WWLI3w7iapgCEzzwBmew/640?wx_fmt=png

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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCDga6Y8TtZzMibLbMf4WVVUAVHGJ5ickCxvTkywRVBx1ic5L8T69YXZrBQ/640?wx_fmt=png

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


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCEvGeTpa0VUDK3ib5UAXIzrz4JXyjzHGMTQ9wsficn6avsL4OjqCCdzQg/640?wx_fmt=png

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

https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPCw0ibCxEvNBJf2Xr1hz9wKYh2ib3iaN4M1j7jeEIfDkbuZ4gAibAVEJoVsA/640?wx_fmt=png


https://mmbiz.qpic.cn/sz_mmbiz_png/aI1PWB8SBg3p1cuYQ4xYecDt59xPiaYPC9tEVHua5N692RRa1dNdvsrkBCR9M1oVaVdPPOkffrzNe6Nyicy2tdWA/640?wx_fmt=png

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


总结:


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

友情推荐:

网虫Spider-简书

网虫Spider-公众号

网虫Spider-CSDN

duhongyu 发表于 2020-12-15 15:55:11

说了和没说差不多。。。

荞荞 发表于 2021-1-8 13:33:49

页: [1]
查看完整版本: js逆向:探索一下某里的UA