本文仅仅供技术交流 不做其他用途
生活总一杯喝完还有一杯 一杯喝完接着还有一杯。 算了 言归正传吧 还是继续讲逆向吧。
前言:1.做wasn逆向之前 你首先得知道wasm是什么
2.浏览器是怎么去调用wasm的 ,用什么去调用 并且执行wasm函数
3.我们要怎么去调用wasm函数,
小弟才疏学浅 ,大概开始之前只能例举这几个问题了,下面我们正式开始。开始之前我们先把上面说的三个问题先解决掉。
做wasn逆向之前 你首先得wasm是什么
答案:WebAssembly(简称Wasm)是一种二进制指令集格式,设计目标不是为了手写代码,而是为诸如C、C++和Rust等低级源语言提供一个高效的编译目标。它能够在所有当代桌面浏览器及很多移动浏览器中以接近本地的速度运行,用于在web客户端和服务端部署编程语言程序。WebAssembly的出现解决了JavaScript的性能问题,尤其在各种图形处理方面。同时,对于网络平台而言,这意味着客户端app可以在网络平台上以接近本地速度的方式运行多种语言编写的代码,这在过去是无法实现的。
2.浏览器是怎么去调用wasm的 ,用什么去调用 并且执行wasm函数
答案:浏览器调用WebAssembly代码需要以下步骤:
加载WebAssembly模块:浏览器通过Ajax或fetch API等方式获取到WebAssembly二进制代码,然后使用WebAssembly的API将其编译成内存中的模块。
2. 实例化WebAssembly模块:浏览器使用WebAssembly模块创建一个新的实例对象,该对象包含了所有在模块中定义的函数和变量。
3. 调用WebAssembly函数:浏览器可以通过实例对象来调用WebAssembly函数,并将参数传递给它们。这些函数可以访问实例对象中的变量和内存。
4. 处理结果:当WebAssembly函数执行完毕后,它会将结果返回给JavaScript代码。浏览器可以使用JavaScript来处理这些结果,例如更新UI或发送网络请求等。需要注意的是,由于WebAssembly是一种低级语言,因此它不能直接与JavaScript交互。为了实现这一点,WebAssembly提供了一些导出函数,可以将C/C++/Rust等语言编写的函数导出为WebAssembly可调用的函数。这样,JavaScript就可以通过WebAssembly的API来调用这些导出函数了。
5.我们要怎么去调用wasm函数
答案:
1.用node去还原浏览器的调用算法。
2.用wasm逆向工具去还原wasm代码为c代码 然后再去里面根据运行逻辑去还原算法 最后通过c打包成dll使用。
上面我们已经把所有的问题解决:那我们接着看今天的实例:
网址:
aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3VzZXIvbG9naW4/YW5pbT10cnVl
今天我们看是网站的登录api 协议头里面有一个类似的hex算法的参数x-api-xxx:
请添加图片描述
首先搜索关键词 搜索出来两个文件
请添加图片描述

打开一看之后 发现两个文件都是异步了 调异步的过程就麻烦了 我当时好像是下的xhr断点 也调才调到关键位置的 我们继续往下面看

请添加图片描述
请添加图片描述

于是我跟着断点调试到了这里 这里是一个switch代码 至于是上面switch我这里就不多说了 o=i.sign o=i.sign实在case=4这里的 case的e.next是4说明0走完就走4 n.e(2284).then(n.bind(n, 22284));说明着代码就是我们的i函数 但是他又是异步的 我们就很难去调试他这个过程;这样的话我们继续往下走 去步进他的函数 反正这个时候我们看到他的加载过程 n.e(2284)加载的一个异步出来了i值
请添加图片描述

最终我们看到了这里 这里就是我们我们上面提到的问题 有 WebAssembly有fetch API加载 这里就完全是一个wasm加密的特征啦。接下来我们看他怎么加密的就可以啦

请添加图片描述
请添加图片描述
通过调试得知

请添加图片描述

看这里用阿
i = e.sent,去接收了导出函数

请添加图片描述

后面用i.sign去调用函数
那我们跳到这个sign函数下面去 他sign指向的是b函数

请添加图片描述
请添加图片描述

这里经过wasm计算就得出了xxx值 感兴趣可以自己去调试一下 我们下一篇文章在写代码 我们自己如何调用这个代码
好,再见,拜拜。这个站有滑块加密 有登录加密 如果感兴趣 请在我文章或者公众号投稿 我们写文章出来和大家分享技术哦
最后谢谢大家,如果有上面那个位置或者步骤不懂可以问我哦。
大家可以公众关注号哦
请添加图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