分析

题目给出了2个文件 – 程序AND中间指令

运行程序

image-20230711111905108

出题人写了一个简单的汇编器,查看另一个附件,其中有着800行的中间代码

不是特别多,可以手动翻译一下,主要就是赋值和循环

1
2
3
4
5
6
//声明一个结构体
STRUCT exp :
ARRAY .key(int)[24]<+0>//int类型,这里占8个字节,8*24=192
ARRAY .L(int)[8]<+192>
ARRAY .R(int)[8]<+256>
ARRAY .X(int)[8]<+320>

main函数

1
2
3
4
5
6
7
8
9
10
FUNCTION main - 1640 :
ARRAY var11(char)[24]<+0>//char类型占一个字节
STRUCT var22(exp)<+488>
STRUCT var23(exp)<+872>
STRUCT var24(exp)<+1256>
STRUCT var25(exp)<+1640>
ARG var11<+24>
temp1 := CALL read //调用函数,获取我们的flag
temp2 := #0
var15<+56> := temp2

第一个循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//第一个循环,运算1
LABEL label4 :
temp4 := #24 //temp4=24 类似go语言的匿名变量
IF var15<+56> < temp4 GOTO label3 //一个循环结构
GOTO label2
LABEL label3 :
temp5 := #0
var12<+32> := temp5
var16<+64> := var15<+56>
#!tempa := {#1}*{var16<+64>} //这句就是将 某个变化的值赋值给一个临时的变量,理解为:tempa = var16 + 1 char类型就是一个字节
var12<+32> ::= var11<+1><+tempa> //var12 = input[i]
temp6 := #23
temp7 := temp6 - var15<+56>
var18<+80> := temp7
#!tempa := {#8}*{var18<+80>} //创建临时变量
var22(@exp.key[0])<+8><+488><+tempa> := var12<+32>
//var22(@exp.key[0])<+8><+488>获得exp结构体数组的起始地址,exp.key[23-i] = var12 = input[i]
temp3 := #1
var15<+56> := var15<+56> + temp3
GOTO label4

.......//其他代码

转为C语言代码

1
2
3
for (int i = 0; i < 24; i++) {
var22.key[23 - i] = inputflag[i];
}

第二个循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  //第二个循环,运算2
LABEL label2 :
temp8 := #23
var15<+56> := temp8
LABEL label11 :
temp10 := #0
IF var15<+56> > temp10 GOTO label10 //终止条件
GOTO label9
LABEL label10 :
var18<+80> := var15<+56>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var22(@exp.key[0])<+8><+488><+tempa>
temp11 := #1
temp12 := var15<+56> - temp11 // i-1
var16<+64> := temp12
#!tempa := {#8}*{var16<+64>}
var17<+72> := var22(@exp.key[0])<+8><+488><+tempa>
temp13 := var19<+88> - var17<+72>
var21<+104> := temp13
#!tempa := {#8}*{var15<+56>} //i
var22(@exp.key[0])<+8><+488><+tempa> := var21<+104> // exp.key[i] =exp.key[i] - exp.key[i-1]
temp9 := #1
var15<+56> := var15<+56> - temp9
GOTO label11

转为C语言代码

1
2
3
for (int i = 23; i > 0; i--) {
var22.key[i] = var22.key[i] - var22.key[i - 1];
}

赋值区/初始化

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
LABEL label9 :
temp15 := #0
var22(@exp.L[0])<+200><+488> := temp15
temp17 := #8
var22(@exp.R[0])<+264><+488> := temp17
temp19 := #11
var22(@exp.X[0])<+328><+488> := temp19
temp21 := #15
var22(@exp.L[1])<+208><+488> := temp21
temp23 := #23
var22(@exp.R[1])<+272><+488> := temp23
temp25 := #0
temp26 := #13
temp27 := temp25 - temp26
var22(@exp.X[1])<+336><+488> := temp27
temp29 := #2
var22(@exp.L[2])<+216><+488> := temp29
temp31 := #11
var22(@exp.R[2])<+280><+488> := temp31
temp33 := #17
var22(@exp.X[2])<+344><+488> := temp33
temp35 := #10
var22(@exp.L[3])<+224><+488> := temp35
temp37 := #20
var22(@exp.R[3])<+288><+488> := temp37
temp39 := #0
temp40 := #19
temp41 := temp39 - temp40
var22(@exp.X[3])<+352><+488> := temp41
......

以此类推,剩下的赋值与循环都是类似的

中间指令解析

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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801

//声明一个结构体
STRUCT exp :
ARRAY .key(int)[24]<+0>//int类型,这里占8个字节,8*24=192
ARRAY .L(int)[8]<+192>
ARRAY .R(int)[8]<+256>
ARRAY .X(int)[8]<+320>


FUNCTION read - 8 :
PARAM var2<+8>
LABEL Flabelread :

FUNCTION writes - 0 :
LABEL Flabelwrites :

FUNCTION writef - 0 :
LABEL Flabelwritef :

FUNCTION exit - 0 :
LABEL Flabelexit :

FUNCTION main - 1640 :
ARRAY var11(char)[24]<+0>//char类型占一个字节
STRUCT var22(exp)<+488>
STRUCT var23(exp)<+872>
STRUCT var24(exp)<+1256>
STRUCT var25(exp)<+1640>
ARG var11<+24>
temp1 := CALL read //调用函数,获取我们的flag
temp2 := #0
var15<+56> := temp2

