VM题目
真难.. 网鼎的pwn是vm虚拟机,没咋学过vm看不懂,这边先搞下简单的练习下
WxyVM1
长度为24, 同时虚拟机运算后要跟指定字符比较, 比较结果对的上才可以成功
这个虚拟机很明显
三个字节一读取,
第一个字节为操作码
第二个字节为操作对象
第三个字节为操作数
不过这数据有点多啊, 5000次的循环
然后取出handler
- arr[index] += v3
- arr[index] -= v3
- arr[index] ^= v3
- arr[index] *= v3
- arr[index] ^= (arr[v3])
写出idc脚本取出元数据
1 | start = 0x6010C0 |
1 | start = 0x601060 |
最后跑一下
1 | List = [] |
注意这里要逆序,for循环
WxyVM2
也是一道考idc脚本的题目, ida打不开,分析汇编又太多, 直接上脚本,他有特征, 全为byte
1 | start = 0x40064E |
脱掉数据后, 在看到cmp,取出数据
1 | arr =[0xC0,0x85,0xF9,0x6C,0xE2,0x14,0xBB,0xe4,0xd,0x59,0x1c,0x23,0x88,0x6e,0x9b,0xca,0xba,0x5c,0x37,0xfff,0x48,0xd8,0x1f,0xab,0xa5] |
GWCTF-babyvm
机器码 | 备注 |
---|---|
0xF1 | mov |
0xF2 | xor |
0xF4 | nop |
0xF5 | input |
0xF7 | mul |
0xF8 | swap |
0xF6 | add |
1 | 0xF5, #read(0, buf, 0x20) |
随往下翻,发觉又有个f5输入
1 | 0xF5, #read(0, buf,0x20) |
逆完vm了,不干了
1 | code = [0x69, 0x45, 0x2A, 0x37, 0x09, 0x17, 0xC5, 0x0B, 0x5C, 0x72, 0x33, 0x76, 0x33, 0x21, 0x74, 0x31, 0x5F, 0x33, 0x73, 0x72] |
接下来干pwn2的 vm
本文作者:NoOne
本文地址: https://noonegroup.xyz/posts/124e352e/
版权声明:转载请注明出处!