0%

hgame2022

hgame-week1

前言:有一说一,题质量是真高,好多逆向题,我用z3,爆破做不出来,人都快疯了,misc是真的出成全家福了。

RE

1、easyasm

这个题考察汇编能力,简单来说就是flag左移4位和flag右移4位再相加赋值给ax,然后再异或17h,这个题z3和爆破应该都行,但我没出来,1ens师傅说这就是高低位互换,所以给出脚本:

1
2
3
4
5
6
a=[0x91, 0x61, 0x01, 0xC1, 0x41, 0xA0, 0x60, 0x41, 0xD1, 0x21, 0x14, 0xC1, 0x41, 0xE2, 0x50, 0xE1, 0xE2, 0x54, 0x20, 0xC1, 0xE2, 0x60, 0x14, 0x30, 0xD1, 0x51, 0xC0, 0x17]
c=""
for i in range(28):
c += chr((((a[i]^0x17)&0xF)<<4)|(((a[i]^0x17)&0xF0)>>4))
print(c)
#hgame{welc0me_to_4sm_w0rld}

creakme

这个题

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
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // edx
int i; // esi
unsigned int v5; // edi
unsigned int v6; // ebx
int v7; // esi
int v8; // esi
_DWORD v10[17]; // [esp+Ch] [ebp-8Ch] BYREF
__int128 v11[2]; // [esp+50h] [ebp-48h]
char Arglist[32]; // [esp+70h] [ebp-28h] BYREF
int v13; // [esp+90h] [ebp-8h]
int v14; // [esp+94h] [ebp-4h]

memset(Arglist, 0, sizeof(Arglist));
sub_40103A("%s", (char)Arglist);
strcpy((char *)v10, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=");
v3 = 0;
v14 = 0;
for ( i = 0; i < 32; v14 = i )
{
v5 = *(_DWORD *)&Arglist[i];
v6 = *(_DWORD *)&Arglist[i + 4];
v13 = 0;
v7 = 32;
do
{
v3 += 305419896;
v5 += v3 ^ (v3 + v6) ^ (v10[2] + 16 * v6) ^ (v10[3] + (v6 >> 5));
v6 += v3 ^ (v3 + v5) ^ (v10[0] + 16 * v5) ^ (v10[1] + (v5 >> 5));
--v7;
}
while ( v7 );
v8 = v14;
v3 = 0;
*(_DWORD *)&Arglist[v14] = v5;
*(_DWORD *)&Arglist[v8 + 4] = v6;
i = v8 + 8;
}
v11[0] = xmmword_402180;
v11[1] = xmmword_402170;
while ( Arglist[v3] == *((_BYTE *)v11 + v3) )
{
if ( ++v3 >= 32 )
{
sub_40100C("right!", v10[0]);
return 0;
}
}
sub_40100C("wrong!", v10[0]);
return 0;
}

按理说z3能跑出来的,但我没跑出来。这个题最重要的就是中间这两个运算,后来发现是tea魔改,但我没看出来,卡了好久才想出来

给出脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
void tea_decrypt(uint32_t* v, uint32_t* k) { 
uint32_t v0 = v[0], v1 = v[1], sum = 0x12345678 * 32, i; //注意sum的值
uint32_t delta = 0x12345678;
uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
for (i = 0; i < 32; i++)
{
v1 -= ((v0 << 4) + k0) ^ (v0 + sum) ^ ((v0 >> 5) + k1) ^ sum;
v0 -= ((v1 << 4) + k2) ^ (v1 + sum) ^ ((v1 >> 5) + k3) ^ sum;
sum -= delta;
}
v[0] = v0;
v[1] = v1;
}

Flag checker

很简单的安卓逆向,先进行RC4解密,密钥是carol,然后进行base64,因为RC4是在存在的字符中进行运算的,所以先进行。

有些小简单。不多写了

猫头鹰是不是猫

这个题还好,很好理解,不过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
int64 __fastcall main(int a1, char **a2, char **a3)
{
int i; // [rsp+Ch] [rbp-154h]
int v5[64]; // [rsp+10h] [rbp-150h] BYREF
__int64 v6[10]; // [rsp+110h] [rbp-50h] BYREF

v6[9] = __readfsqword(0x28u);
memset(v6, 0, 64);
memset(v5, 0, sizeof(v5));
v5[0] = 1;
((void (__fastcall *)(__int64 *, char **, int *))((char *)&sub_11E8 + 1))(v6, a2, v5);
puts("Welcome to HGAME2022...");
puts("This is cat?");
sub_124E(&unk_4140);
puts("This is owl?");
sub_124E(&unk_8140);
fflush(stdout);
__isoc99_scanf("%64s", v6); //以上都没有用,画了两个图而已
for ( i = 0; i <= 63; ++i )
v5[i] = *((char *)v6 + i);
sub_1537(v5);
if ( (unsigned int)sub_12E6(v5, &unk_4040) )
puts("failed");
else
puts("win");
return 0LL;
}

我们看循环中的函数

1
2
3
4
5
6
7
int64 __fastcall sub_1537(__int64 a1)
{
sub_1347(a1, &unk_4140);
return sub_1347(a1, &unk_8140);
}


进行了两次该函数,

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
unsigned __int64 __fastcall sub_1347(__int64 a1, __int64 a2)
{
int v3; // [rsp+18h] [rbp-128h]
int i; // [rsp+1Ch] [rbp-124h]
int j; // [rsp+20h] [rbp-120h]
int k; // [rsp+24h] [rbp-11Ch]
int m; // [rsp+28h] [rbp-118h]
int n; // [rsp+2Ch] [rbp-114h]
int v9[66]; // [rsp+30h] [rbp-110h] BYREF
unsigned __int64 v10; // [rsp+138h] [rbp-8h]

v10 = __readfsqword(0x28u);
memset(v9, 0, 0x100uLL);
for ( i = 0; i <= 63; ++i )
{
for ( j = 0; j <= 63; ++j )
*(_DWORD *)(((__int64)i << 8) + a2 + 4LL * j) = *(_DWORD *)(a2 + ((__int64)i << 8) + 4LL * j) / 10;
}
for ( k = 0; k <= 63; ++k )
{
v3 = 0;
for ( m = 0; m <= 63; ++m )
v3 += *(_DWORD *)(4LL * m + a1) * *(_DWORD *)(a2 + ((__int64)m << 8) + 4LL * k);
v9[k] = v3;
}
for ( n = 0; n <= 63; ++n )
*(_DWORD *)(a1 + 4LL * n) = v9[n];
return __readfsqword(0x28u) ^ v10;
}

我们通过动调发现能看出a2,a2就是经过了移位,相当于矩阵移位了,然后进行矩阵相乘,我们只需要求逆矩阵,当然刚开始想的是z3,但是日啊,搞不出来啊,真烦人woc,开始用逆矩阵规规矩矩求逆。也学习了一下逆矩阵怎么求。

学习到:使用方法:round(number,digits)

  1. digits>0,四舍五入到指定的小数位
  2. digits=0, 四舍五入到最接近的整数
  3. digits<0 ,在小数点左侧进行四舍五入
  4. 如果round()函数只有number这个参数,等同于digits=0

