WebAssembly是一种全新的Web编程语言,但是与JavaScript不同,它不是一种让你直接手动编写的语言,而是C / C ++,Rust,C#和TypeScript等不断增加的上层语言的编译目标。

wasm是基于堆栈的虚拟机的二进制指令格式

wabt包安装

尝试了gitclone的方法,一直没安装成功,尝试:

sudo apt install wabt

我的环境:ubuntu20.4

WABT(我们将其称为“ wabbit”)是用于WebAssembly的一套工具,包括:

  • wat2wasm:从WebAssembly文本格式转换为 WebAssembly二进制格式
  • wasm2wat: wat2wasm的逆函数,从二进制格式转换回文本格式(也称为.wat)
  • wasm-objdump:显示有关wasm二进制文件的信息。与objdump类似。
  • wasm-interp:使用基于堆栈的解释器解码并运行WebAssembly二进制文件
  • wasm-decompile:将wasm二进制文件反编译为可读的类似C的语法。
  • wat- desugar:解析规范解释程序支持的.wat文本格式(S表达式,平面语法或混合格式)并打印“规范”平面格式
  • wasm2c:将WebAssembly二进制文件转换为C源代码和标头
  • wasm-strip:删除WebAssembly二进制文件的部分
  • wasm-validate:验证WebAssembly二进制格式的文件
  • wast2json:将wasm spec测试格式的文件转换为JSON文件和关联的wasm二进制文件
  • wasm-opcodecnt:计算指令的操作码使用量
  • spectest-interp:读取Spectest JSON文件,然后在解释器中运行其测

打开压缩包,是三个这个文件

1. 静态分析:

①反汇编:

wasm2wat xorwasm.wasm -o xorwasm.wat

把wasm文件转换成webassmebly文件。

②反编译:

wasm2c xorwasm.wasm -o xorwasm.c

但是这样得到的.c代码与wasm的汇编代码没有什么区别,只是省略了⼀些出⼊栈的操作

③重新编译后⽤ida反编译进⾏优化:

之前我们得到的.c⽂件也是⽆法分析的,我们可以⽤gcc 编译.c⽂件,然后⽤ IDA 分析输出⽂件

⾸先我们要先将wabt/wasm2c⽂件夹下的wasm-rt.h和wasm-rt-impl.h头⽂件移动到我们反编译出来的.c和.h⽂件夹下

⽤gcc编译,直接gcc wasm.c会报错,因为很多wasm的函数没有具体的实现。但是我们可以只编译不链接,我们关⼼的只是程序 本⾝的逻辑,不需要真正编译出能运⾏的elf来

gcc -c xorwasm.c -o xorwasm.o

由于我没有使用clone我是去官网 上拷贝下wasm-rt.h和wasm-rt-impl.h到虚拟机中再执行

得到 xorwasm.o,放入64位IDApro

④关键函数分析:

if函数判断栈内空间,我们来看一下f11函数

几点特殊说明:f**函数一般是基本函数,print,scanf,strlen之类的

根据第一个参数猜测功能 0x400的偏移都对应常量开头,第一个参数的值减去0x400,再加上下面的基地址,就是函数所用的常量

下面我们加载看一下加密函数f10.

很简单写脚本

a=[0x35, 0x3F, 0x25, 0x1D, 0x11, 0x07, 0x15, 0x0B, 0x39, 0x2F,0x15, 0x39, 0x35, 0x56, 0x39, 0x21, 0x09, 0x56, 0x02, 0x47,0x47, 0x1B]
for i in range(len(a)):print(chr(a[i]^ord('f')),end='')

flag:SYC{wasm_Is_S0_Go0d!!}

总结:wasm逆向第一次接触,主要是看懂函数。。。

二:动态调试

我使用的是windos自带的msedge浏览器.

双击.html文件毫无收获

 这样是没有正确运⾏起来的,⾸先要在对应⽂件夹开⼀个简易服务器,才能正确的运⾏ ⾸先cd进对应⽬录 然后使⽤python创建⼀个简易的本地局域⽹

python -m http.server -b localhost

之后便可以直接⽤浏览器访问:

http://localhost:800
0/xorwasm.html

提示输入flag,随机输入

可以看⻅验证失败 接下来我们逐渐跟进去进⾏调试 F12打开调试器 打开wasm文件

ctrl+f 查找main函数

点击地址栏下好我们的断点

然后刷新,可以看⻅被断下

F8执⾏(等价于IDA的F9),F10单步步过,F11单步步⼊ 然后跟进func11直到要求我们输⼊flag 查看内存的⽅法

点击memory右上角的图标

输入要想查询的值

执行完func96屏幕出现

猜测为输出函数

执行到func17 查询1084的值

为%猜测是输入函数。

这⾥判断我们输⼊的字符串的⻓度,然后将⻓度存放到了var22中

判断长度是否等于二十二不等于执行这个

我们再次输入一个22长度的

跟进f10

发现关键异或,就是将我们输⼊的字符串取出和const 102进⾏异或之后再存放回去 加密之后返回

跟进到f9

var2存放的是我们的⽐较数据的地址 将⽐较数据取出写出解题脚本即可

