查看搜索的接口,很明显需要这几个参数
{ keyword: "2N7002",//搜索输入的关键词 font_ident: "945a41f33fc9693c", //如下图,第一次访问的页面 返回的html里找 v: "1655799627669" //时间戳 t: "183977736408" //加密1 s: "8fc0bf84f2909690" //加密2 }
这种一大坨代码的,我最喜欢的是通过xhr - 启动器 根据Ajax往上跟栈 这里看到n就是要发送的数据,下断点后 参数有在这,n是函数的参数,所以再往上看谁调用的它(看谁传的) 搜索得到 this.currentParams = a.deserializeParams(this.options.remote.params) this.options又等于t.extend(!0, {}, o, t.fn.pagination.defaults, i) i是上面传过来的 懒得写了,直接一直往上跟,跟到混淆的那地方 这里偷懒大法 神技-ast(只解了个大数组就好看多了) 很明显 这里就到站了。
_0x36dfe8['v'] = JSON["stringify"](new Date()["getTime"]()); 4 == _0xc145e3["pageType"] && (_0x36dfe8["search_type"] = 1); '{}' !== JSON["stringify"](_0xc145e3["filterParams"]) && (_0x36dfe8["se_item"] = _0xc145e3["se_item"], _0x36dfe8["params"] = _0xc145e3["filterParams"]); _0x36dfe8 = _0x3ea76b["getSpecialKey"](_0x36dfe8);
这里 获取了v之后,对象_0x36dfe8就改变了,看到是进行了getSpecialKey函数的操作,所以这行下断点,再单步走进去看。 俩参数就在这里完成的 下面就要开始把js代码扣下来用了。
这么丑的代码,扣代码调用吧(本来想改python的,最后那个魔改的md5不知道怎么改python) 附上s的python代码参考下。。
times_int = int(times) // times是时间戳 _0x5d4ff8 = 0 _0x24ee4f = times[len(times) - 1:] print(_0x24ee4f) s = str(math.ceil(times_int / int(_0x24ee4f)))
现在讲扣js代码吧 全选代码复制粘贴到notepad++ 折叠,搜索,改写 主要的生成函数 在_0x54521b 对象里,理论只要把它弄下来就好 但是 因为混淆的,还要扣大数组啊,解密函数啊,Object啊 我用的ast解版,所以 偷懒了 思路: 1.这个自执行,_0x54521b是传入的参数,这里去掉自执行函数改写_0x54521b 定义空对象 然后window肯定要带上的。 2.改写t和s的返回方式 3.就这样跑一下代码,会提示_0x39a116未定义,去网站代码复制一下这个对象 这是个混淆的,增加你代码阅读难度,,可以用ast解。。这里直接复制吧 再跑一下,应该就差最后一个了 ,提示_0x54521b.md5未定义还是啥来着 这里去补一下魔改的md5代码, 想直接从网站扣的,哎,难顶 太难扣了,直接找个通用的吧 这两个值被改了,改写,再补到对象上,再小小的修改下代码就完成了。