//第一个循环,运算1
LABEL label4 :
temp4 := #24 //temp4=24 类似go语言的匿名变量
IF var15<+56> < temp4 GOTO label3 //一个循环结构
GOTO label2
LABEL label3 :
temp5 := #0
var12<+32> := temp5
var16<+64> := var15<+56>
#!tempa := {#1}*{var16<+64>} //这句就是将 某个变化的值赋值给一个临时的变量,理解为:tempa = var16 + 1 char类型就是一个字节
var12<+32> ::= var11<+1><+tempa> //var12 = input[i]
temp6 := #23
temp7 := temp6 - var15<+56>
var18<+80> := temp7
#!tempa := {#8}*{var18<+80>} //创建临时变量
var22(@exp.key[0])<+8><+488><+tempa> := var12<+32>
//var22(@exp.key[0])<+8><+488>获得exp结构体数组的起始地址,exp.key[23-i] = var12 = input[i]
temp3 := #1
var15<+56> := var15<+56> + temp3
GOTO label4

//第二个循环,运算2
LABEL label2 :
temp8 := #23
var15<+56> := temp8
LABEL label11 :
temp10 := #0
IF var15<+56> > temp10 GOTO label10 //终止条件
GOTO label9
LABEL label10 :
var18<+80> := var15<+56>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var22(@exp.key[0])<+8><+488><+tempa>
temp11 := #1
temp12 := var15<+56> - temp11 // i-1
var16<+64> := temp12
#!tempa := {#8}*{var16<+64>}
var17<+72> := var22(@exp.key[0])<+8><+488><+tempa>
temp13 := var19<+88> - var17<+72>
var21<+104> := temp13
#!tempa := {#8}*{var15<+56>} //i
var22(@exp.key[0])<+8><+488><+tempa> := var21<+104> // exp.key[i] =exp.key[i] - exp.key[i-1]
temp9 := #1
var15<+56> := var15<+56> - temp9
GOTO label11

//初始化数组区
LABEL label9 :
temp15 := #0
var22(@exp.L[0])<+200><+488> := temp15
temp17 := #8
var22(@exp.R[0])<+264><+488> := temp17
temp19 := #11
var22(@exp.X[0])<+328><+488> := temp19
temp21 := #15
var22(@exp.L[1])<+208><+488> := temp21
temp23 := #23
var22(@exp.R[1])<+272><+488> := temp23
temp25 := #0
temp26 := #13
temp27 := temp25 - temp26
var22(@exp.X[1])<+336><+488> := temp27
temp29 := #2
var22(@exp.L[2])<+216><+488> := temp29
temp31 := #11
var22(@exp.R[2])<+280><+488> := temp31
temp33 := #17
var22(@exp.X[2])<+344><+488> := temp33
temp35 := #10
var22(@exp.L[3])<+224><+488> := temp35
temp37 := #20
var22(@exp.R[3])<+288><+488> := temp37
temp39 := #0
temp40 := #19
temp41 := temp39 - temp40
var22(@exp.X[3])<+352><+488> := temp41
temp43 := #6
var22(@exp.L[4])<+232><+488> := temp43
temp45 := #13
var22(@exp.R[4])<+296><+488> := temp45
temp47 := #23
var22(@exp.X[4])<+360><+488> := temp47
temp49 := #9
var22(@exp.L[5])<+240><+488> := temp49
temp51 := #21
var22(@exp.R[5])<+304><+488> := temp51
temp53 := #0
temp54 := #29
temp55 := temp53 - temp54
var22(@exp.X[5])<+368><+488> := temp55
temp57 := #1
var22(@exp.L[6])<+248><+488> := temp57
temp59 := #19
var22(@exp.R[6])<+312><+488> := temp59
temp61 := #31
var22(@exp.X[6])<+376><+488> := temp61
temp63 := #4
var22(@exp.L[7])<+256><+488> := temp63
temp65 := #17
var22(@exp.R[7])<+320><+488> := temp65
temp67 := #0
temp68 := #37
temp69 := temp67 - temp68
var22(@exp.X[7])<+384><+488> := temp69


//第三个循环,运算3
temp70 := #0
var15<+56> := temp70
LABEL label43 :
temp72 := #8
IF var15<+56> < temp72 GOTO label42
GOTO label41
LABEL label42 :
#!tempa := {#8}*{var15<+56>}
var16<+64> := var22(@exp.L[0])<+200><+488><+tempa>
#!tempa := {#8}*{var15<+56>}
var18<+80> := var22(@exp.R[0])<+264><+488><+tempa>
#!tempa := {#8}*{var15<+56>}
var20<+96> := var22(@exp.X[0])<+328><+488><+tempa>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var22(@exp.key[0])<+8><+488><+tempa>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var22(@exp.key[0])<+8><+488><+tempa>
var17<+72> := var17<+72> + var20<+96>
var19<+88> := var19<+88> - var20<+96>
#!tempa := {#8}*{var16<+64>}
var22(@exp.key[0])<+8><+488><+tempa> := var17<+72>
#!tempa := {#8}*{var18<+80>}
var22(@exp.key[0])<+8><+488><+tempa> := var19<+88>
temp71 := #1
var15<+56> := var15<+56> + temp71
GOTO label43