矩阵取一个元素
X[i, j]—->取矩阵X的第 i 行第 j 列的元素

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
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
import numpy as np
a3=[0x0000000F,0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000C,
0x0000000A, 0x0000000D, 0x00000015, 0x00000011, 0x0000000E, 0x0000000B, 0x0000000A, 0x0000000B, 0x00000010,
0x00000011, 0x00000008, 0x00000008, 0x00000007, 0x0000000A, 0x0000000C, 0x0000000D, 0x0000000C, 0x00000010,
0x00000012, 0x00000009, 0x00000006, 0x00000007, 0x00000008, 0x00000007, 0x00000008, 0x00000009, 0x00000008,
0x00000009, 0x0000000A, 0x0000000C, 0x0000000C, 0x0000000E, 0x00000010, 0x00000010, 0x0000000E, 0x00000009,
0x00000004, 0x00000003, 0x00000005, 0x00000006, 0x00000006, 0x00000006, 0x00000003, 0x00000004, 0x00000006,
0x00000006, 0x00000005, 0x00000005, 0x00000005, 0x00000005, 0x00000004, 0x00000005, 0x00000007, 0x00000005,
0x00000004, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000D,
0x0000000C, 0x0000000B, 0x00000015, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000B, 0x0000000A, 0x00000008,
0x00000008, 0x0000000A, 0x00000008, 0x00000008, 0x00000007, 0x00000009, 0x0000000B, 0x0000000B, 0x0000000B,
0x00000013, 0x0000000D, 0x0000000C, 0x00000005, 0x00000006, 0x00000007, 0x00000007, 0x00000008, 0x00000009,
0x00000009, 0x0000000A, 0x0000000C, 0x0000000F, 0x00000011, 0x00000011, 0x00000011, 0x00000010, 0x0000000A,
0x00000004, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000007, 0x00000006, 0x00000004, 0x00000005,
0x00000007, 0x00000006, 0x00000006, 0x00000005, 0x00000005, 0x00000004, 0x00000003, 0x00000005, 0x00000006,
0x00000004, 0x00000003, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E,
0x0000000D, 0x0000000C, 0x00000013, 0x0000000F, 0x0000000D, 0x0000000F, 0x0000000E, 0x0000000C, 0x0000000A,
0x00000008, 0x00000008, 0x00000009, 0x00000008, 0x00000008, 0x00000007, 0x00000009, 0x0000000A, 0x00000009,
0x00000010, 0x0000000E, 0x00000008, 0x00000011, 0x00000005, 0x00000006, 0x00000009, 0x00000010, 0x00000011,
0x00000011, 0x00000012, 0x00000012, 0x00000013, 0x00000015, 0x00000016, 0x00000016, 0x00000015, 0x00000013,
0x0000000A, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000009, 0x00000009, 0x00000006, 0x00000005,
0x00000008, 0x00000008, 0x00000006, 0x00000006, 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000003,
0x00000004, 0x00000003, 0x00000003, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x00000013, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000D,
0x0000000C, 0x0000000A, 0x00000009, 0x00000009, 0x00000009, 0x00000008, 0x00000007, 0x00000009, 0x0000000A,
0x0000000C, 0x00000012, 0x0000000A, 0x00000008, 0x00000012, 0x00000006, 0x00000006, 0x00000007, 0x00000007,
0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000C, 0x0000000F, 0x00000014, 0x0000000E, 0x0000000A,
0x00000005, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000009, 0x0000000A, 0x0000000A, 0x00000007,
0x00000007, 0x00000009, 0x00000009, 0x00000007, 0x00000006, 0x00000006, 0x00000005, 0x00000006, 0x00000006,
0x00000006, 0x00000006, 0x00000005, 0x00000005, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x00000012, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000C, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000A, 0x0000000A, 0x0000000B,
0x0000000E, 0x00000017, 0x00000012, 0x00000012, 0x00000012, 0x00000014, 0x0000000C, 0x00000007, 0x00000007,
0x00000007, 0x00000006, 0x00000006, 0x00000008, 0x0000000A, 0x0000000D, 0x0000000E, 0x00000014, 0x0000000B,
0x00000006, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000A,
0x00000007, 0x00000009, 0x0000000B, 0x00000009, 0x00000007, 0x00000006, 0x00000006, 0x00000006, 0x00000007,
0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000006, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000E,
0x0000000D, 0x0000000E, 0x0000000F, 0x0000000E, 0x0000000C, 0x00000014, 0x00000008, 0x00000008, 0x0000000B,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x00000011, 0x00000016, 0x0000000F, 0x0000000C, 0x0000000C,
0x0000000E, 0x00000016, 0x0000000E, 0x0000000D, 0x0000000C, 0x00000009, 0x00000008, 0x00000013, 0x00000007,
0x00000007, 0x00000007, 0x00000006, 0x00000006, 0x00000007, 0x00000009, 0x0000000C, 0x0000000D, 0x00000014,
0x0000000A, 0x00000007, 0x00000006, 0x00000006, 0x00000008, 0x00000009, 0x0000000A, 0x0000000C, 0x0000000C,
0x0000000A, 0x00000009, 0x0000000B, 0x0000000B, 0x0000000A, 0x00000008, 0x00000007, 0x00000007, 0x00000007,
0x00000007, 0x00000008, 0x00000007, 0x00000007, 0x00000007, 0x00000006, 0x0000000F, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000D, 0x0000000E, 0x0000000F, 0x0000000D, 0x00000007, 0x0000000A, 0x00000010, 0x00000004,
0x00000005, 0x0000000C, 0x0000000F, 0x00000013, 0x00000016, 0x00000013, 0x0000000D, 0x0000000C, 0x0000000C,
0x0000000D, 0x00000016, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000C, 0x00000009, 0x00000007, 0x00000011,
0x0000000B, 0x00000008, 0x00000007, 0x00000006, 0x00000005, 0x00000006, 0x00000009, 0x0000000C, 0x0000000D,
0x00000014, 0x0000000B, 0x0000000A, 0x00000008, 0x00000008, 0x00000009, 0x0000000B, 0x0000000B, 0x0000000D,
0x0000000C, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000B, 0x0000000B, 0x00000009, 0x00000008, 0x00000007,
0x00000007, 0x00000008, 0x00000008, 0x00000008, 0x00000007, 0x00000007, 0x00000006, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000B, 0x00000003, 0x00000002, 0x00000009,
0x00000011, 0x00000012, 0x00000013, 0x00000013, 0x00000012, 0x0000000D, 0x0000000C, 0x0000000C, 0x0000000C,
0x0000000C, 0x00000010, 0x00000012, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000B, 0x00000009, 0x00000008,
0x0000000E, 0x0000000D, 0x00000007, 0x00000008, 0x00000006, 0x00000005, 0x00000006, 0x00000009, 0x0000000B,
0x0000000C, 0x00000014, 0x0000000C, 0x0000000B, 0x0000000A, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000C,
0x0000000D, 0x0000000C, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000C, 0x0000000B, 0x0000000A, 0x00000008,
0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000007, 0x00000007, 0x00000006, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000E, 0x00000007, 0x00000002, 0x00000004,
0x00000004, 0x00000004, 0x00000004, 0x00000003, 0x00000003, 0x00000009, 0x0000000A, 0x0000000A, 0x0000000B,
0x0000000B, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000B, 0x00000008,
0x00000007, 0x00000005, 0x00000004, 0x00000006, 0x00000007, 0x00000006, 0x00000005, 0x00000005, 0x00000008,
0x0000000A, 0x0000000B, 0x00000014, 0x0000000D, 0x0000000C, 0x0000000B, 0x0000000B, 0x0000000C, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000A,
0x00000009, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000007, 0x00000007, 0x00000006,
0x0000000F, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000003, 0x00000004,
0x00000005, 0x00000005, 0x00000005, 0x00000004, 0x00000003, 0x00000003, 0x00000003, 0x00000007, 0x00000009,
0x0000000B, 0x0000000C, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000C, 0x0000000C, 0x0000000B, 0x00000009,
0x00000007, 0x00000005, 0x00000005, 0x00000005, 0x00000005, 0x00000004, 0x00000003, 0x00000003, 0x00000003,
0x00000003, 0x00000004, 0x00000007, 0x0000000B, 0x0000000B, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000D,
0x0000000D, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000C,
0x0000000B, 0x00000009, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000007, 0x00000006,
0x00000005, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000B, 0x00000003,
0x00000005, 0x00000006, 0x00000006, 0x00000004, 0x00000004, 0x00000003, 0x00000003, 0x00000003, 0x00000003,
0x00000009, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000A, 0x0000000B, 0x00000009, 0x00000008,
0x00000007, 0x00000005, 0x00000004, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000004, 0x00000007, 0x0000000A, 0x0000000B, 0x0000000D,
0x0000000E, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D,
0x0000000C, 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000007,
0x00000006, 0x00000005, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x00000009,
0x00000003, 0x00000005, 0x00000006, 0x00000005, 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000002,
0x00000002, 0x00000004, 0x0000000B, 0x0000000C, 0x0000000A, 0x00000008, 0x00000007, 0x00000005, 0x00000004,
0x00000004, 0x00000004, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000003, 0x00000004, 0x00000004, 0x00000005,
0x00000009, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000C, 0x0000000B, 0x00000009, 0x00000009, 0x00000008, 0x00000008, 0x00000008, 0x00000008,
0x00000007, 0x00000005, 0x00000006, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D,
0x00000007, 0x00000004, 0x00000006, 0x00000006, 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000003,
0x00000002, 0x00000002, 0x00000002, 0x00000004, 0x00000009, 0x00000009, 0x00000005, 0x00000003, 0x00000002,
0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000005, 0x00000005, 0x00000003,
0x00000002, 0x00000002, 0x00000006, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E,
0x0000000D, 0x0000000C, 0x0000000B, 0x00000009, 0x00000008, 0x00000007, 0x00000007, 0x00000007, 0x00000007,
0x00000008, 0x00000007, 0x00000005, 0x00000006, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D,
0x0000000C, 0x00000004, 0x00000005, 0x00000007, 0x00000006, 0x00000005, 0x00000004, 0x00000004, 0x00000003,
0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x00000004, 0x00000004, 0x00000002, 0x00000002,
0x00000002, 0x00000002, 0x00000002, 0x00000001, 0x00000002, 0x00000003, 0x00000003, 0x00000003, 0x00000003,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000004, 0x00000006, 0x00000006,
0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000005, 0x00000009, 0x0000000C, 0x0000000E, 0x0000000E,
0x0000000C, 0x00000008, 0x00000006, 0x00000005, 0x00000005, 0x00000006, 0x00000007, 0x00000006, 0x00000006,
0x00000006, 0x00000007, 0x00000006, 0x00000005, 0x00000006, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000D, 0x0000000B, 0x00000004, 0x00000005, 0x00000007, 0x00000006, 0x00000005, 0x00000005, 0x00000004,
0x00000004, 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000004,
0x00000007, 0x00000009, 0x0000000A, 0x00000009, 0x00000007, 0x00000004, 0x00000002, 0x00000004, 0x00000004,
0x00000004, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000004, 0x00000004,
0x00000004, 0x00000004, 0x00000004, 0x00000003, 0x00000003, 0x00000004, 0x00000005, 0x00000009, 0x0000000C,
0x0000000A, 0x00000004, 0x00000003, 0x00000004, 0x00000003, 0x00000003, 0x00000004, 0x00000006, 0x00000006,
0x00000007, 0x00000008, 0x00000007, 0x00000005, 0x00000004, 0x00000006, 0x0000000F, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000D, 0x0000000A, 0x00000003, 0x00000005, 0x00000007, 0x00000006, 0x00000005, 0x00000004,
0x00000004, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000007,
0x0000000D, 0x0000000D, 0x0000000C, 0x0000000D, 0x00000012, 0x0000000E, 0x0000000A, 0x00000005, 0x00000001,
0x00000004, 0x00000004, 0x00000004, 0x00000005, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000004,
0x00000004, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000005, 0x00000006, 0x00000006, 0x00000005,
0x00000006, 0x00000005, 0x00000004, 0x00000004, 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000005,
0x00000007, 0x00000008, 0x00000009, 0x00000006, 0x00000003, 0x00000002, 0x00000003, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000D, 0x00000009, 0x00000004, 0x00000006, 0x00000007, 0x00000007, 0x00000005,
0x00000005, 0x00000004, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000008,
0x00000010, 0x00000011, 0x0000000F, 0x0000000A, 0x00000007, 0x00000009, 0x0000000F, 0x0000000D, 0x0000000B,
0x00000005, 0x00000002, 0x00000003, 0x00000006, 0x00000006, 0x00000007, 0x00000004, 0x00000002, 0x00000002,
0x00000003, 0x00000001, 0x00000000, 0x00000001, 0x00000004, 0x00000003, 0x00000005, 0x00000004, 0x00000005,
0x00000006, 0x00000004, 0x00000003, 0x00000004, 0x00000004, 0x00000004, 0x00000005, 0x00000004, 0x00000003,
0x00000005, 0x00000009, 0x0000000A, 0x0000000A, 0x00000006, 0x00000003, 0x00000002, 0x00000002, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x00000007, 0x00000004, 0x00000005, 0x00000007, 0x00000007,
0x00000006, 0x00000005, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000003, 0x00000003, 0x00000006,
0x00000010, 0x00000012, 0x00000011, 0x00000006, 0x00000004, 0x00000002, 0x00000003, 0x00000003, 0x0000000D,
0x0000000E, 0x00000009, 0x00000003, 0x00000003, 0x00000003, 0x00000005, 0x00000004, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000004, 0x00000001,
0x00000001, 0x00000003, 0x00000002, 0x00000002, 0x00000004, 0x00000005, 0x00000006, 0x00000005, 0x00000005,
0x00000004, 0x00000004, 0x00000009, 0x0000000A, 0x00000008, 0x00000005, 0x00000002, 0x00000002, 0x00000003,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x00000006, 0x00000006, 0x00000005, 0x00000007,
0x00000007, 0x00000007, 0x00000006, 0x00000005, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000005,
0x00000009, 0x00000011, 0x00000013, 0x00000010, 0x00000005, 0x00000003, 0x00000002, 0x00000002, 0x00000002,
0x0000000A, 0x0000000D, 0x0000000B, 0x00000004, 0x00000003, 0x00000003, 0x00000001, 0x00000002, 0x00000002,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x00000001, 0x00000003,
0x00000000, 0x00000001, 0x00000003, 0x00000006, 0x00000007, 0x00000005, 0x00000004, 0x00000004, 0x00000005,
0x00000005, 0x00000005, 0x00000004, 0x0000000B, 0x0000000A, 0x00000007, 0x00000004, 0x00000003, 0x00000003,
0x00000005, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000006, 0x00000006, 0x00000006,
0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000003, 0x00000003,
0x00000004, 0x00000006, 0x00000008, 0x0000000C, 0x0000000B, 0x00000006, 0x00000002, 0x00000002, 0x00000002,
0x00000002, 0x00000002, 0x00000004, 0x00000003, 0x00000001, 0x00000001, 0x00000002, 0x00000003, 0x00000002,
0x00000003, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000001,
0x00000002, 0x00000001, 0x00000000, 0x00000003, 0x0000000C, 0x00000010, 0x0000000F, 0x0000000A, 0x00000006,
0x00000004, 0x00000005, 0x00000005, 0x00000004, 0x0000000C, 0x0000000C, 0x0000000A, 0x00000008, 0x00000006,
0x00000006, 0x00000008, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x00000006, 0x00000006,
0x00000007, 0x00000006, 0x00000006, 0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000003, 0x00000003,
0x00000003, 0x00000003, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000003, 0x00000003, 0x00000003,
0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x00000002, 0x00000002,
0x00000002, 0x00000002, 0x00000004, 0x00000001, 0x00000002, 0x00000006, 0x0000000B, 0x00000011, 0x00000011,
0x0000000B, 0x00000008, 0x00000005, 0x00000005, 0x00000004, 0x0000000B, 0x0000000D, 0x0000000B, 0x0000000B,
0x00000009, 0x00000008, 0x00000009, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x00000005,
0x00000004, 0x00000007, 0x00000006, 0x00000006, 0x00000005, 0x00000004, 0x00000002, 0x00000002, 0x00000002,
0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000003, 0x00000003, 0x00000002,
0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000001, 0x00000001, 0x00000002, 0x00000003,
0x00000003, 0x00000002, 0x00000003, 0x00000003, 0x00000003, 0x00000004, 0x00000004, 0x00000004, 0x00000004,
0x0000000B, 0x00000010, 0x0000000E, 0x00000008, 0x00000005, 0x00000004, 0x0000000A, 0x0000000B, 0x0000000B,
0x0000000C, 0x0000000B, 0x00000009, 0x00000008, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000A,
0x00000002, 0x00000003, 0x00000005, 0x00000006, 0x00000006, 0x00000004, 0x00000003, 0x00000002, 0x00000002,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000003, 0x00000002, 0x00000003,
0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000003, 0x00000003, 0x00000002, 0x00000003, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000005,
0x00000004, 0x00000002, 0x0000000E, 0x00000011, 0x0000000E, 0x00000005, 0x00000004, 0x00000009, 0x0000000A,
0x0000000A, 0x0000000B, 0x0000000B, 0x00000009, 0x00000009, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000C,
0x0000000A, 0x00000004, 0x00000003, 0x00000003, 0x00000005, 0x00000005, 0x00000003, 0x00000002, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000003,
0x00000005, 0x00000003, 0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000002, 0x00000003,
0x00000005, 0x00000005, 0x00000005, 0x0000000B, 0x00000013, 0x00000011, 0x00000006, 0x00000005, 0x0000000B,
0x0000000C, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000A, 0x0000000A, 0x0000000C, 0x0000000C, 0x0000000C,
0x0000000C, 0x00000009, 0x00000005, 0x00000004, 0x00000002, 0x00000004, 0x00000004, 0x00000002, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000004,
0x00000003, 0x00000002, 0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000003,
0x00000002, 0x00000002, 0x00000003, 0x00000001, 0x00000001, 0x00000002, 0x00000003, 0x00000003, 0x00000002,
0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000008, 0x00000011, 0x00000013, 0x00000007, 0x00000005,
0x0000000C, 0x0000000C, 0x0000000C, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B,
0x0000000B, 0x0000000B, 0x00000009, 0x00000003, 0x00000003, 0x00000004, 0x00000003, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000002, 0x00000002,
0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x00000003,
0x00000002, 0x00000002, 0x00000002, 0x00000001, 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004,
0x00000003, 0x00000003, 0x00000003, 0x00000004, 0x00000005, 0x00000005, 0x00000007, 0x0000000C, 0x00000006,
0x00000005, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000C,
0x0000000C, 0x0000000D, 0x0000000C, 0x00000009, 0x00000002, 0x00000002, 0x00000003, 0x00000003, 0x00000002,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000003, 0x00000002, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x00000003,
0x00000002, 0x00000002, 0x00000001, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000002,
0x00000002, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000004, 0x00000004, 0x00000004, 0x00000004,
0x00000003, 0x00000003, 0x00000005, 0x0000000A, 0x0000000B, 0x0000000B, 0x0000000B, 0x0000000C, 0x0000000C,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000C, 0x00000003, 0x00000002, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001,
0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000001, 0x00000002, 0x00000002,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
0x00000002, 0x00000004, 0x00000005, 0x00000008, 0x0000000A, 0x0000000B, 0x0000000C, 0x00000008, 0x00000005,
0x00000003, 0x00000002, 0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000003, 0x00000004, 0x00000004,
0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000004, 0x0000000B, 0x0000000C, 0x0000000C, 0x0000000C,
0x0000000D, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x00000003, 0x00000002,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000002,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000001,
0x00000003, 0x0000000A, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x00000011, 0x00000010,
0x0000000E, 0x0000000C, 0x0000000B, 0x00000008, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000003,
0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x0000000A, 0x0000000C, 0x0000000C,
0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000D, 0x00000004,
0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000002, 0x00000009, 0x0000000C, 0x00000011, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x00000011,
0x00000011, 0x00000010, 0x00000010, 0x0000000F, 0x00000010, 0x0000000F, 0x00000004, 0x00000002, 0x00000002,
0x00000002, 0x00000003, 0x00000003, 0x00000003, 0x00000002, 0x00000002, 0x00000003, 0x0000000A, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000D,
0x00000004, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000002, 0x00000008, 0x0000000C, 0x00000012, 0x00000013, 0x00000011, 0x0000000F,
0x00000011, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000011, 0x0000000F, 0x00000004, 0x00000002,
0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x0000000A,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000E,
0x0000000B, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000002, 0x00000009, 0x0000000C, 0x0000000E, 0x00000010,
0x0000000E, 0x00000011, 0x00000010, 0x00000010, 0x00000011, 0x0000000F, 0x0000000D, 0x0000000A, 0x00000001,
0x00000002, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000003, 0x00000002, 0x00000001, 0x00000003,
0x0000000B, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000F, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000E, 0x00000007, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x00000009, 0x0000000B,
0x0000000C, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000A, 0x00000003,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000002,
0x00000004, 0x0000000D, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000F, 0x00000010, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000C, 0x00000004, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000002,
0x00000006, 0x00000009, 0x0000000B, 0x0000000A, 0x0000000B, 0x0000000B, 0x0000000A, 0x00000009, 0x00000004,
0x00000001, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001,
0x00000002, 0x00000004, 0x0000000C, 0x0000000E, 0x0000000F, 0x0000000F, 0x00000010, 0x00000011, 0x00000010,
0x0000000F, 0x00000010, 0x00000010, 0x00000003, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000000, 0x00000002, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000001,
0x00000002, 0x00000001, 0x00000002, 0x00000004, 0x00000006, 0x00000006, 0x00000005, 0x00000003, 0x00000001,
0x00000000, 0x00000001, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002,
0x00000002, 0x00000001, 0x00000004, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000F, 0x00000010, 0x00000010,
0x00000012, 0x00000013, 0x00000013, 0x00000012, 0x00000006, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000002,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000001,
0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000001,
0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000005, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x0000000C, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000002,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000006, 0x0000000C, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000010, 0x00000002, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000008, 0x00000011, 0x0000000F, 0x00000010,
0x00000012, 0x00000012, 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000010, 0x00000003,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x0000000C, 0x00000012, 0x00000014,
0x00000012, 0x00000011, 0x00000014, 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000013, 0x00000011,
0x00000006, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x0000000C, 0x00000014,
0x00000014, 0x00000014, 0x00000014, 0x00000012, 0x00000013, 0x00000013, 0x00000014, 0x00000013, 0x00000013,
0x00000012, 0x0000000A, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000,
0x00000001, 0x00000000, 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000005, 0x00000010,
0x00000011, 0x00000014, 0x00000014, 0x00000015, 0x00000015, 0x00000012, 0x00000012, 0x00000012, 0x00000013,
0x00000013, 0x00000012, 0x0000000C, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000009,
0x00000012, 0x00000013, 0x00000012, 0x00000015, 0x00000014, 0x00000015, 0x0000000D, 0x0000000E, 0x0000000F,
0x0000000F, 0x00000011, 0x00000012, 0x0000000F, 0x00000004, 0x00000001, 0x00000001, 0x00000000, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002,
0x0000000E, 0x00000014, 0x00000013, 0x00000014, 0x00000013, 0x00000015, 0x00000014, 0x00000009, 0x0000000C,
0x0000000C, 0x00000009, 0x0000000B, 0x00000010, 0x0000000E, 0x00000006, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000003, 0x00000010, 0x00000015, 0x00000015, 0x00000013, 0x00000014, 0x00000012, 0x00000015, 0x0000000A,
0x0000000A, 0x0000000A, 0x0000000A, 0x0000000C, 0x0000000D, 0x0000000D, 0x00000007, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000,
0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x0000000A, 0x00000011, 0x00000014, 0x00000015, 0x00000014, 0x00000013, 0x00000014, 0x00000013,
0x0000000B, 0x0000000C, 0x0000000E, 0x0000000E, 0x00000010, 0x00000011, 0x0000000D, 0x00000008, 0x00000002,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000002, 0x0000000F, 0x00000014, 0x00000013, 0x00000014, 0x00000015, 0x00000014, 0x00000014,
0x00000014, 0x00000011, 0x00000012, 0x00000011, 0x00000013, 0x00000014, 0x00000013, 0x00000012, 0x0000000C,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000006, 0x00000013, 0x00000014, 0x00000013, 0x00000014, 0x00000014, 0x00000015,
0x00000014, 0x00000015, 0x00000013, 0x00000012, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000013,
0x0000000D, 0x00000003, 0x00000001, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000002, 0x0000000F, 0x00000014, 0x00000015, 0x00000014, 0x00000013, 0x00000015,
0x00000015, 0x00000016, 0x00000014, 0x00000013, 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000013,
0x00000012, 0x0000000E, 0x00000003, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000001, 0x00000005, 0x00000014, 0x00000015, 0x00000015, 0x00000015, 0x00000013,
0x00000015, 0x00000016, 0x00000016, 0x00000015, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000013,
0x00000013, 0x00000012, 0x0000000D, 0x00000003, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000009, 0x00000015, 0x00000015, 0x00000015, 0x00000015,
0x00000015, 0x00000013, 0x00000016, 0x00000016, 0x00000016, 0x00000014, 0x00000014, 0x00000014, 0x00000014,
0x00000013, 0x00000013, 0x00000011, 0x00000009, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x0000000E, 0x00000016, 0x00000016, 0x00000016,
0x00000016, 0x00000015, 0x00000014, 0x00000016, 0x00000016, 0x00000016, 0x00000013, 0x00000014, 0x00000014,
0x00000014, 0x00000014, 0x00000012, 0x0000000D, 0x00000004, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000005, 0x00000012, 0x00000016, 0x00000016,
0x00000016, 0x00000015, 0x00000015, 0x00000015, 0x00000014, 0x00000016, 0x00000016, 0x0000000F, 0x00000010,
0x00000011, 0x00000011, 0x00000011, 0x0000000E, 0x00000007, 0x00000002, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x0000000C, 0x00000016, 0x00000018,
0x00000017, 0x00000016, 0x00000017, 0x00000017, 0x00000015, 0x00000014, 0x00000016, 0x00000016, 0x0000000D,
0x0000000C, 0x0000000C, 0x0000000B, 0x0000000B, 0x00000008, 0x00000003, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000015, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000015, 0x00000014, 0x00000014, 0x00000015,
0x0000000D, 0x0000000C, 0x0000000C, 0x0000000A, 0x00000007, 0x00000003, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000005, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000015, 0x00000014, 0x00000011,
0x00000012, 0x0000000C, 0x0000000C, 0x0000000B, 0x00000008, 0x00000005, 0x00000001, 0x00000001, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000B,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000018, 0x00000013, 0x00000014,
0x0000000D, 0x0000000C, 0x0000000C, 0x0000000B, 0x00000009, 0x00000005, 0x00000002, 0x00000001, 0x00000001,
0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002,
0x00000013, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000017, 0x00000019,
0x00000019, 0x00000018, 0x0000000F, 0x0000000B, 0x00000009, 0x00000006, 0x00000002, 0x00000001, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000007, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x0000000A, 0x00000006, 0x00000003, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x0000000C, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000007, 0x00000003, 0x00000002, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000001, 0x00000016, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000005, 0x00000002, 0x00000001,
0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x0000000A, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000003, 0x00000001,
0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000015, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000002,
0x00000002, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0000000D, 0x00000019, 0x00000019, 0x00000018, 0x00000019,
0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019, 0x00000019,
0x00000019]
a=[]
for i in range(0,len(a3),64): #每行64个数据
a.append(a3[i:i+64]) #划分行列
a2 = [0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000012,
0x00000013, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000010, 0x0000000F, 0x00000012, 0x00000014,
0x00000014, 0x00000012, 0x00000010, 0x00000013, 0x00000013, 0x00000012, 0x00000014, 0x00000014, 0x00000013,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000012, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000012, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000F,
0x0000000F, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000B, 0x0000000B, 0x0000000D, 0x0000000D,
0x0000000F, 0x00000011, 0x00000012, 0x0000000C, 0x0000000C, 0x0000000E, 0x0000000C, 0x00000010, 0x00000011,
0x0000000E, 0x0000000E, 0x00000012, 0x00000011, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000012, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000010, 0x00000010,
0x0000000E, 0x0000000E, 0x0000000D, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000A, 0x0000000B, 0x00000011,
0x00000009, 0x0000000B, 0x0000000D, 0x0000000F, 0x0000000A, 0x00000009, 0x00000009, 0x0000000A, 0x0000000D,
0x0000000F, 0x0000000D, 0x00000011, 0x00000011, 0x00000013, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000012, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000010, 0x0000000E,
0x0000000E, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000F, 0x00000014, 0x00000010, 0x0000000E, 0x0000000E,
0x00000012, 0x00000010, 0x00000009, 0x0000000E, 0x0000000E, 0x0000000B, 0x0000000B, 0x00000007, 0x00000007,
0x0000000A, 0x0000000C, 0x0000000F, 0x00000012, 0x00000014, 0x00000013, 0x00000012, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000012, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000011, 0x0000000F,
0x0000000D, 0x0000000D, 0x0000000D, 0x00000010, 0x0000000E, 0x00000011, 0x00000012, 0x00000010, 0x0000000E,
0x00000011, 0x0000000E, 0x00000011, 0x0000000C, 0x0000000A, 0x0000000E, 0x0000000E, 0x0000000A, 0x0000000B,
0x00000007, 0x00000008, 0x0000000C, 0x00000011, 0x00000015, 0x00000014, 0x00000015, 0x00000015, 0x00000011,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000012, 0x00000011,
0x0000000D, 0x0000000C, 0x00000009, 0x00000009, 0x00000008, 0x00000007, 0x0000000D, 0x00000011, 0x00000012,
0x0000000F, 0x0000000E, 0x0000000F, 0x00000011, 0x0000000F, 0x0000000A, 0x0000000D, 0x0000000C, 0x00000009,
0x0000000A, 0x00000009, 0x0000000C, 0x0000000E, 0x00000011, 0x00000014, 0x00000014, 0x00000015, 0x00000014,
0x00000011, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000010, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000013, 0x00000013,
0x00000011, 0x0000000C, 0x0000000B, 0x0000000A, 0x0000000B, 0x00000007, 0x00000007, 0x00000007, 0x00000009,
0x0000000E, 0x0000000F, 0x0000000B, 0x00000009, 0x0000000E, 0x00000011, 0x0000000D, 0x0000000A, 0x0000000D,
0x0000000C, 0x0000000C, 0x0000000F, 0x00000011, 0x0000000F, 0x00000010, 0x00000011, 0x00000012, 0x00000012,
0x00000012, 0x00000012, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000010, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000013,
0x00000010, 0x00000010, 0x0000000B, 0x00000007, 0x0000000F, 0x0000000D, 0x0000000B, 0x00000009, 0x00000007,
0x00000007, 0x00000008, 0x00000008, 0x00000008, 0x00000009, 0x0000000A, 0x0000000D, 0x00000011, 0x0000000F,
0x0000000F, 0x0000000D, 0x00000010, 0x00000013, 0x00000011, 0x0000000E, 0x0000000F, 0x0000000F, 0x00000010,
0x0000000E, 0x00000010, 0x00000011, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000010,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000011,
0x00000013, 0x00000010, 0x0000000E, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x0000000B, 0x0000000B,
0x0000000A, 0x00000006, 0x00000004, 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000007, 0x0000000E,
0x00000011, 0x00000010, 0x0000000F, 0x00000010, 0x00000013, 0x00000011, 0x00000009, 0x00000005, 0x00000009,
0x0000000D, 0x0000000D, 0x00000012, 0x00000014, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010,
0x00000010, 0x0000000E, 0x0000000B, 0x0000000B, 0x00000009, 0x00000007, 0x00000008, 0x00000008, 0x00000007,
0x00000009, 0x0000000B, 0x00000006, 0x00000002, 0x00000005, 0x00000008, 0x00000009, 0x00000006, 0x00000001,
0x00000008, 0x0000000E, 0x00000011, 0x0000000F, 0x0000000E, 0x00000012, 0x00000008, 0x00000008, 0x0000000A,
0x00000005, 0x0000000B, 0x0000000E, 0x00000011, 0x00000014, 0x00000011, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000E, 0x00000010, 0x0000000C, 0x0000000D, 0x00000008, 0x0000000A, 0x00000009, 0x00000008,
0x00000009, 0x0000000B, 0x00000009, 0x00000006, 0x00000006, 0x00000000, 0x00000003, 0x00000008, 0x00000005,
0x00000006, 0x00000004, 0x0000000C, 0x00000011, 0x00000012, 0x00000011, 0x0000000F, 0x00000007, 0x00000008,
0x00000007, 0x0000000F, 0x0000000E, 0x00000010, 0x00000012, 0x00000012, 0x00000012, 0x00000011, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000010, 0x00000010, 0x00000011,
0x00000011, 0x00000011, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x00000010, 0x00000010, 0x0000000C, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000A, 0x00000009, 0x0000000A,
0x0000000A, 0x0000000B, 0x0000000B, 0x0000000A, 0x00000004, 0x00000006, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000009, 0x00000004, 0x0000000A, 0x00000010, 0x00000013, 0x00000012, 0x0000000C, 0x00000004,
0x00000000, 0x00000000, 0x00000009, 0x0000000F, 0x00000011, 0x00000011, 0x00000012, 0x00000012, 0x00000011,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000012, 0x00000015,
0x00000015, 0x00000017, 0x00000013, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000010,
0x00000011, 0x00000011, 0x00000011, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000010, 0x0000000E, 0x0000000F, 0x00000010, 0x0000000B, 0x00000009, 0x0000000A, 0x0000000A,
0x0000000A, 0x0000000A, 0x0000000A, 0x0000000C, 0x0000000C, 0x00000006, 0x00000007, 0x00000000, 0x00000000,
0x00000000, 0x00000002, 0x0000000A, 0x00000004, 0x0000000C, 0x00000010, 0x00000010, 0x00000012, 0x00000011,
0x00000007, 0x00000000, 0x00000000, 0x0000000A, 0x00000010, 0x00000012, 0x00000012, 0x00000015, 0x00000014,
0x00000012, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000015, 0x00000014,
0x00000011, 0x00000010, 0x00000012, 0x00000013, 0x00000015, 0x00000011, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000011, 0x00000010, 0x00000011, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000E, 0x00000010, 0x00000011, 0x0000000F, 0x0000000D, 0x0000000B, 0x0000000B,
0x0000000B, 0x00000008, 0x00000009, 0x0000000C, 0x0000000E, 0x0000000E, 0x0000000C, 0x00000006, 0x00000007,
0x00000002, 0x00000004, 0x0000000B, 0x00000006, 0x00000005, 0x0000000D, 0x0000000F, 0x00000011, 0x00000012,
0x00000012, 0x0000000E, 0x00000006, 0x00000007, 0x0000000D, 0x00000012, 0x00000011, 0x0000000E, 0x00000010,
0x00000014, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x00000010, 0x00000010, 0x00000012, 0x00000014,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000015, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000D, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000B, 0x0000000A,
0x0000000A, 0x0000000A, 0x0000000B, 0x00000009, 0x0000000B, 0x0000000D, 0x0000000D, 0x0000000F, 0x0000000C,
0x00000006, 0x0000000A, 0x0000000A, 0x00000005, 0x00000009, 0x0000000A, 0x0000000D, 0x0000000E, 0x0000000C,
0x00000013, 0x00000011, 0x0000000E, 0x0000000C, 0x0000000B, 0x0000000E, 0x00000015, 0x00000012, 0x00000011,
0x00000012, 0x00000013, 0x00000012, 0x00000010, 0x0000000F, 0x0000000F, 0x00000010, 0x00000010, 0x00000014,
0x00000011, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000015, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000D, 0x0000000C, 0x0000000B, 0x0000000A, 0x00000009,
0x0000000A, 0x00000009, 0x0000000A, 0x00000008, 0x00000007, 0x00000008, 0x0000000B, 0x0000000D, 0x0000000F,
0x00000010, 0x0000000E, 0x0000000B, 0x0000000B, 0x0000000C, 0x0000000A, 0x0000000A, 0x0000000C, 0x0000000C,
0x0000000A, 0x00000012, 0x00000010, 0x00000013, 0x00000010, 0x00000010, 0x00000011, 0x00000014, 0x00000011,
0x00000010, 0x0000000E, 0x00000012, 0x00000012, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010,
0x00000016, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000015, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000E, 0x0000000A, 0x00000008, 0x00000008,
0x00000008, 0x00000008, 0x00000007, 0x0000000A, 0x00000008, 0x00000005, 0x00000006, 0x00000007, 0x0000000C,
0x00000010, 0x0000000F, 0x0000000F, 0x0000000D, 0x0000000B, 0x0000000A, 0x00000005, 0x00000006, 0x0000000A,
0x0000000B, 0x00000007, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000B, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000010, 0x00000010, 0x0000000F, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x00000010, 0x00000015, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000015,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000E, 0x00000009, 0x00000007,
0x00000007, 0x0000000A, 0x00000009, 0x00000006, 0x0000000A, 0x0000000C, 0x00000006, 0x00000003, 0x00000007,
0x0000000A, 0x0000000D, 0x00000010, 0x0000000A, 0x00000006, 0x00000006, 0x00000008, 0x00000006, 0x00000003,
0x00000002, 0x00000005, 0x00000003, 0x00000009, 0x0000000F, 0x0000000B, 0x00000007, 0x00000008, 0x0000000D,
0x00000012, 0x0000000E, 0x0000000F, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000010, 0x00000015, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011,
0x00000015, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000D, 0x00000009,
0x0000000A, 0x0000000B, 0x0000000A, 0x00000008, 0x00000004, 0x00000008, 0x0000000C, 0x00000009, 0x00000007,
0x00000006, 0x00000006, 0x0000000C, 0x0000000D, 0x00000007, 0x00000007, 0x00000007, 0x00000009, 0x00000009,
0x00000006, 0x00000004, 0x00000001, 0x00000001, 0x00000004, 0x0000000D, 0x0000000C, 0x00000009, 0x00000005,
0x00000005, 0x0000000A, 0x0000000D, 0x0000000D, 0x00000010, 0x00000012, 0x00000010, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x00000011, 0x00000016, 0x00000014, 0x00000013, 0x00000013, 0x00000014,
0x00000016, 0x00000011, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000011, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000C,
0x0000000A, 0x0000000F, 0x0000000D, 0x0000000A, 0x0000000A, 0x00000006, 0x00000003, 0x00000007, 0x0000000C,
0x00000009, 0x00000005, 0x00000005, 0x0000000B, 0x0000000B, 0x00000009, 0x0000000B, 0x0000000D, 0x0000000D,
0x0000000A, 0x00000007, 0x00000005, 0x00000001, 0x00000001, 0x00000002, 0x0000000E, 0x00000012, 0x00000011,
0x00000009, 0x00000006, 0x00000008, 0x0000000A, 0x0000000E, 0x0000000F, 0x00000012, 0x00000010, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000011, 0x00000012, 0x00000012,
0x00000012, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000C, 0x0000000D, 0x0000000D, 0x0000000F, 0x0000000A, 0x0000000B, 0x00000009, 0x00000004, 0x00000007,
0x0000000B, 0x0000000A, 0x00000009, 0x00000005, 0x0000000A, 0x0000000B, 0x0000000E, 0x0000000D, 0x0000000E,
0x0000000D, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000005, 0x00000003, 0x00000009, 0x0000000F,
0x00000013, 0x00000014, 0x0000000D, 0x00000009, 0x00000009, 0x0000000A, 0x0000000D, 0x00000013, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000011, 0x00000011, 0x0000000B, 0x0000000E, 0x0000000A, 0x0000000A, 0x00000007, 0x00000006,
0x00000003, 0x00000006, 0x0000000A, 0x0000000C, 0x00000006, 0x00000007, 0x0000000E, 0x0000000D, 0x0000000E,
0x0000000C, 0x00000010, 0x0000000E, 0x0000000C, 0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000006,
0x00000009, 0x00000011, 0x00000014, 0x00000014, 0x0000000B, 0x00000006, 0x00000009, 0x0000000C, 0x00000015,
0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x00000013, 0x00000011, 0x00000009, 0x0000000B, 0x00000008, 0x00000006, 0x00000008,
0x00000009, 0x00000005, 0x00000005, 0x00000006, 0x00000008, 0x00000009, 0x0000000B, 0x0000000A, 0x0000000D,
0x0000000B, 0x0000000C, 0x0000000D, 0x00000011, 0x0000000F, 0x00000009, 0x00000006, 0x00000003, 0x00000004,
0x00000006, 0x00000010, 0x00000012, 0x00000013, 0x00000014, 0x0000000F, 0x00000007, 0x00000008, 0x0000000D,
0x00000013, 0x00000011, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x00000012, 0x0000000D, 0x0000000B, 0x00000009, 0x00000007, 0x00000006,
0x00000009, 0x0000000A, 0x0000000A, 0x0000000B, 0x0000000E, 0x00000009, 0x00000009, 0x0000000E, 0x0000000A,
0x0000000C, 0x00000008, 0x00000008, 0x0000000D, 0x0000000C, 0x0000000F, 0x0000000B, 0x00000006, 0x00000009,
0x00000007, 0x00000008, 0x00000011, 0x00000015, 0x00000015, 0x00000015, 0x00000010, 0x0000000C, 0x0000000F,
0x0000000F, 0x00000012, 0x00000013, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000E, 0x00000009, 0x00000006,
0x00000007, 0x0000000A, 0x0000000E, 0x0000000C, 0x00000009, 0x0000000B, 0x0000000B, 0x0000000D, 0x0000000C,
0x00000008, 0x00000006, 0x00000007, 0x00000008, 0x0000000C, 0x0000000A, 0x00000009, 0x0000000B, 0x0000000E,
0x0000000C, 0x00000008, 0x00000006, 0x0000000A, 0x0000000B, 0x0000000B, 0x00000011, 0x00000013, 0x0000000E,
0x0000000E, 0x00000010, 0x00000012, 0x00000012, 0x00000012, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000E, 0x00000011, 0x0000000E, 0x0000000F, 0x0000000B,
0x00000007, 0x00000006, 0x0000000B, 0x0000000A, 0x00000007, 0x00000004, 0x00000007, 0x0000000A, 0x0000000E,
0x0000000E, 0x0000000C, 0x00000008, 0x00000006, 0x00000003, 0x00000004, 0x00000003, 0x00000002, 0x00000006,
0x00000008, 0x00000005, 0x00000005, 0x00000002, 0x00000006, 0x00000006, 0x00000007, 0x0000000D, 0x00000011,
0x0000000E, 0x0000000A, 0x0000000D, 0x0000000F, 0x0000000F, 0x00000011, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000B, 0x0000000E,
0x0000000D, 0x0000000A, 0x00000008, 0x00000005, 0x00000007, 0x00000005, 0x00000003, 0x00000004, 0x00000008,
0x0000000E, 0x00000010, 0x00000009, 0x00000005, 0x00000007, 0x00000008, 0x00000008, 0x00000005, 0x00000002,
0x00000006, 0x00000008, 0x00000006, 0x00000005, 0x00000007, 0x0000000A, 0x00000005, 0x00000005, 0x0000000C,
0x0000000C, 0x00000008, 0x00000008, 0x00000008, 0x0000000D, 0x00000010, 0x00000011, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x0000000F, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000A, 0x00000008,
0x0000000C, 0x0000000B, 0x00000010, 0x00000007, 0x00000005, 0x00000003, 0x00000004, 0x00000002, 0x00000002,
0x00000005, 0x00000009, 0x0000000D, 0x0000000A, 0x00000003, 0x00000004, 0x0000000A, 0x0000000D, 0x0000000A,
0x00000005, 0x00000006, 0x00000009, 0x00000006, 0x00000005, 0x0000000C, 0x00000008, 0x00000005, 0x00000006,
0x0000000C, 0x00000009, 0x00000006, 0x00000006, 0x00000005, 0x0000000A, 0x0000000F, 0x00000010, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010,
0x00000010, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000C, 0x00000008,
0x00000006, 0x00000008, 0x0000000D, 0x0000000F, 0x00000004, 0x00000004, 0x00000003, 0x00000002, 0x00000000,
0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000008, 0x00000002, 0x00000003, 0x00000007, 0x0000000D,
0x0000000B, 0x0000000A, 0x00000007, 0x00000009, 0x00000005, 0x00000009, 0x0000000B, 0x00000006, 0x00000004,
0x0000000A, 0x0000000A, 0x00000008, 0x00000004, 0x00000007, 0x00000004, 0x00000009, 0x0000000D, 0x00000010,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x00000010,
0x00000010, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000C, 0x00000009,
0x00000006, 0x00000005, 0x00000007, 0x0000000D, 0x0000000C, 0x00000002, 0x00000002, 0x00000004, 0x00000001,
0x00000000, 0x00000000, 0x00000001, 0x00000004, 0x00000008, 0x00000007, 0x00000002, 0x00000003, 0x00000005,
0x00000007, 0x0000000C, 0x0000000F, 0x0000000A, 0x00000009, 0x00000006, 0x0000000A, 0x00000008, 0x00000003,
0x00000003, 0x0000000C, 0x00000008, 0x00000004, 0x00000005, 0x00000008, 0x00000004, 0x00000007, 0x0000000D,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x00000010, 0x00000010, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000A,
0x00000006, 0x00000005, 0x00000006, 0x00000007, 0x0000000F, 0x00000008, 0x00000001, 0x00000002, 0x00000004,
0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000004, 0x00000005, 0x00000005, 0x00000005, 0x00000008,
0x00000005, 0x00000005, 0x0000000C, 0x00000010, 0x0000000B, 0x0000000C, 0x0000000B, 0x0000000A, 0x00000007,
0x00000005, 0x00000005, 0x0000000B, 0x00000005, 0x00000005, 0x00000005, 0x00000009, 0x00000008, 0x0000000B,
0x0000000B, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000F, 0x00000010, 0x00000015, 0x00000010, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000014, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000B,
0x00000008, 0x00000005, 0x00000006, 0x00000006, 0x00000009, 0x0000000F, 0x00000004, 0x00000002, 0x00000005,
0x00000004, 0x00000001, 0x00000005, 0x00000003, 0x00000001, 0x00000005, 0x00000004, 0x00000004, 0x00000007,
0x00000008, 0x00000006, 0x00000007, 0x0000000B, 0x00000010, 0x0000000D, 0x0000000F, 0x0000000C, 0x00000009,
0x00000007, 0x00000008, 0x0000000B, 0x00000008, 0x00000007, 0x00000007, 0x00000005, 0x00000009, 0x0000000C,
0x0000000C, 0x0000000A, 0x00000012, 0x0000000F, 0x0000000E, 0x0000000F, 0x00000015, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000015, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D,
0x00000008, 0x00000007, 0x00000005, 0x00000005, 0x00000008, 0x0000000E, 0x0000000B, 0x00000005, 0x0000000B,
0x00000009, 0x00000002, 0x00000004, 0x00000007, 0x00000003, 0x00000002, 0x00000004, 0x00000002, 0x00000003,
0x00000006, 0x00000008, 0x00000007, 0x00000008, 0x0000000B, 0x0000000C, 0x00000010, 0x00000010, 0x0000000D,
0x0000000B, 0x00000008, 0x00000009, 0x0000000C, 0x0000000A, 0x00000007, 0x0000000C, 0x00000004, 0x00000009,
0x00000010, 0x0000000A, 0x00000008, 0x00000012, 0x0000000F, 0x0000000E, 0x00000012, 0x00000012, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000015,
0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E,
0x00000009, 0x00000007, 0x00000005, 0x00000004, 0x00000007, 0x0000000F, 0x0000000F, 0x00000008, 0x0000000C,
0x0000000D, 0x00000003, 0x00000002, 0x00000005, 0x00000007, 0x00000002, 0x00000004, 0x00000006, 0x00000002,
0x00000002, 0x00000005, 0x00000009, 0x0000000B, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x00000011,
0x00000010, 0x0000000C, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000A, 0x00000009, 0x0000000F, 0x00000003,
0x00000007, 0x00000010, 0x0000000D, 0x00000008, 0x00000011, 0x00000010, 0x0000000F, 0x00000016, 0x0000000E,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x00000015, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000E, 0x0000000E,
0x0000000B, 0x00000009, 0x00000004, 0x00000003, 0x00000009, 0x0000000E, 0x0000000B, 0x00000008, 0x00000006,
0x0000000E, 0x00000008, 0x00000002, 0x00000002, 0x00000006, 0x00000004, 0x00000002, 0x00000006, 0x00000007,
0x00000003, 0x00000004, 0x00000004, 0x00000009, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000C,
0x00000010, 0x00000011, 0x0000000B, 0x0000000D, 0x0000000E, 0x0000000C, 0x0000000B, 0x00000009, 0x0000000F,
0x00000003, 0x00000004, 0x0000000C, 0x00000011, 0x00000009, 0x0000000F, 0x00000011, 0x00000011, 0x00000013,
0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000013, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000015, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000E,
0x0000000E, 0x0000000A, 0x0000000B, 0x00000004, 0x00000002, 0x0000000C, 0x00000007, 0x0000000E, 0x00000004,
0x00000006, 0x0000000E, 0x0000000C, 0x00000004, 0x00000001, 0x00000004, 0x00000003, 0x00000004, 0x00000005,
0x00000007, 0x00000005, 0x00000006, 0x00000003, 0x00000006, 0x0000000C, 0x0000000C, 0x0000000B, 0x0000000A,
0x0000000C, 0x0000000C, 0x00000011, 0x0000000B, 0x0000000E, 0x00000010, 0x00000008, 0x00000009, 0x0000000A,
0x00000011, 0x00000007, 0x00000005, 0x00000007, 0x00000011, 0x0000000A, 0x00000010, 0x00000012, 0x00000012,
0x00000012, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x00000018, 0x00000011, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x00000015, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x00000010,
0x0000000E, 0x0000000D, 0x0000000C, 0x00000007, 0x00000005, 0x00000005, 0x00000007, 0x0000000A, 0x0000000E,
0x00000005, 0x00000005, 0x0000000A, 0x0000000E, 0x00000003, 0x00000001, 0x00000004, 0x00000006, 0x00000004,
0x00000002, 0x00000008, 0x00000008, 0x00000007, 0x00000002, 0x00000005, 0x00000008, 0x0000000A, 0x0000000A,
0x00000009, 0x0000000C, 0x0000000A, 0x00000010, 0x0000000B, 0x0000000D, 0x0000000D, 0x00000006, 0x00000007,
0x0000000A, 0x00000011, 0x0000000E, 0x00000007, 0x00000005, 0x0000000D, 0x00000009, 0x00000010, 0x00000012,
0x0000000F, 0x00000016, 0x00000012, 0x00000010, 0x00000011, 0x00000013, 0x00000015, 0x00000014, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x00000016, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x00000010, 0x0000000E, 0x0000000D, 0x0000000F, 0x00000005, 0x00000001, 0x00000007, 0x00000005, 0x0000000A,
0x00000007, 0x00000006, 0x00000006, 0x0000000D, 0x0000000A, 0x00000001, 0x00000001, 0x00000006, 0x00000008,
0x00000003, 0x00000002, 0x00000008, 0x00000009, 0x00000008, 0x00000003, 0x00000003, 0x00000007, 0x00000009,
0x00000008, 0x00000008, 0x0000000A, 0x00000009, 0x0000000C, 0x0000000C, 0x0000000A, 0x0000000A, 0x00000005,
0x00000005, 0x00000008, 0x0000000F, 0x00000012, 0x00000005, 0x00000008, 0x0000000B, 0x0000000B, 0x00000011,
0x00000010, 0x0000000E, 0x0000000F, 0x00000012, 0x00000013, 0x00000013, 0x00000012, 0x0000000F, 0x00000014,
0x00000015, 0x00000013, 0x00000014, 0x00000016, 0x00000012, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000010, 0x0000000E, 0x0000000D, 0x0000000C, 0x00000004, 0x00000009, 0x00000002, 0x00000005,
0x00000009, 0x00000009, 0x00000006, 0x00000008, 0x0000000A, 0x00000008, 0x00000002, 0x00000005, 0x00000007,
0x00000006, 0x00000001, 0x00000002, 0x00000006, 0x00000007, 0x00000009, 0x00000005, 0x00000001, 0x00000005,
0x00000009, 0x00000005, 0x00000004, 0x00000008, 0x00000009, 0x0000000F, 0x0000000A, 0x00000007, 0x00000005,
0x00000003, 0x00000004, 0x00000006, 0x0000000D, 0x00000010, 0x00000009, 0x0000000B, 0x0000000F, 0x0000000F,
0x00000013, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F,
0x0000000F, 0x00000010, 0x00000011, 0x00000011, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000A, 0x00000005, 0x00000009, 0x00000003,
0x00000005, 0x00000008, 0x0000000D, 0x00000009, 0x0000000B, 0x0000000B, 0x0000000A, 0x00000006, 0x00000005,
0x00000006, 0x00000004, 0x00000002, 0x00000003, 0x00000004, 0x00000004, 0x0000000A, 0x00000008, 0x00000001,
0x00000003, 0x0000000A, 0x00000007, 0x00000003, 0x00000008, 0x0000000A, 0x0000000A, 0x0000000A, 0x00000003,
0x00000003, 0x00000004, 0x00000003, 0x00000007, 0x0000000B, 0x0000000D, 0x0000000A, 0x0000000E, 0x0000000F,
0x00000013, 0x00000012, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x00000010, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000C, 0x0000000C,
0x00000005, 0x00000006, 0x0000000D, 0x0000000E, 0x0000000B, 0x0000000B, 0x0000000A, 0x00000008, 0x00000004,
0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000006, 0x00000003, 0x00000001, 0x00000008, 0x0000000B,
0x00000003, 0x00000002, 0x00000007, 0x00000009, 0x00000006, 0x00000008, 0x0000000C, 0x00000008, 0x00000009,
0x00000002, 0x00000005, 0x00000005, 0x00000003, 0x00000009, 0x00000009, 0x0000000B, 0x0000000C, 0x00000010,
0x0000000F, 0x00000012, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000D, 0x0000000D, 0x00000010, 0x00000011,
0x0000000B, 0x00000007, 0x0000000A, 0x0000000F, 0x0000000D, 0x0000000B, 0x00000008, 0x00000007, 0x00000009,
0x00000006, 0x00000004, 0x00000006, 0x00000003, 0x00000002, 0x00000007, 0x00000007, 0x00000001, 0x00000004,
0x0000000B, 0x00000006, 0x00000001, 0x00000003, 0x00000008, 0x00000008, 0x00000008, 0x0000000A, 0x00000008,
0x00000003, 0x00000002, 0x00000004, 0x00000007, 0x00000006, 0x0000000A, 0x00000005, 0x0000000A, 0x00000010,
0x00000015, 0x00000014, 0x00000011, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000D, 0x0000000D, 0x00000011,
0x00000012, 0x00000010, 0x0000000B, 0x00000012, 0x00000012, 0x00000010, 0x0000000D, 0x00000009, 0x00000007,
0x00000007, 0x00000002, 0x00000005, 0x00000007, 0x00000004, 0x00000002, 0x00000005, 0x0000000A, 0x00000007,
0x00000001, 0x0000000A, 0x00000009, 0x00000002, 0x00000001, 0x00000005, 0x00000008, 0x00000008, 0x0000000A,
0x00000007, 0x00000002, 0x00000002, 0x00000004, 0x00000009, 0x00000006, 0x00000009, 0x00000006, 0x00000009,
0x00000012, 0x00000017, 0x00000015, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000D, 0x0000000D,
0x00000011, 0x00000012, 0x00000010, 0x0000000E, 0x00000016, 0x00000013, 0x00000010, 0x0000000A, 0x00000008,
0x00000008, 0x00000004, 0x00000002, 0x00000005, 0x00000007, 0x00000007, 0x00000004, 0x00000003, 0x00000009,
0x0000000D, 0x0000000A, 0x00000006, 0x0000000B, 0x00000005, 0x00000000, 0x00000003, 0x00000008, 0x0000000A,
0x0000000A, 0x00000004, 0x00000001, 0x00000001, 0x00000006, 0x00000005, 0x00000006, 0x00000009, 0x0000000B,
0x0000000A, 0x00000011, 0x00000016, 0x00000011, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x00000014, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000D,
0x0000000D, 0x00000012, 0x00000013, 0x00000011, 0x0000000E, 0x00000013, 0x0000000C, 0x0000000C, 0x0000000A,
0x0000000A, 0x00000006, 0x00000004, 0x00000004, 0x00000007, 0x00000008, 0x00000008, 0x00000005, 0x00000002,
0x00000008, 0x0000000B, 0x0000000B, 0x00000009, 0x0000000C, 0x00000009, 0x00000003, 0x00000003, 0x00000008,
0x0000000A, 0x00000006, 0x00000003, 0x00000001, 0x00000003, 0x00000005, 0x00000002, 0x00000008, 0x0000000B,
0x0000000A, 0x0000000D, 0x0000000E, 0x00000012, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000E, 0x0000000E, 0x0000000E, 0x00000014, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000D, 0x0000000D, 0x00000010, 0x00000013, 0x00000012, 0x00000010, 0x00000011, 0x00000009, 0x0000000B,
0x0000000B, 0x00000009, 0x00000006, 0x00000007, 0x00000007, 0x00000008, 0x00000008, 0x00000006, 0x00000005,
0x00000001, 0x00000005, 0x0000000A, 0x0000000A, 0x00000008, 0x00000006, 0x00000007, 0x00000005, 0x00000004,
0x00000008, 0x00000007, 0x00000002, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000004, 0x00000007,
0x0000000A, 0x0000000A, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x00000011, 0x00000012, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000D, 0x0000000D, 0x0000000F, 0x00000014, 0x00000013, 0x0000000F, 0x00000012, 0x0000000B,
0x0000000C, 0x0000000A, 0x00000009, 0x00000004, 0x00000007, 0x00000006, 0x00000007, 0x00000007, 0x00000006,
0x00000004, 0x00000002, 0x00000003, 0x00000007, 0x0000000A, 0x0000000A, 0x00000007, 0x00000007, 0x00000004,
0x00000007, 0x00000007, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000005, 0x00000006,
0x00000009, 0x00000009, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, 0x00000013, 0x0000000F, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000F, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000013, 0x00000014, 0x0000000E, 0x00000011,
0x0000000E, 0x0000000D, 0x0000000B, 0x0000000A, 0x00000004, 0x00000007, 0x00000004, 0x00000006, 0x00000006,
0x00000007, 0x00000005, 0x00000003, 0x00000004, 0x00000005, 0x00000008, 0x0000000A, 0x0000000A, 0x00000005,
0x00000001, 0x00000005, 0x00000002, 0x00000001, 0x00000003, 0x00000004, 0x00000002, 0x00000004, 0x00000007,
0x00000009, 0x00000008, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000D, 0x00000015, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000F, 0x0000000F, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000F, 0x0000000D,
0x00000011, 0x00000011, 0x0000000D, 0x0000000D, 0x0000000A, 0x00000003, 0x00000006, 0x00000005, 0x00000007,
0x00000006, 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000005, 0x00000005, 0x00000007, 0x0000000A,
0x00000009, 0x00000005, 0x00000004, 0x00000003, 0x00000004, 0x00000003, 0x00000001, 0x00000003, 0x00000008,
0x0000000D, 0x00000009, 0x00000008, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000F, 0x00000015, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000F, 0x0000000F,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000E, 0x00000012, 0x0000000C, 0x00000008, 0x00000009, 0x00000003, 0x00000006, 0x00000006,
0x00000008, 0x00000008, 0x00000005, 0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000006, 0x00000008,
0x00000007, 0x00000006, 0x00000006, 0x00000005, 0x00000003, 0x00000001, 0x00000002, 0x00000003, 0x00000008,
0x0000000D, 0x0000000B, 0x00000007, 0x00000010, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000011, 0x00000012,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x00000010, 0x0000000B, 0x00000005, 0x00000007, 0x00000005, 0x00000006,
0x00000006, 0x00000007, 0x00000007, 0x00000008, 0x00000003, 0x00000001, 0x00000004, 0x00000004, 0x00000004,
0x00000006, 0x00000009, 0x00000008, 0x00000006, 0x00000006, 0x00000004, 0x00000001, 0x00000003, 0x00000008,
0x0000000A, 0x00000007, 0x00000008, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000013,
0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x00000012, 0x0000000D, 0x0000000D, 0x0000000C,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x00000008, 0x00000007, 0x00000009,
0x00000006, 0x00000003, 0x00000004, 0x00000006, 0x00000008, 0x00000007, 0x00000002, 0x00000002, 0x00000007,
0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000006, 0x00000005, 0x00000003, 0x00000000, 0x00000004,
0x00000006, 0x00000003, 0x00000006, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x00000015, 0x0000000E, 0x0000000E, 0x0000000E, 0x00000010, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E,
0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000F, 0x00000013, 0x00000014, 0x0000000D, 0x0000000C,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000B, 0x0000000A,
0x00000009, 0x0000000A, 0x00000005, 0x00000001, 0x00000002, 0x00000003, 0x00000007, 0x00000005, 0x00000002,
0x00000003, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000005, 0x00000003, 0x00000001, 0x00000002,
0x00000003, 0x00000003, 0x00000005, 0x00000009, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x00000015, 0x0000000E, 0x0000000E, 0x0000000E, 0x00000015, 0x0000000E, 0x0000000E, 0x0000000E,
0x00000010, 0x00000012, 0x00000014, 0x00000012, 0x0000000F, 0x00000012, 0x00000015, 0x00000015, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C,
0x0000000E, 0x0000000E, 0x0000000C, 0x0000000A, 0x00000002, 0x00000003, 0x00000002, 0x00000002, 0x00000003,
0x00000004, 0x00000004, 0x00000004, 0x00000005, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002,
0x00000001, 0x00000001, 0x00000002, 0x00000006, 0x0000000A, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000E, 0x00000015, 0x0000000E, 0x0000000E, 0x00000010, 0x00000014, 0x00000010, 0x00000016,
0x00000017, 0x00000016, 0x00000017, 0x00000017, 0x00000018, 0x00000017, 0x00000014, 0x00000018, 0x00000016,
0x0000000D, 0x0000000C, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000B, 0x00000009, 0x00000008, 0x00000005, 0x00000004,
0x00000002, 0x00000004, 0x00000005, 0x00000007, 0x00000008, 0x00000009, 0x00000008, 0x00000008, 0x00000005,
0x00000003, 0x00000002, 0x00000002, 0x00000006, 0x00000004, 0x0000000B, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x00000014, 0x0000000F, 0x0000000D, 0x00000015, 0x0000000F, 0x0000000E,
0x00000013, 0x00000016, 0x00000017, 0x00000017, 0x00000018, 0x00000018, 0x00000018, 0x00000018, 0x00000018,
0x00000015, 0x0000000D, 0x0000000C, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000F, 0x0000000F, 0x0000000E, 0x00000009, 0x00000007, 0x00000006,
0x00000002, 0x00000003, 0x00000007, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000B, 0x0000000A, 0x0000000A,
0x00000008, 0x00000004, 0x00000003, 0x00000002, 0x00000004, 0x00000005, 0x0000000C, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000F, 0x00000014, 0x00000011, 0x00000013, 0x0000000D,
0x0000000F, 0x00000014, 0x00000015, 0x00000016, 0x00000016, 0x00000016, 0x00000013, 0x00000017, 0x00000018,
0x00000018, 0x00000018, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000A, 0x00000006,
0x00000003, 0x00000002, 0x00000007, 0x00000008, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000C, 0x0000000C,
0x0000000D, 0x0000000D, 0x00000005, 0x00000003, 0x00000002, 0x00000003, 0x00000008, 0x0000000C, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x00000011, 0x00000014, 0x0000000E,
0x0000000D, 0x0000000E, 0x00000012, 0x00000013, 0x00000014, 0x00000014, 0x00000015, 0x00000014, 0x00000014,
0x00000015, 0x00000016, 0x00000014, 0x0000000D, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000A,
0x00000006, 0x00000006, 0x00000006, 0x0000000A, 0x0000000B, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E,
0x0000000F, 0x00000010, 0x00000010, 0x00000008, 0x00000006, 0x00000004, 0x00000005, 0x00000009, 0x0000000B,
0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000E, 0x0000000F,
0x0000000E, 0x0000000F, 0x0000000F, 0x00000011, 0x00000012, 0x00000013, 0x00000013, 0x00000013, 0x00000013,
0x00000013, 0x00000014, 0x00000014, 0x00000013, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000C, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E,
0x0000000C, 0x00000009, 0x00000008, 0x0000000A, 0x0000000A, 0x0000000C, 0x0000000E, 0x0000000E, 0x00000010,
0x00000012, 0x00000013, 0x00000013, 0x00000012, 0x0000000D, 0x0000000A, 0x0000000A, 0x00000007, 0x00000009,
0x0000000F, 0x00000013, 0x00000011, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, 0x00000012, 0x00000011, 0x00000013,
0x00000013, 0x00000013, 0x00000013, 0x0000000F, 0x00000010, 0x0000000E, 0x0000000D, 0x00000013, 0x00000012,
0x00000012, 0x00000012, 0x0000000D, 0x00000010, 0x00000011, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x00000012, 0x00000010, 0x0000000C, 0x0000000B, 0x00000010, 0x00000010, 0x00000011, 0x00000012,
0x00000014, 0x00000014, 0x00000016, 0x00000014, 0x00000012, 0x00000010, 0x0000000D, 0x0000000D, 0x0000000C,
0x00000008, 0x00000009, 0x0000000E, 0x00000013, 0x00000012, 0x00000011, 0x00000013, 0x00000012, 0x0000000E,
0x0000000D, 0x0000000E, 0x0000000F, 0x0000000E, 0x0000000E, 0x00000012, 0x00000011, 0x00000011, 0x00000011,
0x00000011, 0x00000011, 0x00000011, 0x00000010, 0x00000010, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000C,
0x0000000E, 0x0000000F, 0x00000010, 0x00000011, 0x00000011, 0x00000012, 0x0000000C, 0x0000000C, 0x0000000C,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x00000015, 0x00000012, 0x0000000D, 0x0000000B, 0x00000011, 0x00000013, 0x00000014,
0x00000015, 0x00000014, 0x00000012, 0x00000013, 0x00000012, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000D,
0x0000000D, 0x00000009, 0x00000007, 0x0000000C, 0x00000012, 0x00000012, 0x00000010, 0x00000010, 0x00000013,
0x00000014, 0x00000011, 0x00000010, 0x00000010, 0x00000012, 0x00000011, 0x0000000F, 0x0000000E, 0x0000000D,
0x0000000C, 0x0000000D, 0x0000000E, 0x0000000D, 0x0000000C, 0x0000000A, 0x0000000A, 0x00000009, 0x0000000C,
0x00000010, 0x00000010, 0x00000012, 0x00000013, 0x00000012, 0x00000012, 0x00000013, 0x0000000C, 0x0000000C,
0x0000000C, 0x0000000C, 0x0000000D, 0x0000000C, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x00000011, 0x00000015, 0x00000014, 0x00000010, 0x0000000D, 0x0000000E, 0x0000000E,
0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000E, 0x0000000F, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000C, 0x00000007, 0x0000000A, 0x0000000E, 0x00000014, 0x0000000D, 0x0000000E,
0x00000010, 0x00000014, 0x00000014, 0x00000011, 0x00000010, 0x0000000C, 0x0000000E, 0x0000000B, 0x0000000E,
0x0000000F, 0x0000000A, 0x0000000B, 0x0000000D, 0x0000000A, 0x00000008, 0x00000009, 0x00000009, 0x00000008,
0x0000000E, 0x00000013, 0x00000013, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000013, 0x0000000C,
0x0000000C, 0x0000000C, 0x0000000D, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000D, 0x0000000D, 0x0000000F, 0x00000016, 0x00000016, 0x00000014, 0x0000000F, 0x0000000D, 0x0000000D,
0x0000000A, 0x00000009, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000B, 0x00000009, 0x0000000A, 0x0000000D,
0x0000000C, 0x0000000B, 0x0000000A, 0x0000000A, 0x00000009, 0x0000000A, 0x00000009, 0x00000013, 0x00000011,
0x00000008, 0x00000008, 0x0000000F, 0x00000015, 0x00000010, 0x0000000B, 0x0000000A, 0x0000000A, 0x0000000C,
0x0000000A, 0x00000009, 0x00000008, 0x0000000B, 0x00000008, 0x00000008, 0x00000006, 0x00000009, 0x0000000D,
0x00000009, 0x00000009, 0x0000000C, 0x00000010, 0x00000012, 0x00000011, 0x00000010, 0x00000012, 0x00000014,
0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D,
0x0000000E, 0x0000000F, 0x00000014, 0x00000016, 0x00000016, 0x00000016, 0x00000016, 0x00000010, 0x0000000C,
0x00000008, 0x00000008, 0x00000006, 0x00000006, 0x00000008, 0x00000007, 0x00000007, 0x00000006, 0x00000007,
0x0000000A, 0x00000008, 0x00000009, 0x00000008, 0x0000000B, 0x00000009, 0x00000008, 0x00000006, 0x0000000C,
0x00000010, 0x0000000A, 0x00000006, 0x0000000B, 0x0000000F, 0x0000000E, 0x0000000A, 0x0000000C, 0x0000000B,
0x0000000B, 0x0000000B, 0x00000009, 0x00000007, 0x00000009, 0x00000008, 0x0000000B, 0x0000000A, 0x00000008,
0x00000007, 0x00000008, 0x00000009, 0x00000012, 0x00000014, 0x00000014, 0x00000013, 0x00000013, 0x00000011,
0x00000013]
b=[]
for i in range(0,len(a2),64):
b.append(a2[i:i+64])
c = [0x025D15D4, 0x024C73B4, 0x0243CF71, 0x0230134C, 0x02132CFE, 0x01BE2FCA, 0x0142CA26, 0x00D61955, 0x009427A8, 0x009B8674, 0x0090C832, 0x008812C7, 0x0080BA58, 0x007981E1, 0x0072AB68, 0x0074CB4B, 0x00723F3F, 0x007CC258, 0x0089CD5C, 0x0088E2A2, 0x008E8906, 0x008B88A0, 0x008EEC8D, 0x008F3573, 0x008B746F, 0x00912C82, 0x008D7CF2, 0x00832099, 0x007F45A5, 0x00685AFF, 0x0050A4D2, 0x00526FE2, 0x0058923B, 0x00529EC1, 0x00516D1A, 0x005B7453, 0x007028E6, 0x0089C6FA, 0x00A5D6AE, 0x00D37A14, 0x00B8CFAA, 0x00B0BB4B, 0x00AE69A4, 0x00A1154B, 0x009DCBE7, 0x00A1DC20, 0x00AA07E3, 0x00B25CB1, 0x00B2FD98, 0x00B12F29, 0x00E428A0, 0x011B2184, 0x01615722, 0x01A502F3, 0x01C0AA9D, 0x01D4169F, 0x01EF8B76, 0x0233E5BB, 0x0275A6F0, 0x02A9CA35, 0x02A8904C, 0x02A194EF, 0x02926F39, 0x028E92C3]
j=np.mat(a) #构造三个矩阵
k=np.mat(b)
l=np.mat(c)
h=k*j #矩阵相乘,左右不能颠倒
n = np.linalg.inv(h) #求逆矩阵
m=l*n #反解flag
for i in range(64):
print(chr(int(round(m[0,i],0))),end='')

