BHC-Calc
暑假复现之路漫漫。。
关于wasm
https://github.com/WebAssembly/wabt这里的工具可以把wasm转成c代码
调试wasm
1 | 在.wasm文件下打开命令行输入: |
chrome输入地址 http://localhost:8000/calc.html 即可运行wasm程序
f12
控制台可以下断点调试
本题解法
首先通过上面的方法得到c代码和优化后的.o文件(上面帖子里有方法)
把html调起来,会发现,click checking!先是调用了一个check_input()函数,接着里面调用Module.ccall()
接着步入,调用了一个h函数(.c里和IDA反编译.o里的w2c_h函数)
IDA里的内容如下:
1 | _BOOL8 __fastcall w2c_h(unsigned int a1) |
解释一下,成功和失败的字符串都在data_segment_data_0
里面,calc.c里有这么一句LOAD_DATA(w2c_e, 1024u, data_segment_data_0, 641);
意思是把data_segment_data_0里的内容载入w2c_e+1024
处
这里计算1024+61刚好就是1085,也就是”Oops….something wrong”的偏移
再就是这里有一串奇怪的16进制编码:0x77678b0f3e6cf6e263e6fe3a4c39f3
多半和flag脱不了干系
这里往后我就有点没分析出来了,T神用改输入观察结果的方法找规律发现是0x80进制的算法变换
套用这个结论写exp
1 | text = 0x77678b0f3e6cf6e263e6fe3a4c39f3 |
Comments