//第4个循环,运算4
LABEL label41 :
temp75 := #1
var15<+56> := temp75
LABEL label54 :
temp77 := #24
IF var15<+56> < temp77 GOTO label53
GOTO label52
LABEL label53 :
#!tempa := {#8}*{var15<+56>}
var17<+72> := var22(@exp.key[0])<+8><+488><+tempa>
temp78 := #1
temp79 := var15<+56> - temp78
var16<+64> := temp79
#!tempa := {#8}*{var16<+64>}
var20<+96> := var22(@exp.key[0])<+8><+488><+tempa>
var17<+72> := var17<+72> + var20<+96>
#!tempa := {#8}*{var15<+56>}
var22(@exp.key[0])<+8><+488><+tempa> := var17<+72>
temp76 := #1
var15<+56> := var15<+56> + temp76
GOTO label54


//第5个循环,运算5
LABEL label52 :
temp81 := #0
var15<+56> := temp81
LABEL label61 :
temp83 := #23
IF var15<+56> < temp83 GOTO label60
GOTO label59
LABEL label60 :
var16<+64> := var15<+56>
#!tempa := {#8}*{var16<+64>}
var12<+32> := var22(@exp.key[0])<+8><+488><+tempa>
temp84 := #1
temp85 := var15<+56> + temp84
var18<+80> := temp85
#!tempa := {#8}*{var18<+80>}
var13<+40> := var22(@exp.key[0])<+8><+488><+tempa>
temp86 := #0
var13<+40> := temp86
temp87 := var12<+32> ^ var13<+40>
var14<+48> := temp87
#!tempa := {#8}*{var16<+64>}
var22(@exp.key[0])<+8><+488><+tempa> := var14<+48>
temp82 := #1
var15<+56> := var15<+56> + temp82
GOTO label61

//第2个赋值区
LABEL label59 :
temp89 := #0
var24(@exp.L[0])<+200><+1256> := temp89
temp91 := #12
var24(@exp.R[0])<+264><+1256> := temp91
temp93 := #0
temp94 := #19
temp95 := temp93 - temp94
var24(@exp.X[0])<+328><+1256> := temp95

//数组的一个赋值
temp97 := #9
var24(@exp.L[1])<+208><+1256> := temp97
temp99 := #10
var24(@exp.R[1])<+272><+1256> := temp99
temp101 := #0
temp102 := #10
temp103 := temp101 - temp102
var24(@exp.X[1])<+336><+1256> := temp103
temp105 := #9
var24(@exp.L[2])<+216><+1256> := temp105
temp107 := #12
var24(@exp.R[2])<+280><+1256> := temp107
temp109 := #3
var24(@exp.X[2])<+344><+1256> := temp109
temp111 := #8
var24(@exp.L[3])<+224><+1256> := temp111
temp113 := #19
var24(@exp.R[3])<+288><+1256> := temp113
temp115 := #0
temp116 := #11
temp117 := temp115 - temp116
var24(@exp.X[3])<+352><+1256> := temp117
temp119 := #10
var24(@exp.L[4])<+232><+1256> := temp119
temp121 := #12
var24(@exp.R[4])<+296><+1256> := temp121
temp123 := #0
temp124 := #9
temp125 := temp123 - temp124
var24(@exp.X[4])<+360><+1256> := temp125
temp127 := #9
var24(@exp.L[5])<+240><+1256> := temp127
temp129 := #13
var24(@exp.R[5])<+304><+1256> := temp129
temp131 := #3
var24(@exp.X[5])<+368><+1256> := temp131
temp133 := #1
var24(@exp.L[6])<+248><+1256> := temp133
temp135 := #22
var24(@exp.R[6])<+312><+1256> := temp135
temp137 := #0
temp138 := #19
temp139 := temp137 - temp138
var24(@exp.X[6])<+376><+1256> := temp139
temp141 := #0
var24(@exp.L[7])<+256><+1256> := temp141
temp143 := #23
var24(@exp.R[7])<+320><+1256> := temp143
temp145 := #7
var24(@exp.X[7])<+384><+1256> := temp145
temp147 := #12
var24(@exp.key[0])<+8><+1256> := temp147
temp149 := #31
var24(@exp.key[1])<+16><+1256> := temp149
temp151 := #31
var24(@exp.key[2])<+24><+1256> := temp151
temp153 := #31
var24(@exp.key[3])<+32><+1256> := temp153
temp155 := #31
var24(@exp.key[4])<+40><+1256> := temp155
temp157 := #31
var24(@exp.key[5])<+48><+1256> := temp157
temp159 := #31
var24(@exp.key[6])<+56><+1256> := temp159
temp161 := #31
var24(@exp.key[7])<+64><+1256> := temp161
temp163 := #42
var24(@exp.key[8])<+72><+1256> := temp163
temp165 := #46
var24(@exp.key[9])<+80><+1256> := temp165
temp167 := #45
var24(@exp.key[10])<+88><+1256> := temp167
temp169 := #45
var24(@exp.key[11])<+96><+1256> := temp169
temp171 := #20
var24(@exp.key[12])<+104><+1256> := temp171
temp173 := #23
var24(@exp.key[13])<+112><+1256> := temp173
temp175 := #23
var24(@exp.key[14])<+120><+1256> := temp175
temp177 := #23
var24(@exp.key[15])<+128><+1256> := temp177
temp179 := #23
var24(@exp.key[16])<+136><+1256> := temp179
temp181 := #23
var24(@exp.key[17])<+144><+1256> := temp181
temp183 := #23
var24(@exp.key[18])<+152><+1256> := temp183
temp185 := #12
var24(@exp.key[19])<+160><+1256> := temp185
temp187 := #12
var24(@exp.key[20])<+168><+1256> := temp187
temp189 := #12
var24(@exp.key[21])<+176><+1256> := temp189
temp191 := #0
temp192 := #7
temp193 := temp191 - temp192
var24(@exp.key[22])<+184><+1256> := temp193
temp195 := #0
var24(@exp.key[23])<+192><+1256> := temp195
temp196 := #23
var15<+56> := temp196