#hgame{100011100000110000100000000110001010110000100010011001111}

misc

好康的流量

wirshark找到base64编码图片,右键导出字节选用base64图像编码直接另存为,然后binwalk什么都没,

接下来用LSB来尝试,

扫描后出现半个flag:hgame{ez_1mg_

再调一下,出现后面的flag

hgame{ez_1mg_Steg4n0graphy}

群青(其实是幽灵东京)

太恶心了这个题,先得到一个wav文件,我们用audacity搞一下,出来

再用010打开,提示用silenteye

猜测第一个是密码,搞出来第二个wav文件,叫做S_S_T_V显然想到sstv,但虚拟机上无法操作,不知道为什么

找到一个牛逼的软件直接边听变出结果,音乐太刺耳了!!!

hgame{1_c4n_5ee_the_wav}

这个压缩包有点麻烦

太麻烦我了,前两层分别用数字爆破,字典爆破,然后很显然是个明文攻击,然后binwalk一下,最后伪代码,出结果,这么难的题怎么这么多人出结果!!!

crypto

Easy RSA

这个题就不用说了吧,白给。给出我的经典脚本!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from gmpy2 import*
from libnum import*
from Crypto.Util.number import long_to_bytes
import gmpy2
e=18861
p=149
q=191
n=p*q
m=5139
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
flag=chr(pow(m,int(d),n))
print(flag)
#hgame{L00ks_l1ke_y0u've_mastered_RS4!}

English Novel

我觉得就是明文攻击,找到key,但是key有很多,不知道怎么搞,大佬太多了!!等wp

Matryoshka

刚开始是盲文,然后我们转换一下就行,

‘..-/–…/–..–/—–/–…/–..–/—../…–/–..–/.-../….-/–..–/..—/….-/–..–/..—/–…/–..–/.-.-/-…./–..–/…-/….-/–..–/….-/–…/–..–/—../…../–..–/—../–…/–..–/…-/-…./–..–/—../…–/–..–/.—-/–…/–..–/–…/…–/–..–/…-/….-/–..–/-./….-/–..–/—-./–…/–..–/–…/…../–..–/..-/-…./–..–/.-../….-/–..–/.—-/–…/–..–/./-…./–..–/—-./…../–..–/—../…–/–..–/.—-/–…/–..–/..-/….-/–..–/…-/….-/–..–/.—-/…–/–..–/.-.-/….-/–..–/–…/…../–..–/-…./….-/–..–/–…/….-/–..–/—–/–…/–..–/./-…./–..–/.—-/….-/–..–/-…./–…/–..–/—–/…–/–..–/—../–…/–..–/..—/…../–..–/….-/–…/–..–/.-.-/-…./–..–/-…./…–/–..–/.—-/…../–..–/.—-/….-/–..–/–…/…–/–..–/–…/–…/–..–/-…./-…./–..–/….-/–…/–..–/–…/…–/–..–/.-.-/-…./–..–/..-/….-/–..–/./….-/–..–/….-/-…./–..–/…../-…./–..–/….-/….-/–..–/…../…–/–..–/—../-…./–..–/….-/….-/–..–/….-/-….’

转成莫斯密码,换成16进制

46,66,42,75,66,45,46,6E,6D,4C,73,36,44,33,73,69,59,74,4C,36,58,32,70,34,69,4E,30,63,64,53,6C,79,6B,6D,39,72,51,4E,39,6F,4D,53,31,6A,6B,73,39,72,4B,32,52,36,6B,4C,38,68,6F,72,30,3D

得到字符串:FfBufEFnmLs6D3siYtL6X2p4iN0cdSlykm9rQN9oMS1jks9rK2R6kL8hor0=

维吉尼亚密钥hgame,YzBibXZnaHl6X3swUmF6X2d4eG0wdGhrem9fMG9iMG1fdm9rY2N6dF8hcn0=

base64:c0bmvghyz_{0Raz_gxxm0thkzo_0ob0m_vokcczt_!r}

凯撒21位:h0gralmde_{0Wfe_lccr0ympet_0tg0r_atphhey_!w}

栅栏两次:hgame{Welc0me_t0_the_w0rld_0f_crypt0graphy!}

Dancing Line

往右走是0,往下走是1,得到hgame{Danc1ng_L1ne_15_fun,_15n’t_1t?}

IOT

010EDITOR打开就是flag

hgame-week2

该过年了,就写了几道题

re

xD MAZE

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
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // ebx
int v4; // esi
__int64 v5; // rax
__int64 v8; // rax
__int64 v9; // rax
__int64 v10; // rax
__int64 v11[4]; // [rsp+20h] [rbp-30h] BYREF
int v12; // [rsp+40h] [rbp-10h]
int i; // [rsp+48h] [rbp-8h]
int v14; // [rsp+4Ch] [rbp-4h]

sub_401980(argc, argv, envp);
memset(v11, 0, sizeof(v11));
v12 = 0;
v14 = 0;
std::operator>><char,std::char_traits<char>>(&std::cin, v11);
v3 = sub_401550(v11);
v4 = sub_401550("hgame{");
if ( v3 == v4 + (unsigned int)sub_401550("}") + 28 )
{
if ( (unsigned int)sub_40158F(v11, "hgame{", 6i64) || BYTE2(v12) != 125 )
{
LABEL_8:
v8 = std::operator<<<std::char_traits<char>>(&std::cout, "Forbidden format");
std::ostream::operator<<(v8, &std::endl<char,std::char_traits<char>>);
return 1;
}
else
{
for ( i = 6; i <= 33; ++i )
{
switch ( *((_BYTE *)v11 + i) )
{
case '0':
v14 += 512;
break;
case '1':
v14 += 64;
break;
case '2':
v14 += 8;
break;
case '3':
++v14;
break;
default:
goto LABEL_8;
}
if ( byte_404020[v14] != 32 || v14 > 4095 )
{
v9 = std::operator<<<std::char_traits<char>>(&std::cout, "Failed");
std::ostream::operator<<(v9, &std::endl<char,std::char_traits<char>>);
return 1;
}
}
v10 = std::operator<<<std::char_traits<char>>(&std::cout, "Win");
std::ostream::operator<<(v10, &std::endl<char,std::char_traits<char>>);
return 0;
}
}
else
{
v5 = std::operator<<<std::char_traits<char>>(&std::cout, "length err");
std::ostream::operator<<(v5, &std::endl<char,std::char_traits<char>>);
return 1;
}
}