a=[0x35, 0x3F, 0x25, 0x1D, 0x11, 0x07, 0x15, 0x0B, 0x39, 0x2F,0x15, 0x39, 0x35, 0x56, 0x39, 0x21, 0x09, 0x56, 0x02, 0x47,0x47, 0x1B]
for i in range(len(a)):print(chr(a[i]^ord('f')),end='')

flag:SYC{wasm_Is_S0_Go0d!!}

wasm逆向——(极客大挑战2021wasm相关推荐

  1. 2011年成都信息工程学院第二季极客大挑战逆向第三题Game破文

    [文章标题]: 2011年成都信息工程学院第二季极客大挑战逆向第三题Game破文 [文章作者]: JoyChou [软件名称]: Game [软件大小]: 176KB [下载地址]: http://w ...

  2. 2011年成都信息工程学院第二季极客大挑战逆向第二题Crackwho破文

    [文章标题]: CUIT极客大挑战Crackwho破文 [软件名称]: Crackwho [软件大小]: 36.5KB [下载地址]: http://www.kuaipan.cn/file/id_32 ...

  3. 【reverse】2021 极客大挑战(部分)

    [reverse]2021 极客大挑战(部分) 1.调试 0x1 什么?得安装linux虚拟机?像我这种直接用ubuntu系统的根本不虚! 0x2 尝试直接运行,未果 拖入ida中分析,先看main ...

  4. 第十届极客大挑战——复现未解决的web和RE

    第十届极客大挑战--复现未解决的web和RE emmmm,有些题目是没做出来的,有机会复现,还有官方wp,所以看看,再记录一下 web - 性感黄阿姨,在线聊天 这道题我是真的服了,爆破name,,, ...

  5. 2020第十一届极客大挑战——Geek Challenge(部分解)

    Crypto 二战情报员刘壮 考点:摩斯密码 通过 1.简介中直接看出是摩斯密码 2.通过在线网站直接解密得到flag 铠甲与萨满 考点:凯撒密码 1.通过题目和提示知道是凯撒密码 2.通过CrakT ...

  6. 【misc】2021 极客大挑战(部分)

    [misc]2021 极客大挑战(部分) 1.今天有被破防吗? 0x1 最早上的一批题目,当时没什么思路.后来pwn神在群里提到了RGB,瞬间懂了! 参考链接: gaps拼图 0x2 下载附件得到一个 ...

  7. 第十届极客大挑战——部分web和RE的WP

    第十届极客大挑战--部分web和RE的WP 昨天刚刚搞完湖湘杯和软考,累的一批,,,,湖湘杯的wp就不写了,写写这个wp 这个好像是一个月之前就开始的,打了一个月,不断的放题,题也做了不少,,, 其他 ...

  8. CTF Geek Challenge——第十一届极客大挑战Misc Write Up

    比赛时间:2020年10月17日早上9点 比赛时限:一个月 0x1 一"页"障目 宣传单里藏有flag,不过分成了三份 拼好如图: 0x2 壮言壮语 工具: 与佛论禅:http:/ ...

  9. CTF Geek Challenge——第十一届极客大挑战Web Write Up

    比赛时间:2020年10月17日早上9点 比赛时限:一个月 0x1 Welcome sha1绕过 Postman发送POST请求 sha1绕过 线索 Not Found But 这个Not Found ...

最新文章

  1. LeetCode中等题之煎饼排序
  2. PowerBI从SCCM数据库中分析数据和KPI展现
  3. 又一款4800像素手机曝光:vivo V15 Pro
  4. 栈上对象的内存自动释放
  5. 查看电脑python虚拟环境-Windows系统下,Python虚拟环境搭建
  6. ffmpeg使用总结
  7. hyperworks2019安装教程
  8. vue-cli 3.0 跨域请求代理
  9. devops_如何成为DevOps的合适人选
  10. python入门:输出1-100之内的所有奇数和偶数
  11. 吴恩达|机器学习作业7.1.主成分分析(PCA)
  12. 毕业设计 - 题目:基于深度学习的人脸表情识别 - 卷积神经网络 毕设 代码
  13. 倩女幽魂服务器维修什么意思,《倩女幽魂》2月7日游戏服务器维护内容
  14. 关于Handling Unit SAP包装
  15. 获取当前 IE 地址栏中的 URL
  16. 除尘器选型需要考虑的因素
  17. 什么是毫米波雷达?飞睿科技雷达传感器,雷达感应技术
  18. [SCOI2014]方伯伯的玉米田
  19. 关于Unity中天空盒的使用
  20. PM00-愿景, 战略和项目

热门文章

  1. java调用方法的变量_JAVA类的方法调用和变量(全套)
  2. 数据加载很慢_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用
  3. 成功解决Error: Cannot find module 'web3'
  4. PS:将webp后缀图片最简单最快速的方法另存为png后缀的图片
  5. auto-sklearn简介
  6. Using Preferences(Beginning Android)
  7. Location对象、History对象
  8. 泛型--协变与逆变(转)
  9. ReactiveCocoa的使用方法
  10. Divide and conquer:K Best(POJ 3111)