LABEL label118 :
temp198 := #0
IF var15<+56> > temp198 GOTO label117
GOTO label116
LABEL label117 :
var18<+80> := var15<+56>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var24(@exp.key[0])<+8><+1256><+tempa>
temp199 := #1
temp200 := var15<+56> - temp199
var16<+64> := temp200
#!tempa := {#8}*{var16<+64>}
var17<+72> := var24(@exp.key[0])<+8><+1256><+tempa>
temp201 := var19<+88> - var17<+72>
var21<+104> := temp201
#!tempa := {#8}*{var15<+56>}
var24(@exp.key[0])<+8><+1256><+tempa> := var21<+104>
temp197 := #1
var15<+56> := var15<+56> - temp197
GOTO label118
LABEL label116 :
temp202 := #0
var15<+56> := temp202
LABEL label126 :
temp204 := #8
IF var15<+56> < temp204 GOTO label125
GOTO label124
LABEL label125 :
#!tempa := {#8}*{var15<+56>}
var16<+64> := var24(@exp.L[0])<+200><+1256><+tempa>
#!tempa := {#8}*{var15<+56>}
var18<+80> := var24(@exp.R[0])<+264><+1256><+tempa>
#!tempa := {#8}*{var15<+56>}
var20<+96> := var24(@exp.X[0])<+328><+1256><+tempa>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var24(@exp.key[0])<+8><+1256><+tempa>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var24(@exp.key[0])<+8><+1256><+tempa>
var17<+72> := var17<+72> + var20<+96>
var19<+88> := var19<+88> - var20<+96>
#!tempa := {#8}*{var16<+64>}
var24(@exp.key[0])<+8><+1256><+tempa> := var17<+72>
#!tempa := {#8}*{var18<+80>}
var24(@exp.key[0])<+8><+1256><+tempa> := var19<+88>
temp203 := #1
var15<+56> := var15<+56> + temp203
GOTO label126
LABEL label124 :
temp207 := #1
var15<+56> := temp207
LABEL label137 :
temp209 := #24
IF var15<+56> < temp209 GOTO label136
GOTO label135
LABEL label136 :
#!tempa := {#8}*{var15<+56>}
var17<+72> := var24(@exp.key[0])<+8><+1256><+tempa>
temp210 := #1
temp211 := var15<+56> - temp210
var16<+64> := temp211
#!tempa := {#8}*{var16<+64>}
var20<+96> := var24(@exp.key[0])<+8><+1256><+tempa>
var17<+72> := var17<+72> + var20<+96>
#!tempa := {#8}*{var15<+56>}
var24(@exp.key[0])<+8><+1256><+tempa> := var17<+72>
temp208 := #1
var15<+56> := var15<+56> + temp208
GOTO label137
LABEL label135 :
temp214 := #252
var23(@exp.key[0])<+8><+872> := temp214
temp216 := #352
var23(@exp.key[1])<+16><+872> := temp216
temp218 := #484
var23(@exp.key[2])<+24><+872> := temp218
temp220 := #470
var23(@exp.key[3])<+32><+872> := temp220
temp222 := #496
var23(@exp.key[4])<+40><+872> := temp222
temp224 := #487
var23(@exp.key[5])<+48><+872> := temp224
temp226 := #539
var23(@exp.key[6])<+56><+872> := temp226
temp228 := #585
var23(@exp.key[7])<+64><+872> := temp228
temp230 := #447
var23(@exp.key[8])<+72><+872> := temp230
temp232 := #474
var23(@exp.key[9])<+80><+872> := temp232
temp234 := #577
var23(@exp.key[10])<+88><+872> := temp234
temp236 := #454
var23(@exp.key[11])<+96><+872> := temp236
temp238 := #466
var23(@exp.key[12])<+104><+872> := temp238
temp240 := #345
var23(@exp.key[13])<+112><+872> := temp240
temp242 := #344
var23(@exp.key[14])<+120><+872> := temp242
temp244 := #486
var23(@exp.key[15])<+128><+872> := temp244
temp246 := #501
var23(@exp.key[16])<+136><+872> := temp246
temp248 := #423
var23(@exp.key[17])<+144><+872> := temp248
temp250 := #490
var23(@exp.key[18])<+152><+872> := temp250
temp252 := #375
var23(@exp.key[19])<+160><+872> := temp252
temp254 := #257
var23(@exp.key[20])<+168><+872> := temp254
temp256 := #203
var23(@exp.key[21])<+176><+872> := temp256
temp258 := #265
var23(@exp.key[22])<+184><+872> := temp258
temp260 := #125
var23(@exp.key[23])<+192><+872> := temp260
temp261 := #0
var15<+56> := temp261
LABEL label168 :
temp263 := #24
IF var15<+56> < temp263 GOTO label167
GOTO label166
LABEL label167 :
var16<+64> := var15<+56>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var23(@exp.key[0])<+8><+872><+tempa>
var18<+80> := var15<+56>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var24(@exp.key[0])<+8><+1256><+tempa>
temp264 := var17<+72> ^ var19<+88>
var21<+104> := temp264
#!tempa := {#8}*{var15<+56>}
var23(@exp.key[0])<+8><+872><+tempa> := var21<+104>
temp262 := #1
var15<+56> := var15<+56> + temp262
GOTO label168
LABEL label166 :
temp265 := #0
var15<+56> := temp265
LABEL label176 :
temp267 := #8
IF var15<+56> < temp267 GOTO label175
GOTO label174
LABEL label175 :
temp268 := var15<+56> + var15<+56>
temp269 := temp268 + var15<+56>
var16<+64> := temp269
#!tempa := {#8}*{var16<+64>}
var17<+72> := var22(@exp.key[0])<+8><+488><+tempa>
#!tempa := {#8}*{var15<+56>}
var23(@exp.X[0])<+328><+872><+tempa> := var17<+72>
temp266 := #1
var15<+56> := var15<+56> + temp266
GOTO label176
LABEL label174 :
temp270 := #23
var15<+56> := temp270
LABEL label181 :
temp272 := #0
IF var15<+56> > temp272 GOTO label180
GOTO label179
LABEL label180 :
var18<+80> := var15<+56>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var23(@exp.key[0])<+8><+872><+tempa>
var16<+64> := var15<+56>
temp273 := #1
var16<+64> := var16<+64> - temp273
#!tempa := {#8}*{var16<+64>}
var17<+72> := var23(@exp.key[0])<+8><+872><+tempa>
temp275 := var19<+88> - var17<+72>
var21<+104> := temp275
#!tempa := {#8}*{var15<+56>}
var23(@exp.key[0])<+8><+872><+tempa> := var21<+104>
temp271 := #1
var15<+56> := var15<+56> - temp271
GOTO label181
LABEL label179 :
temp276 := #0
var15<+56> := temp276
LABEL label190 :
temp278 := #8
IF var15<+56> < temp278 GOTO label189
GOTO label188
LABEL label189 :
#!tempa := {#8}*{var15<+56>}
var16<+64> := var22(@exp.L[0])<+200><+488><+tempa>
#!tempa := {#8}*{var15<+56>}
var18<+80> := var22(@exp.R[0])<+264><+488><+tempa>
#!tempa := {#8}*{var15<+56>}
var20<+96> := var23(@exp.X[0])<+328><+872><+tempa>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var23(@exp.key[0])<+8><+872><+tempa>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var23(@exp.key[0])<+8><+872><+tempa>
var17<+72> := var17<+72> - var20<+96>
var19<+88> := var19<+88> + var20<+96>
#!tempa := {#8}*{var16<+64>}
var23(@exp.key[0])<+8><+872><+tempa> := var17<+72>
#!tempa := {#8}*{var18<+80>}
var23(@exp.key[0])<+8><+872><+tempa> := var19<+88>
temp277 := #1
var15<+56> := var15<+56> + temp277
GOTO label190
LABEL label188 :
temp281 := #1
var15<+56> := temp281
LABEL label201 :
temp283 := #24
IF var15<+56> < temp283 GOTO label200
GOTO label199
LABEL label200 :
#!tempa := {#8}*{var15<+56>}
var17<+72> := var23(@exp.key[0])<+8><+872><+tempa>
temp284 := #1
temp285 := var15<+56> - temp284
var16<+64> := temp285
#!tempa := {#8}*{var16<+64>}
var20<+96> := var23(@exp.key[0])<+8><+872><+tempa>
var17<+72> := var17<+72> + var20<+96>
#!tempa := {#8}*{var15<+56>}
var23(@exp.key[0])<+8><+872><+tempa> := var17<+72>
temp282 := #1
var15<+56> := var15<+56> + temp282
GOTO label201
LABEL label199 :
temp287 := #0
var15<+56> := temp287
LABEL label208 :
temp289 := #7
IF var15<+56> < temp289 GOTO label207
GOTO label206
LABEL label207 :
var16<+64> := var15<+56>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var22(@exp.L[0])<+200><+488><+tempa>
temp290 := #1
temp291 := var15<+56> + temp290
var18<+80> := temp291
#!tempa := {#8}*{var18<+80>}
var19<+88> := var22(@exp.L[0])<+200><+488><+tempa>
temp292 := var17<+72> ^ var19<+88>
var21<+104> := temp292
temp293 := #23
IF var21<+104> > temp293 GOTO label215
GOTO label214
LABEL label215 :
temp294 := #23
var21<+104> := temp294
LABEL label214 :
#!tempa := {#8}*{var15<+56>}
var25(@exp.L[0])<+200><+1640><+tempa> := var21<+104>
temp288 := #1
var15<+56> := var15<+56> + temp288
GOTO label208
LABEL label206 :
temp296 := #0
var25(@exp.L[7])<+256><+1640> := temp296
temp297 := #0
var15<+56> := temp297
LABEL label219 :
temp299 := #7
IF var15<+56> < temp299 GOTO label218
GOTO label217
LABEL label218 :
var16<+64> := var15<+56>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var22(@exp.R[0])<+264><+488><+tempa>
temp300 := #1
temp301 := var15<+56> + temp300
var18<+80> := temp301
#!tempa := {#8}*{var18<+80>}
var19<+88> := var22(@exp.R[0])<+264><+488><+tempa>
temp302 := var17<+72> ^ var19<+88>
var21<+104> := temp302
temp303 := #23
IF var21<+104> > temp303 GOTO label226
GOTO label225
LABEL label226 :
temp304 := #23
var21<+104> := temp304
LABEL label225 :
#!tempa := {#8}*{var15<+56>}
var25(@exp.R[0])<+264><+1640><+tempa> := var21<+104>
temp298 := #1
var15<+56> := var15<+56> + temp298
GOTO label219
LABEL label217 :
temp306 := #23
var25(@exp.R[7])<+320><+1640> := temp306
temp307 := #0
var15<+56> := temp307
LABEL label230 :
temp309 := #7
IF var15<+56> < temp309 GOTO label229
GOTO label228
LABEL label229 :
var16<+64> := var15<+56>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var22(@exp.X[0])<+328><+488><+tempa>
temp310 := #1
temp311 := var15<+56> + temp310
var18<+80> := temp311
#!tempa := {#8}*{var18<+80>}
var19<+88> := var22(@exp.X[0])<+328><+488><+tempa>
temp312 := var17<+72> ^ var19<+88>
var21<+104> := temp312
#!tempa := {#8}*{var15<+56>}
var25(@exp.X[0])<+328><+1640><+tempa> := var21<+104>
temp308 := #1
var15<+56> := var15<+56> + temp308
GOTO label230
LABEL label228 :
temp314 := #12
var25(@exp.X[7])<+384><+1640> := temp314
temp316 := #127
var25(@exp.key[0])<+8><+1640> := temp316
temp318 := #111
var25(@exp.key[1])<+16><+1640> := temp318
temp320 := #188
var25(@exp.key[2])<+24><+1640> := temp320
temp322 := #174
var25(@exp.key[3])<+32><+1640> := temp322
temp324 := #195
var25(@exp.key[4])<+40><+1640> := temp324
temp326 := #128
var25(@exp.key[5])<+48><+1640> := temp326
temp328 := #88
var25(@exp.key[6])<+56><+1640> := temp328
temp330 := #121
var25(@exp.key[7])<+64><+1640> := temp330
temp332 := #123
var25(@exp.key[8])<+72><+1640> := temp332
temp334 := #103
var25(@exp.key[9])<+80><+1640> := temp334
temp336 := #57
var25(@exp.key[10])<+88><+1640> := temp336
temp338 := #123
var25(@exp.key[11])<+96><+1640> := temp338
temp340 := #97
var25(@exp.key[12])<+104><+1640> := temp340
temp342 := #74
var25(@exp.key[13])<+112><+1640> := temp342
temp344 := #37
var25(@exp.key[14])<+120><+1640> := temp344
temp346 := #59
var25(@exp.key[15])<+128><+1640> := temp346
temp348 := #21
var25(@exp.key[16])<+136><+1640> := temp348
temp350 := #47
var25(@exp.key[17])<+144><+1640> := temp350
temp352 := #54
var25(@exp.key[18])<+152><+1640> := temp352
temp354 := #28
var25(@exp.key[19])<+160><+1640> := temp354
temp356 := #49
var25(@exp.key[20])<+168><+1640> := temp356
temp358 := #55
var25(@exp.key[21])<+176><+1640> := temp358
var25(@exp.key[22])<+184><+1640> := var1<+8>
temp361 := #125
var25(@exp.key[23])<+192><+1640> := temp361
temp362 := #23
var15<+56> := temp362
LABEL label263 :
temp364 := #0
IF var15<+56> > temp364 GOTO label262
GOTO label261
LABEL label262 :
var18<+80> := var15<+56>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var25(@exp.key[0])<+8><+1640><+tempa>
var16<+64> := var15<+56>
temp365 := #1
var16<+64> := var16<+64> - temp365
#!tempa := {#8}*{var16<+64>}
var17<+72> := var25(@exp.key[0])<+8><+1640><+tempa>
temp367 := var19<+88> - var17<+72>
var21<+104> := temp367
#!tempa := {#8}*{var15<+56>}
var25(@exp.key[0])<+8><+1640><+tempa> := var21<+104>
temp363 := #1
var15<+56> := var15<+56> - temp363
GOTO label263
LABEL label261 :
temp368 := #0
var15<+56> := temp368
LABEL label272 :
temp370 := #8
IF var15<+56> < temp370 GOTO label271
GOTO label270
LABEL label271 :
#!tempa := {#8}*{var15<+56>}
var16<+64> := var25(@exp.L[0])<+200><+1640><+tempa>
#!tempa := {#8}*{var15<+56>}
var18<+80> := var25(@exp.R[0])<+264><+1640><+tempa>
#!tempa := {#8}*{var15<+56>}
var20<+96> := var25(@exp.X[0])<+328><+1640><+tempa>
#!tempa := {#8}*{var16<+64>}
var17<+72> := var25(@exp.key[0])<+8><+1640><+tempa>
#!tempa := {#8}*{var18<+80>}
var19<+88> := var25(@exp.key[0])<+8><+1640><+tempa>
var17<+72> := var17<+72> - var20<+96>
var19<+88> := var19<+88> + var20<+96>
#!tempa := {#8}*{var16<+64>}
var25(@exp.key[0])<+8><+1640><+tempa> := var17<+72>
#!tempa := {#8}*{var18<+80>}
var25(@exp.key[0])<+8><+1640><+tempa> := var19<+88>
temp369 := #1
var15<+56> := var15<+56> + temp369
GOTO label272
LABEL label270 :
temp373 := #1
var15<+56> := temp373
LABEL label283 :
temp375 := #24
IF var15<+56> < temp375 GOTO label282
GOTO label281
LABEL label282 :
#!tempa := {#8}*{var15<+56>}
var17<+72> := var25(@exp.key[0])<+8><+1640><+tempa>
temp376 := #1
temp377 := var15<+56> - temp376
var16<+64> := temp377
#!tempa := {#8}*{var16<+64>}
var20<+96> := var25(@exp.key[0])<+8><+1640><+tempa>
var17<+72> := var17<+72> + var20<+96>
#!tempa := {#8}*{var15<+56>}
var25(@exp.key[0])<+8><+1640><+tempa> := var17<+72>
temp374 := #1
var15<+56> := var15<+56> + temp374
GOTO label283
LABEL label281 :
temp379 := #0
var12<+32> := temp379
temp380 := #0
var13<+40> := temp380
temp381 := #0
var15<+56> := temp381
LABEL label292 :
temp382 := #24
IF var15<+56> < temp382 GOTO label291
GOTO label290
LABEL label291 :
var16<+64> := var15<+56>
#!tempa := {#8}*{var15<+56>}
var12<+32> := var22(@exp.key[0])<+8><+488><+tempa>
var18<+80> := var15<+56>
#!tempa := {#8}*{var18<+80>}
var13<+40> := var23(@exp.key[0])<+8><+872><+tempa>
IF var13<+40> != var12<+32> GOTO label298
GOTO label297
LABEL label298 :
temp383 := CALL writef //调用函数
temp384 := CALL exit //退出
LABEL label297 :
temp385 := #1
temp386 := var15<+56> + temp385
var15<+56> := temp386
GOTO label292
LABEL label290 :
temp387 := CALL writes
temp388 := CALL exit
LABEL Flabelmain :