我们直接看对比,要求除了hgame{},要32长度,且v14要大于4095,进入v14这个数组

发现就是算步长,这些加起来长度是4095,所以我们要走出去,且只能走到20h这个地方,那么switch就是我们要选择的,从0-3选走几步能到20h即可,soeasy!

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
int64 __fastcall sub_400B8D(__int64 a1, __int64 a2, int a3, int a4, int a5, int a6)
{
int v6; // edx
int v7; // ecx
int v8; // er8
int v9; // er9
__int64 result; // rax
int i; // [rsp+4h] [rbp-1ACh]
int v12; // [rsp+8h] [rbp-1A8h]
int j; // [rsp+Ch] [rbp-1A4h]
int v14[32]; // [rsp+10h] [rbp-1A0h] BYREF
int v15[52]; // [rsp+90h] [rbp-120h] BYREF
__int64 v16[6]; // [rsp+160h] [rbp-50h] BYREF
__int16 v17; // [rsp+190h] [rbp-20h]
unsigned __int64 v18; // [rsp+198h] [rbp-18h]

v18 = __readfsqword(0x28u);
memset(v16, 0, sizeof(v16));
v17 = 0;
sub_40FAC0((unsigned int)"%40s", (unsigned int)v16, a3, a4, a5, a6);
if ( sub_4004E0(v16) != 32 )
{
sub_40F940((unsigned int)"length error", (unsigned int)v16, v6, v7, v8, v9);
sub_40ED20(0LL);
}
for ( i = 0; i < (unsigned __int64)sub_4004E0(v16); ++i )
{
v12 = *((char *)v16 + i) << 8;
for ( j = 0; j <= 7; ++j )
{
if ( (v12 & 0x8000) != 0 )
v12 = (2 * v12) ^ 0x1021;
else
v12 *= 2;
}
v15[i] = (unsigned __int16)v12;
}
v14[0] = 36200;
v14[1] = 40265;
v14[2] = 10770;
v14[3] = 43802;
v14[4] = 52188;
v14[5] = 47403;
v14[6] = 11826;
v14[7] = 40793;
v14[8] = 56781;
v14[9] = 40265;
v14[10] = 43274;
v14[11] = 3696;
v14[12] = 62927;
v14[13] = 2640;
v14[14] = 23285;
v14[15] = 65439;
v14[16] = 40793;
v14[17] = 48395;
v14[18] = 22757;
v14[19] = 14371;
v14[20] = 48923;
v14[21] = 30887;
v14[22] = 43802;
v14[23] = 18628;
v14[24] = 43274;
v14[25] = 11298;
v14[26] = 40793;
v14[27] = 23749;
v14[28] = 24277;
v14[29] = 30887;
v14[30] = 9842;
v14[31] = 22165;
if ( (unsigned int)sub_400490(v15, v14, 32LL) )
sub_4107A0("Wrong");
else
sub_4107A0("Great,your input is flag");
result = 0LL;
if ( __readfsqword(0x28u) != v18 )
sub_44B8A0();
return result;
}

这个题很好搞吗,爆破或者直接动态调试,我爆破没出来,动调了一下,只要能跟v14相等就行了,然后解出flag才发现这个题爆破不出来是因为里面牵扯了crc16这个东西,然后修改了一下异或的值就出来了。

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
flag = ""
p = [36200,40265,10770,43802,52188,47403,11826,40793,56781,40265,43274,3696,62927,2640,23285,65439,40793,48395,22757,14371,48923,30887,43802,18628,43274,11298,40793,23749,24277,30887,9842,22165]
for i in range(32):
for j in range(27,127):
a = j << 8
for m in range(8):
if (a & 0x8000) != 0:
a = (2 * a) ^ 0x11021 #异或的值是变化了的
else:
a *= 2
if a&0xffff == p[i]:
print(chr(j))
[0x00003653, 0x00002672, 0x00001611, 0x00000630, 0x000076D7, 0x000066F6, 0x00007C87, 0x00004CE4, 0x00005CC5, 0x00002C22, 0x00003C03,
0x00000C60, 0x00001C41, 0x0000EDAE, 0x0000FD8F, 0x0000CDEC, 0x0000DDCD, 0x0000AD2A, 0x0000BD0B, 0x00008D68, 0x00009D49, 0x00007E97,
0x00006EB6, 0x00005ED5, 0x00004EF4, 0x00003E13, 0x00002E32, 0x00001E51, 0x00000E70, 0x0000FF9F, 0x0000EFBE, 0x0000DFDD, ]
#012345abcdefghijklmnopqrstuvwxyz
[0x00005695, 0x000046B4, 0x0000B75B, 0x0000A77A, 0x0000AB1A, 0x000058E5, 0x00006886, 0x000078A7, 0x00000840, 0x00001861, 0x00002802,
0x00003823, 0x0000C9CC, 0x0000D9ED, 0x0000E98E, 0x0000F9AF, 0x00008948, 0x00009969, 0x0000A90A, 0x0000B92B, 0x00005AF5, 0x00004AD4,
0x00007AB7, 0x00006A96, 0x00001A71, 0x00000A50, 0x00003A33, 0x00002A12, 0x0000DBFD, 0x0000CBDC, 0x0000FBBF, 0x00008528, ]
#6789_ABCDEFGHIJKLMNOPQRSTUVWXYZ*
[0x00003443, 0x00000420, 0x00001401, 0x000064E6, 0x000074C7, 0x000044A4, 0x00005485, 0x0000A56A, 0x0000B54B, 0x00009509, 0x0000E5EE,
0x0000F5CF, 0x0000C5AC, 0x0000D58D, 0x00009719, 0x00008738, 0x0000F7DF, 0x0000E7FE, 0x0000D79D, 0x0000C7BC, 0x000048C4, 0x0000EB9E,
0x00009B79, 0x00008B58, 0x0000BB3B, 0x0000CFFC, 0x0000AF3A, 0x00003653, 0x00003653, 0x00003653, 0x00003653, 0x00003653, ]
#!"#$%&'()+,-./:;<=>?@[\]^{}00000
#hgame{noW_YOu~koNw-UPx~mAG|C_@Nd~crC16}

fake shell

出题人做了个很吊的shell,我们不管那么多,直接定位到最重要的函数

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
int64 __fastcall sub_176C(__int64 *a1)
{
size_t v1; // rax
__int64 v2; // rdx
__int64 v3; // rdx
int i; // [rsp+1Ch] [rbp-164h]
__int64 v6[4]; // [rsp+20h] [rbp-160h] BYREF
__int64 v7[4]; // [rsp+40h] [rbp-140h]
char v8; // [rsp+60h] [rbp-120h]
__int64 v9[34]; // [rsp+70h] [rbp-110h] BYREF

v9[33] = __readfsqword(0x28u);
memset(v9, 0, 256);
v1 = strlen(aHappyhg4me);
sub_1358(v9, aHappyhg4me, v1);
v2 = a1[1];
v6[0] = *a1;
v6[1] = v2;
v3 = a1[3];
v6[2] = a1[2];
v6[3] = v3;
sub_1635(v9, v6, 32LL);
v7[0] = 0xE0B25F3D8FFA94B6LL;
v7[1] = 0xE79D6C9866D20FEALL;
v7[2] = 0x6D6FBEC57140081BLL;
v7[3] = 0xF6F3BDA88D097B7CLL;
v8 = 0;
for ( i = 0; i <= 31; ++i )
{
if ( *((_BYTE *)v7 + i) != *((_BYTE *)v6 + i) )
return 0LL;
}
return 1LL;
}
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
unsigned __int64 __fastcall sub_1358(__int64 a1, __int64 a2, unsigned __int64 a3)
{
char v4; // [rsp+27h] [rbp-119h]
int i; // [rsp+28h] [rbp-118h]
int j; // [rsp+28h] [rbp-118h]
int v7; // [rsp+2Ch] [rbp-114h]
__int64 v8[33]; // [rsp+30h] [rbp-110h] BYREF
unsigned __int64 v9; // [rsp+138h] [rbp-8h]

v9 = __readfsqword(0x28u);
v7 = 0;
memset(v8, 0, 256);
for ( i = 0; i <= 255; ++i )
{
*(_BYTE *)(i + a1) = i;
*((_BYTE *)v8 + i) = *(_BYTE *)(i % a3 + a2);
}
for ( j = 0; j <= 255; ++j )
{
v7 = (*((char *)v8 + j) + v7 + *(unsigned __int8 *)(j + a1)) % 256;
v4 = *(_BYTE *)(j + a1);
*(_BYTE *)(j + a1) = *(_BYTE *)(v7 + a1);
*(_BYTE *)(a1 + v7) = v4;
}
return __readfsqword(0x28u) ^ v9;
}

很明显是rc4加密,根据源码我发现并没有改,但解密不对,怀疑是改了密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
unsigned __int64 sub_1C27()
{
int fd; // [rsp+4h] [rbp-7Ch]
char *i; // [rsp+8h] [rbp-78h]
char buf[104]; // [rsp+10h] [rbp-70h] BYREF
unsigned __int64 v4; // [rsp+78h] [rbp-8h]

v4 = __readfsqword(0x28u);
fd = open("/proc/self/status", 0);
read(fd, buf, 0x64uLL);
for ( i = buf; *i != 84 || i[1] != 114 || i[2] != 97 || i[3] != 99 || i[4] != 101 || i[5] != 114; ++i )
;
if ( !atoi(i + 11) )
strcpy(aHappyhg4me, "w0wy0ugot1t");
return __readfsqword(0x28u) ^ v4;
}

果然是在init段改了密钥,解密就行了,注意是小端序

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
import base64
def rc4_main(key="init_key", message="init_message"):
print("RC4解密主函数调用成功")
print('\n')
s_box = rc4_init_sbox(key)
crypt = rc4_excrypt(message, s_box)
return crypt
def rc4_init_sbox(key):
s_box = list(range(256))
print("原来的 s 盒:%s" % s_box)
print('\n')
j = 0
for i in range(256):
j = (j + s_box[i] + ord(key[i % len(key)])) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
print("混乱后的 s 盒:%s" % s_box)
print('\n')
return s_box
def rc4_excrypt(plain, box):
print("调用解密程序成功。")
print('\n')
plain = base64.b64decode(plain.encode('utf-8'))
plain = bytes.decode(plain)
res = []
i = j = 0
for s in plain:
i = (i + 1) % 256
j = (j + box[i]) % 256
box[i], box[j] = box[j], box[i]
t = (box[i] + box[j]) % 256
k = box[t]
res.append((ord(s) ^ k))
print("res用于解密字符串,解密后是:%res" % res)
print('\n')
cipher = "".join(res)
print("解密后的字符串是:%s" % cipher)
print('\n')
return cipher
\#a=[0xE0,0xB2,0x5F,0x3D,0x8F,0xFA,0x94,0xB6,0xE7,0x9D,0x6C,0x98,0x66,0xD2,0x0F,0xEA,0x6D,0x6F,0xBE,0xC5,0x71,0x40,0x08,0x1B,0xF6,0xF3,0xBD,0xA8,0x8D,0x09,0x7B,0x7C]
a = [0xB6,0x94,0xFA,0x8F,0x3D,0x5F,0xB2,0xE0,0xEA,0x0f,0xd2,0x66,0x98,0x6c,0x9d,0xe7,0x1b,0x08,0x40,0x71,0xc5,0xbe,0x6f,0x6d,0x7c,0x7b,0x09,0x8d,0xa8,0xbd,0xf3,0xf6]
s = ""
for i in a:
s += chr(i)
s = str(base64.b64encode(s.encode('utf-8')), 'utf-8')
rc4_main("w0wy0ugot1t", s)

