QWB-firmware_blog

这是个32位MIPS架构的虚拟机题,opcode总共有1660个量十分大,而且程序也有688K,调试起来也是十分需要考验耐心的,但虚拟机始终是虚拟机只要找到关键位置后其实分析起来还是比较简单的。所有的opcode都集中在0x4b2020处,根据程序运行出现的“>”的符号也能很快定位D到关键函数0x400620,你的输入会替换到原始opcode中0xff数,开始时小编用的是qemu + gdb-multiarch进行调试,但这种调试方法麻烦之处在于没有步过命令,不论是n还是s命令都会很容易进入到一些无用函数内部,所以每次都是采取下断的方式步过一些无用函数。后面采用的的是qemu + IDA的方式就解决了这个问题。先说opcode的组成吧,它是每四个为一组,第一个数代表操作指令,运算指令总共有put,+,-,*,^,cmp四种,第二个数代表处理结果存放的位置,第三个数存放的是目标操作数或目标操作数位置(根据具体指令情况而定),题目初始化一个三元数组array,array[0]放置的是input,array[1]和array[2]存放的一般是操作数。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
0x34:put
0x3b:+
0x6e:^
0x3d:-
0x3a:*
0x4f:cmp
}
[0x34, 0x01, 0x02, 0x00]:
mov arry[1] 2
[0x6E, 0x00, 0x01, 0x00]:
xor array[0] array[1]
[0x4F, 0x00, 0x00, 0x00]:
cmp array[0] 0
[0x3D, 0x00, 0x01, 0x00]:
sub array[0] array[1]
[0x3B, 0x00, 0x01, 0x00]:
add array[0] array[1]
[0x3A, 0x00, 0x01, 0x00]:
mul array[0] array[1]

小编在开始调试时会发现读取的输入会莫名奇妙的消失,它也并未执行类似存放在某个地址空间语句,后来发现是因为mips架构具有延迟分支的特性,当跳转/分支指令到达执行阶段并且新的程序计数器已经产生时,紧随其后的下一条指令已经开始执行了。例如下图中在执行jr指令的同时会把a1寄存器中的内容存放至v0[4]所对应的地址空间中,其实就是array数组中的地址。

image-20200907105442752

后续的话就是跟踪这个地址,但发现IDA在调试mips架构程序时硬件断点和内存断点都触发不了,因此就是漫长的调试找关键语句。这里小编直接将关键语句的地址以及执行的语句粘贴出来。避免大家在调试过程中浪费太多时间。

image-20200907110125117

image-20200907110213063

image-20200907110251527

image-20200907110321410