C代码

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
#include <stdio.h>
void read(int* var2) {
Flabelread:
// Function body goes here
}

void writes() {
Flabelwrites:
// Function body goes here
}

void writef() {
Flabelwritef:
// Function body goes here
}

void exit() {
Flabelexit:
// Function body goes here
}

typedef struct {
int key[24];
int L[8];
int R[8];
int X[8];
} exp;

int main(char* var11[]) {
exp var22;
exp var23;
exp var24;
exp var25;
char input[24];

scanf("%s",input);

for(int i=0;i<24;i++){
var22.key[23-i] = input[i];
}

for(int ie=23;ie>0;ie--){
var22.key[ie] = var22.key[ie]-var22.key[ie-1];
}

var22.L[0] = 0;
var22.R[0] = 8;
var22.X[0] = 11;
var22.L[1] = 15;
var22.R[1] = 23;
int tmp27 = 0 - 13;

var22.X[1] = tmp27;
var22.L[2] = 2;
var22.R[2] = 11;
var22.X[2] = 17;
var22.L[3] = 10;
var22.R[3] = 20;
// ....初始化跳过....

for(int i =0;i<8;i++){
var22.key[var22.L[i]] += var22.X[i];
var22.key[var22.R[i]] -= var22.X[i];
}

for(int i=1;i<24;i++){
var22.key[i]+= var22.key[i-1];
}

for(int i=0;i<23;++){
var22.key[i]^=0; //????
// var22.key[i]^= var22.key[i+1];
}

var24.L[0] = 0;
var24.R[0] = 12;
// ..... 赋值跳过....

for(int ie=23;ie>0;ie--){
var24.key[ie] -= var24.key[ie-1];
}

for(int i=0;i<8;i++){
var24.key[var24.L[i]] += var24.X[i];
var24.key[var24.R[i]] -= var24.X[i];
}

for(int i=1;i<24;i++){
var24.key[i] += var24.key[i-1];
}

// var23初始化跳过

for(int i=0;i<24;i++){
var23.key[i] ^= var24.key[i];
}

for(int i=0;i<8;i++){
var23.X[i] = var22.key[i*3];
}

for(int ie=23;ie>0;ie--){
var23.key[ie] -= var23.key[ie-1];
}

for(int i=0;i<8;i++){
var23.key[var22.L[i]] -= var23.X[i];
var23.key[var22.R[i]] += var23.X[i];
}

for(int i=1;i<24;i++){
var23.key[i] += var23.key[i-1];
}

for(int i=0;i<7;i++){
int tmp = var22.L[i]^var22.L[i+1];
if(tmp>23){
tmp = 23;
}
var22.L[i] = 23;
}

var25.L[7] =0;
for(int i=0;i<7;i++){
int tmp2 = var22.R[i]^var22.R[i+1];
if(tmp2>23){
tmp2 = 23;
}
var25.R[i] = tmp2;
}
var25.R[7] =23;

for(int i=0;i>7;i++){
var25.X[i] = var22.X[i+1]^var22.X[i];
}

// init var25 跳过

for(int ie=23;ie>0;ie--){
var25.key[ie] -= var25.key[ie-1];
}

for(int i=0;i<8;i++){
var25.key[var25.L[i]] -= var25.X[i];
var25.key[var25.R[i]] += var25.X[i];
}

for(int i=1;i<24;i++){
var25.key[i] += var25.key[i-1];
}

for(int i=0;i<24;i++){
if(var22.key[i]!=var23.key[i]){
print("error");
break;
}

}

return 0;
}