creakme2

这个题

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
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax
const char *v4; // rcx
int Buf2[8]; // [rsp+20h] [rbp-19h] BYREF
char Buf1[8]; // [rsp+40h] [rbp+7h] BYREF
char v8[8]; // [rsp+48h] [rbp+Fh] BYREF
char v9[8]; // [rsp+50h] [rbp+17h] BYREF
char v10[16]; // [rsp+58h] [rbp+1Fh] BYREF
int v11[10]; // [rsp+68h] [rbp+2Fh] BYREF

v11[9] = 0;
v11[0] = 1;
v11[1] = 2;
v11[2] = 3;
v11[3] = 4;
v11[4] = 5;
v11[5] = 6;
v11[6] = 7;
v11[7] = 8;
v11[8] = 9;
sub_140001008("%32s");
sub_140001070(0x20u, (unsigned int *)Buf1, (__int64)v11);
sub_140001070(0x20u, (unsigned int *)v8, (__int64)v11);
sub_140001070(0x20u, (unsigned int *)v9, (__int64)v11);
sub_140001070(0x20u, (unsigned int *)v10, (__int64)v11);
Buf2[0] = 0x457E62CF;
Buf2[1] = 0x9537896C;
Buf2[2] = 528383858;
Buf2[3] = -140479528;
Buf2[4] = -1902548888;
Buf2[5] = 1085255577;
Buf2[6] = 261688884;
Buf2[7] = 426721414;
v3 = memcmp(Buf1, Buf2, 0x20ui64);
v4 = "Congratulations!";
if ( v3 )
v4 = "Try again!";
puts(v4);
return 0;
}

我们只用看sub_140001070函数就行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int64 __fastcall sub_140001070(unsigned int a1, unsigned int *a2, __int64 a3)
{
__int64 result; // rax
int v4; // [rsp+20h] [rbp-38h]
unsigned int v5; // [rsp+24h] [rbp-34h]
unsigned int v6; // [rsp+28h] [rbp-30h]
unsigned int i; // [rsp+2Ch] [rbp-2Ch]

v5 = *a2;
v6 = a2[1];
v4 = 0;
for ( i = 0; i < a1; ++i )
{
v5 += (*(_DWORD *)(a3 + 4i64 * (v4 & 3)) + v4) ^ (v6 + ((v6 >> 5) ^ (16 * v6)));
v4 += dword_140003034;
v6 += (*(_DWORD *)(a3 + 4i64 * ((v4 >> 11) & 3)) + v4) ^ (v5 + ((v5 >> 5) ^ (16 * v5)));
}
*a2 = v5;
result = 4i64;
a2[1] = v6;
return result;
}

显然是个xtea,在delta处进行魔改,然后解密,发现不行。动调后发现有异常处理装置。

无语

找到fileter,进入call后的函数

看汇编知道,解决方法是判断数据循环中计算后是否为正数,为正数则与0x1234567进行一次异或。

写脚本

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
#include <stdio.h>
#include <stdint.h>
void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
unsigned int i;
uint32_t v0=v[0], v1=v[1], delta=0x9E3779B1, sum=0xc78e4d05; //这里加密逻辑变了初始sam值可以跑正向逻辑得到
for (i=0; i < num_rounds; i++) {
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
if((sum >> 31) == 0){
sum ^= 0x1234567;
}
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
}
v[ 0]=v0; v[1]=v1;
}
int main()
{
int i;
uint32_t v[8]={0x457E62CF,0x9537896C,0x1F7E7F72,0x0F7A073D8,0x8E996868,0x40AFAF99,0x0F990E34,0x196F4086};
uint32_t const k[4]={1,2,3,4};
unsigned int r=32;
for (i = 0; i < 4;i++){
decipher(r, (v+i*2), k);
printf("解密后的数据:%x %x\n",v[i*2],v[i*2+1]);
}
return 0;
}

注意解出来的是小端序!

CRYPTO

rsa attack

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from gmpy2 import*
from libnum import*
from Crypto.Util.number import long_to_bytes
import gmpy2
n=700612512827159827368074182577656505408114629807
c=122622425510870177715177368049049966519567512708
e=65537
p=715800347513314032483037
q=978782023871716954857211
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
flag=pow(c,int(d),n)
print(n2s(flag))
#b'hgame{SHorTesT!fLAg}'


rsa attack2

first、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from gmpy2 import *
n1 = 14611545605107950827581005165327694782823188603151768169731431418361306231114985037775917461433925308054396970809690804073985835376464629860609710292181368600618626590498491850404503443414241455487304448344892337877422465715709154238653505141605904184985311873763495761345722155289457889686019746663293720106874227323699288277794292208957172446523420596391114891559537811029473150123641624108103676516754449492805126642552751278309634846777636042114135990516245907517377320190091400729277307636724890592155256437996566160995456743018225013851937593886086129131351582958811003596445806061492952513851932238563627194553
c1 = 965075803554932988664271816439183802328812013694203741320763105376036912584995031647672348468111310423680858101990670067065306237596121664884353679987689532305437801346923070145524106271337770666947677115752724993307387122132705797012726237073550669419110046308257408484535063515678066777681017211510981429273346928022971149411064556225001287399141306136081722471075032423079692908380267160214143720516748000734987068685104675254411687005690312116824966036851568223828884335112144637268090397158532937141122654075952730052331573980701136378212002956719295192733955673315234274064519957670199895100508623561838510479
n2 = 20937478725109983803079185450449616567464596961348727453817249035110047585580142823551289577145958127121586792878509386085178452171112455890429474457797219202827030884262273061334752493496797935346631509806685589179618367453992749753318273834113016237120686880514110415113673431170488958730203963489455418967544128619234394915820392908422974075932751838012185542968842691824203206517795693893863945100661940988455695923511777306566419373394091907349431686646485516325575494902682337518438042711296437513221448397034813099279203955535025939120139680604495486980765910892438284945450733375156933863150808369796830892363
c2 = 11536506945313747180442473461658912307154460869003392732178457643224057969838224601059836860883718459986003106970375778443725748607085620938787714081321315817144414115589952237492448483438910378865359239575169326116668030463275817609827626048962304593324479546453471881099976644410889657248346038986836461779780183411686260756776711720577053319504691373550107525296560936467435283812493396486678178020292433365898032597027338876045182743492831814175673834198345337514065596396477709839868387265840430322983945906464646824470437783271607499089791869398590557314713094674208261761299894705772513440948139429011425948090
n=[n1,n2]
c=[c1,c2]
for i in range(len(n)):
for j in range(len(n)):
if(i!=j):
if(gcd(n[i],n[j])!=1): #对不同的n进行 欧几德得 算法,以求出最大公约数
print(i,j)
print("p =",gcd(n[i],n[j]))
#如果有多个n,c那么用此来求某n与n的最大公因数然后用first-2中的来算q,从而求出密文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from gmpy2 import*
import libnum
n1 = 507419170088344932990702256911694788408493968749527614421614568612944144764889717229444020813658893362983714454159980719026366361318789415279417172858536381938870379267670180128174798344744371725609827872339512302232610590888649555446972990419313445687852636305518801236132032618350847705234643521557851434711389664130274468354405273873218264222293858509477860634889001898462547712800153111774564939279190835857445378261920532206352364005840238252284065587291779196975457288580812526597185332036342330147250312262816994625317482869849388424397437470502449815132000588425028055964432298176942124697105509057090546600330760364385753313923003549670107599757996810939165300581847068233156887269181096893089415302163770884312255957584660964506028002922164767453287973102961910781312351686488047510932997937700597992705557881172640175117476017503918294534205898046483981707558521558992058512940087192655700351675718815723840568640509355338482631416345193176708501897458649841539192993142790402734898948352382350766125000186026261167277014748183012844440603384989647664190074853086693408529737767147592432979469020671772152652865219092597717869942730499507426269170189547020660681363276871874469322437194397171763927907099922324375991793759
e = 77310199867448677782081572109343472783781135641712597643597122591443011229091533516758925238949755491395489408922437493670252550920826641442189683907973926843505436730014899918587477913032286153545247063493885982941194996251799882984145155733050069564485120660716110828110738784644223519725613280140006783618393995138076030616463398284819550627612102010214315235269945251741407899692274978642663650687157736417831290404871181902463904311095448368498432147292938825418930527188720696497596867575843476810225152659244529481480993843168383016583068747733118703000287423374094051895724494193455175131120243097065270804457787026492578916584536863548445813916819417857064037664101684455000184987531252344582899589746272173970083733130106407810619258077266603898529285634495710846838011858287024329514491058790557305041389614650730267774482954666726949886313386881066593946789460028399523245777171320319444673551268379126203862576627540177888290265714418064334752499940587750374552330008143708562065940245637685833371348603338834447212248648869514585047871442060412622164276894766238383894693759347590977926306581080390685360615407766600573527565016914830132066428454738135380178959590692145577418811677639050929791996313180297924833690095
c1 = 165251729917394529793163344300848992394021337429474789711805041655116845722480301677817165053253655027459227404782607373107477419083333844871948673626672704233977397989843349633720167495862807995411682262559392496273163155214888276398332204954185252030616473235814999366132031184631541209554169938146205402400412307638567132128690379079483633171535375278689326189057930259534983374296873110199636558962144635514392282351103900375366360933088605794654279480277782805401749872568584335215630740265944133347038070337891035560658434763924576508969938866566235926587685108811154229747423410476421860059769485356567301897413767088823807510568561254627099309752215808220067495561412081320541540679503218232020279947159175547517811501280846596226165148013762293861131544331444165070186672186027410082671602892508739473724143698396105392623164025712124329254933353509384748403154342322725203183050328143736631333990445537119855865348221215277608372952942702104088940952142851523651639574409075484106857403651453121036577767672430612728022444370874223001778580387635197325043524719396707713385963432915855227152371800527536048555551237729690663544828830627192867570345853910196397851763591543484023134551876591248557980182981967782409054277224
p = mpz(46731919563265721307105180410302518676676135509737992912625092976849075262192092549323082367518264378630543338219025744820916471913696072050291990620486581719410354385121760761374229374847695148230596005409978383369740305816082770283909611956355972181848077519920922059268376958811713365106925235218265173085)
q = n1//p #“//” 整除
phi = (p-1)*(q-1)
d = invert(e,phi)
m = pow(c1,d,n1)
print(m) # "n2s" (数值转字符串)
print(hex(m))
print(bytes.fromhex(hex(m)[2:]))
#b'hgame{RsA@hAS!a&VArIETY?of.'

second

1
2
3
4
5
6
7
8
9
import binascii
import gmpy2
e = 7
n = 14157878492255346300993349653813018105991884577529909522555551468374307942096214964604172734381913051273745228293930832314483466922529240958994897697475939867025561348042725919663546949015024693952641936481841552751484604123097148071800416608762258562797116583678332832015617217745966495992049762530373531163821979627361200921544223578170718741348242012164115593777700903954409103110092921578821048933346893212805071682235575813724113978341592885957767377587492202740185970828629767501662195356276862585025913615910839679860669917255271734413865211340126544199760628445054131661484184876679626946360753009512634349537
c = 10262871020519116406312674685238364023536657841034751572844570983750295909492149101500869806418603732181350082576447594766587572350246675445508931577670158295558641219582729345581697448231116318080456112516700717984731655900726388185866905989088504004805024490513718243036445638662260558477697146032055765285263446084259814560197549018044099935158351931885157616527235283229066145390964094929007056946332051364474528453970904251050605631514869007890625
m=gmpy2.iroot(c, 7)[0]
print(binascii.unhexlify(hex(m)[2:].strip("L")))
#b'AttacK^mEThodS^whAT:other!A'
#本题是e给的很小,n无法分解。小明文攻击小明文攻击是基于低加密指数的,主要分成两种情况。明文过小,导致明文的e次方仍然小于n。这种情况直接对密文e次开方,即可得到明文

third

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
import sys
import binascii
sys.setrecursionlimit(1000000)
def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
raise Exception('modular inverse does not exist')
else:
return x % m
n = 18819509188106230363444813350468162056164434642729404632983082518225388069544777374544142317612858448345344137372222988033366528086236635213756227816610865045924357232188768913642158448603346330462535696121739622702200540344105464126695432011739181531217582949804939555720700457350512898322376591813135311921904580338340203569582681889243452495363849558955947124975293736509426400460083981078846138740050634906824438689712748324336878791622676974341814691041262280604277357889892211717124319329666052810029131172229930723477981468761369516771720250571713027972064974999802168017946274736383148001865929719248159075729
e1 = 2519901323
c1 = 3230779726225544872531441169009307072073754578761888387983403206364548451496736513905460381907928107310030086346589351105809028599650303539607581407627819797944337398601400510560992462455048451326593993595089800150342999021874734748066692962362650540036002073748766509347649818139304363914083879918929873577706323599628031618641793074018304521243460487551364823299685052518852685706687800209505277426869140051056996242882132616256695188870782634310362973153766698286258946896866396670872451803114280846709572779780558482223393759475999103607704510618332253710503857561025613632592682931552228150171423846203875344870
e2 = 3676335737
c2 = 940818595622279161439836719641707846790294650888799822335007385854166736459283129434769062995122371073636785371800857633841379139761091890426137981113087519934854663776695944489430385663011713917022574342380155718317794204988626116362865144125136624722782309455452257758808172415884403909840651554485364309237853885251876941477098008690389600544398998669635962495989736021020715396415375890720335697504837045188626103142204474942751410819466379437091569610294575687793060945525108986660851277475079994466474859114092643797418927645726430175928247476884879817034346652560116597965191204061051401916282814886688467861
s = egcd(e1, e2)
s1 = s[1]
s2 = s[2]
if s1<0:
s1 = - s1
c1 = modinv(c1, n)
elif s2<0:
s2 = - s2
c2 = modinv(c2, n)
m=(pow(c1,s1,n)*pow(c2,s2,n)) % n
print(m)
print (binascii.unhexlify(hex(m)[2:].strip("L")))
#b'ttACK|METHOdS~do@you_KNOW}'
#共模攻击,两个c,两个e,n不可分解

hgame-week3

有点摆烂这一周,做了一点题

re

1、Answer’s Windows

我们直接字符串定位,搜索answer,发现有一处地方很有问题

跟进一下

我们发现经过加密后对比一下就可以出现正确的图片,我们先看函数中的加密算法,是base64,我们动调发现其实并没有变化,所以没有魔改,但怎么也不会出现对比的字符串,所以猜测是base64表被改了,所以交叉引用一波。

动调一下发现规律:

