python wasm_WASM逆向分析
wasm是基于堆栈的虚拟机的二进制指令格式。在这次比赛中遇到,记录一下。
IDA反编译插件
食用方法:
install the python module:
python.exe setup.py install
manually install the WebAssembly file loader:
mv loaders\wasm_loader.py %IDADIR%\loaders\wasm_loader.py
manually install the WebAssembly processor:
mv procs\wasm_proc.py %IDADIR%\procs\wasm_proc.py
WASM编译环境搭建
git clone https://github.com/juj/emsdk.git
cd emsdk
./emsdk install --build=Release sdk-incoming-64bit binaryen-master-64bit
./emsdk activate --global --build=Release sdk-incoming-64bit binaryen-master-64bit
source ./emsdk_env.sh
编译C为WASM
emcc biu.c -s WASM=1 -o biu.html -g4 -O2
-s WASM=1指定输出为wasm形式,Emscripten默认为asm.js的形式
-o biu.html可以指定生成html文件、以及wasm文件
-g4指定debug信息等级,详情看—-help
-O2指定优化等级,详情看—-help
WABT工具包
WABT(我们将其称为“ wabbit”)是用于WebAssembly的一套工具,包括:
wat2wasm:从WebAssembly文本格式转换为WebAssembly二进制格式
wasm2wat:的逆函数,从二进制格式转换回文本格式(也称为.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二进制文件
spectest-interp:读取Spectest JSON文件,然后在解释器中运行其测试
将wasm转换为C语言,主要用到wasm2c
食用方法
git clone --recursive https://github.com/WebAssembly/wabt
cd wabt
mkdir build
cd build
cmake ..
cmake--build .
wasm2c使用
/home/ubuntu/wabt/build/wasm2c chall.wasm -o out.c
将chall.wasm转换为out.c
此时的C代码并不直观。
优化
将之前反编译出来的wasm.c,wasm.h,以及wabt项目内的wasm-rt.h,wasm-rt-impl.c,wasm-rt-impl.h三个文件放到同一个文件夹。
gcc -c out.c -o out.o
这样得到的源文件在IDA中分析就会轻松一些
i32_load形式的函数为取值函数,第一个参数为取值对象,第二个参数为偏移
i32_store形式的函数为操作存储函数,第一个参数为存储对象,第二个参数为存储位置,第三个参数为操作方式
动态调用
Python开启服务器
全局安装
npm i http-server -g
快速使用
http-server
默认端口8080,指定端口
http-server -a 127.0.0.1 -p 8090
如果路径中有index.html,默认为主页
HTML调用
Simple template
.then(res=>res.arrayBuffer()
).then(bytes=>WebAssembly.instantiate(bytes, importObject)
).then(results=>{
results.instance.exports.exported_func();
});
chall.wasm放在与index.html同目录
其他
python wasm_WASM逆向分析相关推荐
- Python爬虫:逆向分析某酷音乐请求参数
文章目录 前言 1. 请求分析 2. 获取参数 3. 提取信息 结束语 前言 免责声明: 本篇博文的初衷是分享自己学习逆向分析时的个人感悟,所涉及的内容仅供学习.交流,请勿将其用于非法用途 ...
- Python爬虫:逆向分析酷我音乐请求参数(支持SQ超品音质)
文章目录 前言 1. 请求分析 2. 获取参数 3. 完整代码 结束语 前言 免责声明: 本篇博文的初衷是分享自己学习逆向分析时的个人感悟,所涉及的内容仅供学习.交流,请勿将其用于非法用途 ...
- Python爬虫从入门到精通:(44)JS逆向:试客联盟的逆向分析_Python涛哥
我们来看下试客联盟的逆向分析,切换到密码登陆. JS代码解析 我们进行抓包.经过分析,我们看到密码可能在这个js里实现 点进去后,我们发现源码里有一段var key = new RSAKeyPair( ...
- Python爬虫从入门到精通:(42)JS逆向-闭包:凡科网逆向分析_Python涛哥
JS源码分析 直接请求抓包如下: 我们看到密文就是一个MD5的形式. 那么我们来分析下JS代码. 搜索pwd的时候,我们看到有49个.为了方便,我们可以试着搜索pwd:.pwd :.pwd=.pwd ...
- Python爬虫:逆向分析某云音乐加密参数
文章目录 前言 1. 请求分析 2. 参数分析 3. 加密分析 4. 模拟加密 5. 获取ID 6. 代码框架 结束语 前言 免责声明: 本篇博文的初衷是分享自己学习逆向分析时的个人感悟, ...
- NSA释出逆向工程工具GHIDRA针对恶意软件逆向分析
2019独角兽企业重金招聘Python工程师标准>>> 美国国安局(National Security Agency,NSA)准备在今年3月举行的RSA安全会议上免费释出名为GHID ...
- [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- [系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- [系统安全] 六.逆向分析之条件语句和循环语句源码还原及流程控制
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
最新文章
- 【ACM】杭电OJ 2090
- 知乎 高级操作系统_知乎高赞:Linux!为何他一人就写出这么强的系统,中国却做不出来?...
- python爬虫必会的23个项目
- HDU 5828 Rikka with Sequence (线段树+剪枝优化)
- 第0章:战胜恐惧和懊悔
- P6860-象棋与马【欧拉函数,杜教筛】
- vector c++ 赋值_面对拷贝赋值时发生的自我赋值的正确态度时接受而不是防止
- VC++ 读取和保存文件对话框及默认目录
- textarea回车不换行 小程序_微信小程序商城到底值得不值得开通?
- 完全用 gnu/linux 工作,怎样完全用 GNU/Linux 工作
- 理解lua中 . : self
- WordPress 响应式全站 AJAX 主题:Beginning
- Linux 文件系统相关的命令
- 异步通知《来自Linux驱动程序开发实例》
- 使用supervisor提高nodejs调试效率
- pythonplot绘图xrd_学术干货 | 手把手教你如何快速绘制XRD标准图
- 网课答案公众号搭建过程详解
- 深入理解快速排序和STL的sort算法
- nginx容器通过docker内置DNS实现动态负载
- 基于RV1126 Video分析-----链接 isp 与mipi csi 的media模块