简单整理一下

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
#include <stdio.h>
typedef struct {
long long int key[24];
long long int L[8];
long long int R[8];
long long int X[8];
} exp;
int main() {
exp var22;
exp var23;
exp var24;
exp var25;

var22.L[0] = 0;
var22.R[0] = 8;
var22.X[0] = 11;
var22.L[1] = 15;
var22.R[1] = 23;
var22.X[1] = -13;
var22.L[2] = 2;
var22.R[2] = 11;
var22.X[2] = 17;
var22.L[3] = 10;
var22.R[3] = 20;
var22.X[3] = -19;
var22.L[4] = 6;
var22.R[4] = 13;
var22.X[4] = 23;
var22.L[5] = 9;
var22.R[5] = 21;
var22.X[5] = -29;
var22.L[6] = 1;
var22.R[6] = 19;
var22.X[6] = 31;
var22.L[7] = 4;
var22.R[7] = 17;
var22.X[7] = -37;

char input[24];

scanf_s("%s", input, sizeof(input));

for (int i = 0; i < 24; i++) {
var22.key[23 - i] = input[i];
}

for (int ie = 23; ie > 0; ie--) {
var22.key[ie] = var22.key[ie] - var22.key[ie - 1];
}

// 对input进行简单加密
for (int i = 0; i < 8; i++) {
var22.key[var22.L[i]] += var22.X[i];
var22.key[var22.R[i]] -= var22.X[i];
}

for (int i = 1; i < 24; i++) {
var22.key[i] += var22.key[i - 1];
}

var23.key[0] = 252;
var23.key[1] = 352;
var23.key[2] = 484;
var23.key[3] = 470;
var23.key[4] = 496;
var23.key[5] = 487;
var23.key[6] = 539;
var23.key[7] = 585;
var23.key[8] = 447;
var23.key[9] = 474;
var23.key[10] = 577;
var23.key[11] = 454;
var23.key[12] = 466;
var23.key[13] = 345;
var23.key[14] = 344;
var23.key[15] = 486;
var23.key[16] = 501;
var23.key[17] = 423;
var23.key[18] = 490;
var23.key[19] = 375;
var23.key[20] = 257;
var23.key[21] = 203;
var23.key[22] = 265;
var23.key[23] = 125;

// 根据input和key生成res


for (int ie = 23; ie > 0; ie--) {
var23.key[ie] -= var23.key[ie - 1];
}

for (int i = 0; i < 8; i++) {
var23.key[var22.L[i]] -= var22.key[i * 3];
var23.key[var22.R[i]] += var22.key[i * 3];
}

for (int i = 1; i < 24; i++) {
var23.key[i] += var23.key[i - 1];
}

for (int i = 0; i < 24; i++) {
if (var22.key[i] != var23.key[i]) {
break;
}
}
return 0;
}