!”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`a

这个换表是真的不好猜,然后我们解密就行了,但memcmp中的字符串还有转义字符。有点坑

1
2
3
4
5
6
import base64
import string
str1 = ";'>B<76\\=82@-8.@=T\"@-7ZU:8*F=X2J<G>@=W^@-8.@9D2T:49U@1aa"
string1 = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))

用上面脚本避免转义字符情况

2、creakme3

本题是用ppc汇编写的,所以我的ida不能汇编,但据说ida7.5可以用插件搞,我选择用 Ghidra

https://blog.csdn.net/u012501842/article/details/107634080?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164472536016780274167836%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164472536016780274167836&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-107634080.pc_search_result_positive&utm_term=ghidra+%E5%AE%89%E8%A3%85&spm=1018.2226.3001.4187

使用方法讲的很好,定位到main之后看反编译结果,很清楚。

输入flag,然后如果左边大于右边就往后走,左侧是a的结构体,其中第一个 int 为字符的 ASCII 码,第二个 int 为字符的顺序,使用猴子排序算法来对数据进行排序,如果排序成功就会输出flag。

猴子排序就是乱排,直到有序为止。

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
struct alpha
{
int ch;
int index;
};
struct alpha a[89] =
{
{ 48, 20093 }, { 48, 26557 }, { 48, 31304 }, { 48, 33442 }, { 48, 37694}, { 49, 39960 }, { 50, 23295 }, { 50, 27863 }, { 50, 42698 }, { 50,48505 }, { 50, 52925 }, { 51, 12874 }, { 51, 12946 }, { 51, 14597 }, {51, 17041 }, { 51, 23262 }, { 51, 28319 }, { 51, 42282 }, { 51, 48693 },{ 51, 52067 }, { 53, 32571 }, { 56, 14612 }, { 56, 45741 }, { 57, 14554 },{ 57, 20048 }, { 57, 27138 }, { 57, 45327 }, { 66, 30949 }, { 95, 32502}, { 95, 35235 }, { 95, 36541 }, { 95, 38371 }, { 97, 29658 }, { 100,21388 }, { 100, 25403 }, { 100, 40604 }, { 100, 46987 }, { 100, 51302 },{ 101, 12974 }, { 101, 30329 }, { 102, 10983 }, { 102, 19818 }, { 102,22280 }, { 102, 26128 }, { 102, 41560 }, { 102, 47116 }, { 102, 51333 },{ 103, 28938 }, { 103, 31988 }, { 104, 16246 }, { 104, 28715 }, { 104,41966 }, { 104, 44368 }, { 104, 47815 }, { 105, 16420 }, { 105, 35362 },{ 105, 49237 }, { 106, 11090 }, { 106, 50823 }, { 107, 24320 }, { 107,50199 }, { 108, 24962 }, { 109, 30171 }, { 110, 15457 }, { 110, 18838 },{ 110, 24001 }, { 111, 11638 }, { 111, 32023 }, { 111, 43291 }, { 112,39661 }, { 114, 17872 }, { 114, 33895 }, { 114, 43869 }, { 115, 20611 },{ 115, 25122 }, { 115, 36243 }, { 115, 37434 }, { 115, 38686 }, { 115,46266 }, { 115, 51077 }, { 116, 13656 }, { 116, 34493 }, { 116, 38712 },{ 117, 14096 }, { 117, 38777 }, { 119, 12095 }, { 119, 17629 }, { 123,30945 }, { 125, 40770 }
};

#include<stdio.h>
int main()
{
for(int i=0;i<89;i++){
for(int j=0;j<89;j++){
if(a[i].index<a[j].index){
struct alpha temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int i=0;i<89;i++){
putchar(a[i].ch);
}
}

//fjow33etu938nhi3wrnf90sdf32nklsdf0923hgame{B0go_50rt_is_s0_stup1d}fh32orh98sdfh23ikjsdf32

3、无调试器寄

4、fishman

这个题是pyd,昨天做了到pyc混淆,有点搞,pyd相当于dll文件直接ida反编译,我们用插件查到时blowfish算法。

找到key,既然有key,那么我们可以通过动态调试直接找出p盒和s盒,因为key是用来变换p盒和s盒的。

如何动调调试pyd脚本呢,pyd脚本就相当于dll脚本,我们将其放入\python39-x64\Lib\site-packages,有一说一,我没找到vscode下的,但找到vs中的了,但没有3.9版本的。。。然后在vs中设断点进行调试,然后再在ida中attach中找到进行的程序就可以进行动态调试了.

如何引用头文件呢,我们将头文件,即.h文件与.c文件放在同一目录下,然后就行了。

blowfish.h

1
2
3
4
5
6
7
8
9
10
11
12
#ifndef BLOWFISHH

#define BLOWFISHH
#include<stdlib.h>
#include<string.h>

void blowfish_encrypt(void*, void*);
void blowfish_decrypt(void*, void*);
void getkey(char*);
unsigned long f(unsigned long);

#endif

直接解密脚本

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
#include"blowfish_head.h"
#include<stdio.h>
//变换后的P盒
unsigned long pbx[18] =
{
0x6af74079, 0xc87db4da, 0x064b77a4, 0x33a56687, 0x73924432, 0x3a78e859, 0xa0f9451e, 0x6e99ea5f, 0xcb62f79c,
0xec009d50, 0x46b85709, 0x3b2bfdf6, 0xd0a0f937, 0x67c4c3e1, 0x80d02257, 0x4162d4de, 0x814dce61, 0x227bde9b

};
//变换后的S盒
unsigned long sbx[4][256] =
{
{ 0x857e5597, 0x326dad20, 0x2d507f8e, 0x2b80ba2c, 0xd711e661, 0x4b7e9667, 0x7a4b2509, 0x5117c0a3, 0x537791d2,
0xbda0ec99, 0x9f5d600, 0x97d7453e, 0x6c3dede1, 0xefbec2ec, 0x31f20650, 0x86ea7ee1, 0x4a380c4e, 0x688500c0,
0xc939e94b, 0xee64fe1f, 0xdae4a7bd, 0xafdfe274, 0xef95a497, 0xca5e8fc8, 0xa16220a, 0x9c85d82f, 0x3f411e1f,
0x199cd133, 0x52ecbaa8, 0x68886557, 0xf8d4ca71, 0x729c0def, 0x5d6d4eb4, 0x550b9697, 0x77a9b569, 0xae8aacd5,
0xa48c80d0, 0xb171f834, 0xd6828c5f, 0xf5219b37, 0x260e8a36, 0x9a8fbeba, 0xdf6ca01, 0x5f5ee56f, 0xc2e21a2f,
0x87d75493, 0x87ef74ef, 0xfe01a2da, 0x8326e260, 0x7b3f0f, 0xc21ab19, 0x589f28be, 0x9ff0636, 0x2ac6affc, 0xb8e547d,
0x91fa13e2, 0xde9a211f, 0x70b95314, 0x5879cad1, 0x8d38aa78, 0xffae559e, 0x132d25af, 0x4244c5f1, 0x7831cb8d,
0x5625d8a2, 0xa99878b6, 0x44dfa664, 0x5b4e43c7, 0xfde79c18, 0xa8f89efb, 0x96a65669, 0xfa7ec977, 0x6438138b,
0x63098e28, 0x7048ba4b, 0xc6f0e94, 0xabc7ae87, 0xdce4560, 0x2ee85291, 0xa7e24dd8, 0xdf0b5970, 0x3d8fcbe5,
0x55b43ae4, 0x9eceee50, 0x6542e890, 0x4f70b16b, 0x778b58dc, 0xf3f830e4, 0x1b9d5867, 0x7076b41c, 0x6b8386de,
0x8b148ce, 0x31c2fb7d, 0x42fe87c5, 0x108eb334, 0x7c40206, 0x2f783c90, 0xe593491f, 0x2b4ace07, 0xeba73a3c,
0x44fa6586, 0x56ed2871, 0xd9b3ed4f, 0xb04d3c81, 0x93c1656c, 0xc8044fcb, 0x127ff622, 0x159d9dcf, 0x2fc79936,
0x8549ee27, 0x262156cb, 0x721d3364, 0xf5a6f15e, 0x7fe8b137, 0x6cb075da, 0xfaa54cf4, 0x634519ec, 0xde79d57d,
0x8b728797, 0x4b994f3e, 0x242eb5e6, 0x274f5cec, 0xc0f072e0, 0xb6928b6f, 0x8922972b, 0x2207de1e, 0xc0236ffa,
0xc9dca5e5, 0x8d1286f, 0x90729fa3, 0x6a6ed134, 0x4369fae7, 0xf9ae5610, 0x13398b9e, 0xfdd59299, 0x21a3a98b,
0xae6a4a80, 0x6b6e89a6, 0xce85be83, 0xda4c3800, 0x867af755, 0x26b3fb41, 0x96141cce, 0xf176999a, 0x1d844757,
0xe27ce11f, 0x18638c21, 0x960ccbf2, 0xe4ccbbae, 0xaa0fab55, 0xf093bd6f, 0x4cb18fad, 0xf27853df, 0x5d5d925b,
0xc389a234, 0xa9e9b90b, 0x6f06d9e4, 0xf0389646, 0xc75f5884, 0x9961dd6b, 0x44b1dc6a, 0x7ef092, 0xa4ca52a6,
0x5342115d, 0x31d445bb, 0x6cb0b744, 0xd1abcf6, 0x95c6f259, 0xdf719b5d, 0xea51c785, 0xc7303253, 0x1e6a034e,
0xf60989f1, 0x93f55b8d, 0xde786239, 0x9d01dfc5, 0xa4cd54ba, 0xfa60804a, 0x3da55ae7, 0x64d673a, 0x5ee1a39c,
0x6daa769a, 0xec57802a, 0x7acdc0b0, 0xcdfedc6d, 0x72cb1321, 0x42d07041, 0xa45aa294, 0xdbf5b287, 0xca681d73,
0x8d302710, 0x2b1ad68d, 0xc1c6521d, 0x4f40a81c, 0xf4762cb1, 0x8962117f, 0xe33e8bc2, 0xffa7db53, 0xd617f8af,
0xd8b1563b, 0x1ed7d3b4, 0x9f998ca6, 0x1c32a736, 0x3513f35f, 0x7a4da8a8, 0x93f43a38, 0x6bf2eac7, 0xfe3041fd,
0x8853f184, 0x81c00f3e, 0xc601a409, 0x1ceba826, 0x94bc26cd, 0xd07aaf4e, 0x46884d2, 0x5d4ec036, 0xe5587bf2,
0xa3482f3f, 0xdbecc4b2, 0xe5a8e81e, 0x1287e1a3, 0x6e4ef861, 0xb4560ada, 0x5f18f3d5, 0xd9299202, 0xbab5cc00,
0x18464f47, 0x58877430, 0xb4335a0a, 0x7a6e33e, 0xe62e23b4, 0x648e0251, 0xdd94b375, 0x719a409f, 0x5d45064d,
0x243af927, 0xfbd3ab12, 0xdc74bb88, 0x21a563a8, 0x37b0a314, 0x5da98b1f, 0xfc4d4869, 0xbf0c7320, 0xebf308d3,
0x714a3f9a, 0x6606297c, 0x28ff2689, 0xa6779947, 0xfb556d94, 0xb6413de2, 0x21519c0f, 0xb1052485, 0x69c2624b,
0xde9cc548, 0xce36df75, 0x5dbfa8a7 },
{ 0xaee3df14, 0x399d3136, 0x1c0b3ea1, 0xf8416210, 0x719b0d88, 0x908ce2e5, 0x623e46a2, 0xef7772ec, 0xdbc4da3a,
0xe88f6e2e, 0x7fb80562, 0x1a33bfa7, 0xb972b27c, 0xfccb67ab, 0xb53bc933, 0xad99167e, 0x1831a7f0, 0x295e3c91,
0x6afb6529, 0xb1d2c1eb, 0x38702ff1, 0xfb03fc16, 0xf85c29e8, 0x154bbcbf, 0xfc10c6d8, 0x1a07656, 0x9ec55090,
0x52201a4a, 0x9b0ee83f, 0xe08b560a, 0xaff5a8bc, 0x35c5d6d7, 0x8d1f52f, 0x7b2becf0, 0xaf01ac97, 0x3b8700c9,
0xfe56cea4, 0x1c4b14f6, 0xef86351c, 0x27a382c9, 0x28f51829, 0xcdeeee51, 0x3d73d792, 0x152c4a00, 0x7122ccea,
0xbe459436, 0x624f6a81, 0xba728d6f, 0xdf7f103d, 0x7faf6a84, 0xd91174e1, 0xef9ca2f5, 0xa0675400, 0x9e0129,
0x276f61d4, 0xf6e0bbb, 0x2f5e103d, 0x3d24363f, 0x36f1d769, 0xddabaa4d, 0xbd209d7b, 0x38898cda, 0x59aa0a47,
0x3dc28a3b, 0x9374f915, 0x7164635e, 0xa09379f0, 0x462da24e, 0x7a6cd48d, 0xde20ce, 0xeac2f361, 0x9796cbc3,
0x2cc87742, 0x2220d2f5, 0xab17e0c2, 0x16cb3b75, 0x5dc0d229, 0x7d14b8c8, 0x86ad060c, 0xfc1ac21c, 0xa25f8e37,
0x23e553f1, 0xcfca2eb5, 0xda61f278, 0x7a6d0c2c, 0x10f72c33, 0xb9e7da31, 0xf0271ef1, 0xf6d8d0da, 0xccb9fb54,
0x9c16adcc, 0x9c793e5d, 0x308dbae0, 0x8152f53d, 0xb8b02ea8, 0xbb7a73ef, 0x5b52b6e7, 0xda7691a1, 0x6f15166f,
0x1bcf2abf, 0xed9eb801, 0xcc07f0d1, 0x30fd146a, 0xed552ed1, 0xfe280048, 0xca519936, 0xc6bb62d3, 0x78eb0ca9,
0xde25bf1e, 0x377099d1, 0x9e3d9a2a, 0x58d4fdc5, 0x9ef6d4ba, 0x4c4b801c, 0x8d5c098c, 0x84cad315, 0x43b323ca,
0xaff0262, 0x2b3be91f, 0xfd49761b, 0x93671206, 0x2460dd5e, 0x1328fc3, 0xa87f6e1a, 0xceebf4dc, 0x21f7d1d6,
0x8dafb785, 0x1f058aa4, 0xf636282e, 0xf5d5c6a2, 0xdcb85ea1, 0xea4ce0f2, 0xb37fcdaa, 0xadb4cd12, 0xa51b34b3,
0xb2aa712e, 0xa15f5bd, 0x617f127c, 0x7a5dbd16, 0x8aee5420, 0x4d0af701, 0xb2e113d9, 0xb4d09dcb, 0xd258e319,
0x704ec155, 0x533c80be, 0x400c952d, 0xc0dd74a1, 0xa9e5599f, 0xada9e64, 0xa775ef10, 0x35abb495, 0x238b1eb3,
0x5c8ea9e9, 0xd63ac5e, 0xecb22c6f, 0x836879b, 0xdb4958b0, 0x26606a34, 0x33fa456d, 0x91dc9940, 0xccbd103, 0x644cf9a7,
0x80165230, 0xb0e45576, 0x4d28c64d, 0x8d9841cc, 0x3d42c9d1, 0x6fce26aa, 0xe5bd6421, 0xd0e1eb58, 0xfd61f403,
0xdeff165, 0xd5a1bfb1, 0xb3323bbe, 0xdb641c02, 0xbfca7536, 0xb8f5820f, 0xda30db7b, 0xd76a9581, 0x61b8a87f,
0x5d8410c2, 0x4b2df093, 0xc96447e9, 0xc4ba2487, 0xb24afc5a, 0x797db008, 0xc362253a, 0xc6bbe115, 0x1cc0ed71,
0xabe73320, 0xc4364688, 0x5adef1c2, 0x59af22fb, 0xa9aca101, 0x4b5bac9b, 0xb121e519, 0xd8fcf69e, 0x2f0f0f89,
0xef615692, 0xd9fac700, 0x6729f5e, 0x15b5965f, 0x83a0e48a, 0xd80cd549, 0xc85443c6, 0xdb051d9e, 0x8646780f,
0x7e1bcd54, 0x7746aafa, 0xbc85c57a, 0x42430bc6, 0x36ab5fb6, 0x92e892ed, 0x87b8897f, 0xefcf526c, 0x6b10f264,
0xe72e284, 0x6fe2966, 0x42f18a1f, 0xdff79c2a, 0x77fbe8e7, 0x942c9858, 0x637710f, 0xad12b3b8, 0xcf786ed1, 0xd7cda884,
0x2cb1dcf1, 0x94f76ac0, 0xf7c4ebbe, 0x6d5591de, 0x6524ea76, 0x200d037e, 0xeb51ac71, 0x8b37601, 0xc9ac832,
0x7721b2a4, 0xca23beee, 0x328c7019, 0xd27fd8c8, 0xc5be7325, 0xe9244524, 0x5b1ea918, 0x74c75201, 0x37621445,
0xae75bef7, 0x174937dc, 0xf71c7cef, 0xf41d6ed3, 0x94c2d289, 0x7d68c2f0, 0xbddfcee6, 0x51d86ee8, 0x97379f95,
0x4275b8c2, 0xf9b3122c },
{ 0x6dbfa6dd, 0x6808c4be, 0x65fb06bd, 0xfde21a89, 0xf4c126b7, 0x438a1cc0, 0x850a843, 0x377114b2, 0x259c0fd,
0x5881f166, 0x6e9fa190, 0x899a312e, 0x8001b123, 0x56d91bd5, 0x31b9a6db, 0x5a4f1940, 0x98140dee, 0x73ad8506,
0x6649c267, 0x6fd7daa8, 0x682bb9e5, 0x7f9061dc, 0x27732a88, 0xa2755af7, 0x54b1b2ec, 0xc171fe6d, 0x33a31667,
0x9afc41e2, 0x396678d5, 0x83cb861, 0xfc473f10, 0x575a023e, 0xfe11cafc, 0xe8ea4057, 0x1289aaa7, 0xa38ef05a,
0x502c3f4a, 0xcb0928e9, 0x8d521829, 0x24c29091, 0xc07fbd37, 0x30cad78f, 0xcd8dba45, 0xc8ccbce8, 0xfdaee556,
0x2a1fc86f, 0x8206edd4, 0x14c2ec89, 0xf0050d48, 0x31f5c320, 0xa5626fd9, 0x19ca606d, 0x65f46320, 0x43e58985,
0xe3f777da, 0x4b9fa89e, 0xf3532d19, 0x1e63ee86, 0xa4c0f1b1, 0x56e691ed, 0xc79b5aa3, 0x1d005b01, 0x7ff86805,
0xed4f0ce3, 0x167128ab, 0x96702d6b, 0x6f2cb666, 0x40d6b43d, 0x7f2e27f9, 0x25813783, 0xf06f47fe, 0xa1eb246e,
0xe11c9c3f, 0x165237ab, 0xa9719981, 0xe0c072ef, 0xbc1430c8, 0x319018e0, 0x65323013, 0xa6337184, 0xe1c06cf0,
0x2c99ecdc, 0xd682f79f, 0x2ebde8d2, 0xbdeca5a8, 0xb85ab458, 0xabc0be15, 0x5ed69b9d, 0x28bf53d3, 0x791d867b,
0x86e6a98a, 0xba722e1c, 0x2311281a, 0xc8cce88d, 0x6c2d3743, 0xf868a752, 0xe0b86a8a, 0x70058bb9, 0xba926231,
0x86a5a32c, 0x3e907ed6, 0x6f03f61e, 0xa87fbe48, 0xa09e8eaa, 0xdd78f5b, 0x622c29eb, 0x26cce112, 0x57215e0f,
0xf9d9b37d, 0xc195133e, 0x703bd721, 0x27f1319b, 0xdccf0b77, 0xb73b7af4, 0xc9f75f9e, 0xf5c62fcb, 0x7293703,
0xeed8b98f, 0x4a9bf102, 0x7349d5c7, 0xda6f8b23, 0x34529af2, 0x968579a9, 0x986d4e5f, 0x8d1903a2, 0x8960df2e,
0x4dccb15c, 0x6a87f919, 0x8bc8e948, 0x82c8274c, 0x52f8bb80, 0xb3b5512c, 0x6b51a116, 0x16abf8e9, 0x99e48bf6,
0xea03be4e, 0xa0766e91, 0x75e2c7e, 0x237be6a5, 0x8c1bd482, 0x473541f5, 0xc4af608b, 0xed686762, 0x1bf0cfc1,
0x4844f0ca, 0x6a9a1980, 0x9d01dbf5, 0x10660435, 0x72fb5e04, 0xbf3de5a3, 0x21fbb319, 0xd303ed2f, 0xa30d610a,
0x76ff38bb, 0x87136fca, 0xa4d11a77, 0xe6c197fd, 0x4e6bc1d1, 0xf2a87aa9, 0xcc795622, 0xb82be2b4, 0x77487ed2,
0x2e7719ad, 0x142854f3, 0xe501258d, 0xb8556c95, 0x4e1a1309, 0x3d74b894, 0xfc1b626d, 0xcff955ec, 0x33bdc46f,
0xed6091ef, 0x645f4f02, 0x7707e28a, 0x556f385a, 0xf8758408, 0xb06b762e, 0xa698d074, 0x46147980, 0x22668afc,
0xdc1f5fa9, 0x245dc1d5, 0x32c87ded, 0xcfa4f49d, 0x734187b5, 0x700bc670, 0x97beeab3, 0x70f6ad54, 0xf0d6535d,
0x76e34811, 0xb734677, 0x7ddbb9d3, 0x2bd695ab, 0xdb2daa29, 0x35c9f605, 0xfc4be706, 0x6e44a54b, 0xa96c5fbe,
0x51e51ba6, 0xc4ebe8c7, 0xe103a24a, 0x842b0bac, 0xdfac2d6d, 0x1aed355d, 0xbdeafbde, 0x32338f9d, 0xaa634582,
0xe152c83a, 0x84be8504, 0x46291ed, 0x7b863e96, 0xdb6776f8, 0x20f815f2, 0xa82af75d, 0xab76c0f5, 0xd550efa2,
0xfd0330f1, 0x22e1fab0, 0x5f4407a3, 0x9b8e9e11, 0xeb1cadde, 0x3d104b1f, 0xc3054713, 0x982eb7fb, 0x543314da,
0x13ae6d5d, 0x56594d93, 0x7af9ddb3, 0x5dbd0b3c, 0xeca553d0, 0x5f892e42, 0xdc466104, 0xf3b8fe09, 0xea63cc0e,
0xe8187fa1, 0xf587d222, 0x762e3246, 0xe3134afd, 0xc8a909a3, 0x2a1b8843, 0xbcf88b37, 0x106d829d, 0xbc6cb72b,
0xba700358, 0x4419c67b, 0x298e5b99, 0x53633710, 0xb4676dfb, 0x5003bfdd, 0x4b1f3fd6, 0xbff5676e, 0xfe221749,
0x22769dec, 0xfa874d3f, 0xe3ab93a1, 0x7e7eac49 },
{ 0xda47873d, 0xb4067196, 0x35629fff, 0x5f9ba741, 0xfc3b885c, 0x7db96275, 0x4be65d7c, 0xaac5aaff, 0xc48e069f,
0xa2b51d88, 0x68efc326, 0x5dc94059, 0xf8fa7b3d, 0xc3e21cc2, 0xa619a16f, 0x46dec824, 0x399fea6, 0x8fc7db62,
0x184569be, 0xc5f04731, 0x90c0dea5, 0xc180bf5f, 0xfccbd6c9, 0x49d7a598, 0x96425151, 0xe53c49fb, 0x15713840,
0xcea6a8a0, 0x5c360e6b, 0x8278ef53, 0xa45ce852, 0xaf1fa60d, 0xd1d357d4, 0xcac8c677, 0x1258a65b, 0x561cc841,
0xe73da602, 0x907e2447, 0xe62e297f, 0x107a743, 0xb0d19719, 0x84bb247a, 0xf8077268, 0xd5f63d60, 0xd9a141de,
0x3486e6a4, 0xbe1052bf, 0x5be4fa46, 0xe792c9c8, 0xb9fbf3b0, 0xcfd36c94, 0x726aa896, 0x683cd337, 0x392a533a,
0x223657a2, 0xf83da285, 0x16c1a03f, 0x68bdbcf5, 0xada3c5ab, 0x124148a8, 0xe7d2a95c, 0xd11922ac, 0x4c6899fd,
0x7d8edf38, 0x118e9247, 0x15c6f2f0, 0x9056dd9f, 0x33520052, 0x7204913c, 0x3171d62d, 0x25d9ff0b, 0x8b629a57,
0xc3ea9218, 0x699e2abf, 0xa9ff8e0f, 0x14dd1c3e, 0xee95bbe7, 0xa2e277c9, 0xd3966991, 0xce4fb1c6, 0x62f9c9,
0x24bee229, 0xc677cc3e, 0x2163ca36, 0xbf6dd3f1, 0x7ae4222f, 0x4322f038, 0x692542df, 0x6692aca0, 0xf6d4946f,
0x89154cfd, 0x9f6a7dbc, 0x104ea9f0, 0x89e3289, 0x87c95990, 0xf945a420, 0xb6a20072, 0x5b630e87, 0x848636c0,
0xa48bb210, 0x4d5494bb, 0x7b7fb94f, 0xc48841b7, 0x422a2e4, 0x6d915a09, 0xcdabb5a5, 0xa36a9dd3, 0x2b321655,
0xe7bd69cf, 0x8c5a8dd8, 0x74615473, 0x8c143ade, 0x6cb1ce59, 0x4396f842, 0xfccbf901, 0xf39018b0, 0x576ba9f5,
0x97aeb15d, 0x6f7df74, 0x30f10bb9, 0x214789d7, 0xdf5edc71, 0xcdd4d413, 0x4e26b481, 0xa96771c4, 0xfbbf9600,
0x61b03c10, 0xb41ec41b, 0x50e85e2c, 0x9ae79ae9, 0x1bffa793, 0x18402dde, 0x3a896084, 0x604aca05, 0xf0370269,
0x83f6b326, 0xfb64099a, 0xabf943bf, 0xe9aa8b99, 0x54ec3adb, 0xa56b3a46, 0x71c05f89, 0x4a7f1444, 0xdf991094,
0x8f5efd28, 0x9ad00ad5, 0x3cbee3c, 0xf5898fc4, 0x692ba57, 0x1928304a, 0x2978de0f, 0x64f85786, 0x62b4f525,
0xda78ad05, 0xb3da431b, 0xdde89dde, 0xcc7da3d9, 0xbde46885, 0xd26c42cf, 0xa7850e7c, 0xff3b73d, 0xd60665a5,
0x825b2d8c, 0xbce1ba7, 0x12be55de, 0x7cf29faa, 0x71a29eca, 0xbd067b1a, 0x2e33857, 0xf0c7e782, 0x9ac9f181,
0x61d9b196, 0x288412eb, 0x756010ba, 0x20f99e06, 0x67e6cb96, 0xd1efb6, 0x1a4dfffb, 0x9d097c31, 0x6890b138,
0xa162f385, 0x5038a02a, 0xdcca2edc, 0xd68af382, 0xed5c9bb, 0xe88cf6c4, 0x4c031e98, 0xca08127b, 0xc67a831f,
0x306fb3f6, 0x9d7315c5, 0x2c72ae76, 0xdd3b3ecc, 0x2ab71490, 0x6e79ef13, 0xe6aa6316, 0x3729bfbc, 0xa13c9bea,
0xa4fa53c, 0xdbafeec6, 0x57a11cc2, 0x8f1be1ba, 0x542a4d3b, 0x8f9c90c4, 0xa2b3ad9f, 0x8951b50, 0xda0641dd,
0xd7cdf19b, 0xebe79e9b, 0x7d6ae548, 0x2ae7eb6f, 0x3ebefb7f, 0xb9cf555d, 0x22b46357, 0x963e79b5, 0x81729e6f,
0xa0657b30, 0x297d0ea1, 0x2d722676, 0xd7c263c7, 0x8fd31545, 0x74b4d545, 0xc9ddb768, 0xd7af1a95, 0x3b41452d,
0xeaa84874, 0x3094af86, 0xc71461f6, 0x8cd49c9b, 0x9d6f96b1, 0x9b45bb4c, 0x58742714, 0x29b19a6a, 0xa85bddc6,
0xb1e0cf54, 0xb55e81d4, 0xcb219b85, 0xcea74b66, 0xd28a041e, 0xe28c4803, 0x490de006, 0x19bb91b1, 0x14d67500,
0x80243406, 0x1ed8b3e, 0xef5636b3, 0x956f13bd, 0x9ae34304, 0xaea37a2c, 0xc90fe0b9, 0x2301fb8f, 0x55716d77,
0xc50297f7, 0x3cabc6a4, 0xa0764bb0, 0xcf38a2a2 }
};

/*
P盒和S盒根据密钥进行变换
因为我们直接替换成变换后的P盒和S盒,所以不需要调用
*/
void getkey(char *keytext)
{
int i = -1, j = 0;
unsigned long key[18];
while (keytext[++i]);
while (i<72) keytext[i++] = 0;
memcpy(key, keytext, 72);
for (i = 0; i<18; i++) pbx[i] ^= key[i];
key[0] = key[1] = 0;
for (i = 0; i<18; i += 2)
{
blowfish_encrypt(key, key);
memcpy(&pbx[i], key, 8);
}
for (i = 0; i<4; i++)
{
for (j = 0; j<256; j += 2)
{
blowfish_encrypt(key, key);
memcpy(&sbx[i][j], key, 8);
}
}
}


void blowfish_encrypt(void *protext, void *ciptext)
{
int i = 0;
unsigned long x[2], temp;
memcpy(x, protext, 8);
for (i = 0; i<16; i++)
{
x[0] ^= pbx[i];
x[1] ^= f(x[0]);
temp = x[1];
x[1] = x[0];
x[0] = temp;
}
temp = x[1];
x[1] = x[0];
x[0] = temp;
x[0] ^= pbx[17];
x[1] ^= pbx[16];
memcpy(ciptext, x, 8);
printf("0x%x,0x%x\n", x[0], x[1]);
}

void blowfish_decrypt(void *protext, void *ciptext)
{
int i = 0;
unsigned long x[2], temp;
memcpy(x, ciptext, 8);
for (i = 17; i >= 2; i--)
{
x[0] ^= pbx[i];
x[1] ^= f(x[0]);
temp = x[1];
x[1] = x[0];
x[0] = temp;
}
temp = x[1];
x[1] = x[0];
x[0] = temp;
x[0] ^= pbx[0];
x[1] ^= pbx[1];
memcpy(protext, x, 8);
printf("0x%x,0x%x\n", x[0], x[1]);
}

unsigned long f(unsigned long x)
{
unsigned long a, b, c, d;
a = (x & 0xff000000) >> 24;
b = (x & 0x00ff0000) >> 16;
c = (x & 0x0000ff00) >> 8;
d = (x & 0x000000ff) >> 0;
return(((sbx[0][a] + sbx[1][b]) ^ sbx[2][c]) + sbx[3][d]);
}

int main()
{
char data[] = "abcdefgh";
char cipher[]={ 0xBF, 0x4E, 0x6F, 0x54, 0x7B, 0x93, 0xED, 0xB4 };//0x6d616768,0x30447b65
//0x7E, 0xA0, 0xD2, 0x82, 0xDD, 0xEF, 0xD3, 0x13->0x7530795f,0x3465725f
//0x0F, 0xAE, 0x09, 0x22, 0x61, 0xDF, 0x4E, 0x59->0x5f563131,0x336b3131
//0x2C, 0x78, 0x33, 0xB9, 0x32, 0xE5, 0x07, 0x1C->0x7456395f,0x7d6e6f68
//blowfish_encrypt(data, cipher);
blowfish_decrypt(data, cipher);
}

为什么密钥什么都行,因为我们动态调试过后找到了p和s盒,如果没找到就要用到密钥了.

misc

卡中毒

镜像分析,先找到可疑文件flag.txt.txt.WannaRen

用filedump下来

然后用网上wannaren解密,得到佛说的话,解密就行

crypto

Multi Prime RSA

这个题我感觉我做的有点问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import binascii
import gmpy2
p = 61789932148719477384027458333380568978056286136137829092952317307711908353477
q = 91207969353355763685633284378833506319794714507027332929290701748727534193861
r = 105471299607375388622347272479207944509670502835651250945203397530010861809367
s = 83153238748903772448138307505579799277162652151244477391465130504267171881437
n = 1039344372165087100001063920598151812324151064684841845250974758525265148567706103784958424873181721352440209284812493753972556519482026327282644619091466886523804841248277210353173383407944598453848113815866908595335619458549486958764490103808475329598085842184963065068499489886467911087295087163762599284622055185456905774507245781667293199205317692029829495961487347944813874415423771980660778986211145841712412631156369129146470119135136378158203459576596246169191419488560832734046076107673091995860021863239882608638458149930255944184863801278386551031980146460231515747754411678651752698881001464973981424240781413084941947261875289725538959720572496329348499870580057997540844488309111059240745081048324762866572948371222839278718034435739827677190025500802453626872356208612718417249649474571197167076916403582394186357812640566250930361276229969553128128312736245440129556020108188835966131425956431796417720436474093381770796431629523054378258497546013222494974549262140415585158985940966415459478150722832119691308697510189026447359189994055885090735411738332296254011208547676914004864732327863884217733456287369771087094514708468685641820375220835485053482570852619363091173324203334503461823983610886849930944250553928855506012684504211525542998575275626784129736345142772399109273619522445919
e = 65537
c = 844677395496466411520394190869787261209960246734415406217975986418865760680024542119231873259131861208878522030009923057991526761346423130242121884493257732067700857897379859545356609151834223804262174935191718271211809221730601602827122249238086030580971376104724987801049500689134122609834321586609223761140538079460830213824674361601046367637227094018381901291488659642720549583856812747877519600804325570421770575999289389175021646347371879234023647657507178519047236746071420327155188213839293382288787853777540226192644761028822256165706787395891134765908229036044468473519166141610604791485071702808854944672418124203289328124793348198048601338476086482318248264508789781967910205393740835345086784345145351367491197717933757414967811594913692588314161669333147733048171044386546892346475181197482702164468542430187885074163177843285948999943328049159021873821254267471067523609151007885131921896462161216356454116929796355815756642621369974260365378070336290542971599886325232821981080341858950609157813769416455337935096696635623426418166316737131174435618543058086342714723330814586496030805366321181723292731710369013923285787724941830672247377301048663929453294620044701627159066468762709113137517559435822623284148112827473010030736329596829357275518641576798298066541516764673029908084962144713
n=p*q*r*s
phi=(p-1)*(q-1)*(r-1)*(s-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(binascii.unhexlify(hex(m)[2:].strip("L")))
#b'hgame{EulEr:fUNcTIon;iS.So*IMpORTaNt*In&RsA}'
#很懵逼,不知道为什么

我不理解为啥这样对了??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import libnum

p = 109056753224725357860050862987465749131702509174531265860789564184166504627089
q = 64871884070495743485110397060920534297122908609816622599229579748089451488127
r = 73817195552029165561107245309535744382442021553254903166961729774806232509583
s = 89907870347457693114161779597928900080173728317019344960807644151097370118553
n = 337945247991531188630780631650822497552908401425959508214145019590891175999570651678385514599227649321033438265588883204645721459926338248032512615537333971869461679586403649697114789385472197685140603238299768873935137939123021910982793481655218061907401584383081422244812725080939394854989735528833013780919908024635812696998644603525843637686545709789908672408993923182946718279531020289767042649725545073526307769817097790005360720650079676982379162926484355121626302801800589993422729725583400678081766553017405965706770238634252836827793877622715474210575752508172785712202444441372140501379422725172250199713113954442223362073485143579617841236442644760494913432967541691532709842303408702693199269606594116690052170245340072114122287646793344327315326489574192325790848798131621842606487734721409882742631176999703502149639410263361145441889337623403361569958342141903891414217371443118527025041591219747780100510414268546884029077010164415049298406632069845430841542680166802473749172801804659277821899576403669845353379213803866969800665351300325701817179936198902427032684058452719607840314873315299975603264092020097224735237221994922702705781103002327285724125001893421030923788361576161461965707958695720464547129911053732747399113017747456439027947305796290572816318795181398935020951025833913
e = 65537
c = 281020926647419736778465777714512241989738235339105762863874725870511725155101862585192241287617168165290485944476735304459717602798728005687755713662466866091315959960168862035396245078850168822145228676116894754613436735897122137945552880864031115366493898382809812977280234389519365119627504653135151731589924405933589175425427189436855517194951589952822691774400942764910734054237756669945324833759799471068481769516338068810710333940167779043544371586185132920304774984746129764220081092726473696111126293966890901487735046101991609292612206984184161394385767762455321150541601949740631911175736268756408775307673610842645555513631617648877296855194327486811545670357137463942744122553468603244298691801028147147418563982169678640270746871085722092365159546820433098926679284504740402248142173715649451061037156261913601096905601577932894877435316535261789072594174871292814951406337447799051502635390866434813419165738873787323716033378045850292413169255965421404580559241351577058726176436504950558398769061998430771982995850759810867299728407860522399699076192754977454139708618158667289120827143703464056583125568576691058753072898162981956883451252542611323974071518397220203389962420073122776649094369816178685947397943358134020598211306649724455966463885765977564934172273334309312046278116760547


flag = ''
phi = (p**2-p)* (q**3-q**2) * (r**5-r**4) * (s**7-s**6)
d = libnum.invmod(e,phi)
flag = libnum.n2s(pow(c,d,n))
print(flag)

大佬们的脚本是这样的

RSA Attack 3

维纳攻击

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
import gmpy2
def transform(x,y): #使用辗转相处将分数 x/y 转为连分数的形式
res=[]
while y:
res.append(x//y)
x,y=y,x%y
return res
def continued_fraction(sub_res):
numerator,denominator=1,0
for i in sub_res[::-1]: #从sublist的后面往前循环
denominator,numerator=numerator,i*numerator+denominator
return denominator,numerator #得到渐进分数的分母和分子,并返回
\#求解每个渐进分数
def sub_fraction(x,y):
res=transform(x,y)
res=list(map(continued_fraction,(res[0:i] for i in range(1,len(res))))) #将连分数的结果逐一截取以求渐进分数
return res



def get_pq(a,b,c): #由p+q和pq的值通过维达定理来求解p和q

par=gmpy2.isqrt(b*b-4*a*c) #由上述可得,开根号一定是整数,因为有解

x1,x2=(-b+par)//(2*a),(-b-par)//(2*a)

return x1,x2



def wienerAttack(e,n):

for (d,k) in sub_fraction(e,n): #用一个for循环来注意试探e/n的连续函数的渐进分数,直到找到一个满足条件的渐进分数

if k==0: #可能会出现连分数的第一个为0的情况,排除
continue
if (e*d-1)%k!=0: #ed=1 (mod φ(n)) 因此如果找到了d的话,(ed-1)会整除φ(n),也就是存在k使得(e*d-1)//k=φ(n)
continue
phi=(e*d-1)//k #这个结果就是 φ(n)
px,qy=get_pq(1,n-phi+1,n)
if px*qy==n:
p,q=abs(int(px)),abs(int(qy)) #可能会得到两个负数,负负得正未尝不会出现
d=gmpy2.invert(e,(p-1)*(q-1)) #求ed=1 (mod φ(n))的结果,也就是e关于 φ(n)的乘法逆元d
return d

print("该方法不适用")

n = 507419170088344932990702256911694788408493968749527614421614568612944144764889717229444020813658893362983714454159980719026366361318789415279417172858536381938870379267670180128174798344744371725609827872339512302232610590888649555446972990419313445687852636305518801236132032618350847705234643521557851434711389664130274468354405273873218264222293858509477860634889001898462547712800153111774564939279190835857445378261920532206352364005840238252284065587291779196975457288580812526597185332036342330147250312262816994625317482869849388424397437470502449815132000588425028055964432298176942124697105509057090546600330760364385753313923003549670107599757996810939165300581847068233156887269181096893089415302163770884312255957584660964506028002922164767453287973102961910781312351686488047510932997937700597992705557881172640175117476017503918294534205898046483981707558521558992058512940087192655700351675718815723840568640509355338482631416345193176708501897458649841539192993142790402734898948352382350766125000186026261167277014748183012844440603384989647664190074853086693408529737767147592432979469020671772152652865219092597717869942730499507426269170189547020660681363276871874469322437194397171763927907099922324375991793759

e = 77310199867448677782081572109343472783781135641712597643597122591443011229091533516758925238949755491395489408922437493670252550920826641442189683907973926843505436730014899918587477913032286153545247063493885982941194996251799882984145155733050069564485120660716110828110738784644223519725613280140006783618393995138076030616463398284819550627612102010214315235269945251741407899692274978642663650687157736417831290404871181902463904311095448368498432147292938825418930527188720696497596867575843476810225152659244529481480993843168383016583068747733118703000287423374094051895724494193455175131120243097065270804457787026492578916584536863548445813916819417857064037664101684455000184987531252344582899589746272173970083733130106407810619258077266603898529285634495710846838011858287024329514491058790557305041389614650730267774482954666726949886313386881066593946789460028399523245777171320319444673551268379126203862576627540177888290265714418064334752499940587750374552330008143708562065940245637685833371348603338834447212248648869514585047871442060412622164276894766238383894693759347590977926306581080390685360615407766600573527565016914830132066428454738135380178959590692145577418811677639050929791996313180297924833690095

d=wienerAttack(e,n)

print("d=",d)

#d= 13094612077654083919

#e特别大,先求d
1
2
3
4
5
6
7
8
import libnum
d= 13094612077654083919
c = 165251729917394529793163344300848992394021337429474789711805041655116845722480301677817165053253655027459227404782607373107477419083333844871948673626672704233977397989843349633720167495862807995411682262559392496273163155214888276398332204954185252030616473235814999366132031184631541209554169938146205402400412307638567132128690379079483633171535375278689326189057930259534983374296873110199636558962144635514392282351103900375366360933088605794654279480277782805401749872568584335215630740265944133347038070337891035560658434763924576508969938866566235926587685108811154229747423410476421860059769485356567301897413767088823807510568561254627099309752215808220067495561412081320541540679503218232020279947159175547517811501280846596226165148013762293861131544331444165070186672186027410082671602892508739473724143698396105392623164025712124329254933353509384748403154342322725203183050328143736631333990445537119855865348221215277608372952942702104088940952142851523651639574409075484106857403651453121036577767672430612728022444370874223001778580387635197325043524719396707713385963432915855227152371800527536048555551237729690663544828830627192867570345853910196397851763591543484023134551876591248557980182981967782409054277224
n = 507419170088344932990702256911694788408493968749527614421614568612944144764889717229444020813658893362983714454159980719026366361318789415279417172858536381938870379267670180128174798344744371725609827872339512302232610590888649555446972990419313445687852636305518801236132032618350847705234643521557851434711389664130274468354405273873218264222293858509477860634889001898462547712800153111774564939279190835857445378261920532206352364005840238252284065587291779196975457288580812526597185332036342330147250312262816994625317482869849388424397437470502449815132000588425028055964432298176942124697105509057090546600330760364385753313923003549670107599757996810939165300581847068233156887269181096893089415302163770884312255957584660964506028002922164767453287973102961910781312351686488047510932997937700597992705557881172640175117476017503918294534205898046483981707558521558992058512940087192655700351675718815723840568640509355338482631416345193176708501897458649841539192993142790402734898948352382350766125000186026261167277014748183012844440603384989647664190074853086693408529737767147592432979469020671772152652865219092597717869942730499507426269170189547020660681363276871874469322437194397171763927907099922324375991793759
m = pow(c,d,n)
print (libnum.n2s(m))
#有n,c,d就用这个
#b'hgame{dO|YOU:kNOw!tHE*PRINcIplE*bEhInd%WInNEr#aTTacK}'

hgame-week4

crypto

ECC

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
from Crypto.Util.number import getPrime
from libnum import s2n
from secret import flag

p = getPrime(256)
a = getPrime(256)
b = getPrime(256)
E = EllipticCurve(GF(p),[a,b])
m = E.random_point()
G = E.random_point()
k = getPrime(256)
K = k * G
r = getPrime(256)
c1 = m + r * K
c2 = r * G
cipher_left = s2n(flag[:len(flag)//2]) * m[0]
cipher_right = s2n(flag[len(flag)//2:]) * m[1]

print(f"p = {p}")
print(f"a = {a}")
print(f"b = {b}")
print(f"k = {k}")
print(f"E = {E}")
print(f"c1 = {c1}")
print(f"c2 = {c2}")
print(f"cipher_left = {cipher_left}")
print(f"cipher_right = {cipher_right}")

这个题就是将flag分成了两份,我们只用求出m就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
p = 74997021559434065975272431626618720725838473091721936616560359000648651891507
a = 61739043730332859978236469007948666997510544212362386629062032094925353519657
b = 87821782818477817609882526316479721490919815013668096771992360002467657827319
k = 93653874272176107584459982058527081604083871182797816204772644509623271061231
E = EllipticCurve(GF(p),[a,b])
c1 = E(14455613666211899576018835165132438102011988264607146511938249744871964946084, 25506582570581289714612640493258299813803157561796247330693768146763035791942)
c2 = E(37554871162619456709183509122673929636457622251880199235054734523782483869931, 71392055540616736539267960989304287083629288530398474590782366384873814477806)
cipher_left = 68208062402162616009217039034331142786282678107650228761709584478779998734710
cipher_right = 27453988545002384546706933590432585006240439443312571008791835203660152890619
m = c1 - k*c2
cipher_left = cipher_left * inverse_mod(int(m[0]), p) % p
cipher_right = cipher_right * inverse_mod(int(m[1]), p) % p
print(cipher_left, cipher_right)

这个要用sage来解,并不是python。。。。坑死我,找到了个在线解。https://sagecell.sagemath.org/

得到:493033149237009446036260 127480900256551022095393917

用n2s解密一下,就行。

hgame{Ecc$is!sO@HaRd}

PRNG

这个题极客也有,也没有魔改,直接那脚本:from libnum import n2s

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
from libnum import n2s
from PRNG import PRNG
class TemperInverser:
def __inverse_right_shift_xor(self, value, shift):
i, result = 0, 0
while i * shift < 32:
part_mask = ((0xffffffff << (32 - shift)) & 0xffffffff) >> (i * shift)
part = value & part_mask
value ^= part >> shift
result |= part
i += 1
return result
def __inverse_left_shift_xor(self, value, shift, mask):
i, result = 0, 0
while i * shift < 32:
part_mask = (0xffffffff >> (32 - shift)) << (i * shift)
part = value & part_mask
value ^= (part << shift) & mask
result |= part
i += 1
return result
def __call__(self, tempered):
value = tempered
value = self.__inverse_right_shift_xor(value, 18)
value = self.__inverse_left_shift_xor(value, 15, 0xefc60000)
value = self.__inverse_left_shift_xor(value, 7, 0x9d2c5680)
value = self.__inverse_right_shift_xor(value, 11)
return value

class MersenneTwisterCracker:
def __init__(self, data):
inverser = TemperInverser()
self.__mt = PRNG(0)
self.__mt.load_register(list(map(inverser, data)))

def __call__(self):
return self.__mt()
data = [888058162, 3094055443, 1404990361, 1012543603, 448723884, 2580444236, 201608779, 1062995809, 1348787313, 2980019361, 2245025385, 494977308, 4042503808, 275744301, 406611131, 142226472, 3871761759, 3888795536, 2617489687, 1220227074, 342928858, 3728958896, 1477077966, 1433151407, 1119405037, 330145973, 3547181160, 2123007249, 3739964132, 1794129718, 2739743522, 2291585121, 3013727731, 1536788463, 247633572, 408079265, 3025555185, 1604681922, 2848997116, 3646041955, 1059445774, 2849764176, 2638965889, 1232303180, 759521642, 2257008531, 3932082254, 1052428413, 4017559916, 3505694223, 1418363972, 477751107, 4266295945, 3832138928, 245251422, 1964323108, 2453472918, 3029032760, 323619451, 2548825339, 3410027991, 278143595, 816124107, 245705463, 4173686519, 4100831820, 3599257115, 2274885516, 3954736394, 198254482, 1050449178, 3933150558, 899220021, 597474632, 1823539097, 3340511318, 2144918682, 2310527451, 264391694, 69923676, 3266017310, 3199627722, 4035962745, 932969905, 2832951013, 2182887504, 1374919242, 2978944795, 1840647233, 3510878043, 3250544991, 4255542321, 804377010, 1286980519, 1980427321, 2893246724, 1745353148, 1406140332, 4101848568, 3227434698, 1869729934, 2638181242, 1270111849, 2387910792, 3411542702, 2793303435, 2455337459, 2802808043, 2418872990, 1043274549, 144911746, 2312236858, 780373658, 1527499811, 3402753408, 2617924770, 1659648360, 2714315441, 4202103851, 244677433, 1963258902, 3851363324, 3454195559, 813228826, 3944899734, 3697685234, 1613584167, 1874570879, 1592343033, 4194241173, 551902434, 3460909265, 4122075287, 176665387, 152849760, 3593212904, 952880017, 1793357635, 2052902220, 807859486, 334839380, 3485132343, 2113403566, 3259106798, 1443078482, 2434820318, 1347902400, 2344061487, 141766876, 2641586235, 287277458, 2385094526, 1510128758, 348957861, 2861038633, 1135611795, 4289024199, 1021202791, 2460872523, 3837050794, 4092005952, 52622948, 387056916, 3102913460, 4098715316, 154916530, 2890197932, 1441566957, 2368779800, 271808452, 3566810840, 2227022452, 316480679, 603893066, 2121889912, 4208763743, 3098334580, 721958838, 3848020801, 1029884135, 832405094, 2276817394, 981553190, 246940442, 1069231974, 3275216531, 58945988, 4100121200, 230446475, 2396021649, 4608139, 3468707911, 3249498323, 315898153, 3280797960, 388108494, 1110548082, 2357147660, 2336724751, 4047583630, 2108667879, 2784078579, 1170844412, 3920262445, 3564073655, 590490534, 1645945278, 2487463163, 434409966, 1563546251, 888601967, 1913513318, 1327448740, 2504517969, 304688984, 1443685450, 4040619940, 3601250858, 4097529433, 4260590151, 575843085, 1114360271, 2186035374, 2821388594, 3763206347, 4283149630, 4097168778, 1924538037, 3272064650, 1689166701, 1352331676, 520525342, 2954296222, 2629516330, 3674317458, 231784130, 1930132422, 4169222397, 1638784833, 1245667959, 1253759350, 1154928813, 66021172, 3217915692, 4159785573, 3798512628, 2945489695, 700725579, 3940231312, 1960713279, 3289722468, 2970919839, 1356139680, 1141841193, 629177162, 3696263539, 1084872874, 4294077062, 1115547807, 3421092527, 611575307, 7808529, 2784523837, 1267307982, 1538837032, 4038330055, 3262951566, 3139820067, 1249725729, 757191354, 3025188720, 291705345, 575676661, 3023956263, 1045504889, 205204207, 1777650027, 1956698897, 996147619, 1470431, 2275722398, 2666078800, 470333070, 1306693906, 2968672077, 2476023772, 2645573325, 3939390068, 2874886754, 4226430090, 2290851636, 3707585663, 109770347, 127373916, 815817847, 1565834917, 636869794, 4062053412, 583594822, 3782553071, 3293311273, 2801932604, 2647080862, 1514083254, 3534640458, 342361004, 3266111849, 2157351044, 1851728420, 3412596866, 2793236910, 3758306563, 1799548561, 952631672, 912455646, 2894404493, 2194084105, 119615608, 2071058651, 1524462411, 900936180, 3697554830, 3501838982, 2874465656, 2501478689, 1069024222, 3135689372, 1168458702, 1966524629, 36400028, 2704775319, 4030739700, 3985599923, 2778920518, 2669538325, 1951594393, 795749079, 665593501, 3007338649, 1535343068, 2031873237, 3202423789, 560224943, 1290838890, 2545130826, 695695377, 3048615291, 1957903923, 1986693779, 2594986519, 3396211122, 2625687092, 575329062, 2852671310, 3472799759, 715985207, 1660331651, 958648594, 305711662, 75621441, 548447557, 2473842353, 2110558182, 3321750402, 2415793078, 815198061, 1258834500, 972966677, 3267046345, 2923564883, 518207679, 1662309775, 278933232, 4294256390, 2444117793, 2241879973, 3915962245, 3836532482, 3449260219, 1092128833, 3177300913, 874588042, 1185436845, 2064537788, 364292705, 3802247898, 3122264959, 186651829, 2789447523, 797964681, 897671294, 1504956985, 2294012382, 3916152546, 177325516, 2741945226, 4188655695, 2738134558, 557326292, 1625014790, 2945266389, 1843516240, 644046640, 3853456819, 3456105042, 3467742754, 2885173326, 812088996, 1238970324, 766072156, 2675925963, 1667463511, 2808303112, 1638756770, 260047996, 1117661655, 346883777, 2268712532, 1904918136, 513102466, 1024624509, 2154277089, 4147814745, 3681688842, 2233642964, 3135674550, 1259551210, 3286048484, 4271168802, 4227197378, 3310884772, 2063705584, 791399172, 4069266828, 1511606526, 1047713396, 615906401, 2805111822, 499223767, 740832370, 351782725, 2258776891, 1837046713, 3969757168, 2873152110, 4214869805, 3416771254, 2527945969, 3279116532, 1217038009, 4014402228, 3696705795, 1877774112, 3928347956, 959715122, 1612979629, 4045688071, 2403021083, 424891533, 1887765641, 2090726432, 2897940431, 268403838, 3447542890, 575011346, 2559143209, 532649938, 3625398853, 2077769196, 1598653066, 3104923961, 3594500739, 675029389, 579180583, 2024117612, 1351780728, 654841863, 769835263, 1431012736, 2369300321, 4157341752, 1968305076, 2086919554, 3075265115, 2128974418, 3144501489, 3993066430, 1121959765, 1373765135, 4232964375, 2264170351, 11814235, 1797654983, 3382686935, 2541491040, 3540726136, 1330685654, 4123114026, 2521290625, 3357439706, 3331159097, 2298656231, 3446738535, 290996369, 3020977553, 849241175, 3469792522, 4119898263, 1339695718, 2125209134, 3620160106, 1063375386, 1656465852, 2505508266, 3958528861, 3497875682, 3112358345, 3675237811, 1109625127, 2672368219, 1983461371, 3579663373, 1969195060, 225618775, 653511251, 3508369415, 4127429853, 828877800, 4286770015, 1474706143, 870777512, 804917422, 3913439258, 2433991646, 2742831709, 4289045475, 2899508500, 185462457, 4178107803, 2671443073, 2701796854, 1170522896, 1599880638, 1410722361, 3977867960, 1263177666, 2159508450, 2704509681, 1540819416, 1836499452, 1667451095, 3799477506, 157146600, 3717470672, 89865758, 3815588203, 1929105788, 861643665, 684514017, 3519778437, 2712956097, 1004423983, 1540346552, 2617389519, 2754800020, 870994822, 1702399767, 3526294475, 3251290865, 2365820957, 1915675760, 1828371367, 3737352795, 2511512700, 1080446781, 2565191059, 2412448535, 3719988291, 1434643780, 4163492408, 1359345746, 1457543102, 2389534435, 2800945892, 2646700564, 1719588203, 999665519, 3120652917, 1800116770, 3247314137, 4261164550, 1503462948, 3017762189, 263481701, 1754772485, 869168639, 604192231, 498759780, 2602535702, 3346756344, 2836267314, 2073734260, 3445425559, 4051271696, 1647518162, 401835417, 1968629992, 2854677838, 2381566661, 3144829468, 519547510, 3058642603, 3944140819, 1248923220, 1050321901, 3218172519, 376999645, 184187381, 3837095155, 3363256702, 751966993, 3419533016, 4028456468, 1156797460]
cipher = [3437104340, 508103176, 1635844121, 878522509, 1923790547, 1727955782, 1371509208, 3182873539, 156878129, 1757777801, 1472806960, 3486450735, 2307527058, 2950814692, 1817110380, 372493821, 729662950, 2366747255, 774823385, 387513980, 1444397883]
mt = MersenneTwisterCracker(data)
print(b"".join(map(n2s,[part ^ mt() for part in cipher])))

参考wp的脚本

RE

由于最后太忙了,没打,做个复现,这周属实没上周难。

WOW

我们能看出flag是32位,那么我们先输入一个flag动调一下,发现是要和48行的数组进行比对,然后进行完,发现buf2又恢复输入了,那么可猜测第二次循环是解密过程,那么属于很想rc4的动调。

我们在48行设断点,然后输入32个a,然后找到buf2的位置,将unk中的值pasta data一下,然后调试到后面就出来了。

后悔没做,这500分不是轻轻松松。。。

ezvm

这道题很恶心,步骤很多,要一步一步调试,

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
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax

sub_401A40(argc, argv, envp);
std::__ostream_insert<char,std::char_traits<char>>(&libstdc___6__ZSt4cout, "input your flag:", 16i64);
std::endl<char,std::char_traits<char>>(&libstdc___6__ZSt4cout);
while ( 1 )
{
v3 = dword_404020[dword_404020[0] + 109];
if ( v3 == -1 )
return 0;
switch ( v3 )
{
case 0:
sub_401550(&dword_404020[3], (unsigned int *)&dword_404020[2]);
break;
case 1:
sub_401555(&dword_404020[2]);
break;
case 2:
sub_401559(&dword_404020[2]);
break;
case 3:
sub_40156C(&dword_404020[3], &dword_404020[7]);
break;
case 4:
sub_401578();
break;
case 5:
sub_40159B();
break;
case 6:
sub_4015BE();
break;
case 7:
sub_401605();
break;
case 8:
sub_40161B();
break;
case 9:
sub_401631();
break;
case 10:
sub_401647();
break;
case 11:
sub_40165D();
break;
case 12:
sub_40169E((unsigned int)dword_404020[6]);
break;
case 13:
sub_4016AE(dword_404020[6]);
break;
case 14:
sub_401571((unsigned int)dword_404020[2]);
break;
case 15:
sub_401673(dword_404020[3], dword_404020[5]);
break;
case 16:
sub_4016BE(&dword_404020[3]);
break;
case 17:
sub_4016D3(&dword_404020[3]);
break;
case 18:
sub_4016E4();
break;
case 19:
sub_40171A();
break;
case 20:
sub_401733();
break;
case 21:
sub_40155D();
break;
default:
break;
}
++dword_404020[0];
}
}

第一次先经过一波4 —> 1 —> 15 —> 13 —> 16,而这个会经历你输入的flag长度的次数,由于后面有一个0x20,那么可以推测flag长度为32位,那么这些步骤总的来说我认为是将我们输入的flag传到规定的地址。

下面是16函数:

1
2
3
4
5
6
7
8
int __fastcall sub_4016BE(int *a1)
{
int result; // eax

result = getchar();
*a1 = result;
return result;
}

很显然是输入单字符。

下面是15函数,显然是个compare函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall sub_401673(int a1, int a2)
{
if ( a1 == a2 )
{
dword_404040 = 0;
}
else if ( a1 >= a2 )
{
if ( a1 > a2 )
dword_404040 = 1;
}
else
{
dword_404040 = -1;
}
}

在前31次的调试中我发现a2这个是0xA,即回车。

然后经过32次后,我们能在虚拟地址中看到上传的flag。

接下来进行2 —> 18 —> 8 —> 18 —> 9 —> 0 —> 4 —> 15 —> 13,只进行了一次,对于input并无改变。

接下来在调试发现又是循环而且,input处的值发生了变化!

18 —> 9 —> 18 —> 10 —> 19 —> 18 —> 11 —> 21 —> 3 —> 20 —> 1 —> 0 —> 15 —> 13 —> 19 —→ 18 —> 11 —> 21 —> 3 —> 20 —> 1 —> 0 —> ……

我们直接找到几个重要的函数比如21

下面是21的函数:

1
2
3
4
5
6
7
8
int64 sub_40155D()
{
__int64 result; // rax

result = (unsigned int)(2 * dword_40402C);
dword_40402C *= 2;
return result;
}

经过动调发现这个地方是对输入进行乘2,即左移1位

然后再

进行跟进,发现3函数进行了异或:

1
2
3
4
5
6
7
8
int64 __fastcall sub_40156C(_DWORD *a1, unsigned int *a2)
{
__int64 result; // rax

result = *a2;
*a1 ^= result;
return result;
}

但这个异或的值好像并没有给数组,然后我在存入input后面的地址处发现了逐渐出现的数组

后来我又在后面的地址发现了数组。。。。。

1
[0x0000005E, 0x00000046, 0x00000061, 0x00000043, 0x0000000E, 0x00000053, 0x00000049, 0x0000001F, 0x00000051, 0x0000005E, 0x00000036, 0x00000037, 0x00000029, 0x00000041, 0x00000063, 0x0000003B, 0x00000064, 0x0000003B, 0x00000015, 0x00000018, 0x0000005B, 0x0000003E, 0x00000022, 0x00000050, 0x00000046, 0x0000005E, 0x00000035, 0x0000004E, 0x00000043, 0x00000023, 0x00000060, 0x0000003B]//异或的数组

再调试下去,将32位调试完成后,又进行13 —> 18 —> 10 —> 18 —> 18 —> 18 —> 8 —> 19 —> 15 —>

这个是对比,那么对比的数据在哪呢,对比的数据就在上面异或数据下:

1
[0x0000008E, 0x00000088, 0x000000A3, 0x00000099, 0x000000C4, 0x000000A5, 0x000000C3, 0x000000DD, 0x00000019, 0x000000EC, 0x0000006C, 0x0000009B, 0x000000F3, 0x0000001B, 0x0000008B, 0x0000005B, 0x0000003E, 0x0000009B, 0x000000F1, 0x00000086, 0x000000F3, 0x000000F4, 0x000000A4, 0x000000F8, 0x000000F8, 0x00000098, 0x000000AB, 0x00000086, 0x00000089, 0x00000061, 0x00000022, 0x000000C1]//最后对比数据

那么很容易写出脚本:

1
2
3
4
5
6
xor = [0x0000005E, 0x00000046, 0x00000061, 0x00000043, 0x0000000E, 0x00000053, 0x00000049, 0x0000001F, 0x00000051, 0x0000005E, 0x00000036, 0x00000037, 0x00000029, 0x00000041, 0x00000063, 0x0000003B, 0x00000064, 0x0000003B, 0x00000015, 0x00000018, 0x0000005B, 0x0000003E, 0x00000022, 0x00000050, 0x00000046, 0x0000005E, 0x00000035, 0x0000004E, 0x00000043, 0x00000023, 0x00000060, 0x0000003B]
data = [0x0000008E, 0x00000088, 0x000000A3, 0x00000099, 0x000000C4, 0x000000A5, 0x000000C3, 0x000000DD, 0x00000019, 0x000000EC, 0x0000006C, 0x0000009B, 0x000000F3, 0x0000001B, 0x0000008B, 0x0000005B, 0x0000003E, 0x0000009B, 0x000000F1, 0x00000086, 0x000000F3, 0x000000F4, 0x000000A4, 0x000000F8, 0x000000F8, 0x00000098, 0x000000AB, 0x00000086, 0x00000089, 0x00000061, 0x00000022, 0x000000C1]
flag = ""
for i in range(32):
flag += chr((data[i]^xor[i])//2)
print(flag)

这个题刚开始很难,但越做越爽越清晰,出的太好了!

server

这个题有点难度,我连rsa都没看出来,然后后面有两个异或还不好搞。

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
void main_HttpHandleFunc()
{
__int64 v0; // rax
__int64 v1; // rcx
__int64 v2; // r14
const char *v3; // rbx
__int64 v4; // rax
__int64 v5; // rcx
__int64 v6; // rdx
__int64 v7; // rsi
__int64 v8; // rbx
__int64 v9; // rax
__int64 v10; // [rsp+0h] [rbp-1368h]
__int64 v11; // [rsp+0h] [rbp-1368h]
__int64 v12; // [rsp+0h] [rbp-1368h]
__int64 v13; // [rsp+0h] [rbp-1368h]
__int64 v14; // [rsp+0h] [rbp-1368h]
__int64 v15[154]; // [rsp+8h] [rbp-1360h] BYREF
const char *v16; // [rsp+4D8h] [rbp-E90h]
__int64 v17; // [rsp+4E0h] [rbp-E88h]
__int64 v18; // [rsp+4E8h] [rbp-E80h]
__int64 v19; // [rsp+4F0h] [rbp-E78h]
char v20[1216]; // [rsp+4F8h] [rbp-E70h] BYREF
__int64 v21; // [rsp+9B8h] [rbp-9B0h]
char v22[1216]; // [rsp+9C0h] [rbp-9A8h] BYREF
__int64 v23; // [rsp+E80h] [rbp-4E8h]
char v24[1216]; // [rsp+E88h] [rbp-4E0h] BYREF
__int64 v25; // [rsp+1348h] [rbp-20h]
__int64 v26; // [rsp+1350h] [rbp-18h]
__int64 v27; // [rsp+1358h] [rbp-10h]
void *retaddr; // [rsp+1368h] [rbp+0h] BYREF
__int64 v30; // [rsp+1370h] [rbp+8h]
__int64 v33; // [rsp+1380h] [rbp+18h]

while ( (unsigned __int64)&retaddr < 0x12E8 || (unsigned __int64)&v15[15] <= *(_QWORD *)(v2 + 16) )
{
v30 = v0;
v33 = v1;
runtime_morestack_noctxt();
v0 = v30;
v1 = v33;
}
v27 = v1;
v10 = net_http___ptr_Request__ParseForm();
v3 = "flag";
v15[2] = net_http___ptr_Request__FormValue(v10, v15[0], v15[1]);
if ( "flag" )
{
v16 = "flag";
v25 = v4;
v5 = 0LL;
v6 = 0LL;
v7 = 0LL;
while ( (__int64)v3 > v5 )
{
v26 = v7;
v17 = v5;
v18 = v6;
v15[1] = strconv_FormatInt(v11, v15[0]);
v8 = v26;
v15[4] = runtime_concatstring2(v13, v15[0], v15[1], v15[2], v15[3]);
v5 = v17 + 1;
v6 = v8;
v7 = v9;
v3 = v16;
}
v19 = 99LL;
qmemcpy(v20, "U", sizeof(v20));
main_encrypt(); //加密过程
v23 = v11;
qmemcpy(v24, v15, sizeof(v24));
v21 = v19;
qmemcpy(v22, v20, sizeof(v22));
runtime_memequal();
v15[2] = runtime_convI2I(v11, v15[0], v15[1]);
v15[6] = fmt_Fprintf(v14, v15[0], v15[1], v15[2], v15[3], v15[4], v15[5]);
}
else
{
v15[2] = runtime_convI2I(v11, v15[0], v15[1]);
v15[6] = fmt_Fprintf(v12, v15[0], v15[1], v15[2], v15[3], v15[4], v15[5]);
}
}

我们进入这个加密

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
int64 __usercall main_encrypt@<rax>(__int64 a1, __int64 a2)
{
unsigned __int64 v2; // rax
unsigned __int64 v3; // rbx
__int64 v4; // r14
__int128 v5; // xmm15
__int64 v6; // rax
__int64 v7; // rax
__int64 v8; // rax
__int64 v9; // rax
unsigned __int64 v10; // rbx
const char *v11; // rax
unsigned __int64 v12; // rax
const char *v13; // rdx
__int64 v14; // rax
__int64 v15; // rcx
__int64 v16; // r8
__int64 i; // rax
__int64 v18; // rdx
__int64 result; // rax
__int64 v20; // [rsp-28h] [rbp-5F0h]
__int64 v21; // [rsp-28h] [rbp-5F0h]
__int64 v22; // [rsp-28h] [rbp-5F0h]
__int64 v23; // [rsp-28h] [rbp-5F0h]
__int64 v24; // [rsp-20h] [rbp-5E8h]
__int64 v25; // [rsp-20h] [rbp-5E8h]
__int64 v26; // [rsp-20h] [rbp-5E8h]
__int64 v27; // [rsp-18h] [rbp-5E0h]
__int64 v28; // [rsp+20h] [rbp-5A8h]
char v29[1216]; // [rsp+28h] [rbp-5A0h] BYREF
__int64 v30; // [rsp+4E8h] [rbp-E0h]
__int64 v31; // [rsp+4F0h] [rbp-D8h]
__int64 v32; // [rsp+4F8h] [rbp-D0h]
char v33; // [rsp+500h] [rbp-C8h]
__int64 v34; // [rsp+508h] [rbp-C0h]
__int128 v35; // [rsp+510h] [rbp-B8h]
char v36; // [rsp+520h] [rbp-A8h]
__int64 v37; // [rsp+528h] [rbp-A0h]
__int128 v38; // [rsp+530h] [rbp-98h]
char v39; // [rsp+540h] [rbp-88h]
__int64 v40; // [rsp+548h] [rbp-80h]
__int128 v41; // [rsp+550h] [rbp-78h]
char v42; // [rsp+560h] [rbp-68h]
__int64 v43; // [rsp+568h] [rbp-60h]
__int128 v44; // [rsp+570h] [rbp-58h]
char v45; // [rsp+580h] [rbp-48h]
__int64 v46; // [rsp+588h] [rbp-40h]
__int128 v47; // [rsp+590h] [rbp-38h]
char v48; // [rsp+5A0h] [rbp-28h]
__int64 v49; // [rsp+5A8h] [rbp-20h]
__int128 v50; // [rsp+5B0h] [rbp-18h]

while ( (unsigned __int64)&v29[48] <= *(_QWORD *)(v4 + 16) )
{
STACK[0xA98] = v2;
STACK[0xAA0] = v3;
runtime_morestack_noctxt();
v2 = STACK[0xA98];
v3 = STACK[0xAA0];
}
STACK[0xAA0] = v3;
STACK[0xA98] = v2;
memset(&a2, 0, 0x4C0uLL);
v48 = 0;
v49 = 0LL;
v50 = v5;
math_big___ptr_Int__SetString();
v30 = v6;
v45 = 0;
v46 = 0LL;
v47 = v5;
v20 = math_big___ptr_Int__SetString();
v42 = 0;
v43 = 0LL;
v44 = v5;
v24 = math_big___ptr_Int__Mul(v20);
v31 = v7;
v39 = 0;
v40 = 0LL;
v41 = v5;
math_big___ptr_Int__SetString();
v32 = v8;
v36 = 0;
v37 = 0LL;
v38 = v5;
v21 = math_big___ptr_Int__SetString();
v33 = 0;
v34 = 0LL;
v35 = v5;
v27 = math_big___ptr_Int__Exp(v21, v24);
if ( v9 )
{
math_big_nat_itoa(v22, v25, v27);
v10 = v12;
runtime_slicebytetostring(v23, v26, v27);
}
else
{
v10 = 5LL;
v11 = "<nil>";
}
v28 = 0LL;
v13 = v11;
memset(v29, 0, sizeof(v29));
v14 = 0LL;
v15 = 102LL;
while ( v14 < 153 )
{
if ( v14 >= v10 )
runtime_panicIndex();
v16 = (unsigned __int8)v13[v14];
*(_QWORD *)&v29[8 * v14++ - 8] = v16 ^ v15;
v15 = v16;
}
for ( i = 0LL; i < 153; ++i )
{
v18 = *(_QWORD *)&v29[8 * i - 8];
*(_QWORD *)&v29[8 * i - 8] = v18 ^ v15;
v15 = v18;
}
result = v28;
qmemcpy(&a2, v29, 0x4C0uLL);
return result;
}

我们现在知道了p,q,e,那么我们只需要知道密文即可,这道题的密文缺了最后一位,因为我们无法得知最后一位异或的值,所以才用爆破的方法,我找了两位师傅写的,我认为写的非常好

舍去不能转换成可见字符的。

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
# -*- coding:utf-8 -*-
import gmpy2
from Crypto.Util.number import long_to_bytes
# res 相当于 round_2
res=[0x63,0x55,0x4,0x3,0x5,0x5,0x5,0x3,0x7,0x7,0x2,0x8,0x8,0xb,0x1,0x2,0xa,0x4,0x2,0xd,0x8,0x9,0xc,0x9,0x4,0xd,0x8,0x0,0xe,0x0,0xf,0xd,0xe,0xa,0x2,0x2,0x1,0x7,0x3,0x5,0x6,0x4,0x6,0x7,0x6,0x2,0x2,0x5,0x3,0x3,0x9,0x6,0x0,0xb,0xd,0xb,0x0,0x2,0x3,0x8,0x3,0xb,0x7,0x1,0xb,0x5,0xe,0x5,0x0,0xa,0xe,0xf,0xd,0x7,0xd,0x7,0xe,0x1,0xf,0x1,0xb,0x5,0x6,0x2,0xc,0x6,0xa,0x4,0x1,0x7,0x4,0x2,0x6,0x3,0x6,0xc,0x5,0xc,0x3,0xc,0x6,0x0,0x4,0xf,0x2,0xe,0x7,0x0,0xe,0xe,0xc,0x4,0x3,0x4,0x2,0x0,0x0,0x2,0x6,0x2,0x3,0x6,0x4,0x4,0x4,0x7,0x1,0x2,0x3,0x9,0x2,0xc,0x8,0x1,0xc,0x3,0xc,0x2,0x0,0x3,0xe,0x3,0xe,0xc,0x9,0x1,0x7,0xf,0x5,0x7,0x2,0x2,0x4]
p=92582184765240663364795767694262273105045150785272129481762171937885924776597
q=107310528658039985708896636559112400334262005367649176746429531274300859498993
n=p*q
e=950501
phin=(p-1)*(q-1)
d=gmpy2.invert(e,phin)
# i 相当于 cipher[len(cipher)-1],爆破的目标
for i in range(0x30,0x3a):
tmp1=[res[0]^i] # tmp1 相当于 round_1
for j in range(1,len(res)):
tmp1.append(res[j]^tmp1[j-1])
tmp2=[tmp1[0]^102]# tmp2 相当于 cipher
for j in range(1,len(tmp1)):
tmp2.append(tmp1[j]^tmp2[j-1])
wrong=0
for m in tmp2: # cipher 中每个元素都必须是十进制数字字符
if m<0x30 or m>0x39:
wrong=1
break
if wrong:
continue
if i==tmp2[len(tmp2)-1]:# 验证爆破的目标和还原出来的cipher[len(cipher)-1]是否相同
cipher=""
for k in tmp2:
cipher+=chr(k)
cipher_num=int(cipher)
m=gmpy2.powmod(cipher_num,d,n)# RSA解密
print(long_to_bytes(m))
# hgame{g0_and_g0_http_5erv3r_nb}

P1umH0师傅属实牛。go语言的逆向现在ida已经足够强大到可以搞定,没必要再用那些软件了。

hardasm

属实太难了,我参考了P1umH0师傅的解答,我学到了很多东西,这个7000行的代码审计真的离谱。

从此看出flag长度为32,

其实从上图我们或许能猜到,这个验证是对每一位进行的,输入后直接对比,对比完就跳转,我们输入hgame{aaaaaaaaaaaaaaaaaaaaaaaaaaaa},然后进入[rsp+70h+var_50]中发现似乎是正确的地方会返回0FFh,我们跟进jz这个条件

很显然对的就success,错的就error,error是通过rcx寄存器进行储存,下面一个函数是通过调用call printf实现打印正确或者错误,我们完全可以使用patch的方法,将printf打印的结果变成[rsp+70h+var_50]上的数据。

如何改呢:

首先用ida自带的assembled,改不了,这里面缺少很多汇编,我下了个keypatch还是不行,不知道什么问题,然后手撸字节码,

接下来我们要做的就是将可视字符串进行尝试,看对应位置是哪个ascii,通过0xff来进行判断!

那么现在我有两种方法,一个是手动试,另一种是写代码自动化,subprocess是再父进程里开子进程,将我们修改过的hardasm.exe作为子进程,代码如下:

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
# -*- coding:utf-8 -*-
import subprocess
real_flag="hgame{"#绝对正确的前6个字符
cur_index=6#当前爆破的位置
while cur_index<32:
for i in range(32,128):#当前爆破的位置上的字符
real_flag_arr = [0] * 32
for j in range(len(real_flag)):#正确的先复制一下
real_flag_arr[j]=ord(real_flag[j])
real_flag_arr[len(real_flag_arr)-1]=ord("}")#最后一个字符"}"固定
for j in range(len(real_flag_arr)-2,cur_index,-1):#除了当前爆破的位置,其他位置上都设置为32
real_flag_arr[j]=32
real_flag_arr[cur_index]=i#设置当前爆破的位置上的字符
real_flag_arr_s="".join(chr(k) for k in real_flag_arr)#输入到程序中的字符串
p = subprocess.Popen(["C:\\Users\\86159\\Documents\\Tencent Files\\506611735\\FileRecv\\Hgame2022\\week4\\hardasm.exe"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.stdin.write(real_flag_arr_s.encode())
p.stdin.close()
out = p.stdout.read()
if len(out)>cur_index:#判断程序打印出的0xFF的个数是否增加,增加则说明当前爆破的位置上的字符设置的是正确的
real_flag+=chr(i)
cur_index+=1
print(real_flag)
break

# hgame{r
# hgame{ri
# hgame{rig
# hgame{righ
# hgame{right
# hgame{right_
# hgame{right_y
# hgame{right_yo
# hgame{right_you
# hgame{right_your
# hgame{right_your_
# hgame{right_your_a
# hgame{right_your_as
# hgame{right_your_asm
# hgame{right_your_asm_
# hgame{right_your_asm_i
# hgame{right_your_asm_is
# hgame{right_your_asm_is_
# hgame{right_your_asm_is_g
# hgame{right_your_asm_is_go
# hgame{right_your_asm_is_goo
# hgame{right_your_asm_is_good
# hgame{right_your_asm_is_good!
# hgame{right_your_asm_is_good!!
# hgame{right_your_asm_is_good!!}
# hgame{right_your_asm_is_good!!}

总结来说,学到了很多,需要学的还有很多!加油吧!

misc

摆烂

先binwalk,发现里面有图片

提取出来

用01editor查看,发现里面有acTLfcTLfdTL数据块,便知道这张图片为 APNG 格式,即 PNG 动图

我们用

https://products.aspose.app/imaging/zh-hans/image-view 在线分离帧

找到两张图片,猜测是盲水印

记住bwm是py2,要用下一个软件,flag中发现密码:4C*9wfg976

密码输入压缩包内,有二维码

拼一下

得到一串汉字:

在这种困难的抉择下,本人思来想去‌‌‌‌‍‬‬‌,寝食难安。 既然如此‌‌‌‌‍‬‍, 亚伯拉罕·林肯在不经意间这样说过,你活了多少岁不算什么‌‌‌‌‍‬‌‍,‌‌‌‌‍‬‍重要的是你是如何度过这些岁月的。‌‌‌‌‍‬‍‍这启发了我,‌‌‌‌‍‬ CTF‌‌‌‌‌‌‍好难,到底应该如何实现。‌‌‌‌‍‍‌‌‌‌‍‍‍ ‌‌‌‌‌‍‌‌‌‌‌‍‬‬总结的来说‌‌‌‌‍‍‍‌‌‌‌‌‍‍, ‌‌‌‌‍‍‍‌‌‌‌‌‌‌‌‌‌‌‌‍‍‌‌‌‌‍‌‌我们都知道‌‌‌‌‌‌‍‌‌‌‌‍‌‌‍,只要有意义‌‌‌‌‍‬‍,‌‌‌‌‍‍那么就必须慎重考虑‌‌‌‌‍‌‬。‌‌‌‌‌‌‌‌‌‌‌‍‍‍‌‌‌‌‌‍‍‌ 我认为, 每个人都不得不面对这些问题‌‌‌‌‍‬‍‍。‌‌‌‌‍‬‬ 在面对这种问题时,‌‌‌‌‍‍ CTF好难,到底应该如何实现。

在vs中里面很不整齐,猜测为0宽字符加密,使用网站 http://330k.github.io/misc_tools/unicode_steganography.html 解密