wasm逆向——(极客大挑战2021wasm
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相关推荐
- 2011年成都信息工程学院第二季极客大挑战逆向第三题Game破文
[文章标题]: 2011年成都信息工程学院第二季极客大挑战逆向第三题Game破文 [文章作者]: JoyChou [软件名称]: Game [软件大小]: 176KB [下载地址]: http://w ...
- 2011年成都信息工程学院第二季极客大挑战逆向第二题Crackwho破文
[文章标题]: CUIT极客大挑战Crackwho破文 [软件名称]: Crackwho [软件大小]: 36.5KB [下载地址]: http://www.kuaipan.cn/file/id_32 ...
- 【reverse】2021 极客大挑战(部分)
[reverse]2021 极客大挑战(部分) 1.调试 0x1 什么?得安装linux虚拟机?像我这种直接用ubuntu系统的根本不虚! 0x2 尝试直接运行,未果 拖入ida中分析,先看main ...
- 第十届极客大挑战——复现未解决的web和RE
第十届极客大挑战--复现未解决的web和RE emmmm,有些题目是没做出来的,有机会复现,还有官方wp,所以看看,再记录一下 web - 性感黄阿姨,在线聊天 这道题我是真的服了,爆破name,,, ...
- 2020第十一届极客大挑战——Geek Challenge(部分解)
Crypto 二战情报员刘壮 考点:摩斯密码 通过 1.简介中直接看出是摩斯密码 2.通过在线网站直接解密得到flag 铠甲与萨满 考点:凯撒密码 1.通过题目和提示知道是凯撒密码 2.通过CrakT ...
- 【misc】2021 极客大挑战(部分)
[misc]2021 极客大挑战(部分) 1.今天有被破防吗? 0x1 最早上的一批题目,当时没什么思路.后来pwn神在群里提到了RGB,瞬间懂了! 参考链接: gaps拼图 0x2 下载附件得到一个 ...
- 第十届极客大挑战——部分web和RE的WP
第十届极客大挑战--部分web和RE的WP 昨天刚刚搞完湖湘杯和软考,累的一批,,,,湖湘杯的wp就不写了,写写这个wp 这个好像是一个月之前就开始的,打了一个月,不断的放题,题也做了不少,,, 其他 ...
- CTF Geek Challenge——第十一届极客大挑战Misc Write Up
比赛时间:2020年10月17日早上9点 比赛时限:一个月 0x1 一"页"障目 宣传单里藏有flag,不过分成了三份 拼好如图: 0x2 壮言壮语 工具: 与佛论禅:http:/ ...
- CTF Geek Challenge——第十一届极客大挑战Web Write Up
比赛时间:2020年10月17日早上9点 比赛时限:一个月 0x1 Welcome sha1绕过 Postman发送POST请求 sha1绕过 线索 Not Found But 这个Not Found ...
最新文章
- LeetCode中等题之煎饼排序
- PowerBI从SCCM数据库中分析数据和KPI展现
- 又一款4800像素手机曝光:vivo V15 Pro
- 栈上对象的内存自动释放
- 查看电脑python虚拟环境-Windows系统下,Python虚拟环境搭建
- ffmpeg使用总结
- hyperworks2019安装教程
- vue-cli 3.0 跨域请求代理
- devops_如何成为DevOps的合适人选
- python入门:输出1-100之内的所有奇数和偶数
- 吴恩达|机器学习作业7.1.主成分分析(PCA)
- 毕业设计 - 题目:基于深度学习的人脸表情识别 - 卷积神经网络 毕设 代码
- 倩女幽魂服务器维修什么意思,《倩女幽魂》2月7日游戏服务器维护内容
- 关于Handling Unit SAP包装
- 获取当前 IE 地址栏中的 URL
- 除尘器选型需要考虑的因素
- 什么是毫米波雷达?飞睿科技雷达传感器,雷达感应技术
- [SCOI2014]方伯伯的玉米田
- 关于Unity中天空盒的使用
- PM00-愿景, 战略和项目
热门文章
- java调用方法的变量_JAVA类的方法调用和变量(全套)
- 数据加载很慢_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用
- 成功解决Error: Cannot find module 'web3'
- PS:将webp后缀图片最简单最快速的方法另存为png后缀的图片
- auto-sklearn简介
- Using Preferences(Beginning Android)
- Location对象、History对象
- 泛型--协变与逆变(转)
- ReactiveCocoa的使用方法
- Divide and conquer:K Best(POJ 3111)