z3约束解题

这儿使用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
from z3 import *

s = Solver()


class exp:
def __init__(self):
self.key = [0] * 24
self.L = [0] * 8
self.R = [0] * 8
self.X = [0] * 8


var22 = exp()

var23 = exp()

key = [Int(('key[%d]' % i)) for i in range(24)]
var22.key = key
# print(var22.key)
for ie in range(23, 0, -1):
var22.key[ie] = (var22.key[ie] - var22.key[ie - 1])

var22.L[0] = 0
var22.R[0] = 8
var22.X[0] = 11
var22.L[1] = 15
var22.R[1] = 23
var22.X[1] = -13
var22.L[2] = 2
var22.R[2] = 11
var22.X[2] = 17
var22.L[3] = 10
var22.R[3] = 20
var22.X[3] = -19
var22.L[4] = 6
var22.R[4] = 13
var22.X[4] = 23
var22.L[5] = 9
var22.R[5] = 21
var22.X[5] = -29
var22.L[6] = 1
var22.R[6] = 19
var22.X[6] = 31
var22.L[7] = 4
var22.R[7] = 17
var22.X[7] = -37

for i in range(8):
var22.key[var22.L[i]] += var22.X[i]
var22.key[var22.R[i]] -= var22.X[i]

for k in range(1, 24):
var22.key[k] += var22.key[k - 1]