了解过程后就是翻译opcode解题了,用的是z3。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
from z3 import *
code=[
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x6E, 0x00, 0x01, 0x00,
0x34, 0x01, 0x04, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01,
0x67, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00, 0x01, 0x00,
0x34, 0x01, 0x8C, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01,
0x50, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x03, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00, 0x01, 0x00,
0x34, 0x01, 0x7A, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01,
0x4E, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x04, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x04, 0x00, 0x6E, 0x00, 0x01, 0x00,
0x34, 0x01, 0x6F, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x01, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x6E, 0x00,
0x01, 0x00, 0x34, 0x01, 0x7E, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x10, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x06, 0x00,
0x34, 0x02, 0x04, 0x00, 0x3D, 0x01, 0x02, 0x01, 0x6E, 0x00,
0x01, 0x00, 0x34, 0x01, 0x42, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x0C, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3A, 0x00, 0x01, 0x00, 0x34, 0x01, 0x04, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x47, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x34, 0x01, 0x09, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x08, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x5C, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x09, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00,
0x6E, 0x00, 0x01, 0x00, 0x34, 0x01, 0x43, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00,
0x34, 0x01, 0x0B, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x1F, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x34, 0x01, 0x2D, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x08, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3A, 0x00, 0x01, 0x00, 0x34, 0x01, 0x04, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x04, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x5A, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x0A, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x34, 0x01, 0x04, 0x00, 0x6E, 0x00, 0x01, 0x00,
0x34, 0x01, 0x6E, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x08, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x34, 0x02,
0x04, 0x00, 0x3B, 0x01, 0x02, 0x01, 0x6E, 0x00, 0x01, 0x00,
0x34, 0x01, 0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x2B, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x34, 0x02, 0x03, 0x00,
0x3B, 0x01, 0x02, 0x01, 0x6E, 0x00, 0x01, 0x00, 0x34, 0x01,
0x04, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x3A, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00,
0xFF, 0x00, 0x34, 0x01, 0x08, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x34, 0x01, 0x01, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x04, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x32, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00,
0x34, 0x01, 0x09, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3A, 0x00, 0x01, 0x00, 0x34, 0x01, 0x64, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x34, 0x01, 0x6C, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x0A, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x6E, 0x00,
0x01, 0x00, 0x34, 0x01, 0x39, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x01, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x6E, 0x00,
0x01, 0x00, 0x34, 0x01, 0x3B, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x01, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00,
0x01, 0x00, 0x34, 0x01, 0x6A, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x6E, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00,
0x01, 0x00, 0x34, 0x01, 0x74, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x6E, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x3A, 0x00,
0x01, 0x00, 0x34, 0x01, 0xC8, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x34, 0x01, 0x58, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00,
0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x04, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x6F, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x01, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00, 0x01, 0x00,
0x34, 0x01, 0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x68, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00,
0xFF, 0x00, 0x34, 0x01, 0x01, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x02, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x74, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00,
0xFF, 0x00, 0x34, 0x01, 0x01, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x03, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x04, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x6D, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00,
0x34, 0x01, 0x01, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x04, 0x00, 0x34, 0x02, 0x02, 0x00, 0x3B, 0x01, 0x02, 0x01,
0x6E, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x38, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00,
0x34, 0x02, 0x01, 0x00, 0x3B, 0x01, 0x02, 0x01, 0x6E, 0x00,
0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x33, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x01, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00,
0x01, 0x00, 0x34, 0x01, 0x03, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x02, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x34, 0x01,
0x03, 0x00, 0x6E, 0x00, 0x01, 0x00, 0x34, 0x01, 0x6A, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00,
0xFF, 0x00, 0x34, 0x01, 0x01, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x02, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x34, 0x01,
0x03, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x34, 0x01, 0x82, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x34, 0x01, 0x45, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x01, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3A, 0x00, 0x01, 0x00, 0x34, 0x01, 0x04, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x34, 0x01, 0x08, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x6E, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x01, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3A, 0x00, 0x01, 0x00,
0x34, 0x01, 0x04, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x01, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x08, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x79, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00,
0x34, 0x01, 0x02, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x02, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x34, 0x01, 0x03, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x01, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x7A, 0x00, 0x3D, 0x00, 0x01, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01,
0x01, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00,
0x34, 0x02, 0x03, 0x00, 0x3B, 0x01, 0x02, 0x01, 0x6E, 0x00,
0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x3E, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x02, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x02, 0x00, 0x34, 0x02,
0x02, 0x00, 0x3B, 0x01, 0x02, 0x01, 0x6E, 0x00, 0x01, 0x00,
0x34, 0x01, 0x04, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01,
0x64, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3B, 0x00,
0x01, 0x00, 0x34, 0x01, 0x01, 0x00, 0x34, 0x02, 0x02, 0x00,
0x3B, 0x01, 0x02, 0x01, 0x6E, 0x00, 0x01, 0x00, 0x34, 0x01,
0x0F, 0x00, 0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x40, 0x00,
0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00,
0xFF, 0x00, 0x34, 0x01, 0x02, 0x00, 0x3B, 0x00, 0x01, 0x00,
0x34, 0x01, 0x02, 0x00, 0x34, 0x02, 0x01, 0x00, 0x3B, 0x01,
0x02, 0x01, 0x6E, 0x00, 0x01, 0x00, 0x34, 0x01, 0x05, 0x00,
0x6E, 0x00, 0x01, 0x00, 0x34, 0x01, 0x6E, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x34, 0x00, 0xFF, 0x00,
0x34, 0x01, 0x34, 0x00, 0x3D, 0x00, 0x01, 0x00, 0x4F, 0x00,
0x00, 0x00, 0x34, 0x00, 0xFF, 0x00, 0x34, 0x01, 0x01, 0x00,
0x3B, 0x00, 0x01, 0x00, 0x34, 0x01, 0x7E, 0x00, 0x3D, 0x00,
0x01, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00]
#print len(code)
lenth=len(code)/4
sum=0
for i in code:
if i==0xff:
sum+=1
print sum
flag=""
n=0
for i in range(sum):
s=Solver()
temp=[BitVec('num',8),0]
num=temp[0]
while 1:
opcode=code[n]
opcode1=code[n+1]
opcode2=code[n+2]
if opcode==0x34 and opcode2==0xff:
s.add(temp[0]<0x7e)
s.add(temp[0]>0x20)
n+=4
continue
if opcode==0x34 and opcode1!=0:
temp[1]=opcode2
n+=4
continue
if opcode==0x3b and opcode1!=0:
temp[1]+=opcode2
n+=4
continue
if opcode==0x3b and opcode1==0:
temp[0]+=temp[1]
n+=4
continue
if opcode==0x6e:
temp[0]^=temp[1]
n+=4
continue
if opcode==0x3d and opcode1!=0:
temp[1]-=opcode2
n+=4
continue
if opcode==0x3d and opcode1==0:
temp[0]-=temp[1]
n+=4
continue
if opcode==0x3a:
temp[0]*=temp[1]
n+=4
continue
if opcode==0x4f:
s.add(temp[0]==0)
n+=4
print s.check()
flag+=chr(s.model()[num].as_long())
break
print flag

最后总结一下,这题考的主要是虚拟机和对mips架构汇编指令的理解,过程并不复杂,难的是无用函数太多了,mips架构调试起来比较费劲,总结起来就一句话没有很难的虚拟机,只有你想不到恶心。

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2022 llx-moon
  • Visitors: | Views:

请我喝杯咖啡吧~