跳转至

wasm 调试说明文档

1. 前提准备

调试前准备如下:

  • java 环境,配置好 jdk
  • jeb:用来反编译 wasm,静态分析 wasm 文件。操作方式和 ida 类似,文中对其操作方法略过。
  • chrome 浏览器:动态调试 wasm
  • 示例网址:猿人学第 20 题
  • wasm js api 官方文档

2. 逆向步骤

2.1. 抓包分析

点击翻页请求包

image-20220330090522207

此请求的简单描述如下:

字段 说明 类型 是否必填 备注
page 页码 int
sign 签名,验签参数 str
t 当前时间戳 int
  • 返回结果(只介绍主要参数,其余略):

略,正常返回为 json。

2.2. js 调试

参数生成处:

image-20220330090736652

可知,为 32 位加密方法,应该是 md5 之类的,但是修改了模值或加了盐。

image-20220330110422728

进入 sign 方法:

image-20220330090906403

简要注解:
  1. getStringFromWasm0 为读值方法,是 js 读取 wasm 中的值,具体请查看 wasm js api 部分;
  2. __wbindgen_malloc 为申请内存操作,不重要;

我们关注 sign 方法,格式如下:

image-20220330091150867

注意:
_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["sign"](retptr, ptr0, len0);
  1. retptr: 内存指针;
  2. pt0: 参数明文信息;
  3. len0: 长度,结合 getUint8Memory0 取值。

image-20220330093337313

上图的 js 读取 wasm 值的操作中,其参数在 js 端可直接输出,若在 wasm 中则需要断点查看其 stack 栈信息来调试输出。


进入 sign 方法,我们比较关注 call 调用,call 方法中会对参数处理,要关注 call 的参数及返回值。要 jeb 的静态分析和 js 动态调试相结合。

image-20220330091258322

2.3. 结合 jeb 静态分析

下载 wasm 文件,并用 jeb 打开,选择 native 下的 wasmbc 的反编译配置即可。

image-20220330090420752

image-20220330091618882

快速定位上步骤中的 js 定位的 sign 方法所对应的 wasm 方法处,注意,可能 js 中的方法名称和 jeb 反编译的名称不一致。需要我们优先定位附近可精确定位的方法,再逐步分析定位至所需方法处。名称虽然可能不一致,但 jeb 反编译和 js 展示的格式结构是一致的,可辅助分析和定位。

此 js 的 _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["sign"] 方法名 signjeb 中是可搜索到的,可直接定位此方法处。

image-20220330092300772

反编译成伪 c 代码,我们知道 param1 为参数明文,我们就要注意 sign 方法中对 param1 修改且返回的方法。如果我们 jeb 静态分析不确定当前方法是否对其修改,我们最好结合 js 动态调试。

image-20220330095532525

先看双击 _f246 查看其方法,看出其方法并没有对参数修改和重赋值及返回,查看其内部的 _f207 方法也是如此。

image-20220330102034238

如果不确定的话就再根据栈输出信息来判断,这个方法是否重要,不再演示,输出的明文参数未变。

接下来进入 _f35 对应的方法 $match_twenty::sign::*** 中:

image-20220330102623826

同样比较重视 f35call 方法,我们将每个 call 方法和 jeb 中反编译的代码一一对应。

image-20220330102800947

jeb 中代码对应后的结果如下,添加注释后比较好查看和定位,比较重要的是 _f416_f13 方法:

image-20220330110528682

可以静态分析和动态调试 _f416_f13,其 _f416 运行后,并在 _f13 md5 前可获取其加盐后的值。

image-20220330111435165

2.4. 验证结果

逆向简析

  • 由以上调试可知,接口中的 sign 参数是由 页码|时间戳t 的明文参数,拼接上 D#***nxm 的盐值,最后 md5 得到。

逆向验证:确认结果是否正确

image-20220330111938838

3. 总结及补充

文章不算很详细,只介绍了主流程,需要自己调试下!

需要知道的事:
  1. jeb 的静态分析和 js 动态调试结合会提升效率,就和 app 逆向中 ida 静态分析和动态分析 so 一样;
  2. 文章中好多需要仔细调试和分析的并没有去截图和解释(现在图片就够多的了),只提出了比较重要的步骤和方法,其实需要自己去调试下才能够清晰明了;
  3. 调试 wasm 需要了解其与 js 交互的一些方法,需要看下文中的前提部分给出的官方文档。

评论

回到页面顶部