var23.key[0] = 252
var23.key[1] = 352
var23.key[2] = 484
var23.key[3] = 470
var23.key[4] = 496
var23.key[5] = 487
var23.key[6] = 539
var23.key[7] = 585
var23.key[8] = 447
var23.key[9] = 474
var23.key[10] = 577
var23.key[11] = 454
var23.key[12] = 466
var23.key[13] = 345
var23.key[14] = 344
var23.key[15] = 486
var23.key[16] = 501
var23.key[17] = 423
var23.key[18] = 490
var23.key[19] = 375
var23.key[20] = 257
var23.key[21] = 203
var23.key[22] = 265
var23.key[23] = 125

for m in range(23, 0, -1):
var23.key[m] -= var23.key[m - 1]

for n in range(8):
var23.key[var22.L[n]] -= var22.key[n * 3]
var23.key[var22.R[n]] += var22.key[n * 3]

for e in range(1, 24):
var23.key[e] += var23.key[e - 1]
for i in range(24):
s.add(var22.key[i] == var23.key[i])

assert (s.check() == sat)
m = s.model()
# print(m)

##结果
key[21] = 55
key[15] = 106
key[6] = 53
key[18] = 115
key[23] = 125
key[22] = 117
key[20] = 99
key[19] = 116
key[17] = 48
key[16] = 121
key[14] = 112
key[13] = 113
key[11] = 109
key[10] = 117
key[8] = 98
key[7] = 99
key[5] = 114
key[4] = 123
key[9] = 115
key[12] = 121
key[3] = 102
key[2] = 116
key[1] = 99
key[0] = 115

for i in key:
print(chr(i), end='')

# 下列报错?貌似因为class?
# res = []
# for i in range(24):
# res.append(chr(m[key[i]].as_long()))
# s = ''.join(res)
# print(s)

flag

sctf{r5cbsumyqpjy0stc7u}

image-20230711112814918