【爬虫JS逆向之旅】某9安全中心登录参数逆向 - 1(验证接口篇)
既然走了这么远了干脆再走远一点。 -- 电影《肖申克的救赎》 前言特别声明本文所提供的逆向思路及代码仅供学习参考使用请勿使用爬虫脚本对网站进行高频率以及高并发数据抓取操作若对网站造成损失的后果自负 网址aHR0cHM6Ly9hcS45OS5jb20vVjMvTkRVc2VyX0xvZ2luLmh0bQ 观察首先是接口中的参数我的习惯是先全局搜索一下这些值看一下哪些是接口返回的appKey这是固定在JS文件中的所以不用去逆向。behaviorData需要逆向d是接口返回但并非固定值是点击登录时接口返回的加密的参数可能携带账号/密码本文章先固定后续会出文章讲token是接口/get返回的值也无需逆向以此类推其余的值都需要逆向观察完毕。 技术前瞻在开始逆向之前我需要简单介绍一下但我们在JS逆向的过程中遇到wasm的时候该怎么进行简单的判断和处理。首先wasm是什么简单来说浏览器中的专属语言是Javascript那么如果我用C或C这种不支持在浏览器中直接执行的语言写了一个方法我想要在JS中调用这个方法该怎么办于是就会使用到wasm技术将我们写的C/C文件编译成wasm文件在JS中调用以此解决我的需求。我们作为逆向者关注的是它的初始调用位置以便我们进行后续的逆向操作。wasm在JS语言中的调用方式方法一使用WebAssembly.instantiateStreaming调用特征代码WebAssembly.instantiateStreaming(wasm_code, importObject);这种调用方式wasm_code参数需要流式加载Wasm文件也就是用fetch请求网页中提供的.wasm文件链接而importObject则是可选模块有的代码中不需要有的需要要根据具体代码进行补充。这种调用方式我在逆向过程中很少用因为既然能找到wasm文件的链接我直接下载下来用下面讲到的WebAssembly.instantiate直接调用就行了免去网络请求这一步。方法二 使用WebAssembly.instantiate调用特征代码WebAssembly.instantiate(wasm_code, importObject);这种调用方式是在网页中明确找到了wasm文件时的常用方法先把wasm文件下载下来然后用fs读取wasm文件的二进制数据赋值给wasm_code就行了而importObject和方法一中的相同。方法三使用编译生成的胶水文件调用特征代码const result Module.ccall(add, number, [number, number], [10, 20]);这种调用方法主要是使用Emscripten等工具将C/C代码编译成一份胶水文件xxx.js一般与wasm文件同名和一份wasm文件xxx.wasm我们的主要目标是找到胶水文件必要时还要找到对应的wasm文件。 正文首先我先介绍behaviorData逆向过程我用的关键字搜索主要是快断住的位置就是生成的地方这段代码的逻辑是执行等号后面的异步回调将返回值中的behaviorData赋值给z将返回值中的tqdna赋值给C这里需要注意的是异步只有在执行完毕之后才会返回值如果你要查看这个方法返回的最终值的话可以将断点打在它的下方z值C值其实这个C值就是参数中的d值我们暂且不管重要的是behaviorData的生成位置主要是这个e方法点进去然后触发断点步入t[e(178)]方法看出来了么这不就是前面说的wasm调用的第三种方法的特征代码么。Module是什么其实就是这个this.jsonEncryptor因为在这里它调用了ccall那这个this.jsonEncryptor从哪来在代码上方可以找到但是你如果去找JsonEncrypt时在本JS文件中找不到的因为它是其它文件外调过来的也就是胶水文件具体你随便点入它下面定义的方法可以找到把代码收起来就可以看到既然胶水文件找到了那对应的wasm文件呢我没找到但我经过跟AI的不断对线中知道了有一种情况不需要wasm文件那就是在胶水文件中有调用wasm文件的代码特征就是文件中有类似于base64编码形式的wasm数据流这个时候我们只要有胶水文件就可以了现在把需要的代码先复制到本地t是什么是轨迹信息这里不做介绍后续会出文章这里先固定再把混淆的处理一下调用的代码如下将这里的this.jsonEncryptor替换为Module运行没有数据忘了说了Module是一个异步对象需要用then调用成了没那么简单注意这个o值打印一下看浏览器中的值为了确定这个值是不是固定的可以加个日志点那么可以确定我们的代码有问题询问了AI后猜测是环境的问题用jsdom模拟环境结果猜的没错至此behaviorData的逆向告一段落。接下来就是sign和nonce值主要生成方法为i.getSignnonce的值可以确定是时间戳C值感觉是MD5看一下参数A在代码上方是固定值这里其实也定义了sessionId主要是这个(0, E.MD5)到底是不是MD5加密那没什么好说的用原生加密方法就行了。接下来还剩一个pointJson主要方法看i.encryptPointData传入的值为坐标点信息这个统一放在后续轨迹生成的文章中去讲这里先固定进入方法接着是这个t.encryptData是不是很眼熟其实就是上面behaviorData的加密函数共用的只不过传入的值不同加密出来的值就有所不同。好了关于验证接口的参数逆向就此结束接下来其它的接口逆向我会在后续更新可以给本菜鸟关注❤ 一波以便获得最新的文章推送。^_^更多有趣内容可关注wx公众号“小恰学逆向”分享一些爬虫JS逆向技术以及有趣的工具。(●´ω●)ゞ
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414172.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!