强网杯 2024 All RE wp

强网杯 2024 re wp

2024qwb

mips

作者用qemu模拟器加载mips_bin文件并手动实现了hook

我们只解mips_bin文件的话会解出一个假的flag

ida,alt+t直接搜索 23000,定位到关键函数的位置

image.png

交叉引用的话,可以发现程序对flag头与flag的长度进行了检查

image.png
之后程序对字符串进行了一个魔改的rc4加密,同时进行了一个异或操作

给出解密脚本:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include "h_IDA.h"
  4. unsigned char N_str[] = {0xDE, 0xAD, 0xBE, 0xEF};
  5. unsigned char map1[256] ;
  6. unsigned char map2[256] ;
  7. void swap(unsigned char *inp, int x, int y) {
  8. unsigned char ch = inp[x];
  9. inp[x] = inp[y];
  10. inp[y] = ch;
  11. }
  12. void init(){
  13. for (int i = 0; i < 256; i++) {
  14. unsigned char v3 = ((((unsigned char)(i << 7) | (i >> 1)) << 6) ^ 0xC0 |((unsigned char)((i << 7) | (i >> 1)) >> 2) ^ 0x3B) ^0xBE;
  15. unsigned char out =(((unsigned char)(((16 * (((32 * v3) | (v3 >> 3)) ^ 0xAD)) | ((unsigned char)(((32 * v3) | (v3 >> 3)) ^ 0xAD) >>4)) ^ 0xDE) >>5) | (8 * (((16 * (((32 * v3) | (v3 >> 3)) ^ 0xAD)) |((unsigned char)(((32 * v3) | (v3 >> 3)) ^ 0xAD) >> 4)) ^ 0xDE)));
  16. map1[out] = i;
  17. map2[i] = out;
  18. }
  19. // for(int i=0;i<256;i++){
  20. // printf("0x%x ",map1[i]);
  21. // }
  22. // puts("");
  23. // for(int i=0;i<256;i++){
  24. // printf("0x%x ",map2[i]);
  25. // }
  26. // puts("");
  27. }
  28. unsigned char *__fastcall en_rc4(unsigned __int8 *inp)
  29. {
  30. int x_1; // edx
  31. unsigned __int8 v3; // [rsp+15h] [rbp-17Bh]
  32. int i; // [rsp+18h] [rbp-178h]
  33. int y; // [rsp+1Ch] [rbp-174h]
  34. unsigned int i_1; // [rsp+20h] [rbp-170h]
  35. int x; // [rsp+24h] [rbp-16Ch]
  36. int v8; // [rsp+28h] [rbp-168h]
  37. int j; // [rsp+2Ch] [rbp-164h]
  38. int a; // [rsp+30h] [rbp-160h]
  39. int j_1; // [rsp+34h] [rbp-15Ch]
  40. int aa; // [rsp+3Ch] [rbp-154h]
  41. char *key; // [rsp+40h] [rbp-150h]
  42. unsigned __int8 *output; // [rsp+48h] [rbp-148h]
  43. unsigned __int8 m[256]; // [rsp+80h] [rbp-110h] BYREF
  44. __int16 v16; // [rsp+180h] [rbp-10h]
  45. unsigned __int64 v17; // [rsp+188h] [rbp-8h]
  46. memset(m, 0, sizeof(m));
  47. v16 = 0;
  48. for ( i = 0; i <= 255; ++i )
  49. m[i] = i;
  50. y = 0;
  51. i_1 = 0;
  52. key = "6105t3";
  53. do
  54. {
  55. a = m[i_1];
  56. j_1 = (unsigned __int8)(key++)[(int)(2 * (i_1 / 6 - (((0xAAAAAAAB * (unsigned __int64)i_1) >> 32) &amp; 0xFFFFFFFC)))];
  57. y += a + j_1;
  58. x_1 = i_1++;
  59. m[x_1] = m[(unsigned __int8)y];
  60. m[(unsigned __int8)y] = a;
  61. }
  62. while ( i_1 != 256 );
  63. x = 0;
  64. v8 = 0;
  65. output = (unsigned __int8 *)malloc(256LL);
  66. for ( j = 0; j != 22; ++j )
  67. {
  68. aa = m[(unsigned __int8)++x];
  69. v8 += aa;
  70. m[(unsigned __int8)x] = m[(unsigned __int8)v8];
  71. m[(unsigned __int8)v8] = aa;
  72. output[j] = m[(unsigned char)(m[x] + m[v8])] ^ N_str[j &amp; 3] ^ map2[inp[j + 5]];
  73. }
  74. return output;
  75. }
  76. unsigned char *__fastcall de_rc4(unsigned __int8 *inp)
  77. {
  78. int x_1; // edx
  79. unsigned __int8 v3; // [rsp+15h] [rbp-17Bh]
  80. int i; // [rsp+18h] [rbp-178h]
  81. int y; // [rsp+1Ch] [rbp-174h]
  82. unsigned int i_1; // [rsp+20h] [rbp-170h]
  83. unsigned char x; // [rsp+24h] [rbp-16Ch]
  84. unsigned char v8; // [rsp+28h] [rbp-168h]
  85. int j; // [rsp+2Ch] [rbp-164h]
  86. int a; // [rsp+30h] [rbp-160h]
  87. int j_1; // [rsp+34h] [rbp-15Ch]
  88. int aa; // [rsp+3Ch] [rbp-154h]
  89. char *key; // [rsp+40h] [rbp-150h]
  90. unsigned __int8 *output; // [rsp+48h] [rbp-148h]
  91. unsigned __int8 m[256]; // [rsp+80h] [rbp-110h] BYREF
  92. __int16 v16; // [rsp+180h] [rbp-10h]
  93. unsigned __int64 v17; // [rsp+188h] [rbp-8h]
  94. memset(m, 0, sizeof(m));
  95. v16 = 0;
  96. for ( i = 0; i <= 255; ++i )
  97. m[i] = i;
  98. y = 0;
  99. i_1 = 0;
  100. key = "6105t3";
  101. do
  102. {
  103. a = m[i_1];
  104. j_1 = (unsigned __int8)(key++)[(int)(2 * (i_1 / 6 - (((0xAAAAAAAB * (unsigned __int64)i_1) >> 32) &amp; 0xFFFFFFFC)))];
  105. y += a + j_1;
  106. x_1 = i_1++;
  107. m[x_1] = m[(unsigned __int8)y];
  108. m[(unsigned __int8)y] = a;
  109. }
  110. while ( i_1 != 256 );
  111. for(int i=0;i<256;i++){
  112. printf("0x%x ",m[i]);
  113. }
  114. puts("");
  115. x = 0;
  116. v8 = 0;
  117. output = (unsigned __int8 *)malloc(256LL);
  118. for ( j = 0; j != 22; ++j )
  119. {
  120. aa = m[(unsigned __int8)++x];
  121. v8 += aa;
  122. m[(unsigned __int8)x] = m[(unsigned __int8)v8];
  123. m[(unsigned __int8)v8] = aa;
  124. output[j] = map1[ m[(unsigned char)(m[x] + m[v8])] ^ N_str[j &amp; 3] ^ inp[j]];
  125. // printf("0x%x - 0x%x - 0x%x", m[(unsigned char)(m[x] + m[v8])], N_str[j &amp; 3],inp[j]);
  126. }
  127. puts("");
  128. return output;
  129. }
  130. int main(){
  131. init();
  132. unsigned char cip[] = {0x000000C4, 0x000000EE, 0x0000003C, 0x000000BB, 0x000000E7, 0x000000FD, 0x00000067, 0x0000001D, 0x000000F8, 0x00000097, 0x00000068, 0x0000009D, 0x0000000B, 0x0000007F, 0x000000C7, 0x00000080, 0x000000DF, 0x000000F9, 0x0000004B, 0x000000A0, 0x00000046, 0x00000091};
  133. swap(cip, 12, 16);
  134. swap(cip, 7, 11);
  135. for (int i = 0; i < 22; i++) {
  136. cip[i] ^= 0xa;
  137. }
  138. unsigned char *m = de_rc4(cip);
  139. printf("flag{");
  140. for (int i = 0; i < 22; i++) {
  141. printf("%c", (unsigned char)m[i]);
  142. }
  143. return 0;
  144. }
  145. // flag{QeMu_r3v3rs3in9_h@ck6}

其中 异或的值有反调试,调试或者attach状态下都拿不到,我们可以尝试爆破、patch、epbftrace等方法拿到

patch的话,就像这样:

image.png

patch出一个write系统调用

bpbftrace命令如下:

  1. sudo bpftrace -e '
  2. watchpoint:0x0007FFFF76FF942:8:x
  3. {
  4. $addr = 0x0007FFFF7FF4324;
  5. printf("before rc4 watch n_STR and input \n");
  6. @i = 0;
  7. printf("n_STR: ");
  8. unroll (4) {
  9. printf("%02x,", *(uint8*)($addr + @i));
  10. @i++;
  11. }
  12. printf("\n");
  13. }
  14. ' -p pid

image.png

remem

先修elf文件,之后调试程序,注意到程序每次都会mmap,并且把shellcode放入mmap内存中执行,之后销毁,在固定基址后,mmap申请的位置是固定的,我们可以获取到每个mmap的shellcode片段,整理下来如下:

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 61626364h
0x7F722B88300C: mul rax
0x7F722B88300F: leaveq
0x7F722B883011: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 250BB52207267F10h
0x7F722B88300F: mov rbx, 3
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 61626364h
0x7F722B88300C: mov rbx, 65666768h
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 2692C5C033CD9CA0h
0x7F722B88300F: mov rbx, 6
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 65666768h
0x7F722B88300C: mov rbx, 52h ; ‘R’
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 65666768h
0x7F722B88300C: mov rbx, 6
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 61626364h
0x7F722B88300C: mul rax
0x7F722B88300F: leaveq
0x7F722B883011: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 250BB52207267F10h
0x7F722B88300F: mov rbx, 2
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 65666768h
0x7F722B88300C: mov rbx, 0Dh
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 61626364h
0x7F722B88300C: mov rbx, 11h
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 61626364h
0x7F722B88300C: mov rbx, 696A6B6Ch
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 2819D65E6074BA30h
0x7F722B88300F: mov rbx, 5
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 696A6B6Ch
0x7F722B88300C: mul rax
0x7F722B88300F: leaveq
0x7F722B883011: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 2B68785BBA837590h
0x7F722B88300F: mov rbx, 5
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 696A6B6Ch
0x7F722B88300C: mov rbx, 58h ; ‘X’
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 6D6E6F70h
0x7F722B88300C: mov rbx, 696A6B6Ch
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 2D0FC95A678AD340h
0x7F722B88300F: mov rbx, 4
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 696A6B6Ch
0x7F722B88300C: mul rax
0x7F722B88300F: leaveq
0x7F722B883011: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 2B68785BBA837590h
0x7F722B88300F: mov rbx, 5
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 6D6E6F70h
0x7F722B88300C: mov rbx, 0E8h
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 6D6E6F70h
0x7F722B88300C: mul rax
0x7F722B88300F: leaveq
0x7F722B883011: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 2EC73A8954C25100h
0x7F722B88300F: mov rbx, 23h ; ‘#’
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 71727374h
0x7F722B88300C: mov rbx, 8
0x7F722B883013: mul rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 71727374h
0x7F722B88300C: mul rax
0x7F722B88300F: leaveq
0x7F722B883011: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 32463D176F616C90h
0x7F722B88300F: mov rbx, 10h
0x7F722B883016: mul rbx
0x7F722B883019: leaveq
0x7F722B88301B: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 38B939BA0h
0x7F722B88300F: mov rbx, 2463D176F616C900h
0x7F722B883019: add rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 2463D17A81AA64A0h
0x7F722B88300F: mov rbx, 653D00C696911300h
0x7F722B883019: sub rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 0BF26D0B3EB1951A0h
0x7F722B88300F: mov rbx, 5E2F4391h
0x7F722B883016: xor rdx, rdx
0x7F722B883019: div rbx
0x7F722B88301C: mov rax, rdx
0x7F722B88301F: leaveq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 0D90A59CAA4914BD0h
0x7F722B88300F: mov rbx, 632C14FD80h
0x7F722B883019: add rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 0D90A5A2DD0A64950h
0x7F722B88300F: mov rbx, 0B43F25699E2B4D00h
0x7F722B883019: sub rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 24CB34C4327AFC50h
0x7F722B88300F: mov rbx, 5E2F4391h
0x7F722B883016: xor rdx, rdx
0x7F722B883019: div rbx
0x7F722B88301C: mov rax, rdx
0x7F722B88301F: leaveq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 0D90A59CAA4914BD0h
0x7F722B88300F: mov rbx, 243C94ED20h
0x7F722B883019: add rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 0D90A59EEE12638F0h
0x7F722B88300F: mov rbx, 0C8812FD7E247A2F0h
0x7F722B883019: sub rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 10892A16FEDE9600h
0x7F722B88300F: mov rbx, 5E2F4391h
0x7F722B883016: xor rdx, rdx
0x7F722B883019: div rbx
0x7F722B88301C: mov rax, rdx
0x7F722B88301F: leaveq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 526334048h
0x7F722B88300F: mov rbx, 6778899A4h
0x7F722B883019: add rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 4A176A440E4CFE20h
0x7F722B88300F: mov rbx, 0B9DBBD9ECh
0x7F722B883019: add rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 4A176A4FAC08D80Ch
0x7F722B88300F: mov rbx, 5E2F4391h
0x7F722B883016: xor rdx, rdx
0x7F722B883019: div rbx
0x7F722B88301C: mov rax, rdx
0x7F722B88301F: leaveq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 207ACD1F50h
0x7F722B88300F: mov rbx, 260666C70h
0x7F722B883019: add rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 0E770A28136D1ABC0h
0x7F722B88300F: mov rbx, 22DB338BC0h
0x7F722B883019: add rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 0E770A2A412053780h
0x7F722B88300F: mov rbx, 6F231F6615737D30h
0x7F722B883019: sub rax, rbx
0x7F722B88301C: leaveq
0x7F722B88301E: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 784D833DFC91BA50h
0x7F722B88300F: mov rbx, 5E2F4391h
0x7F722B883016: xor rdx, rdx
0x7F722B883019: div rbx
0x7F722B88301C: mov rax, rdx
0x7F722B88301F: leaveq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 286A77D6h
0x7F722B88300C: mov rbx, 42DB9F06h
0x7F722B883013: xor rax, rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 5E867B43h
0x7F722B88300C: mov rbx, 35368926h
0x7F722B883013: xor rax, rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 3AB4599Bh
0x7F722B88300C: mov rbx, 509A3978h
0x7F722B883013: xor rax, rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 43D5705Dh
0x7F722B88300C: mov rbx, 1EBFA92Fh
0x7F722B883013: xor rax, rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

0x7F722B883000: push rbp
0x7F722B883002: mov rbp, rsp
0x7F722B883005: mov rax, 464560F0h
0x7F722B88300C: mov rbx, 555CC98Ch
0x7F722B883013: xor rax, rbx
0x7F722B883016: leaveq
0x7F722B883018: retnq

之后编写vm解析器:

  1. from capstone import *
  2. opcode=[0x0F2,0x0,0x0F2,0x3,0x0F7,0x0F2,0x3,0x0F2,0x3,0x0F7,0x0F2,
  3. 3,0x0F7,0x0F2,0x3,0x0F7,0x0F2,0x0,0x0F2,0x3,0x0F7,0x0F2,
  4. 3,0x0F7,0x0F2,0x3,0x0F7,0x0F2,0x3,0x0F2,0x3,0x0F7,0x0F2,
  5. 0,0x0F2,0x3,0x0F7,0x0F2,0x3,0x0F7,0x0F2,0x3,0x0F2,0x3,0x0F7,
  6. 0x0F2,0x0,0x0F2,0x3,0x0F7,0x0F2,0x3,0x0F7,0x0F2,0x0,0x0F2,
  7. 3,0x0F7,0x0F2,0x3,0x0F7,0x0F2,0x0,0x0F2,0x3,0x0F7,0x0F0,
  8. 0,0x3,0x0F1,0x0,0x3,0x0F6,0x3,0x0F0,0x0,0x3,0x0F1,0x0,0x3,0x0F6,
  9. 3,0x0F0,0x0,0x3,0x0F1,0x0,0x3,0x0F6,0x3,0x0F0,0x0,0x3,0x0F0,
  10. 0,0x3,0x0F6,0x3,0x0F0,0x0,0x3,0x0F0,0x0,0x3,0x0F1,0x0,0x3,0x0F6,
  11. 3,0x0F7,0x0F3,0x0,0x3,0x0F3,0x0,0x3,0x0F3,0x0,0x3,0x0F3,0x0,
  12. 3,0x0F3,0x0,0x3,0x0F8]
  13. arr=[0]*11
  14. arr[0] = 0x61626364
  15. arr[1] = 0x65666768
  16. arr[2] = 0x69707172
  17. arr[3] = 0x73747576
  18. arr[4] = 0x7778797A
  19. arr[5] = 0x5E2F4391
  20. arr[6] = 0x42DB9F06
  21. arr[7] = 0x35368926
  22. arr[8] = 0x509A3978
  23. arr[9] = 0x1EBFA92F
  24. arr[10] = 0x555CC98C
  25. v16=[0]*18
  26. v16[0] = arr[0]
  27. v16[1] = arr[0]
  28. v16[2] = arr[1]
  29. v16[3] = arr[1]
  30. v16[4] = arr[0]
  31. v16[5] = arr[1]
  32. v16[6] = arr[0]
  33. v16[7] = arr[0]
  34. v16[8] = arr[2]
  35. v16[9] = arr[2]
  36. v16[10] = arr[3]
  37. v16[11] = arr[2]
  38. v16[12] = arr[3]
  39. v16[13] = arr[3]
  40. v16[14] = arr[4]
  41. v16[15] = arr[4]
  42. v16[16] = 0
  43. v16[17] = 0
  44. v15=[0]*6
  45. ptr=[0]*9
  46. v13 = 1
  47. v14 = arr[0]
  48. v10 = 0
  49. v11 = 0
  50. rip=0
  51. while True:
  52. if opcode[rip] == 0xF0:
  53. v10-=1
  54. # v0 = v16[v10 + 18]
  55. print(f'{rip} v0 = v16[{v10+18}]')
  56. v10-=1
  57. # v1 = func0(v16[v10 + 18], v0)
  58. print(f'{rip} v1=func0(v16[{v10+18},v0])')
  59. # v16[v10 + 18] = v1
  60. print(f'{rip} v16[{v10+18}] = v1')
  61. v10+=1
  62. rip += 3
  63. # print('F0',end=' ')
  64. #
  65. elif opcode[rip] == 0xF1:
  66. v10-=1
  67. # v2 = v16[v10 + 18]
  68. print(f'{rip} v2 = v16[{v10+18}]')
  69. v10-=1
  70. # v3 = func1(v16[v10 + 18], v2)
  71. print(f'{rip} v3=func1(v16[{v10+18},v2])')
  72. # v16[v10 + 18] = v3
  73. print(f'{rip} v16[{v10+18}] = v3')
  74. v10+=1
  75. rip += 3
  76. # print('F1',end=' ')
  77. #
  78. if opcode[rip] == 0xF2:
  79. # v14=func2(v14)
  80. print(f'{rip} v14=func2(v14)')
  81. rip += 2
  82. # print('F2',end=' ')
  83. elif opcode[rip] == 0xF3:
  84. v11-=1
  85. # v14 = func3(v14 ^ v15[v11])
  86. print(f'{rip} v14=func3(v14^v15[{v11}])')
  87. rip += 3
  88. # print('F3',end=' ')
  89. #
  90. elif opcode[rip] == 0xF5:
  91. v10-=1
  92. # v4 = v16[v10 + 18]
  93. print(f'{rip} v4 = v16[{v10+18}]')
  94. v10-=1
  95. # v14 = func4(v16[v10 + 18], v4)
  96. print(f'{rip} v14=func5(v16[{v10+18},v4])')
  97. rip += 3
  98. # print('F5',end=' ')
  99. #
  100. elif opcode[rip] == 0xF6:
  101. v10-=1
  102. print(f'{rip} v5=func5(v16[{v10+18},{hex(arr[5])}])')
  103. print(f'{rip} v15[{v11}] = v5')
  104. # v5 = func5(v16[v10 + 18], arr[5]%0xffffffff)
  105. # v15[v11] = v5
  106. rip += 2
  107. v11+=1
  108. # print('F6',end=' ')
  109. #
  110. elif opcode[rip] == 0xF7:
  111. v6 = v10
  112. v10+=1
  113. # v16[v6 + 18] = v14
  114. print(f"{rip} v16[{v6+18}] = v14")
  115. v7 = v13
  116. v13+=1
  117. # v14 = v16[v7]
  118. print(f"{rip} v14 = v16[{v7}]")
  119. rip+=1
  120. elif opcode[rip] == 0xF8:
  121. print('F8',end=' ')
  122. break
  123. # if v14!=0:
  124. # print('fail!')
  125. # F2 F2 F7 F2 F2 F7 F2 F7 F2 F7 F2 F2 F7 F2 F7 F2 F7 F2 F2 F7 F2 F2 F7 F2 F7 F2 F2 F7 F2 F2 F7 F2 F7 F2 F2 F7 F2 F7 F2 F2 F7 F0 F1 F6 F0 F1 F6 F0 F1 F6 F0 F0 F6 F0 F0 F1 F6 F7 F3 F3 F3 F3 F3 F8

得到:

  1. 0 v14=func2(v14) // v14 = part1 * part1
  2. 2 v14=func2(v14) // v14 = v14 * 3
  3. 4 v16[18] = v14 // v16[18] = v14 ==> 0x6f231f6615737d30
  4. 4 v14 = v16[1] // v14 = part1
  5. 5 v14=func2(v14) // v14 = part1 * part2
  6. 7 v14=func2(v14) // v14 = v14 * 6
  7. 9 v16[19] = v14 // v16[19] = v14
  8. 9 v14 = v16[2] // v14 = part2
  9. 10 v14=func2(v14) // v14 = part2 * 0x52
  10. 12 v16[20] = v14 // v16[20] = v14
  11. 12 v14 = v16[3] // v14 = part2
  12. 13 v14=func2(v14) // v14 = part2*6
  13. 15 v16[21] = v14 // v16[21] = v14
  14. 15 v14 = v16[4] // v14 = v16[4]
  15. 16 v14=func2(v14) // v14 = part1 * part1
  16. 18 v14=func2(v14) // v14 = v14 * 2
  17. 20 v16[22] = v14 // v16[22] = v14
  18. 20 v14 = v16[5] // v14 = v16[5]
  19. 21 v14=func2(v14) // v14 = part2 * 0xd
  20. 23 v16[23] = v14 // v16[23] = v14
  21. 23 v14 = v16[6] // v14 = v16[6]
  22. 24 v14=func2(v14) // v14 = part1 * 0x11
  23. 26 v16[24] = v14 // v16[24] = v14
  24. 26 v14 = v16[7] // v14 = v16[7]
  25. 27 v14=func2(v14) // v14 = part1 * part3
  26. 29 v14=func2(v14) // v14 = v14 * 5
  27. 31 v16[25] = v14 // v16[25] = v14
  28. 31 v14 = v16[8] // v14 = v16[8]
  29. 32 v14=func2(v14) // v14 = part3 * part3
  30. 34 v14=func2(v14) // v14 = v14 * 5
  31. 36 v16[26] = v14 // v16[26] = v14
  32. 36 v14 = v16[9] // v14 = v16[9]
  33. 37 v14=func2(v14) // v14 = part3 * 0x58
  34. 39 v16[27] = v14 // v16[27] = v14
  35. 39 v14 = v16[10] // v14 = v16[10]
  36. 40 v14=func2(v14) // v14 = part3 * part4
  37. 42 v14=func2(v14) // v14 *= 4;
  38. 44 v16[28] = v14 // v16[28] = v14
  39. 44 v14 = v16[11] // v14 = v16[11]
  40. 45 v14=func2(v14) // v14 = part3 * part3
  41. 47 v14=func2(v14) // v14 *= 5
  42. 49 v16[29] = v14 // v16[29] = v14
  43. 49 v14 = v16[12] // v14 = v16[12]
  44. 50 v14=func2(v14) // v14 = part4 * 0xE8
  45. 52 v16[30] = v14 // v16[30] = v14
  46. 52 v14 = v16[13] // v14 = v16[13]
  47. 53 v14=func2(v14) // v14 = part4 * part4
  48. 55 v14=func2(v14) // v14 = v14 * 0x23
  49. 57 v16[31] = v14 // v16[31] = v14
  50. 57 v14 = v16[14] // v14 = v16[14]
  51. 58 v14=func2(v14) // v14 = part5 * 8
  52. 60 v16[32] = v14 // v16[32] = v14
  53. 60 v14 = v16[15] // v14 = v16[15]
  54. 61 v14=func2(v14) // v14 = part5*part5
  55. 63 v14=func2(v14) // v14 = v14 * 0x10
  56. 65 v16[33] = v14 // v16[33] = v14
  57. 65 v14 = v16[16] // v14 = v16[16]
  58. 66 v0 = v16[33] // v0 = v16[33]
  59. 66 v1=func0(v16[32,v0]) // v1 = v16[32] + v16[33]
  60. 66 v16[32] = v1 // v16[32] = v1
  61. 69 v2 = v16[32] // v2 = v16[32]
  62. 69 v3=func1(v16[31,v2]) // v3=v16[32] - v16[31]
  63. 69 v16[31] = v3 // v16[31] = v3
  64. 72 v5=func5(v16[31,0x5e2f4391]) // v5 = v16[31] % 0x5e2f4391
  65. 72 v15[0] = v5 // v15[0] = v5
  66. 74 v0 = v16[30] // v0 = v16[30]
  67. 74 v1=func0(v16[29,v0]) // v1 = v16[29] +v16[30]
  68. 74 v16[29] = v1 // v16[29] = v1
  69. 77 v2 = v16[29] // v2 = v16[29]
  70. 77 v3=func1(v16[28,v2]) // v3 =v16[29] -v16[28]
  71. 77 v16[28] = v3 // v16[28] = v3
  72. 80 v5=func5(v16[28,0x5e2f4391]) // v5 = v3 % 0x5e2f4391
  73. 80 v15[1] = v5 // v15[1] = v5
  74. 82 v0 = v16[27] // v0 = v16[27]
  75. 82 v1=func0(v16[26,v0]) // v1 = v16[26] + v16[27]
  76. 82 v16[26] = v1 // v16[26] = v1
  77. 85 v2 = v16[26] // v2 = v16[26]
  78. 85 v3=func1(v16[25,v2]) // v3 = v16[26] - v16[25]
  79. 85 v16[25] = v3 // v16[25] = v3
  80. 88 v5=func5(v16[25,0x5e2f4391]) // v5 =v16[25] % 0x5e2f4391
  81. 88 v15[2] = v5 // v15[2] = v5
  82. 90 v0 = v16[24] // v0 = v16[24]
  83. 90 v1=func0(v16[23,v0]) // v1 = v16[23] + v16[24]
  84. 90 v16[23] = v1 // v16[23] = v1
  85. 93 v0 = v16[23] // v0 = v16[23]
  86. 93 v1=func0(v16[22,v0]) // v1 = v16[22] + v16[23]
  87. 93 v16[22] = v1 // v16[22] = v1
  88. 96 v5=func5(v16[22,0x5e2f4391]) // v5 = v16[22] % 0x5e2f4391
  89. 96 v15[3] = v5 // v15[3] = v5
  90. 98 v0 = v16[21] // v0 = v16[21]
  91. 98 v1=func0(v16[20,v0]) // v1 = v16[21] + v16[20]
  92. 98 v16[20] = v1 // v16[20] = v1
  93. 101 v0 = v16[20] // v0 = v16[20]
  94. 101 v1=func0(v16[19,v0]) // v1 = v16[19] + v16[20]
  95. 101 v16[19] = v1 // v16[19] = v1
  96. 104 v2 = v16[19] // v2 = v16[19]
  97. 104 v3=func1(v16[18,v2]) // v3 = v16[19] - v16[18]
  98. 104 v16[18] = v3 // v16[18] = v3
  99. 107 v5=func5(v16[18,0x5e2f4391]) // v5 = v16[18] % 0x5e2f4391
  100. 107 v15[4] = v5 // v15[4] = v5
  101. 109 v16[18] = v14 // v16[18] = v14
  102. 109 v14 = v16[17] // v14 = v16[17]
  103. 110 v14=func3(v14^v15[4]) // v14 = v16[17] ^ v15[4] ^ 0x42DB9F06
  104. 113 v14=func3(v14^v15[3]) // v14 = v14 ^ v15[3] ^ 0x35368926
  105. 116 v14=func3(v14^v15[2]) // v14 = v14 ^ v15[2] ^ 0x509A3978
  106. 119 v14=func3(v14^v15[1]) // v14 = v14 ^ v15[1] ^ 0x1EBFA92F
  107. 122 v14=func3(v14^v15[0]) // v14 = v14 ^ v15[0] ^ 0x555CC98C

分析写出c语言代码:

  1. #include <stdio.h>
  2. unsigned char inp[100] = {0};
  3. unsigned long long int part1,part2,part3,part4,part5;
  4. unsigned long long int v14;
  5. unsigned long long int v16[100];
  6. unsigned long long int v0,v1,v2,v3,v4,v5,v6;
  7. unsigned long long int v15[10];
  8. int main(){
  9. // 0x61626364 0x65666768 0x696A6B6C 0x6D6E6F70 0x71727374
  10. // scanf("%s",inp);
  11. scanf("%x",&amp;part1);
  12. scanf("%x",&amp;part2);
  13. scanf("%x",&amp;part3);
  14. scanf("%x",&amp;part4);
  15. scanf("%x",&amp;part5);
  16. // printf("0x%x\n",part1);
  17. // printf("0x%x\n",part2);
  18. // printf("0x%x\n",part3);
  19. // printf("0x%x\n",part4);
  20. // printf("0x%x\n",part5);
  21. // part1 = inp
  22. v14 = part1 * part1; ;
  23. v14 = v14 * 3; ;
  24. v16[18] = v14; ;
  25. v14 = part1; ;
  26. v14 = part1 * part2; ;
  27. v14 = v14 * 6; ;
  28. v16[19] = v14; ;
  29. v14 = part2; ;
  30. v14 = part2 * 0x52; ;
  31. v16[20] = v14; ;
  32. v14 = part2 ;
  33. v14 = part2*6 ;
  34. v16[21] = v14 ;
  35. v14 = v16[4] ;
  36. v14 = part1 * part1 ;
  37. v14 = v14 * 2 ;
  38. v16[22] = v14 ;
  39. v14 = v16[5] ;
  40. v14 = part2 * 0xd ;
  41. v16[23] = v14 ;
  42. v14 = v16[6] ;
  43. v14 = part1 * 0x11 ;
  44. v16[24] = v14 ;
  45. v14 = v16[7] ;
  46. v14 = part1 * part3 ;
  47. v14 = v14 * 5 ;
  48. v16[25] = v14 ;
  49. v14 = v16[8] ;
  50. v14 = part3 * part3 ;
  51. v14 = v14 * 5 ;
  52. v16[26] = v14 ;
  53. v14 = v16[9] ;
  54. v14 = part3 * 0x58 ;
  55. v16[27] = v14 ;
  56. v14 = v16[10] ;
  57. v14 = part3 * part4 ;
  58. v14 *= 4; ;
  59. v16[28] = v14 ;
  60. v14 = v16[11] ;
  61. v14 = part3 * part3 ;
  62. v14 *= 5 ;
  63. v16[29] = v14 ;
  64. v14 = v16[12] ;
  65. v14 = part4 * 0xE8 ;
  66. v16[30] = v14 ;
  67. v14 = v16[13] ;
  68. v14 = part4 * part4 ;
  69. v14 = v14 * 0x23 ;
  70. v16[31] = v14 ;
  71. v14 = v16[14] ;
  72. v14 = part5 * 8 ;
  73. v16[32] = v14 ;
  74. v14 = v16[15] ;
  75. v14 = part5*part5 ;
  76. v14 = v14 * 0x10 ;
  77. v16[33] = v14 ;
  78. v14 = v16[16] ;
  79. v0 = v16[33] ;
  80. v1 = v16[32] + v16[33] ;
  81. v16[32] = v1 ;
  82. v2 = v16[32] ;
  83. v3=v16[32] - v16[31] ;
  84. v16[31] = v3 ;
  85. v5 = v16[31] % 0x5e2f4391 ;
  86. v15[0] = v5 ;
  87. v0 = v16[30] ;
  88. v1 = v16[29] +v16[30] ;
  89. v16[29] = v1 ;
  90. v2 = v16[29] ;
  91. v3 =v16[29] -v16[28] ;
  92. v16[28] = v3 ;
  93. v5 = v3 % 0x5e2f4391 ;
  94. v15[1] = v5 ;
  95. v0 = v16[27] ;
  96. v1 = v16[26] + v16[27] ;
  97. v16[26] = v1 ;
  98. v2 = v16[26] ;
  99. v3 = v16[26] - v16[25] ;
  100. v16[25] = v3 ;
  101. v5 =v16[25] % 0x5e2f4391 ;
  102. v15[2] = v5 ;
  103. v0 = v16[24] ;
  104. v1 = v16[23] + v16[24] ;
  105. v16[23] = v1 ;
  106. v0 = v16[23] ;
  107. v1 = v16[22] + v16[23] ;
  108. v16[22] = v1 ;
  109. v5 = v16[22] % 0x5e2f4391 ;
  110. v15[3] = v5 ;
  111. v0 = v16[21] ;
  112. v1 = v16[21] + v16[20] ;
  113. v16[20] = v1 ;
  114. v0 = v16[20] ;
  115. v1 = v16[19] + v16[20] ;
  116. v16[19] = v1 ;
  117. v2 = v16[19] ;
  118. v3 = v16[19] - v16[18] ;
  119. v16[18] = v3 ;
  120. v5 = v16[18] % 0x5e2f4391 ;
  121. v15[4] = v5 ;
  122. v16[18] = v14 ;
  123. v14 = v16[17] ;
  124. v14 = v16[17] ^ v15[4] ^ 0x42DB9F06 ;
  125. v14 = v14 ^ v15[3] ^ 0x35368926 ;
  126. v14 = v14 ^ v15[2] ^ 0x509A3978 ;
  127. v14 = v14 ^ v15[1] ^ 0x1EBFA92F ;
  128. v14 = v14 ^ v15[0] ^ 0x555CC98C ;
  129. // printf("0x%x\n",v14);
  130. printf("0x%x\n",v15[0]);
  131. printf("0x%x\n",v15[1]);
  132. printf("0x%x\n",v15[2]);
  133. printf("0x%x\n",v15[3]);
  134. printf("0x%x\n",v15[4]);
  135. if(v15[0] != 0x555CC98C &amp;&amp; v15[1] != 0x1EBFA92F &amp;&amp; v15[2] != 0x509A3978 &amp;&amp; v15[3] != 0x35368926 &amp;&amp; v15[4] != 0x42DB9F06){
  136. printf("error\n");
  137. }else{
  138. printf("success\n");
  139. }
  140. // for(int i=0;i<34;i++){
  141. // printf("%d : 0x%llx\n",i,v16[i]);
  142. // }
  143. // puts("");
  144. // printf("v14 : 0x%x",v14);
  145. }

gcc编译并开O3优化;

image.png

整理出来,实际是一个求同余式问题:

  1. ( (16 * part5 * part5 + 8 * part5) - 35 * part4 * part4) % 1580155793 == 1432144268;
  2. ((( 5 * part3 * part3) + 232 * part4) - 4 * part3 * part4) % 1580155793 == 515877167;
  3. ( (88 * part3 + (5 * part3 * part3) ) - 5 * part1 * part3) % 1580155793 == 1352284536;
  4. ( 2 * part1 * part1 + ( 13 * part2 + 17 * part1)) % 1580155793 == 892766502;
  5. ( (0x58 * part2 + 6 * part2 * part1) - 3 * part1 * part1) % 1580155793 == 1121689350;

其中第四个与第五个等式只含part1与part2变量,并且第四个等式的part2可以用part1来表示:

  1. part2 = (892766502 - 2 * part1 * part1 - 17 * part1) * 13^(-1) (mod 1580155793) // 这里的13^(-1) 是13关于1580155793的逆元

那么我们直接尝试爆破:

  1. 爆破part1,2:
  2. for part1 in range(0x20202020,0x80808080):
  3. part2 = ((0x35368926 - 2 * part1 * part1 - 17 * part1) * 0x39f5b36d)% 0x5e2f4391
  4. if ((0x58 * part2 + 6 * part2 * part1) - 3 * part1 * part1) % 0x5e2f4391 == 0x42DB9F06:
  5. print(hex(part1),hex(part2));
  6. 得到:
  7. part1 = 0x33636662
  8. part2 = 0x336f1d5 + 0x5e2f4391
  9. 爆破 part3:
  10. part1 = 0x33636662
  11. for part3 in range(0x20202020,0x80808080):
  12. if ( (88 * part3 + (5 * part3 * part3) ) - 5 * part1 * part3) % 1580155793 == 1352284536:
  13. print(hex(part3))
  14. 爆破part4:
  15. for part4 in range(0x20202020,0x80808080):
  16. if ((( 5 * part3 * part3) + 232 * part4) - 4 * part3 * part4) % 1580155793 == 515877167 :
  17. print(hex(part4))
  1. for part1 in range(0x20202020,0x80808080):
  2. part2 = ((0x35368926 - 2 * part1 * part1 - 17 * part1) * 0x39f5b36d)% 0x5e2f4391
  3. if ((0x58 * part2 + 6 * part2 * part1) - 3 * part1 * part1) % 0x5e2f4391 == 0x42DB9F06:
  4. print(hex(part1),hex(part2));
  5. break
  6. part1 = 0x33636662
  7. part2 = 0x336f1d5 + 0x5e2f4391
  8. part1 = 0x33636662
  9. for part3 in range(0x30303030,0x80808080):
  10. if ( (88 * part3 + (5 * part3 * part3) ) - 5 * part1 * part3) % 1580155793 == 1352284536:
  11. print(hex(part3))
  12. break
  13. part3 = 0x39613138
  14. for part4 in range(0x20202020,0x80808080):
  15. if ((( 5 * part3 * part3) + 232 * part4) - 4 * part3 * part4) % 1580155793 == 515877167 :
  16. print(hex(part4))
  17. break
  18. part4 = 0x33383261
  19. for part5 in range(0x20202020,0x80808080):
  20. if ( (16 * part5 * part5 + 8 * part5) - 35 * part4 * part4) % 1580155793 == 1432144268:
  21. print(hex(part5))
  22. from struct import pack
  23. flag = pack(">I",0x33636662) + pack(">I",0x336f1d5 + 0x5e2f4391) +pack(">I",0x39613138) + pack(">I",0x33383261) + pack(">I",0x6132337d)

最后得到flag:

flag{3cfbaf5f9a18382aa23}

ez_vm

这道题被队友开局直接秒了,tql,下面说说我的思路

这里存在系统调用,我们对照着这张表可以恢复一些符号.

https://j00ru.vexillium.org/syscalls/nt/64/

之后手动定义结构体:

  1. struct context{
  2. _QWORD res_opcode;
  3. _QWORD new_rsp;
  4. _QWORD rax;
  5. _QWORD rcx;
  6. _QWORD rdx;
  7. _QWORD rbx;
  8. _QWORD rsp;
  9. _QWORD rbp;
  10. _QWORD rsi;
  11. _QWORD rdi;
  12. _QWORD r8;
  13. _QWORD r9;
  14. _QWORD r10;
  15. _QWORD r11;
  16. _QWORD r12;
  17. _QWORD r13;
  18. _QWORD r14;
  19. _QWORD r15; // mov [rax+88h], r15
  20. _QWORD empty1 ;
  21. _QWORD empty2 ;
  22. _QWORD empty3 ;
  23. _QWORD empty4 ;
  24. _QWORD empty5 ;
  25. _QWORD empty6 ;
  26. _QWORD empty7 ;
  27. _QWORD empty8 ;
  28. _QWORD empty9 ;
  29. _QWORD empty10 ;
  30. _QWORD empty11 ;
  31. _QWORD empty12 ;
  32. _QWORD empty13 ;
  33. _QWORD empty14 ;
  34. _QWORD empty15 ;
  35. _QWORD empty16 ;
  36. _QWORD empty17 ;
  37. _QWORD empty18 ;
  38. _QWORD empty19 ;
  39. _QWORD empty20 ;
  40. _QWORD empty21 ;
  41. _QWORD empty22 ;
  42. _QWORD empty23 ;
  43. _QWORD empty24 ;
  44. _QWORD empty25 ;
  45. _QWORD empty26 ;
  46. _QWORD empty27 ;
  47. _QWORD empty28 ;
  48. _QWORD empty29 ;
  49. _QWORD empty30 ;
  50. _QWORD empty31 ;
  51. _QWORD empty32 ;
  52. _QWORD empty33 ;
  53. _QWORD empty34 ;
  54. _QWORD empty35 ;
  55. _QWORD empty36 ;
  56. _QWORD empty37 ;
  57. _QWORD empty38 ;
  58. _QWORD empty39 ;
  59. _QWORD empty40 ;
  60. _QWORD empty41 ;
  61. _QWORD empty42 ;
  62. _QWORD empty43 ;
  63. _QWORD empty44 ;
  64. _QWORD empty45 ;
  65. _QWORD empty46 ;
  66. _QWORD empty47 ;
  67. _QWORD empty48 ;
  68. _QWORD cntBaseAddr ; // +0x210
  69. _QWORD stackBaseAddr ; // size: 0x8000
  70. _QWORD what3 ; // 0i64
  71. _QWORD what4 ; // 0x1000i64
  72. _QWORD base_addr2_rwx ; // size: 0x1000
  73. _QWORD what6 ; // 0i64
  74. _QWORD what7 ;
  75. }

就像这样

下面我们可以开始分析这个vm题目了

我们对输入下内存访问断点,不断的跟踪输入流的流向,并手动打log

跟踪的过程中,发现了存储输入的地址,其中的数据发生了这样的变化:

11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
\===>
11 66 bc ef 55 aa ff 44 99 ef 33 88 de 22 77

类似于AES的行移位

之后继续打log:

x = inp[0] << 2;
add x , 0x0000000140013000
add x, 0
x1 = x[0]

\==>

x = inp[0] << 2;
x1 = 0x0000000140013000[x+0]; ==> 0x000000009662140C
y[0] = x1

x = inp[1] << 2;
x1 = 0x0000000140013400[x+0] ==>0x000000006E600A75
y[1] = x1;

\====> 000000000014FCA0

x = inp[3] << 2;
x1 = 0x0000000140013800[x+0] => 140013AEC[0] ==> 0x00000000103DCFB3
y[2] = x[1];

4、3701215Bh
y[3]=x[1];

x = y[0]; //0x000000009662140C
x /= 2; // 0x000000004B310A06
x /= 2; // 0x0000000025988503
x /= 2; // 0x0000000012CC4281
x /= 2; // 0x0000000009662140
x /=2 ; //0x0000000004B310A0
x /= 2; //0x0000000002598850;
x /=2; // 0x00000000012CC428
x /=2; // 0x0000000000966214
x /= 2; // 0x00000000004B310A
x /= 2; //0x0000000000259885
x /= 2; // 0x000000000012CC42
x /=2; // 0x0000000000096621
x /=2 ; //0x000000000004B310
x /=2 ; //0x0000000000025988
x /=2 ; //0x0000000000012CC4
x /=2 ; //0x0000000000009662
x /=2 ; //0x0000000000004B31
x /=2 ; //0x0000000000002598
x /=2 ; //0x00000000000012CC
x /=2 ; //0x0000000000000966
x /=2 ; //0x00000000000004B3
x /=2 ; //0x0000000000000259
x /=2 ; //0x000000000000012C
x /=2 ; //0x0000000000000096

x /=2 ; //0x000000000000004B
x /=2 ; //0x0000000000000025
x /=2 ; //0x0000000000000012
x /=2 ; //0x0000000000000009
x = 0xf & x

x <<= 4;
x1 = &0x000000014005F000[x] , 14005F090h =====> 0000000000907CC0
x1 = x1[0]

x = y[1]
x = 0xf & x
x = x << 0

随着log的不断增加,我们可以发现这个算法用了很多关于表,并且可以发现AES白盒的特征。其实这个vm就是实现的aes白盒,明白这个之后,我们用常规的差分故障分析即可求出flag(上文有讲)

snake

贪吃蛇脚本:

注意 输入的序列最少!!! 这是重点!

  1. import hashlib
  2. import copy
  3. lpAddress = [0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0x38, 0x4C, 0xB0, 0x38, 0x6D, 0xEE, 0x3F, 0xC4, 0xB4, 0xB4, 0x09, 0x6A, 0xF0, 0x38, 0x2C, 0x79, 0xF6, 0x34, 0xE9, 0x89, 0x38, 0xAC, 0x7F, 0x35, 0xD4, 0xB4, 0xB4, 0x38, 0x6D, 0x77, 0xF6, 0xB6, 0x38, 0x6D, 0x78, 0xF6, 0xB6, 0x2B, 0x18, 0xB4, 0xB4, 0xB4, 0x3B, 0x81, 0x81, 0x81, 0x81, 0xEF, 0x4E, 0x38, 0x4C, 0x7D, 0xF6, 0x33, 0xD4, 0xB4, 0xB4, 0xB0, 0xE8, 0xF4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB0, 0xE8, 0xF6, 0x2B, 0x27, 0xA3, 0x1D, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xB4, 0xB0, 0xF8, 0x04, 0x38, 0x89, 0xE3, 0xC3, 0xCA, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xC4, 0xB0, 0xF8, 0x04, 0x38, 0xB3, 0x67, 0xE3, 0x16, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xD4, 0xB0, 0xF8, 0x04, 0x38, 0xB6, 0xD3, 0xB6, 0xA9, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xE4, 0xB0, 0xF8, 0x04, 0x38, 0x89, 0xD8, 0xC7, 0x33, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xB4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xB4, 0x38, 0x4C, 0xED, 0xB5, 0xD4, 0xB4, 0xB4, 0x4C, 0xF4, 0xD4, 0x2C, 0xF8, 0x85, 0x37, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xC4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xC4, 0x38, 0x4C, 0xED, 0xB5, 0xD4, 0xB4, 0xB4, 0x4C, 0xF4, 0xD4, 0x2C, 0xF8, 0x85, 0x37, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xD4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xD4, 0x38, 0x4C, 0xED, 0xB5, 0xD4, 0xB4, 0xB4, 0x4C, 0xF4, 0xD4, 0x2C, 0xF8, 0x85, 0x37, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xE4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xE4, 0x38, 0x4C, 0xED, 0xB5, 0xD4, 0xB4, 0xB4, 0x4C, 0xF4, 0xD4, 0x2C, 0xF8, 0x85, 0x37, 0xB0, 0xEC, 0xFE, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0x6F, 0x14, 0x4C, 0xEC, 0xFE, 0xB4, 0xB4, 0xB4, 0x2F, 0xC0, 0x2C, 0xEC, 0xFE, 0xB4, 0xB4, 0xB4, 0xCC, 0x6C, 0xFE, 0xB4, 0xB4, 0xB4, 0xB6, 0x24, 0xCC, 0x72, 0xB4, 0xB4, 0xB4, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xB4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xC4, 0x4C, 0x79, 0x85, 0x37, 0xD0, 0xD2, 0xF4, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xC4, 0x4C, 0xF9, 0x05, 0x37, 0xD0, 0x62, 0x04, 0xE3, 0x60, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xC4, 0xE4, 0x79, 0x05, 0x37, 0x4C, 0xE9, 0xF4, 0xCC, 0xE2, 0xE4, 0x4C, 0xE1, 0x4C, 0xF9, 0xED, 0x38, 0xF8, 0x4C, 0xE8, 0xF4, 0xF8, 0xE4, 0xE0, 0xA8, 0x4C, 0xC1, 0xE3, 0x60, 0xE4, 0x79, 0x04, 0x37, 0x4C, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xB4, 0x2C, 0xF8, 0x85, 0x37, 0x4C, 0xE8, 0xF6, 0x4C, 0x69, 0xF4, 0xE4, 0x40, 0x4C, 0xD0, 0x2C, 0xE8, 0xF4, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xC4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xB4, 0x4C, 0x79, 0x85, 0x37, 0xD0, 0xD2, 0xF4, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xB4, 0x4C, 0xF9, 0x05, 0x37, 0xD0, 0x62, 0x04, 0xE3, 0x60, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xB4, 0xE4, 0x79, 0x05, 0x37, 0x4C, 0xE9, 0xF4, 0xD0, 0x62, 0x64, 0xCC, 0xE2, 0xE4, 0x4C, 0xE1, 0x4C, 0xF9, 0xED, 0x38, 0xF8, 0x4C, 0xE8, 0xF4, 0xF8, 0xE4, 0xE0, 0xA8, 0x4C, 0xC1, 0xE3, 0x60, 0xE4, 0x79, 0x04, 0x37, 0x4C, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xC4, 0x2C, 0xF8, 0x85, 0x37, 0x52, 0x54, 0x2F, 0x2F, 0x2F, 0xB0, 0xEC, 0x00, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0x6F, 0x14, 0x4C, 0xEC, 0x00, 0xB4, 0xB4, 0xB4, 0x2F, 0xC0, 0x2C, 0xEC, 0x00, 0xB4, 0xB4, 0xB4, 0xCC, 0x6C, 0x00, 0xB4, 0xB4, 0xB4, 0xB6, 0x24, 0xCC, 0x72, 0xB4, 0xB4, 0xB4, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xD4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xE4, 0x4C, 0x79, 0x85, 0x37, 0xD0, 0xD2, 0xF4, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xE4, 0x4C, 0xF9, 0x05, 0x37, 0xD0, 0x62, 0x04, 0xE3, 0x60, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xE4, 0xE4, 0x79, 0x05, 0x37, 0x4C, 0xE9, 0xF4, 0xCC, 0xE2, 0xE4, 0x4C, 0xE1, 0x4C, 0xF9, 0xED, 0x38, 0xF8, 0x4C, 0xE8, 0xF4, 0xF8, 0xE4, 0xE0, 0xA8, 0x4C, 0xC1, 0xE3, 0x60, 0xE4, 0x79, 0x04, 0x37, 0x4C, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xD4, 0x2C, 0xF8, 0x85, 0x37, 0x4C, 0xE8, 0xF6, 0x4C, 0x69, 0xF4, 0xE4, 0x40, 0x4C, 0xD0, 0x2C, 0xE8, 0xF4, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xE4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xD4, 0x4C, 0x79, 0x85, 0x37, 0xD0, 0xD2, 0xF4, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xD4, 0x4C, 0xF9, 0x05, 0x37, 0xD0, 0x62, 0x04, 0xE3, 0x60, 0x5B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xE1, 0xD4, 0xE4, 0x79, 0x05, 0x37, 0x4C, 0xE9, 0xF4, 0xD0, 0x62, 0x64, 0xCC, 0xE2, 0xE4, 0x4C, 0xE1, 0x4C, 0xF9, 0xED, 0x38, 0xF8, 0x4C, 0xE8, 0xF4, 0xF8, 0xE4, 0xE0, 0xA8, 0x4C, 0xC1, 0xE3, 0x60, 0xE4, 0x79, 0x04, 0x37, 0x4C, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xE4, 0x2C, 0xF8, 0x85, 0x37, 0x52, 0x54, 0x2F, 0x2F, 0x2F, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xB4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xD4, 0x4C, 0x79, 0x85, 0x37, 0x4C, 0xF8, 0x04, 0x37, 0xE3, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xB4, 0x2C, 0xF8, 0x85, 0x37, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xC4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xE4, 0x4C, 0x79, 0x85, 0x37, 0x4C, 0xF8, 0x04, 0x37, 0xE3, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xC4, 0x2C, 0xF8, 0x85, 0x37, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xE4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xB4, 0x4C, 0x79, 0x85, 0x37, 0x4C, 0xF8, 0x04, 0x37, 0xE3, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xE4, 0x2C, 0xF8, 0x85, 0x37, 0x3B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0xC0, 0xC4, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xD4, 0x4C, 0x79, 0x85, 0x37, 0x4C, 0xF8, 0x04, 0x37, 0xE3, 0xD0, 0x2B, 0xF4, 0xB4, 0xB4, 0xB4, 0x38, 0x4A, 0x50, 0xD4, 0x2C, 0xF8, 0x85, 0x37, 0xA0, 0xEC, 0x42, 0xB4, 0xB4, 0xB4, 0x3D, 0xA0, 0xEC, 0x52, 0xB4, 0xB4, 0xB4, 0xBE, 0xA0, 0xEC, 0x62, 0xB4, 0xB4, 0xB4, 0x51, 0xA0, 0xEC, 0x6F, 0xB4, 0xB4, 0xB4, 0x3D, 0xA0, 0xEC, 0x7F, 0xB4, 0xB4, 0xB4, 0x5B, 0xA0, 0xEC, 0x12, 0xB4, 0xB4, 0xB4, 0x8D, 0xA0, 0xEC, 0x22, 0xB4, 0xB4, 0xB4, 0x65, 0xA0, 0xEC, 0x32, 0xB4, 0xB4, 0xB4, 0xA7, 0xA0, 0xEC, 0xBF, 0xB4, 0xB4, 0xB4, 0x4D, 0xA0, 0xEC, 0xCF, 0xB4, 0xB4, 0xB4, 0xAC, 0xA0, 0xEC, 0xDF, 0xB4, 0xB4, 0xB4, 0xF8, 0xA0, 0xEC, 0xEF, 0xB4, 0xB4, 0xB4, 0x06, 0xA0, 0xEC, 0xFF, 0xB4, 0xB4, 0xB4, 0xE9, 0xA0, 0xEC, 0x8F, 0xB4, 0xB4, 0xB4, 0x3B, 0xA0, 0xEC, 0x9F, 0xB4, 0xB4, 0xB4, 0xA3, 0xA0, 0xEC, 0xAF, 0xB4, 0xB4, 0xB4, 0x31, 0xB0, 0xEC, 0xF5, 0xC4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0x6F, 0x14, 0x4C, 0xEC, 0xF5, 0xC4, 0xB4, 0xB4, 0x2F, 0xC0, 0x2C, 0xEC, 0xF5, 0xC4, 0xB4, 0xB4, 0xCC, 0x6C, 0xF5, 0xC4, 0xB4, 0xB4, 0xB5, 0x68, 0xE6, 0x38, 0xCA, 0xEC, 0xF5, 0xC4, 0xB4, 0xB4, 0x24, 0x1B, 0xF8, 0x04, 0x37, 0x38, 0xCA, 0x6D, 0xF5, 0xC4, 0xB4, 0xB4, 0x24, 0x1B, 0x7D, 0x85, 0x42, 0xB4, 0xB4, 0xB4, 0x63, 0xD0, 0xF7, 0xF4, 0xD3, 0xC0, 0x6F, 0xF4, 0x6F, 0x00, 0xBB, 0xC4, 0x38, 0x4C, 0x3F, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD]
  4. def left(inp=None): # 向左,low-1
  5. if inp==None:
  6. global lpAddress
  7. v7 = lpAddress[:]
  8. for i in range(1152):
  9. lpAddress[i] = v7[(i + 6) % 1152];
  10. else:
  11. for lpaddr in inp:
  12. v7 = lpaddr[:]
  13. for i in range(1152):
  14. lpaddr[i] = v7[(i + 6) % 1152];
  15. def right(inp=None): # 向右,low+1
  16. if inp == None:
  17. global lpAddress
  18. for i in range(1152):
  19. lpAddress[i] += 30
  20. lpAddress[i] &amp;= 0xff
  21. else:
  22. for lpaddr in inp:
  23. for i in range(1152):
  24. lpaddr[i] += 30
  25. lpaddr[i] &amp;= 0xff
  26. def reright(inp=None): # 向右,low+1
  27. if inp == None:
  28. global lpAddress
  29. for i in range(1152):
  30. lpAddress[i] -= 30
  31. lpAddress[i] &amp;= 0xff
  32. else:
  33. for lpaddr in inp:
  34. for i in range(1152):
  35. lpaddr[i] -= 30
  36. lpaddr[i] &amp;= 0xff
  37. def up(inp=None): # 向上,high-1
  38. if inp ==None:
  39. global lpAddress
  40. for i in range(1152):
  41. lpAddress[i] -= 0x66;
  42. lpAddress[i] &amp;= 0xff
  43. else:
  44. for lpaddr in inp:
  45. for i in range(1152):
  46. lpaddr[i] -= 0x66;
  47. lpaddr[i] &amp;= 0xff
  48. def down(inp=None): # 向下,high+1
  49. if inp == None:
  50. global lpAddress
  51. for i in range(1152):
  52. lpAddress[i] = ((lpAddress[i] >> 5) | (lpAddress[i] << 3)) &amp; 0xff
  53. else:
  54. for lpaddr in inp:
  55. for i in range(1152):
  56. lpaddr[i] = ((lpaddr[i] >> 5) | (lpaddr[i] << 3)) &amp; 0xff
  57. low_now = low_begin = 0xa
  58. high_now = high_begin = 0xa
  59. low_list = [0x11,0xc,0x3,0xf,0xd,0x4,0xc,0xe,0x3,0x13,0xa,0x0,0x10,0x0,0xd,0x11,0xf,0x10,0x3,0xd,0x12,0xa,0x9,0xc,0x6,0x3,0x3,0x10,0x0,0x7,0x10,0xd,0x4,0xa,0x4,0x0,0x6,0x10,0x10,0x5,0x0,0x1,0xa,0x2,0xa,0x6,0x12,0x13,0xa,0x12,0x6,0x11,0xc,0xa,0xe,0x2,0x2,0x12,0x5,0x8,0x1,0xa,0xf,0x12,0xb,0x1,0x10,0x6,0xf,0x1,0xb,0x5,0x0,0xd,0x11,0xe,0xa,0xa,0x2,0xf,0x8,0x6,0x4,0x12,0x8,0x10,0xf,0x9,0x2,0xa,0x6,0xa,0x11,0x6,0x8,0x8,0x10,0x12,0x10,0xd,0x3,0x13,0x6,0xa,0x0,0xe,0x10,0xe,0x6,0x2,0x12,0x3,0x11,0x4,0x5,0x8,0x10,0x13,0x10,0x1,0x9,0xc,0x12,0x6,0x9,0xf,0x9,0x8,0x9,0xc,0x13,0x6,0xe,0x13,0x8,0x1,0xa,0xc,0x5,0x4,0xd,0x8,0x0,0x2,0x2,0xe,0x12,0xb,0x7,0x3,0x7,0x12,0x10,0xb,0x9,0x2,0x3,0x1,0xa,0x5,0x11,0xf,0x1,0x3,0x5,0x10,0xd,0x1,0x0,0x4,0x2,0x13,0x10,0xb,0x2,0x1,0xd,0xe,0xe,0x3,0x5,0x5,0x12,0xd,0x1,0xb,0xc,0x4,0x1,0x11,0x9,0x2,0x9,0x13,0xb,0x2,0x7,0x12,0x11,0xe,0xe,0x0,0x7,0x8,0x11,0x7,0xf,0x9,0x0,0xf,0x9,0x9,0xa,0x13,0x0,0x5,0xa,0x0,0x2,0x7,0x7,0x12,0x10,0x2,0x3,0x11,0x3,0xb,0x10,0xd,0x1,0xd,0xe,0x6,0xe,0x1,0x6,0x11,0x10,0xf,0xf,0x5,0x3,0x0,0x3,0xb,0x11,0x2,0x6,0x13,0xf,0x13,0xb,0xc,0xe,0x2,0x1,0x8,0xf,0xc,0x10,0x12,0x8,0x10,0x6,0xe,0x1,0x4,0x6,0x10,0x3,0x12,0x8,0x5,0x5,0x10,0x13,0x4,0x12,0x10,0x9,0x3,0x7,0x5,0x13,0x10,0x3,0xc,0x7,0x8,0x3,0x13,0x13,0xb,0x6,0x1,0x11,0xe,0x7,0x1]
  60. high_list = [0x0,0xa,0xb,0x9,0x12,0xa,0xa,0x10,0x7,0xe,0xb,0xf,0xb,0x10,0x3,0xc,0x3,0xe,0x13,0x11,0x9,0x11,0x8,0x4,0x3,0xb,0x6,0x5,0x1,0x4,0xa,0x7,0x13,0x8,0xd,0xc,0xf,0x7,0x6,0x10,0x9,0xc,0xc,0x9,0x8,0xf,0xd,0xa,0x0,0xb,0x4,0xc,0x13,0x9,0x4,0x10,0x3,0xf,0xe,0x4,0xf,0xd,0x4,0x1,0x9,0x13,0x10,0xe,0x1,0xd,0xd,0x4,0xd,0x12,0x7,0x4,0xc,0x6,0x12,0x9,0x7,0x4,0x7,0x3,0x12,0x1,0xe,0x10,0x4,0x3,0xd,0x3,0xb,0x2,0x13,0x10,0x9,0x6,0xa,0x11,0x2,0x13,0x12,0x5,0x10,0x10,0x4,0x7,0x9,0x11,0x10,0xf,0xc,0xd,0x4,0xe,0x9,0x11,0xe,0x1,0x0,0xf,0x1,0x2,0x12,0x7,0xd,0x7,0x8,0x6,0x12,0x8,0x1,0x12,0xa,0x5,0x1,0x3,0x10,0xb,0x1,0x1,0x9,0xa,0xc,0x3,0x7,0x11,0x1,0xd,0xd,0xa,0x2,0xb,0x8,0x9,0x6,0x5,0x5,0x12,0x10,0x1,0x1,0x8,0x13,0x8,0x13,0xe,0x8,0xd,0x6,0x2,0x3,0xc,0x11,0x9,0xe,0xd,0xc,0xd,0x3,0x2,0x6,0xb,0xe,0x4,0x11,0x1,0x2,0xb,0x4,0x11,0x3,0x11,0x11,0xc,0x12,0x13,0x3,0x8,0x11,0x4,0x12,0x2,0x7,0xc,0xa,0x0,0xe,0x13,0x8,0x1,0x8,0xb,0x9,0x8,0xd,0x9,0xc,0xd,0xb,0xd,0x4,0x8,0x10,0x9,0x0,0xc,0x0,0xa,0xe,0x1,0x9,0x13,0x8,0x2,0x11,0x10,0x12,0xc,0x8,0x11,0xe,0xd,0x3,0x10,0xa,0x6,0x6,0x13,0x12,0x5,0x6,0x7,0x7,0x10,0x10,0xa,0x9,0xc,0x0,0xe,0x12,0x3,0xf,0x13,0x5,0xa,0x12,0x1,0xc,0x4,0x10,0xf,0x12,0x1,0x8,0xa,0x6,0x10,0x9,0x10,0x2,0xe,0xc,0xa,0x10,0x8,0xd,0x6,0x9,0x10,0x13,0xd,0x5,0x9,0xf,0xe,0x8,0xf]
  61. md5_cip = "9c06c08f882d7981e91d663364ce5e2e"
  62. def pan_md5(inp=None):
  63. global md5_cip
  64. if inp==None:
  65. global lpAddress
  66. md5 = hashlib.md5()
  67. md5.update(bytes(lpAddress))
  68. encrypted_string = md5.hexdigest()
  69. return encrypted_string == md5_cip
  70. else:
  71. for lpaddr in inp:
  72. md5 = hashlib.md5()
  73. md5.update(bytes(lpaddr))
  74. encrypted_string = md5.hexdigest()
  75. if encrypted_string == md5_cip:
  76. return 1
  77. return 0
  78. shellcode_list = []
  79. shellcode_list.append(copy.deepcopy(lpAddress) )
  80. last_dir = ["","right"] # 给定初始方向
  81. for i in range(300):
  82. dy = high_list[i] - high_now
  83. dx = low_list[i] - low_now
  84. print(f"before <=> ({last_dir[0]},{last_dir[1]})")
  85. print(f"({low_now},{high_now}) ==> ({low_list[i]},{high_list[i]}) === ({dx},{dy}) ")
  86. if dx == 0 and dy == 0:
  87. continue
  88. elif dx == 0 or dy == 0:
  89. if dx == 0:
  90. if dy > 0: # down
  91. if last_dir[1] == "down":
  92. pass
  93. elif last_dir[1] == "up":
  94. assert 0 # 情况比较复杂,先不考虑
  95. elif last_dir[1] == "left":
  96. down(shellcode_list)
  97. last_dir[1] = "down"
  98. elif last_dir[1] == "right":
  99. down(shellcode_list)
  100. last_dir[1] = "down"
  101. else:
  102. if last_dir[1] == "down":
  103. assert 0 # 情况比较复杂,先不考虑
  104. elif last_dir[1] == "up":
  105. up(shellcode_list)
  106. last_dir[1] = "up"
  107. elif last_dir[1] == "left":
  108. up(shellcode_list)
  109. last_dir[1] = "up"
  110. elif last_dir[1] == "right":
  111. up(shellcode_list)
  112. last_dir[1] = "up"
  113. elif dy == 0:
  114. if dx > 0:
  115. if last_dir[1] == "right":
  116. pass
  117. elif last_dir[1] == "left":
  118. assert 0 # 情况比较复杂,先不考虑
  119. elif last_dir[1] == "up":
  120. right(shellcode_list)
  121. last_dir[1] = "right"
  122. elif last_dir[1] == "down":
  123. right(shellcode_list)
  124. last_dir[1] = "right"
  125. else:
  126. if last_dir[1] == "right":
  127. assert 0 # 情况比较复杂,先不考虑
  128. elif last_dir[1] == "left":
  129. pass
  130. elif last_dir[1] == "up":
  131. left(shellcode_list)
  132. last_dir[1] = "left"
  133. elif last_dir[1] == "down":
  134. left(shellcode_list)
  135. last_dir[1] = "left"
  136. high_now = high_list[i]
  137. low_now = low_list[i]
  138. elif dx > 0 and dy > 0: # 向右 + 向下
  139. print(f"round: {i} | high_now: {high_now} | low_now: {low_now}")
  140. print(f" | high_list[i]:{high_list[i]} | low_list[i]: {low_list[i]}")
  141. if "right" == last_dir[1]: # 上右,下右,左下,右下
  142. down(shellcode_list)
  143. last_dir = ["right","down"]
  144. elif "down" == last_dir[1]:
  145. right(shellcode_list)
  146. last_dir = ["down","right"]
  147. else:
  148. if last_dir[1] == "left":
  149. down(shellcode_list)
  150. right(shellcode_list)
  151. last_dir = ["down","right"]
  152. elif last_dir[1] == "up":
  153. right(shellcode_list)
  154. down(shellcode_list)
  155. last_dir = ["right","down"]
  156. high_now = high_list[i]
  157. low_now = low_list[i]
  158. elif dx > 0 and dy < 0: # 向右 + 向上
  159. if "right" == last_dir[1]:
  160. up(shellcode_list)
  161. last_dir = ["right","up"]
  162. elif "up" == last_dir[1]:
  163. right(shellcode_list)
  164. last_dir = ["up","right"]
  165. else: # 之前是左下/下左方向,那我们只能按照右上/上右的顺序来到达终点
  166. if last_dir[1] == "left":
  167. last_dir = ["up","right"]
  168. elif last_dir[1] == "down":
  169. last_dir = ["right","up"]
  170. right(shellcode_list)
  171. up(shellcode_list)
  172. high_now = high_list[i]
  173. low_now = low_list[i]
  174. elif dx < 0 and dy > 0: # 向左 + 向下
  175. if "left" == last_dir[1]:
  176. down(shellcode_list)
  177. last_dir = ["left","down"]
  178. elif "down" == last_dir[1]:
  179. left(shellcode_list)
  180. last_dir = ["down","left"]
  181. else:
  182. if last_dir[1] == "right":
  183. last_dir = ["down","left"]
  184. elif last_dir[1] == "up":
  185. last_dir = ["left","down"]
  186. left(shellcode_list)
  187. down(shellcode_list)
  188. high_now = high_list[i]
  189. low_now = low_list[i]
  190. elif dx < 0 and dy < 0: # 向左 + 向上
  191. if "left" == last_dir[1]:
  192. up(shellcode_list)
  193. last_dir = ["left","up"]
  194. elif "up" == last_dir[1]:
  195. left(shellcode_list)
  196. last_dir = ["up","left"]
  197. else:
  198. if last_dir[1] == "right":
  199. last_dir = ["up","left"]
  200. elif last_dir[1] == "down":
  201. last_dir = ["left","up"]
  202. left(shellcode_list)
  203. up(shellcode_list)
  204. high_now = high_list[i]
  205. low_now = low_list[i]
  206. if pan_md5(shellcode_list):
  207. fp = open("./xcode.bin","wb")
  208. fp.write(bytes(shellcode_list[0]))
  209. fp.close()
  210. assert 0

之后把得到的 xcode.bin文件patch到snake的程序上就能看到加密逻辑:

image.png
一个小改的tea加密

exp:

  1. #include <cstdio>
  2. #include <cstdint>
  3. int main()
  4. {
  5. unsigned char answer[17] = { 0 };
  6. answer[0] = 0x98;
  7. answer[1] = 0xA0;
  8. answer[2] = 0xD9;
  9. answer[3] = 0x98;
  10. answer[4] = 0xBA;
  11. answer[5] = 0x97;
  12. answer[6] = 0x1B;
  13. answer[7] = 0x71;
  14. answer[8] = 0x9B;
  15. answer[9] = 0x81;
  16. answer[10] = 0x44;
  17. answer[11] = 0x2F;
  18. answer[12] = 0x55;
  19. answer[13] = 0xB8;
  20. answer[14] = 0x37;
  21. answer[15] = 0xDF;
  22. unsigned char k[] = "W31c0m3. 2 QWBs8";
  23. uint32_t* v = (uint32_t*)answer;
  24. uint32_t* key = (uint32_t*)k;
  25. v[2] ^= v[1];
  26. v[3] ^= v[0];
  27. v[1] ^= v[3];
  28. v[0] ^= v[2];
  29. constexpr uint32_t delta = 0x9E3779B9;
  30. uint32_t sum = 0;
  31. for (int i = 0; i < 64; ++i)
  32. sum += delta;
  33. for (int k = 0; k < 32; ++k)
  34. {
  35. v[3] -= (key[(sum >> 11) &amp; 3] + sum) ^ (v[2] + ((v[2] >> 5) ^ (16 * v[2])));
  36. sum -= delta;
  37. v[2] -= (key[sum &amp; 3] + sum) ^ (v[3] + ((v[3] >> 5) ^ (16 * v[3])));
  38. }
  39. for (int j = 0; j < 32; ++j)
  40. {
  41. v[1] -= (key[(sum >> 11) &amp; 3] + sum) ^ (v[0] + ((v[0] >> 5) ^ (16 * v[0])));
  42. sum -= delta;
  43. v[0] -= (key[sum &amp; 3] + sum) ^ (v[1] + ((v[1] >> 5) ^ (16 * v[1])));
  44. }
  45. printf("%s\n", answer);
  46. return 0;
  47. }

flag{G0@d_Snake}

mapp

推箱子小游戏,注意是要求的是箱子的移动次数

image.png

在github上找到了一个开源项目(地址忘了)

image.png

我们改一下配置文件,换成题目给的推箱子地图,即可实现自动推箱子

最后得到的箱子最小移动次数是:2、12、13、9、 21、13、25、31、3

flag求md5 再加上qwb!即可

solve2-apk

题目思路

jadx反编译不出来关键函数,字符串也搜不成功,拥抱jeb了。

安装app后,输入错误的字符串会存在一个 failure回显,jeb直接搜字符串就能定位关键函数。

image.png

这个函数混淆严重,直接copy到IJ里调试。

手动插桩一下:

cmp length
arr_v = new int[]{0x5E5440B0, 2057046228, 0x4A1ED228, 0x233FE7C, 0x96461450, -2002358035, 0xF79BFC89, 0x20C3D75F};
arr_v1 = new int[8];
arr_v1[0] |= (arr_b[0] & 0xFF) << 24
++v3
arr_v1[0] |= (arr_b[1] & 0xFF) << 16
++v3
arr_v1[0] |= (arr_b[2] & 0xFF) << 8
++v3
arr_v1[0] |= (arr_b[3] & 0xFF) << 0
++v3
arr_v1[1] |= (arr_b[4] & 0xFF) << 24
++v3
arr_v1[1] |= (arr_b[5] & 0xFF) << 16
++v3
arr_v1[1] |= (arr_b[6] & 0xFF) << 8
++v3
arr_v1[1] |= (arr_b[7] & 0xFF) << 0
++v3
arr_v1[2] |= (arr_b[8] & 0xFF) << 24
++v3
arr_v1[2] |= (arr_b[9] & 0xFF) << 16
++v3
arr_v1[2] |= (arr_b[10] & 0xFF) << 8
++v3
arr_v1[2] |= (arr_b[11] & 0xFF) << 0
++v3
arr_v1[3] |= (arr_b[12] & 0xFF) << 24
++v3
arr_v1[3] |= (arr_b[13] & 0xFF) << 16
++v3
arr_v1[3] |= (arr_b[14] & 0xFF) << 8
++v3
arr_v1[3] |= (arr_b[15] & 0xFF) << 0
++v3
arr_v1[4] |= (arr_b[16] & 0xFF) << 24
++v3
arr_v1[4] |= (arr_b[17] & 0xFF) << 16
++v3
arr_v1[4] |= (arr_b[18] & 0xFF) << 8
++v3
arr_v1[4] |= (arr_b[19] & 0xFF) << 0
++v3
arr_v1[5] |= (arr_b[20] & 0xFF) << 24
++v3
arr_v1[5] |= (arr_b[21] & 0xFF) << 16
++v3
arr_v1[5] |= (arr_b[22] & 0xFF) << 8
++v3
arr_v1[5] |= (arr_b[23] & 0xFF) << 0
++v3
arr_v1[6] |= (arr_b[24] & 0xFF) << 24
++v3
arr_v1[6] |= (arr_b[25] & 0xFF) << 16
++v3
arr_v1[6] |= (arr_b[26] & 0xFF) << 8
++v3
arr_v1[6] |= (arr_b[27] & 0xFF) << 0
++v3
arr_v1[7] |= (arr_b[28] & 0xFF) << 24
++v3
arr_v1[7] |= (arr_b[29] & 0xFF) << 16
++v3
arr_v1[7] |= (arr_b[30] & 0xFF) << 8
++v3
arr_v1[7] |= (arr_b[31] & 0xFF) << 0
++v3
v3 = 0
cmp v3 >= 8?
v4 = arr_v1[0];
v5 = arr_v1[1];
v2 = 0
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
arr_v1[0] = v4;
arr_v1[1] = v5;
v3 += 2
cmp v3 >= 8?
v4 = arr_v1[2];
v5 = arr_v1[3];
v2 = 0
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
arr_v1[2] = v4;
arr_v1[3] = v5;
v3 += 2
cmp v3 >= 8?
v4 = arr_v1[4];
v5 = arr_v1[5];
v2 = 0
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
arr_v1[4] = v4;
arr_v1[5] = v5;
v3 += 2
cmp v3 >= 8?
v4 = arr_v1[6];
v5 = arr_v1[7];
v2 = 0
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
v2 -= 0x61c88647
v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
arr_v1[6] = v4;
arr_v1[7] = v5;
v3 += 2
cmp v3 >= 8?
v3 = 0

很显然是魔改的tea算法,写出解密脚本:

  1. #tea
  2. from ctypes import *
  3. def encrypt(v, k):
  4. v0, v1 = c_uint32(v[0]), c_uint32(v[1])
  5. delta = 0x61c88647
  6. k0, k1, k2, k3 = k[0], k[1], k[2], k[3]
  7. total = c_uint32(0)
  8. for i in range(32):
  9. total.value -= delta
  10. v0.value += (v1.value<<4 ^ v1.value) + (total.value ^ v1.value >> 5)
  11. v1.value += (v0.value<<4 ^ v0.value) + (v0.value >> 5 ^ total.value)
  12. return v0.value, v1.value
  13. def decrypt(v, k):
  14. v0, v1 = c_uint32(v[0]), c_uint32(v[1])
  15. delta = 0x61c88647
  16. k0, k1, k2, k3 = k[0], k[1], k[2], k[3]
  17. total = c_uint32((-delta) * 32)
  18. for i in range(32):
  19. v1.value -= (v0.value<<4 ^ v0.value) + (v0.value >> 5 ^ total.value)
  20. v0.value -= (v1.value<<4 ^ v1.value) + (total.value ^ v1.value >> 5)
  21. total.value += delta
  22. return v0.value, v1.value
  23. def detea(inp:bytes,key:bytes):
  24. from struct import pack,unpack
  25. k = unpack("<4I",key)
  26. inp_len = len(inp) // 4
  27. # print(inp_len)
  28. value = unpack(f"<{inp_len}I",inp)
  29. res = b""
  30. for i in range(0,inp_len,2):
  31. v = [value[i],value[i+1]]
  32. # x = encrypt(v,k)
  33. x = decrypt(v,k)
  34. res += pack("<2I",*x)
  35. return res
  36. def entea(inp:bytes,key:bytes):
  37. from struct import pack,unpack
  38. k = unpack("<4I",key)
  39. inp_len = len(inp) // 4
  40. # print(inp_len)
  41. value = unpack(f"<{inp_len}I",inp)
  42. res = b""
  43. for i in range(0,inp_len,2):
  44. v = [value[i],value[i+1]]
  45. x = encrypt(v,k)
  46. # x = decrypt(v,k)
  47. res += pack("<2I",*x)
  48. return res
  49. from struct import pack
  50. cip = [0x5e5440b0,0x7a9c08d4,0x4a1ed228,0x233fe7c,0x96461450,0x88a670ed,0xf79bfc89,0x20c3d75f]
  51. inp = b""
  52. for i in cip:
  53. inp += pack("<I",i)
  54. key = b"\x00"*16
  55. ret = detea(inp,key)
  56. list_ret = list((ret[0:4])[::-1] + (ret[4:8])[::-1] + (ret[8:12])[::-1] + (ret[12:16])[::-1] + (ret[16:20])[::-1] + (ret[20:24])[::-1] + (ret[24:28])[::-1] + (ret[28:32])[::-1])
  57. print(list_ret)
  58. # inp = b"flag{00112233445566778899aabbcc}"
  59. # inp = (inp[0:4])[::-1] + (inp[4:8])[::-1] + (inp[8:12])[::-1] + (inp[12:16])[::-1] + (inp[16:20])[::-1] + (inp[20:24])[::-1] + (inp[24:28])[::-1] + (inp[28:32])[::-1]
  60. # key = b"\x00"*16
  61. # ret = entea(inp,key)
  62. # print(ret.hex())

然鹅得到的不可见字符:

[17, 195, 233, 4, 248, 101, 84, 71, 227, 90, 246, 152, 90, 226, 43, 85, 217, 59, 232, 190, 102, 70, 79, 110, 211, 86, 122, 226, 100, 224, 42, 201]

题目还有第二层,在通过第一层的tea加密与校验后,题目会检查输入的后32字节,就在这个 successWithString函数中

image.png
同样copy代码到IJ中进行调试、手动源码插桩,得到:

0x67616c66 ^= iArr23[0](0x4a3f345a); ==> 0x2d5e583c
0x3130307b ^= iArr23[1];(0xf7aedde9) ==> 0xc69eed92 |———1
0x33323231 ^= iArr23[2]; ==> 0xdb8bd63e// 0xe8b9e40f
0x35343433 ^= iArr23[3](0xd8794bcf); ==> 0xed4d7ffc
0x19fd7394 = b(0x2d5e583c, 0, iArr20);3
0x22897166 = b(0xc69eed92, 3, iArr20);6
0xdb8bd63e ^= (0x19fd7394 + 0x22897166) + iArr23[0x8]; ==> 0x86f2e9ff // 0x20f25ac7 ===3
0xc37974ff = (0x86f2e9ff >>> 1) | (0x86f2e9ff << 31);
0xda9afff9 = (0xed4d7ffc << 1) | (0xed4d7ffc >>> 31);2
0xda9afff9 ^= ((0x22897166 * 2) + 0x19fd7394) + iArr23[0x9](0x16250e5e); ==> 0xafaf9b47 ===4
0x497ab833 = b(0xc37974ff, 0, iArr20);4
0x30ff9538 = b(0xafaf9b47, 3, iArr20);
0x2d5e583c ^= (0x497ab833 + 0x30ff9538) + iArr23[0xa]; ==> 0xf101f355//0x61e55dfe ===2
0xf880f9aa = (0xf101f355 >>> 1) | (0xf101f355 << 31);
0x8d3ddb25 = (0xc69eed92 << 1) | (0xc69eed92 >>> 31); ||||
0x2df2cbac = (((0x30ff9538 * 2) + 0x497ab833) + iArr23[0xb]) ^ 0x8d3ddb25; // 0xf5552de6 |3
0x6787df4b = b(0xf880f9aa, 0, iArr20);3
0x9d41b5e = b(0x2df2cbac, 3, iArr20);6
0xc37974ff ^= (0x6787df4b + 0x9d41b5e) + iArr23[0xc]; ==> 0x6dbae9d9 // 0x3d67a27d ===3
0xb6dd74ec = (0x6dbae9d9 >>> 1) | (0x6dbae9d9 << 31);
0x5f5f368f = (0xafaf9b47 << 1) | (0xafaf9b47 >>> 31);2
0x5f5f368f ^= ((0x9d41b5e * 2) + 0x6787df4b) + iArr23[0xd](0x21ecb038); ==> 0xc243f0b0 ===4
0x1fb2c954 = b(0xb6dd74ec, 0, iArr20);4
0x43ccd623 = b(0xc243f0b0, 3, iArr20);
0xf880f9aa ^= (0x1fb2c954 + 0x43ccd623) + iArr23[0xe]; ==> 0x3a6c9122//0x5f6cc911 ===2
0x1d364891 = (0x3a6c9122 >>> 1) | (0x3a6c9122 << 31);
0x5be59758 = (0x2df2cbac << 1) | (0x2df2cbac >>> 31); ||||
0x8695a30c = (((0x43ccd623 * 2) + 0x1fb2c954) + iArr23[0xf]) ^ 0x5be59758; // 0x3623beba |3
0xcff94abd = b(0x1d364891, 0, iArr20);3
0x540f5a39 = b(0x8695a30c, 3, iArr20);6
0xb6dd74ec ^= (0xcff94abd + 0x540f5a39) + iArr23[0x10]; ==> 0xc8e585f // 0x964a87bd ===3
0x86472c2f = (0xc8e585f >>> 1) | (0xc8e585f << 31);
0x8487e161 = (0xc243f0b0 << 1) | (0xc243f0b0 >>> 31);2
0x8487e161 ^= ((0x540f5a39 * 2) + 0xcff94abd) + iArr23[0x11](0xee57fd73); ==> 0xe2e81dc3 ===4
0x1a08621b = b(0x86472c2f, 0, iArr20);4
0x6b0391f8 = b(0xe2e81dc3, 3, iArr20);
0x1d364891 ^= (0x1a08621b + 0x6b0391f8) + iArr23[0x12]; ==> 0xc35f07bc//0x595d5b1a ===2
0x61af83de = (0xc35f07bc >>> 1) | (0xc35f07bc << 31);
0xd2b4619 = (0x8695a30c << 1) | (0x8695a30c >>> 31); ||||
0x2ff94fce = (((0x6b0391f8 * 2) + 0x1a08621b) + iArr23[0x13]) ^ 0xd2b4619; // 0x32c283cc |3
0x4661dd00 = b(0x61af83de, 0, iArr20);3
0x8bf89c61 = b(0x2ff94fce, 3, iArr20);6
0x86472c2f ^= (0x4661dd00 + 0x8bf89c61) + iArr23[0x14]; ==> 0x23e490f5 // 0xd3494379 ===3
0x91f2487a = (0x23e490f5 >>> 1) | (0x23e490f5 << 31);
0xc5d03b87 = (0xe2e81dc3 << 1) | (0xe2e81dc3 >>> 31);2
0xc5d03b87 ^= ((0x8bf89c61 * 2) + 0x4661dd00) + iArr23[0x15](0xbccb79b0); ==> 0xdeceb4f5 ===4
0x31b07561 = b(0x91f2487a, 0, iArr20);4
0x6790ca96 = b(0xdeceb4f5, 3, iArr20);
0x61af83de ^= (0x31b07561 + 0x6790ca96) + iArr23[0x16]; ==> 0x8fe6a61c//0x5507e5cb ===2
0x47f3530e = (0x8fe6a61c >>> 1) | (0x8fe6a61c << 31);
0x5ff29f9c = (0x2ff94fce << 1) | (0x2ff94fce >>> 31); ||||
0xeff622f4 = (((0x6790ca96 * 2) + 0x31b07561) + iArr23[0x17]) ^ 0x5ff29f9c; // 0xaf32b2db |3
0x474d7304 = b(0x47f3530e, 0, iArr20);3
0x5fd432f1 = b(0xeff622f4, 3, iArr20);6
0x91f2487a ^= (0x474d7304 + 0x5fd432f1) + iArr23[0x18]; ==> 0x33364523 // 0xfba26764 ===3
0x999b2291 = (0x33364523 >>> 1) | (0x33364523 << 31);
0xbd9d69eb = (0xdeceb4f5 << 1) | (0xdeceb4f5 >>> 31);2
0xbd9d69eb ^= ((0x5fd432f1 * 2) + 0x474d7304) + iArr23[0x19](0x54e5392f); ==> 0xe6467bfe ===4
0x177c0f76 = b(0x999b2291, 0, iArr20);4
0x3b4fa32b = b(0xe6467bfe, 3, iArr20);
0x47f3530e ^= (0x177c0f76 + 0x3b4fa32b) + iArr23[0x1a]; ==> 0x739a5452//0xe19d54bb ===2
0x39cd2a29 = (0x739a5452 >>> 1) | (0x739a5452 << 31);
0xdfec45e9 = (0xeff622f4 << 1) | (0xeff622f4 >>> 31); ||||
0xd48e563b = (((0x3b4fa32b * 2) + 0x177c0f76) + iArr23[0x1b]) ^ 0xdfec45e9; // 0x7d46be06 |3
0x5c8a91bd = b(0x39cd2a29, 0, iArr20);3
0xea722412 = b(0xd48e563b, 3, iArr20);6
0x999b2291 ^= (0x5c8a91bd + 0xea722412) + iArr23[0x1c]; ==> 0x852ab142 // 0xd5b4de04 ===3
0x429558a1 = (0x852ab142 >>> 1) | (0x852ab142 << 31);
0xcc8cf7fd = (0xe6467bfe << 1) | (0xe6467bfe >>> 31);2
0xcc8cf7fd ^= ((0xea722412 * 2) + 0x5c8a91bd) + iArr23[0x1d](0x2589f418); ==> 0x9a743a04 ===4
0xc975685 = b(0x429558a1, 0, iArr20);4
0x7a975dc0 = b(0x9a743a04, 3, iArr20);
0x39cd2a29 ^= (0xc975685 + 0x7a975dc0) + iArr23[0x1e]; ==> 0xff9357b8//0x3f2fc94c ===2
0x7fc9abdc = (0xff9357b8 >>> 1) | (0xff9357b8 << 31);
0xa91cac77 = (0xd48e563b << 1) | (0xd48e563b >>> 31); ||||
0x18f4c030 = (((0x7a975dc0 * 2) + 0xc975685) + iArr23[0x1f]) ^ 0xa91cac77; // 0xb0225a42 |3
0x89d6ba0f = b(0x7fc9abdc, 0, iArr20);3
0xc674cb34 = b(0x18f4c030, 3, iArr20);6
0x429558a1 ^= (0x89d6ba0f + 0xc674cb34) + iArr23[0x20]; ==> 0x5c9f732e // 0xcdbea64c ===3
0x2e4fb997 = (0x5c9f732e >>> 1) | (0x5c9f732e << 31);
0x34e87409 = (0x9a743a04 << 1) | (0x9a743a04 >>> 31);2
0x34e87409 ^= ((0xc674cb34 * 2) + 0x89d6ba0f) + iArr23[0x21](0xcc7ded88); ==> 0xd7d649f6 ===4
0x6b5a3141 = b(0x2e4fb997, 0, iArr20);4
0x3bf01654 = b(0xd7d649f6, 3, iArr20);
0x7fc9abdc ^= (0x6b5a3141 + 0x3bf01654) + iArr23[0x22]; ==> 0x2d657a15//0xab628a34 ===2
0x96b2bd0a = (0x2d657a15 >>> 1) | (0x2d657a15 << 31);
0x31e98060 = (0x18f4c030 << 1) | (0x18f4c030 >>> 31); ||||
0xb7b0d8b8 = (((0x3bf01654 * 2) + 0x6b5a3141) + iArr23[0x23]) ^ 0x31e98060; // 0xa31efaef |3
0x64ec4e34 = b(0x96b2bd0a, 0, iArr20);3
0x82e4ece7 = b(0xb7b0d8b8, 3, iArr20);6
0x2e4fb997 ^= (0x64ec4e34 + 0x82e4ece7) + iArr23[0x24]; ==> 0xd7bc1e35 // 0x12226c87 ===3
0xebde0f1a = (0xd7bc1e35 >>> 1) | (0xd7bc1e35 << 31);
0xafac93ed = (0xd7d649f6 << 1) | (0xd7d649f6 >>> 31);2
0xafac93ed ^= ((0x82e4ece7 * 2) + 0x64ec4e34) + iArr23[0x25](0x5a7315c8); ==> 0x6a85ae27 ===4
0xfeb287a4 = b(0xebde0f1a, 0, iArr20);4
0x36fe6679 = b(0x6a85ae27, 3, iArr20);
0x96b2bd0a ^= (0xfeb287a4 + 0x36fe6679) + iArr23[0x26]; ==> 0x4163ca4c//0xa2208929 ===2
0x20b1e526 = (0x4163ca4c >>> 1) | (0x4163ca4c << 31);
0x6f61b171 = (0xb7b0d8b8 << 1) | (0xb7b0d8b8 >>> 31); ||||
0x812f8133 = (((0x36fe6679 * 2) + 0xfeb287a4) + iArr23[0x27]) ^ 0x6f61b171; // 0x819edbac |3
0xebde0f1a ^= iArr23[4](0xe1429065) ==> 0xa9c9f7f // 0xe1429065
0x6a85ae27 ^= iArr23[5](0xb67e9807); ==> 0xdcfb3620
0x20b1e526 ^= iArr23[6](0x704d77b4); ==> 0x50fc9292
0x812f8133 ^= iArr23[7](0xedd067b7); ==> 0x6cffe684
cmp en_inp, final_cip
dump en_inp:
0x7f,0x9f,0x9c,0xa,0x20,0x36,0xfb,0xdc,0x92,0x92,0xfc,0x50,0x84,0xe6,0xff,0x6c,
dump final cip:
0x9f,0x2e,0x80,0xd3,0x38,0x22,0x16,0xdf,0xec,0x96,0xfc,0x8f,0x1a,0x22,0x88,0x73,

整理出加密函数为:

  1. void enc() {
  2. unsigned int N1 = inp1 ^ iArr23[0];
  3. unsigned int N2 = inp2 ^ iArr23[1];
  4. unsigned int N3 = inp3 ^ iArr23[2];
  5. unsigned int N4 = inp4 ^ iArr23[3];
  6. unsigned int x1 = 0;
  7. unsigned int x2 = 0;
  8. for (int i = 0; i < 8; i += 1) {
  9. x1 = b(N1, 0, iArr20);
  10. x2 = b(N2, 3, iArr20);
  11. N3 ^= (x1 + x2) + iArr23[8 + i * 4 + 0];
  12. N3 = Rror(N3, 1);
  13. N4 = Lror(N4, 1);
  14. N4 ^= ((x2 * 2) + x1) + iArr23[8 + i * 4 + 1];
  15. x1 = b(N3, 0, iArr20);
  16. x2 = b(N4, 3, iArr20);
  17. N1 ^= (x1 + x2) + iArr23[8 + i * 4 + 2];
  18. N1 = Rror(N1, 1);
  19. N2 = Lror(N2, 1);
  20. N2 ^= (((x2 * 2) + x1) + iArr23[8 + i * 4 + 3]);
  21. }
  22. N3 ^= iArr23[4];
  23. N4 ^= iArr23[5];
  24. N1 ^= iArr23[6];
  25. N2 ^= iArr23[7];
  26. }

exp

事实上这只是前16字节的加密,还有后16字节的加密,加密算法并不一样,不过后16字节的加密就一个 xor

给出后32字节的exp:

  1. #include <stdio.h>
  2. unsigned int inp1 = 0x67616c66;
  3. unsigned int inp2 = 0x3130307b;
  4. unsigned int inp3 = 0x33323231;
  5. unsigned int inp4 = 0x35343433;
  6. unsigned int iArr23[40] = { 0x4a3f345a,0xf7aedde9,0xe8b9e40f,0xd8794bcf,0xe1429065,0xb67e9807,0x704d77b4,0xedd067b7,0x20f25ac7,0x16250e5e,0x61e55dfe,0xf5552de6,0x3d67a27d,0x21ecb038,0x5f6cc911,0x3623beba,0x964a87bd,0xee57fd73,0x595d5b1a,0x32c283cc,0xd3494379,0xbccb79b0,0x5507e5cb,0xaf32b2db,0xfba26764,0x54e5392f,0xe19d54bb,0x7d46be06,0xd5b4de04,0x2589f418,0x3f2fc94c,0xb0225a42,0xcdbea64c,0xcc7ded88,0xab628a34,0xa31efaef,0x12226c87,0x5a7315c8,0xa2208929,0x819edbac };
  7. unsigned int iArr20[1024] = { 0x9797f5c4,0x6929a9a9,0xd8d888a0,0x33d17c7c,0xc3c399b4,0x4fb22121,0xa3a35c97,0x6ec1f6f6,0x6e6ecf2b,0x77840b0b,0x1a1ae09d,0xef3af9f9,0x94948f36,0xa7608787,0x6d6db5d9,0x3bdb7272,0xb5b53d79,0xaa346161,0x3131272c,0x6526a0a0,0xeaead57e,0xf321ecec,0xededd07a,0x5d108a8a,0x2c2cc2b5,0x9a084545,0x161661ee,0x485a7e7e,0x404086e5,0x2576d0d0,0xe8e85e05,0xd5ba6464,0x73732ab2,0x2e918686,0xcccc6235,0xa5d63030,0x5c5c92f5,0xccff9999,0xdbdbf252,0x78665a5a,0x9999ffcc,0x396dc5c5,0xababa212,0x82165757,0x3e3edcad,0xaf6a8989,0xbcbc3275,0x62ceffff,0xf9f93aef,0xb499c3c3,0xcfcf18c7,0xae316666,0x9f9f0b41,0xd309d4d4,0x18186be6,0xe5864040,0x5a5a6678,0xbe75656,0x88889b26,0xa23e6f6f,0x3939d9a9,0xa088d8d8,0x7070504,0x27c06767,0x6767c027,0x1c1b1515,0x70705040,0x95ea1414,0x2828bd43,0xe730f7f7,0x9090f0c0,0xa9d93939,0xcaca96b8,0xc8fa9e9e,0x272746c2,0x73810c0c,0xf8f8cb66,0xb896caca,0x494989e9,0xe8d2a6a6,0xb1b1428f,0x951e1e1,0xbebeb90e,0xeb3ffefe,0xe7e7a584,0x8e195e5e,0x53536974,0x5efdd2d2,0xfefe3feb,0x181e1212,0x8585ebdc,0x85fe0808,0x42420d9e,0xecd7a1a1,0x6969ca2f,0x9cbbf5f5,0x4e4e8ced,0x154af4f4,0xb4b4ccf0,0xd54e6e6,0xacaca716,0x72dae3e3,0x9c9c71b3,0x52f2dbdb,0x77775544,0xb1c72b2b,0x12121e18,0xd6573c3c,0xc7c7e642,0x229e8f8f,0xf3f34f11,0xb3719c9c,0xe5e52eff,0xf8c6baba,0x98980e45,0xdceb8585,0x525298fd,0x4c5f7979,0xf7f730e7,0xe0d8a8a8,0xa6a6d2e8,0xc4f59797,0xc9c9ec4a,0xba207d7d,0xa0a75fe,0xed8c4e4e,0x7575de3f,0xd9b56d6d,0x111164ea,0x53a93434,0x5d5d637c,0x59158d8d,0x101f189,0x8df40606,0x7c7cd133,0x6f9a1919,0x808065a3,0xdb03dada,0x29294cca,0xca4c2929,0x6b6b4154,0x3fde7575,0x2222c8bd,0x834db8b8,0x7f7fabc1,0xd4e18b8b,0x32325dde,0xff2ee5e5,0xdada03db,0x86135050,0x1414ea95,0x584e6262,0xbfbf4887,0x7d38b2b2,0x7b7bd437,0xb09cc4c4,0x7e7e5a48,0x2d7cdede,0x9b9b74b7,0xfe25151,0xfbfbb194,0x60784848,0x4a4af31b,0x303c2424,0x3a3aa35b,0x44557777,0xdfdf8da4,0xd2523b3b,0x1c1c1410,0x47b82f2f,0x2b2bc7b1,0x89f10101,0x2f2fb847,0x5af8d5d5,0x8d8d1559,0xb9cd2525,0x4b4b0292,0x6c774141,0xd2d2fd5e,0xee611616,0xdede7c2d,0x13f94444,0x9e9efac8,0x5ba33a3a,0xa2a2ad1e,0x2b6b7b7,0xb2b2387d,0xf1975b5b,0x89896aaf,0xa3658080,0x5e5e198e,0x7532bcbc,0x6f6f3ea2,0xbb7b9292,0x202043c6,0xc1ab7f7f,0x9a9a853e,0x9de01a1a,0xa1a1d7ec,0xeb9bebe,0xd0d07625,0x328a9393,0xf0f035e3,0xcf12c1c1,0xd3d30cd7,0xc718cfcf,0xf4f44a15,0x49019191,0x5b5b97f1,0x8b47b6b6,0x15151b1c,0xf4c9b3b3,0xaeae2c6d,0x2173d7d7,0x1313ef91,0x54416b6b,0x4343fc17,0xc0f09090,0x3434a953,0xbf7e9595,0x6363bfd1,0x94b1fbfb,0xe4e4df76,0x14111b1b,0xcecee94e,0x16a7acac,0x57571682,0x8f42b1b1,0xfafa401d,0x7ed5eaea,0x7676a4cd,0xe335f0f0,0xe6e6540d,0x9f56adad,0x8a8a105d,0x242d3f3f,0x606f48d,0xe66b1818,0x666631ae,0xb22a7373,0xeeeeaa88,0xf0ccb4b4,0x6464bad5,0x450e9898,0xafafdde4,0x1eada2a2,0x4141776c,0xd8ee8282,0x8b8be1d4,0x1bf34a4a,0x3b3b52d2,0x2fca6969,0x84841a55,0x9e0d4242,0x4545089a,0xcda47676,0xaaaa539b,0x3d68c2c2,0x6a6ab0dd,0x99e51d1d,0x8282eed8,0xea641111,0x4f4f7d64,0xfd985252,0xf1f1c46a,0xf724ebeb,0x7d7d20ba,0x56f7dcdc,0xd6d682a8,0x6d2caeae,0x8e8e6fab,0xbc93cdcd,0x4d4df61f,0x8748bfbf,0xa8a8d8e0,0x975ca3a3,0x74742fb6,0x1aa8a5a5,0x7272db3b,0xde5d3232,0x10109563,0x2c273131,0xb7b7b602,0xbe257a7a,0xd9d97929,0x4bb72626,0x93938a32,0xc31dc8c8,0xbabac6f8,0x9b53aaaa,0x46467268,0xe4ddafaf,0x68683ba6,0x9359a4a4,0xb3b3c9f4,0xfcc3bdbd,0x8181942a,0x511f8383,0x1e1e9f6b,0x3e859a9a,0xcbcb6731,0x57ac3333,0xa4a45993,0x551a8484,0x3f3f2d24,0x6123a7a7,0x9090f0c,0x63951010,0xe0e0a08,0x10141c1c,0xe9e9af8c,0x67901717,0xc6c617cb,0x6b9f1e1e,0x19199a6f,0x37d47b7b,0xd0d70fa,0xc9a17171,0x17179067,0x7b8b0202,0x83831f51,0x7e85f5f,0xefef5b01,0x50446c6c,0x3c3c57d6,0xb62f7474,0xa7a72361,0x1d40fafa,0xe0e0a080,0x46e3c0c0,0xc2c2683d,0xd70cd3d3,0xb9b9bc0a,0x4aecc9c9,0x2d2d333c,0xf27a0303,0x79795f4c,0x368f9494,0xdcdcf756,0x40507070,0xa9a92969,0xc5ae7878,0x92927bbb,0x1945fdfd,0x353558da,0x20283838,0xa0a02665,0x38362a2a,0x5058e7f,0xddb06a6a,0xfcfcb490,0x0,0xbdbdc3fc,0x55ee8e8,0x1f1f6ee2,0x76dfe4e4,0x8f8f9e22,0x410b9f9f,0x9d9d803a,0xe26e1f1f,0xd5d5f85a,0x88aaeeee,0xdddd06df,0xa1d33737,0x91910149,0x81fb0f0f,0x59591c8a,0x66cbf8f8,0x54546c70,0x3a809d9d,0x8c8ce4d0,0x4050707,0x6060c523,0xcb17c6c6,0x2028b7b,0x793db5b5,0x48487860,0x98bef2f2,0x2626b74b,0xc2462727,0xd7d77321,0x42e6c7c7,0xf6f6c16e,0x1ff64d4d,0x50501386,0x92024b4b,0x1b1b1114,0x7c635d5d,0xd1d187ac,0xdf06dddd,0x23233934,0x8a1c5959,0x9696044d,0x6ac4f1f1,0x808fe85,0x2bcf6e6e,0xecec21f3,0x5c4b6565,0xc1c112cf,0xa882d6d6,0x95957ebf,0xfa700d0d,0x3030d6a5,0xe1834747,0x7878aec5,0xf5925c5c,0x5f5fe807,0x269b8888,0x2121b24f,0xda583535,0x1d1de599,0x2979d9d9,0xe2e22bfb,0xd1bf6363,0x2525cdb9,0x3167cbcb,0x3333ac57,0xf67f0404,0x474783e1,0x80a0e0e,0x5151e20f,0x17fc4343,0x6c6c4450,0x43bd2828,0x7171a1c9,0xb7749b9b,0x3737d3a1,0x74695353,0xc5c56d39,0x114ff3f3,0xc0c0e346,0x706c5454,0xa5a5a81a,0x80a0e0e0,0x0,0x2a948181,0x4c4c0796,0x84a5e7e7,0xcdcd93bc,0xfe750a0a,0x878760a7,0x15befef,0x36362228,0x7f8e0505,0x55559df9,0x3c332d2d,0x616134aa,0xf99d5555,0xb0b8477,0x68724646,0x2e2e49ce,0xc6432020,0x5656e70b,0xbdc82222,0x2a2a3638,0x7ad0eded,0x8686912e,0xab6f8e8e,0x65654b5c,0xac87d1d1,0x7a7a25be,0x4d049696,0xf0ffb81,0xe9894949,0xf5f5bb9c,0x34392323,0xe1e15109,0xa63b6868,0x4444f913,0x3ed5858,0x3037af2,0x5fa63d3d,0x38382820,0x90b4fcfc,0xc4c49cb0,0xfb2be2e2,0xb6b6478b,0x6b3b0b0,0xfdfd4519,0x96074c4c,0xd4d409d3,0x23c56060,0x24243c30,0x3562cccc,0xbbbb3771,0x91ef1313,0xc0c8173,0xaddc3e3e,0xb0b0b306,0x28223636,0xf2f2be98,0x12a2abab,0xadad569f,0xd0e48c8c,0x5858ed03,0xce492e2e,0x62624e58,0x7137bbbb,0x3d3da65f,0x8cafe9e9,0xebeb24f7,0x647d4f4f,0xffffce62,0xc0f0909,0xe3e3da72,0xabcb9b9,0xb8b84d83,0x4ee9cece,0x4047ff6,0xa48ddfdf,0xc8c81dc3,0xb5c22c2c,0x5d7c5d63,0xee82d8ee,0x9cb39c71,0xb6b702b6,0x29ca294c,0x8347e183,0xbe0ebeb9,0x5f794c5f,0x74b6742f,0x1914901,0xf59cf5bb,0x56ad9f56,0xfc90fcb4,0xe3c046e3,0x35da3558,0xea1495ea,0x89af896a,0x6c54706c,0xab12aba2,0xdb723bdb,0xdddfdd06,0x9b88269b,0xed7aedd0,0xbf63d1bf,0x5cf55c92,0x8f94368f,0xd8a0d888,0xceff62ce,0x16ee1661,0xcbf866cb,0x5f075fe8,0xa171c9a1,0x1fe21f6e,0xdae372da,0x4d1f4df6,0x8459a08,0x3cd63c57,0x95106395,0x39a939d9,0xada21ead,0x20c62043,0xde753fde,0xb770b84,0x1dc8c31d,0xd4d3d409,0xf090c0f,0x9845980e,0x492ece49,0xad9fad56,0xf64d1ff6,0x32de325d,0x573cd657,0xf866f8cb,0xd17c33d1,0x88508fe,0xe7560be7,0x149514ea,0xcf6e2bcf,0x9d3a9d80,0xed5803ed,0x66ae6631,0x91862e91,0x3a5b3aa3,0xa5e784a5,0x3f243f2d,0xab7fc1ab,0xa6e8a6d2,0xb3b006b3,0xd6a8d682,0x7e95bf7e,0xae6dae2c,0xca692fca,0xcb31cb67,0x79d92979,0xf810ffb,0xc56023c5,0xd55ad5f8,0x859a3e85,0xdadbda03,0x6f8eab6f,0x6b546b41,0x975bf197,0x8d598d15,0xe85f07e8,0x441344f9,0x32bc7532,0x17671790,0x7b92bb7b,0xbc75bc32,0xba64d5ba,0xbf87bf48,0xff99ccff,0x602360c5,0xe6c742e6,0xc730c81,0x2d3f242d,0x57825716,0x1a84551a,0xa8e0a8d8,0x750afe75,0x6c506c44,0x3af9ef3a,0x196f199a,0x42b18f42,0xf66ef6c1,0x700dfa70,0x9f419f0b,0xc72bb1c7,0xb006b0b3,0x6580a365,0x78c578ae,0xf94413f9,0x10631095,0xfa9ec8fa,0xe2fbe22b,0x72466872,0x49e94989,0xb06addb0,0xe372e3da,0x12c1cf12,0xd1acd187,0x4627c246,0x90c090f0,0x3ffeeb3f,0xd929d979,0xfdd25efd,0x2ece2e49,0xb9f410b,0x73b2732a,0xbef298be,0x76cd76a4,0x158d5915,0x812a8194,0x749bb774,0x214f21b2,0x96cab896,0x9436948f,0xc6baf8c6,0x655c654b,0x13508613,0xcab8ca96,0x9e8f229e,0x459a4508,0x77416c77,0xa397a35c,0xb82f47b8,0x580358ed,0x24ebf724,0x794c795f,0xa63d5fa6,0xaa9baa53,0x6116ee61,0x22bd22c8,0x1f83511f,0xbdfcbdc3,0xd630a5d6,0xb883b84d,0x87d1ac87,0x2d3c2d33,0x23a76123,0x7e487e5a,0x2be2fb2b,0xcdbccd93,0x6dc5396d,0xcfc7cf18,0x55774455,0xa493a459,0xc1f66ec1,0x63d163bf,0xbbf59cbb,0xbaf8bac6,0x59a49359,0x1c101c14,0x332d3c33,0x1d991de5,0xf10189f1,0x70407050,0x6dddf06,0xc6cbc617,0x62cc3562,0x431743fc,0x16578216,0x47e14783,0x4964d04,0x1218121e,0xaaee88aa,0x8455841a,0xc22cb5c2,0x2cb52cc2,0x4b655c4b,0x2bb12bc7,0xa8a51aa8,0xb27db238,0xd337a1d3,0x5e8e5e19,0xb7264bb7,0x264b26b7,0x8e057f8e,0x87a78760,0xa2ab12a2,0xde2dde7c,0xb9be0eb9,0xb702b7b6,0x3b68a63b,0x71c971a1,0xe9ce4ee9,0xe5ffe52e,0x840b7784,0x4f644f7d,0x51e10951,0xc94ac9ec,0x9cc4b09c,0xc046c0e3,0x37bb7137,0x1a9d1ae0,0xa0e080a,0xa1eca1d7,0x54e60d54,0xf7e7f730,0xa7ac16a7,0xd721d773,0xa33a5ba3,0x57f058e,0xf8d55af8,0xfd19fd45,0x5835da58,0x52fd5298,0x48bf8748,0xe98ce9af,0x719cb371,0x4a1b4af3,0x39233439,0x6add6ab0,0x4af4154a,0x2a382a36,0x8c4eed8c,0xe476e4df,0x27312c27,0x77447755,0xd5ea7ed5,0x6dd96db5,0x5ee8055e,0x50865013,0x29a96929,0x68a6683b,0x8a93328a,0x7b377bd4,0x30f7e730,0x40e54086,0x207dba20,0x92bb927b,0xe2510fe2,0x38203828,0xc3bdfcc3,0x964d9604,0xf090c0f0,0x27b028b,0x94812a94,0x753f75de,0xb2214fb2,0xebf7eb24,0xfe0885fe,0x723b72db,0x108a5d10,0x90c090f,0x68c23d68,0x692f69ca,0x3e6fa23e,0xea7eead5,0x2ee5ff2e,0x8cd08ce4,0x53aa9b53,0x8826889b,0x8640e586,0xc1cfc112,0x47b68b47,0x9a3e9a85,0xe01a9de0,0x8bd48be1,0x3dadb03,0xef01ef5b,0x1b151c1b,0xa761a723,0xa93453a9,0xe805e85e,0x67cb3167,0x3bd23b52,0x22362822,0x68d06f4,0x635d7c63,0xf415f44a,0xa476cda4,0x30a530d6,0xe48cd0e4,0x7dba7d20,0x4ff3114f,0x151c151b,0xddafe4dd,0xfb94fbb1,0x4320c643,0xdfa0d70,0x8b027b8b,0x7fc17fab,0x5bef015b,0xb4f0b4cc,0x665a7866,0xe60de654,0xccb4f0cc,0xd25ed2fd,0x7f04f67f,0x7abe7a25,0xd47b37d4,0x8eab8e6f,0xef1391ef,0x61aa6134,0x195e8e19,0xc4b0c49c,0xdfe476df,0xb68bb647,0x5070405,0x36283622,0xd8a8e0d8,0x510f51e2,0xd2a6e8d2,0x560b56e7,0x2cae6d2c,0x5bf15b97,0x4db8834d,0x18e6186b,0xe98450e,0xff62ffce,0x9d4d309,0x11ea1164,0xcd3d70c,0xb579b53d,0x7a03f27a,0x5a785a66,0x6b18e66b,0xb18fb142,0xd0ed7ad0,0x335733ac,0xeb85dceb,0x4b924b02,0xc822bdc8,0x8a5d8a10,0x3db5793d,0x6258624e,0xb56dd9b5,0x4eed4e8c,0x9a196f9a,0x598a591c,0x35f0e335,0xc23dc268,0x6e1fe26e,0x46684672,0xd429e0d,0xc742c7e6,0x9852fd98,0x9bb79b74,0xfc4317fc,0x37a137d3,0x3461aa34,0x80a38065,0xfb0f81fb,0xd3d7d30c,0x9f1e6b9f,0xdfa4df8d,0xe51d99e5,0x2f472fb8,0x6a89af6a,0xfeebfe3f,0xf2db52f2,0x9332938a,0x50704050,0xfa1dfa40,0xd7a1ecd7,0xe080e0a0,0xbcb90abc,0x672767c0,0x446c5044,0x53745369,0x925cf592,0xbb71bb37,0x5d32de5d,0xb90ab9bc,0x74c9607,0xcc35cc62,0xc06727c0,0x25b925cd,0xcd25b9cd,0x862e8691,0x4e62584e,0x5470546c,0x3166ae31,0x416c4177,0xdc3eaddc,0xc3b4c399,0x362a3836,0x85dc85eb,0xc9b3f4c9,0xecf3ec21,0x257abe25,0xe784e7a5,0x1c598a1c,0xf311f34f,0x8949e989,0x312c3127,0xc4f16ac4,0xafe0a75,0xf34a1bf3,0x1e6b1e9f,0xf4068df4,0xdb52dbf2,0x17c6cb17,0x3d5f3da6,0x28382028,0x7c337cd1,0x24b9202,0x99cc99ff,0x90176790,0x2430243c,0x8ddfa48d,0x55f9559d,0x6087a760,0x4f6047f,0xbd2843bd,0xa065a026,0xafe98caf,0xf9eff93a,0x73d72173,0x48604878,0xd939a9d9,0x8f228f9e,0x809d3a80,0xd025d076,0x141c1014,0x345334a9,0x416b5441,0x1b141b11,0x82d6a882,0x91499101,0xa0e080a0,0x27c22746,0x78486078,0xf16af1c4,0xac3357ac,0xb3f4b3c9,0x76d02576,0x9ec89efa,0xb4fc90b4,0x8351831f,0x5a7e485a,0xe080e0a,0xf7dc56f7,0x64d564ba,0x88d8a088,0xdc56dcf7,0xae78c5ae,0x97c497f5,0x7cde2d7c,0x6e2b6ecf,0x810c7381,0xf298f2be,0x38b27d38,0x4c964c07,0x2a73b22a,0xe109e151,0x3c24303c,0xf0e3f035,0xe18bd4e1,0xc8c3c81d,0x45fd1945,0x23342339,0xb1fb94b1,0x82d882ee,0x7d4f647d,0x3f2037a,0x523bd252,0xa51aa5a8,0x21ecf321,0x18901f1,0x26a06526,0x7040705,0xf597c4f5,0xee88eeaa,0x9d55f99d,0xa21ea2ad,0x69537469,0xce4ecee9,0x93cdbc93,0xa969a929,0xecc94aec,0x429e420d,0x5ca3975c,0x139113ef,0x4c29ca4c,0x95bf957e,0x40fa1d40,0x0,0x1e12181e,0x3ead3edc,0x18cfc718,0xac16aca7,0x6411ea64,0xafe4afdd,0x2f74b62f,0x284328bd,0x99c3b499,0xc539c56d,0x111b1411,0x6fa26f3e,0x0 };
  8. unsigned int Rror(unsigned int m, int cnt) {
  9. return (m >> cnt) | (m << (32 - cnt));
  10. }
  11. unsigned int Lror(unsigned int m, int cnt) {
  12. return (m << cnt) | (m >> (32 - cnt));
  13. }
  14. unsigned char get_byte1(unsigned int v) {
  15. return v >> 8 &amp; 0xFF;
  16. }
  17. unsigned char get_byte2(unsigned int v) {
  18. return v >> 16 &amp; 0xFF;
  19. }
  20. unsigned char get_high_byte(unsigned int v) {
  21. return v >> 24 &amp; 0xFF;
  22. }
  23. unsigned char get_byte_by_mode(unsigned int v, int mode) {
  24. switch (mode % 4) {
  25. case 0: {
  26. return v &amp; 0xFF;
  27. }
  28. case 1: {
  29. return get_byte1(v);
  30. }
  31. case 2: {
  32. return get_byte2(v);
  33. }
  34. case 3: {
  35. return get_high_byte(v);
  36. }
  37. default: {
  38. return 0;
  39. }
  40. }
  41. }
  42. unsigned int b(unsigned int v, int mode_0_3, unsigned int arr_v[]) {
  43. unsigned v2 = arr_v[get_byte_by_mode(v, mode_0_3) * 2] ^ arr_v[get_byte_by_mode(v, mode_0_3 + 1) * 2 + 1] ^ arr_v[get_byte_by_mode(v, mode_0_3 + 2) * 2 + 0x200];
  44. return arr_v[get_byte_by_mode(v, mode_0_3 + 3) * 2 + 0x201] ^ v2;
  45. }
  46. void enc() {
  47. unsigned int N1 = inp1 ^ iArr23[0];
  48. unsigned int N2 = inp2 ^ iArr23[1];
  49. unsigned int N3 = inp3 ^ iArr23[2];
  50. unsigned int N4 = inp4 ^ iArr23[3];
  51. unsigned int x1 = 0;
  52. unsigned int x2 = 0;
  53. for (int i = 0; i < 8; i += 1) {
  54. x1 = b(N1, 0, iArr20);
  55. x2 = b(N2, 3, iArr20);
  56. N3 ^= (x1 + x2) + iArr23[8 + i * 4 + 0];
  57. N3 = Rror(N3, 1);
  58. N4 = Lror(N4, 1);
  59. N4 ^= ((x2 * 2) + x1) + iArr23[8 + i * 4 + 1];
  60. x1 = b(N3, 0, iArr20);
  61. x2 = b(N4, 3, iArr20);
  62. N1 ^= (x1 + x2) + iArr23[8 + i * 4 + 2];
  63. N1 = Rror(N1, 1);
  64. N2 = Lror(N2, 1);
  65. N2 ^= (((x2 * 2) + x1) + iArr23[8 + i * 4 + 3]);
  66. }
  67. N3 ^= iArr23[4];
  68. N4 ^= iArr23[5];
  69. N1 ^= iArr23[6];
  70. N2 ^= iArr23[7];
  71. printf("0x%x --- 0x%x --- 0x%x --- 0x%x\n", N3, N4, N1, N2);
  72. }
  73. void hexdump(unsigned int inp) {
  74. printf("%c", inp &amp; 0xff);
  75. printf("%c", (inp >> 8) &amp; 0xff);
  76. printf("%c", (inp >> 16) &amp; 0xff);
  77. printf("%c", (inp >> 24) &amp; 0xff);
  78. }
  79. bool test_dec() {
  80. unsigned int N3 = 0xa9c9f7f;
  81. unsigned int N4 = 0xdcfb3620;
  82. unsigned int N1 = 0x50fc9292;
  83. unsigned int N2 = 0x6cffe684;
  84. unsigned int x1 = 0;
  85. unsigned int x2 = 0;
  86. N3 ^= iArr23[4];
  87. N4 ^= iArr23[5];
  88. N1 ^= iArr23[6];
  89. N2 ^= iArr23[7];
  90. for (int i = 7; i >= 0; i--) {
  91. x1 = b(N3, 0, iArr20);
  92. x2 = b(N4, 3, iArr20);
  93. N1 = Lror(N1, 1);
  94. N1 ^= (x1 + x2) + iArr23[8 + i * 4 + 2];
  95. N2 ^= (((x2 * 2) + x1) + iArr23[8 + i * 4 + 3]);
  96. N2 = Rror(N2, 1);
  97. x1 = b(N1, 0, iArr20);
  98. x2 = b(N2, 3, iArr20);
  99. N3 = Lror(N3, 1);
  100. N3 ^= (x1 + x2) + iArr23[8 + i * 4 + 0];
  101. N4 ^= ((x2 * 2) + x1) + iArr23[8 + i * 4 + 1];
  102. N4 = Rror(N4, 1);
  103. }
  104. unsigned int inp1 = N1 ^ iArr23[0];
  105. unsigned int inp2 = N2 ^ iArr23[1];
  106. unsigned int inp3 = N3 ^ iArr23[2];
  107. unsigned int inp4 = N4 ^ iArr23[3];
  108. if (inp1 != 0x67616c66 || inp2 != 0x3130307b || inp3 != 0x33323231 || inp4 != 0x35343433) {
  109. return 0;
  110. }
  111. //hexdump(inp1);
  112. //hexdump(inp2);
  113. //hexdump(inp3);
  114. //hexdump(inp4);
  115. return 1;
  116. }
  117. void dec1() {
  118. if (!test_dec()) {
  119. printf("error dec algorithm!!!\n");
  120. getchar();
  121. return;
  122. }
  123. unsigned int N3 = 0xd3802e9f;
  124. unsigned int N4 = 0xdf162238;
  125. unsigned int N1 = 0x8ffc96ec;
  126. unsigned int N2 = 0x7388221a;
  127. unsigned int x1 = 0;
  128. unsigned int x2 = 0;
  129. N3 ^= iArr23[4];
  130. N4 ^= iArr23[5];
  131. N1 ^= iArr23[6];
  132. N2 ^= iArr23[7];
  133. for (int i = 7; i >= 0; i--) {
  134. x1 = b(N3, 0, iArr20);
  135. x2 = b(N4, 3, iArr20);
  136. N1 = Lror(N1, 1);
  137. N1 ^= (x1 + x2) + iArr23[8 + i * 4 + 2];
  138. N2 ^= (((x2 * 2) + x1) + iArr23[8 + i * 4 + 3]);
  139. N2 = Rror(N2, 1);
  140. x1 = b(N1, 0, iArr20);
  141. x2 = b(N2, 3, iArr20);
  142. N3 = Lror(N3, 1);
  143. N3 ^= (x1 + x2) + iArr23[8 + i * 4 + 0];
  144. N4 ^= ((x2 * 2) + x1) + iArr23[8 + i * 4 + 1];
  145. N4 = Rror(N4, 1);
  146. }
  147. unsigned int inp1 = N1 ^ iArr23[0];
  148. unsigned int inp2 = N2 ^ iArr23[1];
  149. unsigned int inp3 = N3 ^ iArr23[2];
  150. unsigned int inp4 = N4 ^ iArr23[3];
  151. hexdump(inp1);
  152. hexdump(inp2);
  153. hexdump(inp3);
  154. hexdump(inp4);
  155. //printf("\n");
  156. }
  157. void dec2() {
  158. unsigned char cip[] = { 0xa9,0xd9,0x76,0xbd ,0x77,0xbb,0x56,0x9a ,0x31,0xb3,0xde,0xa8 ,0x65,0x8e,0x1a,0x32 };
  159. unsigned char key[] = { 0xe9 ,0x9c,0x40,0xf9,0x47,0xe2,0x19,0xcc,0x6,0xdb,0x97,0xc6,0xe,0xdd,0x2a,0x4f };
  160. for (int i = 0; i < 16; i++) {
  161. printf("%c", cip[i] ^ key[i]);
  162. }
  163. puts("");
  164. }
  165. int main() {
  166. //enc();
  167. dec1();
  168. dec2();
  169. return 0;
  170. }

得到flag:

flag{iT3N0t7H@tH@E6D0YOV7hInkS0}

校验一下flag

  1. var flag = String("flag{00112233445566778899aabbcc}flag{iT3N0t7H@tH@E6D0YOV7hInkS0}");
  2. Java.perform(function(){
  3. var targetClass = Java.use("H0.a");
  4. var ret = targetClass.successWithString(flag);
  5. console.log(ret);
  6. });

这里我用frida主动调用来校验flag是否正确:

image.png

事实证明是正确的

附件

附手动源码插桩的java文件:

./main.java:

  1. import java.util.Arrays;
  2. import java.lang.Thread;
  3. public class Main {
  4. public static void main(String[] args) throws InterruptedException {
  5. op_input();
  6. System.out.println("finish~");
  7. }
  8. static boolean z;
  9. public static void op_input() throws InterruptedException {
  10. String s = "flag{00112233445566778899aabbcc}flag{00112233445566778899aabbcc}";
  11. // String s = "flag{00112233445566778899aabbcc}xxxx{xxxxxxxxxxxxxxxxxxxxxxxxxx}";
  12. // String s = "flag{00112233445566778899aabbcc}flag{iT3N0t7H@tH@E6D0YOV7hInkS0}";
  13. byte[] arr_b = new byte[0];
  14. int[] arr_v = new int[0];
  15. int[] arr_v1 = new int[0];
  16. int v1 = 0;
  17. int v2 = 0;
  18. int v3 = 0;
  19. int v4 = 0;
  20. int v5 = 0;
  21. int v6 = 0;
  22. long v7 = 0x5BE935D0EDBFE83CL;
  23. int v8 = 24;
  24. System.out.printf("v2 = 0\n");
  25. while(Long.compare(v7, 0L) != 0) {
  26. long v9 = 0x404C98D80D628D27L;
  27. if(Long.compare(v7, 0x404C98D80D628D27L) == 0) {
  28. arr_v1[v1] = 0;
  29. v7 = 0x767AEC22C91BE2BFL;
  30. }
  31. long v10 = 8904566903685903062L;
  32. if(Long.compare(v7, 8904566903685903062L) == 0) {
  33. v7 = 0x29CB0C5AA5BA5210L;
  34. }
  35. long v11 = 0x7F6F5B8E28C072CFL;
  36. if(Long.compare(v7, 0x7F6F5B8E28C072CFL) == 0) {
  37. v2 -= 1640531527;
  38. System.out.printf("v2 -= 0x61c88647\n");
  39. v7 = 0x1E7D57CBFEE24485L;
  40. }
  41. long v12 = 0x123CFD69BDE0364DL;
  42. if(Long.compare(v7, 0x123CFD69BDE0364DL) == 0) {
  43. ++v3;
  44. System.out.printf("++v3\n");
  45. v7 = 0x3C57CEFFB4FFAFF4L;
  46. }
  47. long v13 = 2705319197673083720L;
  48. if(Long.compare(v7, 2705319197673083720L) == 0) {
  49. v7 = v8 == 0 ? 0x250D59D18CBA666DL : 0x7032C3F4B5EFAB31L;
  50. }
  51. long v14 = 0x41593FC8BF139758L;
  52. if(Long.compare(v7, 0x41593FC8BF139758L) == 0) {
  53. v7 = 0x69E4449C056151ACL;
  54. v8 = 24;
  55. }
  56. if(Long.compare(v7, 0x1F45282B0E978C91L) == 0) {
  57. v7 = 0x380BE8BE1044EE6DL;
  58. }
  59. long v15 = 0x2CEBD4941DD371AAL;
  60. if(Long.compare(v7, 0x29CB0C5AA5BA5210L) == 0) {
  61. v3 = 0;
  62. System.out.printf("v3 = 0\n");
  63. v7 = 0x2CEBD4941DD371AAL;
  64. }
  65. if(Long.compare(v7, 0x5260B3C741DB1316L) == 0) {
  66. v7 = 0x39E2DF14B65FB5B7L;
  67. }
  68. if(v7 == 0x380BE8BE1044EE6DL) {
  69. arr_v1[v1] |= (arr_b[v3] &amp; 0xFF) << v8;
  70. System.out.printf("arr_v1[%d] |= (arr_b[%d] &amp; 0xFF) << %d\n",v1,v3,v8);
  71. }
  72. else {
  73. v13 = v7;
  74. }
  75. if(Long.compare(v13, 0x2CEBD4941DD371AAL) == 0) {
  76. v13 = v3 >= 8 ? 0x2A7EB92B8AF86758L : 2503205216640455778L;
  77. System.out.printf("cmp v3 >= 8?\n");
  78. }
  79. long v16 = 0x55CB210B059B852DL;
  80. long v17 = 0x5335127A3A0A4907L;
  81. if(Long.compare(v13, 0x55CB210B059B852DL) == 0) {
  82. v8 += -8;
  83. v13 = 0x5335127A3A0A4907L;
  84. }
  85. long v18 = 2368350050472760653L;
  86. if(Long.compare(v13, 2368350050472760653L) == 0) {
  87. v13 = 0x5A88D049059402F6L;
  88. }
  89. long v19 = 0x26D3DBBBECB952A4L;
  90. if(v13 == 0x26D3DBBBECB952A4L) {
  91. z = false;
  92. System.out.println("errror");
  93. break;
  94. }
  95. if(v13 != 0x7032C3F4B5EFAB31L) {
  96. v16 = v13;
  97. }
  98. if(v16 == 0x5335127A3A0A4907L) {
  99. ++v3;
  100. System.out.printf("++v3\n");
  101. v16 = 0x767AEC22C91BE2BFL;
  102. }
  103. if(v16 == 0x69E4449C056151ACL) {
  104. ++v1;
  105. }
  106. else {
  107. v17 = v16;
  108. }
  109. long v20 = 0x169A506C8792840DL;
  110. if(v17 == 0x169A506C8792840DL) {
  111. v3 += 2;
  112. System.out.printf("v3 += 2\n");
  113. }
  114. else {
  115. v15 = v17;
  116. }
  117. long v21 = 8829928630187910250L;
  118. if(v15 != 8829928630187910250L) {
  119. v11 = v15;
  120. }
  121. if(Long.compare(v11, 0x1E7D57CBFEE24485L) == 0) {
  122. v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;
  123. System.out.printf("v4 = (v5 << 4 ^ v5) + (v2 ^ v5 >>> 5) + v4;\n");
  124. v11 = 0x50E57F91E168FAC9L;
  125. }
  126. long v22 = 8153458827322010710L;
  127. long v23 = 0x2654EF16F510CF25L;
  128. if(Long.compare(v11, 8153458827322010710L) == 0) {
  129. v2 = 0;
  130. System.out.printf("v2 = 0\n");
  131. v11 = 0x2654EF16F510CF25L;
  132. }
  133. long v24 = 0x2981462384F2153CL;
  134. if(Long.compare(v11, 0x2981462384F2153CL) == 0) {
  135. arr_v = new int[]{0x5E5440B0, 2057046228, 0x4A1ED228, 0x233FE7C, 0x96461450, -2002358035, 0xF79BFC89, 0x20C3D75F};
  136. System.out.printf("arr_v = new int[]{0x5E5440B0, 2057046228, 0x4A1ED228, 0x233FE7C, 0x96461450, -2002358035, 0xF79BFC89, 0x20C3D75F};\n");
  137. v11 = 0x62E816E54253B307L;
  138. }
  139. if(Long.compare(v11, 0x33C51F874ED9F174L) == 0) {
  140. v6 = 0x20;
  141. v11 = 0x4D784B3DF54B096FL;
  142. }
  143. if(v11 != 0x767AEC22C91BE2BFL) {
  144. v10 = v11;
  145. }
  146. else if(v3 < 0x20) {
  147. v10 = 0x1F45282B0E978C91L;
  148. }
  149. if(v10 == 0x2A7EB92B8AF86758L) {
  150. v3 = 0;
  151. System.out.printf("v3 = 0\n");
  152. v10 = 0x3C57CEFFB4FFAFF4L;
  153. }
  154. if(Long.compare(v10, 0x2654EF16F510CF25L) != 0) {
  155. v21 = v10;
  156. }
  157. else if(v6 > 0) {
  158. --v6;
  159. }
  160. else {
  161. --v6;
  162. v21 = 0x1E65F68B123E6E17L;
  163. }
  164. if(Long.compare(v21, 0x5BE935D0EDBFE83CL) == 0) {
  165. v21 = s.length() >= 0x20 ? 0x1E47617FF0CE8BE3L : 0x7C99975CB23FC36BL;
  166. System.out.printf("cmp length\n");
  167. }
  168. if(v21 == 0x1E47617FF0CE8BE3L) {
  169. arr_b = Arrays.copyOf(s.getBytes(), 0x20);
  170. arr_b = new byte[]{17, (byte)195, (byte)233, 4, (byte)248, 101, 84, 71, (byte)227, 90, (byte)246, (byte)152, 90, (byte)226, 43, 85, (byte)217, 59, (byte)232, (byte)190, 102, 70, 79, 110, (byte)211, 86, 122, (byte)226, 100, (byte)224, 42, (byte)201};
  171. }
  172. else {
  173. v24 = v21;
  174. }
  175. if(Long.compare(v24, 0x1E65F68B123E6E17L) == 0) {
  176. arr_v1[v3] = v4;
  177. System.out.printf("arr_v1[%d] = v4;\n",v3);
  178. v24 = 0x6F35E9E1070E87BEL;
  179. }
  180. if(Long.compare(v24, 0x3C57CEFFB4FFAFF4L) != 0) {
  181. v18 = v24;
  182. }
  183. else if(v3 >= 8) {
  184. v18 = 0x752D25A60BA93D48L;
  185. }
  186. if(v18 == 0x752D25A60BA93D48L) {
  187. z = H0.a.successWithString(s);
  188. System.out.println("call successWithString...");
  189. // Thread.sleep(5000);
  190. break;
  191. }
  192. if(v18 != 0x250D59D18CBA666DL) {
  193. v14 = v18;
  194. }
  195. if(v14 == 0x62E816E54253B307L) {
  196. arr_v1 = new int[8];
  197. System.out.printf("arr_v1 = new int[8];\n");
  198. }
  199. else {
  200. v9 = v14;
  201. }
  202. if(v9 != 0x5A88D049059402F6L) {
  203. v12 = v9;
  204. }
  205. else if(arr_v1[v3] != arr_v[v3]) {
  206. v12 = 0x5260B3C741DB1316L;
  207. System.out.printf("arr_v1[%d] != arr_v[%d]\n",v3,v3);
  208. }
  209. if(v12 != 0x7C99975CB23FC36BL) {
  210. v19 = v12;
  211. }
  212. if(v19 == 2503205216640455778L) {
  213. v19 = 0x33C51F874ED9F174L;
  214. }
  215. if(v19 == 0x6F35E9E1070E87BEL) {
  216. arr_v1[v3 + 1] = v5;
  217. System.out.printf("arr_v1[%d] = v5;\n",v3+1);
  218. }
  219. else {
  220. v20 = v19;
  221. }
  222. v7 = 0x491A503216BAC9F4L;
  223. if(v20 == 0x491A503216BAC9F4L) {
  224. v5 = arr_v1[v3 + 1];
  225. System.out.printf("v5 = arr_v1[%d];\n",v3 + 1);
  226. }
  227. else {
  228. v22 = v20;
  229. }
  230. if(v22 == 0x50E57F91E168FAC9L) {
  231. v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;
  232. System.out.printf("v5 = (v4 << 4 ^ v4) + (v4 >>> 5 ^ v2) + v5;\n");
  233. }
  234. else {
  235. v23 = v22;
  236. }
  237. if(v23 != 0x39E2DF14B65FB5B7L) {
  238. if(v23 == 0x4D784B3DF54B096FL) {
  239. v4 = arr_v1[v3];
  240. System.out.printf("v4 = arr_v1[%d];\n",v3);
  241. continue;
  242. }
  243. v7 = v23;
  244. continue;
  245. }
  246. z = false;
  247. System.out.println("errorrrr");
  248. break;
  249. }
  250. System.out.printf("dump N_cip:\n");
  251. for(int i=0;i<8;i++){
  252. System.out.printf("0x%x,",arr_v[i]);
  253. }
  254. System.out.printf("\n");
  255. System.out.printf("dump inp_Cip:\n");
  256. for(int i=0;i<8;i++){
  257. System.out.printf("0x%x,",arr_v1[i]);
  258. }
  259. System.out.printf("\n");
  260. if (z == true){
  261. System.out.println("success");
  262. Thread.sleep(5000);
  263. }
  264. }
  265. }

./H0/a.java:

  1. package H0;
  2. import java.lang.reflect.Array;
  3. import java.util.Arrays;
  4. /* loaded from: classes.dex */
  5. public abstract class a {
  6. /* renamed from: a */
  7. public static final byte[][] f318a = {new byte[]{-87, 103, -77, -24, 4, -3, -93, 118, -102, -110, Byte.MIN_VALUE, 120, -28, -35, -47, 56, 13, -58, 53, -104, 24, -9, -20, 108, 67, 117, 55, 38, -6, 19, -108, 72, -14, -48, -117, 48, -124, 84, -33, 35, 25, 91, 61, 89, -13, -82, -94, -126, 99, 1, -125, 46, -39, 81, -101, 124, -90, -21, -91, -66, 22, 12, -29, 97, -64, -116, 58, -11, 115, 44, 37, 11, -69, 78, -119, 107, 83, 106, -76, -15, -31, -26, -67, 69, -30, -12, -74, 102, -52, -107, 3, 86, -44, 28, 30, -41, -5, -61, -114, -75, -23, -49, -65, -70, -22, 119, 57, -81, 51, -55, 98, 113, -127, 121, 9, -83, 36, -51, -7, -40, -27, -59, -71, 77, 68, 8, -122, -25, -95, 29, -86, -19, 6, 112, -78, -46, 65, 123, -96, 17, 49, -62, 39, -112, 32, -10, 96, -1, -106, 92, -79, -85, -98, -100, 82, 27, 95, -109, 10, -17, -111, -123, 73, -18, 45, 79, -113, 59, 71, -121, 109, 70, -42, 62, 105, 100, 42, -50, -53, 47, -4, -105, 5, 122, -84, Byte.MAX_VALUE, -43, 26, 75, 14, -89, 90, 40, 20, 63, 41, -120, 60, 76, 2, -72, -38, -80, 23, 85, 31, -118, 125, 87, -57, -115, 116, -73, -60, -97, 114, 126, 21, 34, 18, 88, 7, -103, 52, 110, 80, -34, 104, 101, -68, -37, -8, -56, -88, 43, 64, -36, -2, 50, -92, -54, 16, 33, -16, -45, 93, 15, 0, 111, -99, 54, 66, 74, 94, -63, -32}, new byte[]{117, -13, -58, -12, -37, 123, -5, -56, 74, -45, -26, 107, 69, 125, -24, 75, -42, 50, -40, -3, 55, 113, -15, -31, 48, 15, -8, 27, -121, -6, 6, 63, 94, -70, -82, 91, -118, 0, -68, -99, 109, -63, -79, 14, Byte.MIN_VALUE, 93, -46, -43, -96, -124, 7, 20, -75, -112, 44, -93, -78, 115, 76, 84, -110, 116, 54, 81, 56, -80, -67, 90, -4, 96, 98, -106, 108, 66, -9, 16, 124, 40, 39, -116, 19, -107, -100, -57, 36, 70, 59, 112, -54, -29, -123, -53, 17, -48, -109, -72, -90, -125, 32, -1, -97, 119, -61, -52, 3, 111, 8, -65, 64, -25, 43, -30, 121, 12, -86, -126, 65, 58, -22, -71, -28, -102, -92, -105, 126, -38, 122, 23, 102, -108, -95, 29, 61, -16, -34, -77, 11, 114, -89, 28, -17, -47, 83, 62, -113, 51, 38, 95, -20, 118, 42, 73, -127, -120, -18, 33, -60, 26, -21, -39, -59, 57, -103, -51, -83, 49, -117, 1, 24, 35, -35, 31, 78, 45, -7, 72, 79, -14, 101, -114, 120, 92, 88, 25, -115, -27, -104, 87, 103, Byte.MAX_VALUE, 5, 100, -81, 99, -74, -2, -11, -73, 60, -91, -50, -23, 104, 68, -32, 77, 67, 105, 41, 46, -84, 21, 89, -88, 10, -98, 110, 71, -33, 52, 53, 106, -49, -36, 34, -55, -64, -101, -119, -44, -19, -85, 18, -94, 13, 82, -69, 2, 47, -87, -41, 97, 30, -76, 80, 4, -10, -62, 22, 37, -122, 86, 85, 9, -66, -111}};
  8. /* renamed from: b */
  9. public static final int[][] f319b = (int[][]) Array.newInstance((Class<?>) Integer.TYPE, 4, 256);
  10. static {
  11. int i2;
  12. int i3;
  13. int i4;
  14. int i5;
  15. int i6;
  16. int i7;
  17. int i8;
  18. int i9;
  19. int i10;
  20. for (int i11 = 0; i11 < 256; i11++) {
  21. byte[][] bArr = f318a;
  22. byte b2 = bArr[0][i11];
  23. int i12 = b2 &amp; 255;
  24. int i13 = i12 >> 2;
  25. int i14 = b2 &amp; 2;
  26. int i15 = 180;
  27. if (i14 != 0) {
  28. i2 = 180;
  29. } else {
  30. i2 = 0;
  31. }
  32. int i16 = i2 ^ i13;
  33. int i17 = b2 &amp; 1;
  34. if (i17 != 0) {
  35. i3 = 90;
  36. } else {
  37. i3 = 0;
  38. }
  39. int i18 = ((i16 ^ i3) ^ i12) &amp; 255;
  40. int i19 = i12 >> 1;
  41. if (i17 != 0) {
  42. i4 = 180;
  43. } else {
  44. i4 = 0;
  45. }
  46. int i20 = (i19 ^ i4) ^ i12;
  47. if (i14 != 0) {
  48. i5 = 180;
  49. } else {
  50. i5 = 0;
  51. }
  52. int i21 = i13 ^ i5;
  53. if (i17 != 0) {
  54. i6 = 90;
  55. } else {
  56. i6 = 0;
  57. }
  58. int i22 = ((i6 ^ i21) ^ i20) &amp; 255;
  59. int i23 = bArr[1][i11];
  60. int i24 = i23 &amp; 255;
  61. int[] iArr = {i12, i24};
  62. int i25 = i24 >> 2;
  63. int i26 = i23 &amp; 2;
  64. if (i26 != 0) {
  65. i7 = 180;
  66. } else {
  67. i7 = 0;
  68. }
  69. int i27 = i7 ^ i25;
  70. int i28 = i23 &amp; 1;
  71. if (i28 != 0) {
  72. i8 = 90;
  73. } else {
  74. i8 = 0;
  75. }
  76. int[] iArr2 = {i18, ((i27 ^ i8) ^ i24) &amp; 255};
  77. int i29 = i24 >> 1;
  78. if (i28 != 0) {
  79. i9 = 180;
  80. } else {
  81. i9 = 0;
  82. }
  83. int i30 = i24 ^ (i29 ^ i9);
  84. if (i26 == 0) {
  85. i15 = 0;
  86. }
  87. int i31 = i25 ^ i15;
  88. if (i28 != 0) {
  89. i10 = 90;
  90. } else {
  91. i10 = 0;
  92. }
  93. int[] iArr3 = {i22, ((i10 ^ i31) ^ i30) &amp; 255};
  94. int[][] iArr4 = f319b;
  95. int[] iArr5 = iArr4[0];
  96. int i32 = iArr[1] | (iArr2[1] << 8);
  97. int i33 = iArr3[1];
  98. iArr5[i11] = i32 | (i33 << 16) | (i33 << 24);
  99. int[] iArr6 = iArr4[1];
  100. int i34 = iArr3[0];
  101. iArr6[i11] = i34 | (i34 << 8) | (iArr2[0] << 16) | (iArr[0] << 24);
  102. int[] iArr7 = iArr4[2];
  103. int i35 = iArr2[1];
  104. int i36 = iArr3[1];
  105. iArr7[i11] = i35 | (i36 << 8) | (iArr[1] << 16) | (i36 << 24);
  106. int[] iArr8 = iArr4[3];
  107. int i37 = iArr2[0];
  108. iArr8[i11] = (iArr3[0] << 16) | (iArr[0] << 8) | i37 | (i37 << 24);
  109. }
  110. }
  111. // public static final int a(int i2, int i3, int[] input)
  112. public static int cnt=0;
  113. public static final int a(int i2, int i3, int[] iArr) {
  114. System.out.printf("0x%08x --- 0x%08x\n",iArr[0],iArr[1]);
  115. int i4;
  116. int i5;
  117. int i6 = i3 &amp; 255;
  118. int g2 = g(i3);
  119. int h2 = h(i3);
  120. int i7 = i(i3);
  121. int i8 = iArr[0];
  122. int i9 = iArr[1];
  123. int i10 = iArr[2];
  124. int i11 = iArr[3];
  125. int i12 = i2 &amp; 3;
  126. int[][] iArr2 = f319b;
  127. byte[][] bArr = f318a;
  128. cnt += 1;
  129. if (cnt==40){
  130. System.out.printf("here\n");
  131. }
  132. System.out.printf("cnt: %d === i3: 0x%x\n",cnt,i3);
  133. if (i12 != 0) {
  134. if (i12 != 1) {
  135. if (i12 != 2) {
  136. if (i12 != 3) {
  137. return 0;
  138. }
  139. }
  140. int[] iArr3 = iArr2[0];
  141. byte[] bArr2 = bArr[0];
  142. i5 = (iArr3[(bArr2[(bArr2[i6] &amp; 255) ^ (i9 &amp; 255)] &amp; 255) ^ (i8 &amp; 255)] ^ iArr2[1][(bArr2[(bArr[1][g2] &amp; 255) ^ g(i9)] &amp; 255) ^ g(i8)]) ^ iArr2[2][(bArr[1][(bArr[0][h2] &amp; 255) ^ h(i9)] &amp; 255) ^ h(i8)];
  143. int[] iArr4 = iArr2[3];
  144. byte[] bArr3 = bArr[1];
  145. i4 = iArr4[(bArr3[(bArr3[i7] &amp; 255) ^ i(i9)] &amp; 255) ^ i(i8)];
  146. return i5 ^ i4;
  147. }
  148. int[] iArr5 = iArr2[0];
  149. byte[] bArr4 = bArr[0];
  150. i5 = (iArr5[(bArr4[i6] &amp; 255) ^ (i8 &amp; 255)] ^ iArr2[1][(bArr4[g2] &amp; 255) ^ g(i8)]) ^ iArr2[2][(bArr[1][h2] &amp; 255) ^ h(i8)];
  151. i4 = iArr2[3][(bArr[1][i7] &amp; 255) ^ i(i8)];
  152. return i5 ^ i4;
  153. }
  154. i6 = (i11 &amp; 255) ^ (bArr[1][i6] &amp; 255);
  155. g2 = g(i11) ^ (bArr[0][g2] &amp; 255);
  156. h2 = h(i11) ^ (bArr[0][h2] &amp; 255);
  157. i7 = i(i11) ^ (bArr[1][i7] &amp; 255);
  158. byte[] bArr5 = bArr[1];
  159. i6 = (i10 &amp; 255) ^ (bArr5[i6] &amp; 255);
  160. g2 = (bArr5[g2] &amp; 255) ^ g(i10);
  161. h2 = (bArr[0][h2] &amp; 255) ^ h(i10);
  162. i7 = i(i10) ^ (bArr[0][i7] &amp; 255);
  163. int[] iArr32 = iArr2[0];
  164. byte[] bArr22 = bArr[0];
  165. i5 = (iArr32[(bArr22[(bArr22[i6] &amp; 255) ^ (i9 &amp; 255)] &amp; 255) ^ (i8 &amp; 255)] ^ iArr2[1][(bArr22[(bArr[1][g2] &amp; 255) ^ g(i9)] &amp; 255) ^ g(i8)]) ^ iArr2[2][(bArr[1][(bArr[0][h2] &amp; 255) ^ h(i9)] &amp; 255) ^ h(i8)];
  166. int[] iArr42 = iArr2[3];
  167. byte[] bArr32 = bArr[1];
  168. i4 = iArr42[(bArr32[(bArr32[i7] &amp; 255) ^ i(i9)] &amp; 255) ^ i(i8)];
  169. return i5 ^ i4;
  170. }
  171. public static int cnt2 = 0;
  172. public static final int b(int i2, int i3, int[] iArr) {
  173. cnt2 += 1;
  174. // System.out.printf("%d\n",cnt2);
  175. if(cnt2 == 32){
  176. System.out.printf("hereeeee\n");
  177. System.out.printf("dump iArr20...\n");
  178. for(int i=0;i<1024;i++){
  179. System.out.printf("0x%x,",iArr[i]);
  180. }
  181. System.out.printf("\n");
  182. }
  183. return iArr[(e(i2, i3 + 3) * 2) + 513] ^ ((iArr[e(i2, i3) * 2] ^ iArr[(e(i2, i3 + 1) * 2) + 1]) ^ iArr[(e(i2, i3 + 2) * 2) + 512]);
  184. }
  185. public static final int c(int i2, int i3) {
  186. for (int i4 = 0; i4 < 4; i4++) {
  187. i3 = d(i3);
  188. }
  189. int i5 = i2 ^ i3;
  190. for (int i6 = 0; i6 < 4; i6++) {
  191. i5 = d(i5);
  192. }
  193. return i5;
  194. }
  195. public static final int d(int i2) {
  196. int i3;
  197. int i4 = i2 >>> 24;
  198. int i5 = i4 &amp; 255;
  199. int i6 = i5 << 1;
  200. int i7 = 0;
  201. if ((i4 &amp; 128) != 0) {
  202. i3 = 333;
  203. } else {
  204. i3 = 0;
  205. }
  206. int i8 = (i6 ^ i3) &amp; 255;
  207. int i9 = i5 >>> 1;
  208. if ((i4 &amp; 1) != 0) {
  209. i7 = 166;
  210. }
  211. int i10 = (i9 ^ i7) ^ i8;
  212. return ((((i2 << 8) ^ (i10 << 24)) ^ (i8 << 16)) ^ (i10 << 8)) ^ i5;
  213. }
  214. public static final int e(int i2, int i3) {
  215. int i4 = i3 % 4;
  216. if (i4 == 0) {
  217. return i2 &amp; 255;
  218. }
  219. if (i4 == 1) {
  220. return g(i2);
  221. }
  222. if (i4 == 2) {
  223. return h(i2);
  224. }
  225. if (i4 != 3) {
  226. return 0;
  227. }
  228. return i(i2);
  229. }
  230. public static final int f(int i2) {
  231. return i2 &amp; 255;
  232. }
  233. public static final int g(int i2) {
  234. return (i2 >>> 8) &amp; 255;
  235. }
  236. public static final int h(int i2) {
  237. return (i2 >>> 16) &amp; 255;
  238. }
  239. public static final int i(int i2) {
  240. return (i2 >>> 24) &amp; 255;
  241. }
  242. public static boolean successWithString(String input) {
  243. byte[] bArr;
  244. int i2;
  245. int[] iArr;
  246. int i3;
  247. int i4;
  248. int i5;
  249. byte[] input_part4;
  250. int i6;
  251. int i7;
  252. int i8;
  253. byte[] bArr2;
  254. int[] iArr2;
  255. int i9;
  256. int[] iArr3;
  257. int[] iArr4;
  258. int[] iArr5;
  259. byte[] bArr3;
  260. byte[] input__part4;
  261. byte[] bArr4;
  262. int i10;
  263. int[] iArr6;
  264. int[] iArr7;
  265. int[] iArr8;
  266. int i11;
  267. int i12;
  268. int i13;
  269. boolean z2;
  270. int i14;
  271. int i15;
  272. int[] iArr9;
  273. int i16;
  274. int[] iArr10;
  275. int i17;
  276. int i18;
  277. int[] iArr11;
  278. int i19;
  279. byte[] bArr5;
  280. int i20;
  281. char c2;
  282. int[] iArr12;
  283. int i21;
  284. char c3;
  285. int i22;
  286. int i23;
  287. int i24;
  288. byte[][] bArr6;
  289. int i25;
  290. int[] iArr13;
  291. int i26;
  292. int i27;
  293. int i28;
  294. int i29;
  295. int i30;
  296. int[] iArr14;
  297. byte[] input_partt4;
  298. int i31;
  299. int[] iArr15;
  300. int i32;
  301. byte[] bArr7;
  302. int i33;
  303. int i34;
  304. int[] iArr16;
  305. int[] iArr17;
  306. char c4;
  307. int[] iArr18;
  308. long j2;
  309. int[] iArr19 = null;
  310. int[] iArr20 = null;
  311. int[] iArr21 = null;
  312. byte[] bArr8 = null;
  313. int[] iArr22 = null;
  314. byte[] bArr9 = null;
  315. byte[] bArr10 = null;
  316. byte[] bArr11 = null;
  317. byte[] input_part3 = null;
  318. int[] iArr23 = null;
  319. long j3 = 4731072527315935075L;
  320. int i35 = 0;
  321. int i36 = 0;
  322. int i37 = 0;
  323. int i38 = 0;
  324. int i39 = 0;
  325. int i40 = 0;
  326. int i41 = 0;
  327. int i42 = 0;
  328. int i43 = 0;
  329. int i44 = 0;
  330. int i45 = 0;
  331. int i46 = 0;
  332. int i47 = 0;
  333. int i48 = 0;
  334. int i49 = 0;
  335. int i50 = 0;
  336. int i51 = 0;
  337. int i52 = 0;
  338. int i53 = 0;
  339. int i54 = 0;
  340. int i55 = 0;
  341. int i56 = 0;
  342. byte b2 = 0;
  343. int i57 = 0;
  344. int i58 = 0;
  345. int i59 = 0;
  346. int i60 = 0;
  347. int i61 = 0;
  348. int i62 = 0;
  349. int i63 = 0;
  350. byte[] final_cip = null;
  351. while (j3 != 0) {
  352. if (j3 == 1344274946653272861L) {
  353. bArr = bArr10;
  354. j3 = 1791603831984298670L;
  355. input_part3 = Arrays.copyOfRange(input.getBytes(), 32, 48);
  356. } else {
  357. bArr = bArr10;
  358. }
  359. if (j3 == 2624883423877033675L) {
  360. i41 = a(i38, 0x1010101 + i39, iArr19);
  361. j3 = 6791763692716894148L;
  362. }
  363. long j4 = j3;
  364. if (j3 == 1235382496194677124L) {
  365. j4 = i35 < 16 ? 1265064075323142964L : 1258015405620320613L;
  366. }
  367. if (j4 == 9217510483877698234L) {
  368. final_cip[14] = 26;
  369. j4 = 1206168581136677569L;
  370. }
  371. if (j4 == 2018356045126754964L) {
  372. final_cip[3] = -67;
  373. j4 = 3996485562340421897L;
  374. }
  375. if (j4 == 7439146434853463828L) {
  376. final_cip[10] = -34;
  377. j4 = 4125034680230680057L;
  378. }
  379. if (j4 == 7166648683214755429L) {
  380. j4 = 3232348833396235159L;
  381. i35 = 0;
  382. }
  383. if (j4 == 6456065269618269061L) {
  384. final_cip[12] = 101;
  385. j4 = 9128083677415659622L;
  386. }
  387. if (j4 == 2940914719786750343L) {
  388. final_cip = new byte[16];
  389. j4 = 1298355068347161880L;
  390. }
  391. if (j4 == 6556735160628504425L) {
  392. j4 = 8518748339665995304L;
  393. i40 = 0;
  394. }
  395. if (j4 == 8545670441877195089L) {
  396. int i64 = i40 + 3;
  397. i2 = i39;
  398. int i65 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  399. i40 += 4;
  400. i45 = i65 | ((input_part3[i64] &amp; 255) << 24);
  401. j4 = 2685803154186139471L;
  402. } else {
  403. i2 = i39;
  404. }
  405. if (j4 == 2774930016233698765L) {
  406. j4 = 1917218271936056345L;
  407. }
  408. if (j4 == 3771045416936191600L) {
  409. final_cip[0] = -87;
  410. j4 = 3561976962102531662L;
  411. }
  412. if (j4 == 4721983077526601781L) {
  413. j4 = i35 < 16 ? 5449112193696891016L : 7828254552561955106L;
  414. }
  415. if (j4 == 3066500687241056891L) {
  416. j4 = 4002981753480083424L;
  417. i44 = 0;
  418. }
  419. if (j4 == 1949128521960768022L) {
  420. final_cip = new byte[16];
  421. j4 = 4582825124030923023L;
  422. }
  423. if (j4 == 3963581958469081827L) {
  424. final_cip[4] = 56;
  425. j4 = 7755442445806274292L;
  426. }
  427. if (j4 == 6235468836233699857L) {
  428. int i66 = i40 + 3;
  429. int i67 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  430. i40 += 4;
  431. i42 = i67 | ((input_part3[i66] &amp; 255) << 24);
  432. System.out.printf("i42 = i67 | ((input_part3[i66] &amp; 255) << 24);\n");
  433. j4 = 1960953289592796381L;
  434. }
  435. if (j4 == 2093361175579585723L) {
  436. j4 = 7491020394721445997L;
  437. }
  438. if (j4 == 4503359345410430401L) {
  439. i41 = (i41 << 8) | (i41 >>> 24);
  440. j4 = 6400104566594303800L;
  441. }
  442. if (j4 == 4729681422063648060L) {
  443. int i68 = i40 + 3;
  444. int i69 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  445. i40 += 4;
  446. i42 = i69 | ((input_part3[i68] &amp; 255) << 24);
  447. System.out.printf("i42 = 0x%x\n",i42);
  448. j4 = 2619183670644040407L;
  449. }
  450. if (j4 == 1931444552567951803L) {
  451. final_cip[12] = 26;
  452. j4 = 4406359568694291741L;
  453. }
  454. if (j4 == 4550460380187288280L) {
  455. final_cip[6] = 86;
  456. j4 = 7259606742125695098L;
  457. }
  458. if (j4 == 1557189065681442799L) {
  459. int i70 = i40 + 3;
  460. int i71 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  461. i40 += 4;
  462. i59 = i71 | ((input_part3[i70] &amp; 255) << 24);
  463. System.out.printf("i59 = i71 | ((input_part3[i70] &amp; 255) << 24);\n");
  464. j4 = 4529813231791050890L;
  465. }
  466. if (j4 == 5724730743879706941L) {
  467. final_cip[14] = 26;
  468. j4 = 1745476098101140696L;
  469. }
  470. if (j4 == 3664515501258973547L) {
  471. int rev = i42;
  472. i42 = (i42 << 1) | (i42 >>> 31);
  473. System.out.printf("0x%x = (0x%x << 1) | (0x%x >>> 31);2\n",i42,rev,rev);
  474. j4 = 3798078227232544657L;
  475. }
  476. int i72 = i42;
  477. if (j4 == 3269202292537843991L) {
  478. final_cip[5] = -69;
  479. j4 = 7100981003187767618L;
  480. }
  481. if (j4 == 3027876831777635167L) {
  482. j4 = 3638715073757882335L;
  483. }
  484. if (j4 == 2381872149833716276L) {
  485. i48 = b(i72, 3, iArr20);
  486. System.out.printf("0x%x = b(0x%x, 3, iArr20);\n",i48,i72);
  487. j4 = 4687532178299999822L;
  488. }
  489. if (j4 == 3454830691820322386L) {
  490. i43 += 2;
  491. j4 = 5747130514941805881L;
  492. }
  493. int i73 = i43;
  494. if (j4 == 1693417113814409015L) {
  495. final_cip = new byte[16];
  496. j4 = 3293997730919338008L;
  497. }
  498. if (j4 == 7434671091395572559L) {
  499. int i74 = i44 + 3;
  500. iArr = iArr19;
  501. int i75 = ((bArr8[i44 + 2] &amp; 255) << 16) | ((bArr8[i44 + 1] &amp; 255) << 8) | (bArr8[i44] &amp; 255);
  502. i44 += 4;
  503. iArr21[i35] = i75 | ((bArr8[i74] &amp; 255) << 24);
  504. j4 = 2244588298960877871L;
  505. } else {
  506. iArr = iArr19;
  507. }
  508. int i76 = i44;
  509. if (j4 == 3749337558494560640L) {
  510. i35++;
  511. j4 = 4721983077526601781L;
  512. }
  513. if (j4 == 8576495708234852385L) {
  514. j4 = 2643541622786400324L;
  515. i35 = 0;
  516. }
  517. if (j4 == 7938615863272599159L) {
  518. i57 = i38 - 1;
  519. j4 = 6150867844939017811L;
  520. }
  521. if (j4 == 8885026426954417173L) {
  522. i51 = iArr22[1];
  523. j4 = 3776736958491573516L;
  524. }
  525. if (j4 == 1516524683227842992L) {
  526. bArr8[i35] = (byte) i35;
  527. j4 = 1704106780884375804L;
  528. }
  529. if (j4 == 1923774560246569152L) {
  530. int rev = i45;
  531. i45 = (i45 << 1) | (i45 >>> 31);
  532. System.out.printf("0x%x = (0x%x << 1) | (0x%x >>> 31); |||| \n",i45 ,rev,rev);
  533. j4 = 8865616538709174935L;
  534. }
  535. if (j4 == 1976739577957879234L) {
  536. j4 = 6846653198359909058L;
  537. i35 = 0;
  538. }
  539. if (j4 == 7187511718077947057L) {
  540. j4 = i35 < 16 ? 2995178518753654243L : 7237318116944859580L;
  541. }
  542. if (j4 == 5750672483363983940L) {
  543. j4 = 1499582615124426815L;
  544. iArr23 = new int[i36];
  545. }
  546. if (j4 == 1448425356520503711L) {
  547. i38 = i37 / 8;
  548. j4 = 6813145705137374739L;
  549. }
  550. if (j4 == 1959318858079064627L) {
  551. final_cip[6] = 22;
  552. j4 = 6847264319992049185L;
  553. }
  554. if (j4 == 8138934693726466556L) {
  555. final_cip = new byte[16];
  556. j4 = 6316099258019509927L;
  557. }
  558. if (j4 == 2670312744982717376L) {
  559. i46 = (i46 >>> 1) | (i46 << 31);
  560. j4 = 6742529599724506157L;
  561. }
  562. if (j4 == 2207722750320310621L) {
  563. j4 = 2647830346389990788L;
  564. i35 = 0;
  565. }
  566. if (j4 == 8710549355152942959L) {
  567. final_cip[3] = -67;
  568. j4 = 6840550518655151485L;
  569. }
  570. if (j4 == 6062811699616037457L) {
  571. j4 = (i35 >= 4 || i76 >= i37) ? 5634423947985751522L : 7105550752828252141L;
  572. }
  573. if (j4 == 8450049976084005921L) {
  574. int rev = i45;
  575. i45 ^= iArr23[1];
  576. System.out.printf("0x%x ^= iArr23[1];(0x%x) ==> 0x%x |------1\n",rev,iArr23[1],i45);
  577. j4 = 8139682663513707735L;
  578. }
  579. if (j4 == 7965698667281418869L) {
  580. i48 = b(i72, 3, iArr20);
  581. System.out.printf("0x%x = b(0x%x, 3, iArr20);\n",i48,i72);
  582. j4 = 2915651820630837601L;
  583. }
  584. if (j4 == 8712522692857598416L) {
  585. j4 = i35 < 256 ? 6258186781956124801L : 5432899031047016039L;
  586. }
  587. if (j4 == 1406293758239810889L) {
  588. j4 = 6960008337303110994L;
  589. }
  590. if (j4 == 4390863030597796170L) {
  591. int i77 = iArr22[3];
  592. j4 = 6121095475008891355L;
  593. }
  594. if (j4 == 1330376841649282870L) {
  595. i51 = iArr22[1];
  596. j4 = 6248631473184684104L;
  597. }
  598. if (j4 == 5329812806323573738L) {
  599. j4 = 4141065487333702108L;
  600. }
  601. if (j4 == 4878474884038157657L) {
  602. return false;
  603. }
  604. if (j4 == 3132205735905595925L) {
  605. i45 ^= ((i48 * 2) + i47) + iArr23[i49];
  606. i49++;
  607. j4 = 5507786416351883958L;
  608. }
  609. if (j4 == 2540221427897138037L) {
  610. final_cip[5] = 34;
  611. j4 = 9187919677985842561L;
  612. }
  613. if (j4 == 5935421846599899027L) {
  614. final_cip[12] = 26;
  615. j4 = 3629825694819376798L;
  616. }
  617. if (j4 == 8693574105114856330L) {
  618. i45 ^= iArr23[1];
  619. j4 = 1607272796917644293L;
  620. }
  621. int i78 = i45;
  622. if (j4 == 6858362739340846367L) {
  623. final_cip[7] = -102;
  624. j4 = 2328180056253180144L;
  625. }
  626. if (j4 == 7837308487840170804L) {
  627. i48 = b(i78, 3, iArr20);
  628. System.out.printf("i48 = b(i78, 3, iArr20);\n");
  629. j4 = 5106069083976822048L;
  630. }
  631. if (j4 == 4433736888020758873L) {
  632. i3 = 16;
  633. j4 = i73 < 16 ? 8658034048742640241L : 5223925646383245751L;
  634. } else {
  635. i3 = 16;
  636. }
  637. if (j4 == 1210447254521047538L) {
  638. j4 = i35 < i3 ? 3027876831777635167L : 8861860503648848567L;
  639. }
  640. if (j4 == 6742543001969080469L) {
  641. i4 = i76;
  642. i5 = i35;
  643. input_part4 = Arrays.copyOfRange(input.getBytes(), 48, 64);
  644. j4 = 3309839572505684939L;
  645. } else {
  646. i4 = i76;
  647. i5 = i35;
  648. input_part4 = bArr;
  649. }
  650. if (j4 == 9205148841603072616L) {
  651. j4 = 7155080874485808131L;
  652. }
  653. if (j4 == 7442085785176969176L) {
  654. j4 = 7857940782209243597L;
  655. i4 = 0;
  656. }
  657. if (j4 == 1565736080187942985L) {
  658. j4 = 5021944871100814321L;
  659. i5 = 0;
  660. }
  661. if (j4 == 1221161945297932730L) {
  662. j4 = bArr9[i5] != final_cip[i5] ? 3809429621901428327L : 8606637167793465408L;
  663. System.out.printf("cmp en_inp, final_cip\n");
  664. System.out.printf("dump en_inp:\n");
  665. for(int i=0;i<16;i++){
  666. System.out.printf("0x%x,",bArr9[i]);
  667. }
  668. System.out.printf("\n");
  669. System.out.printf("dump final cip:\n");
  670. for(int i=0;i<16;i++){
  671. System.out.printf("0x%x,",final_cip[i]);
  672. }
  673. System.out.printf("\n");
  674. System.out.printf("dump iArr23\n");
  675. for(int i=0;i<40;i++){
  676. System.out.printf("0x%x,",iArr23[i]);
  677. }
  678. System.out.printf("\n");
  679. }
  680. if (j4 == 6156216816975470944L) {
  681. j4 = 5158554594830700929L;
  682. i6 = 0;
  683. } else {
  684. i6 = i5;
  685. }
  686. if (j4 == 3889131894744472679L) {
  687. int i79 = i40 + 3;
  688. i7 = i36;
  689. int i80 = ((input_part3[i40 + 2] &amp; 255) << 16) | ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255);
  690. i40 += 4;
  691. i78 = ((input_part3[i79] &amp; 255) << 24) | i80;
  692. j4 = 7445081137528894062L;
  693. } else {
  694. i7 = i36;
  695. }
  696. if (j4 == 5081598064245946139L) {
  697. final_cip[4] = 56;
  698. j4 = 9025636051433876555L;
  699. }
  700. if (j4 == 4582825124030923023L) {
  701. final_cip[0] = -87;
  702. j4 = 2168699168102359386L;
  703. }
  704. byte[][] bArr12 = f318a;
  705. int[][] iArr24 = f319b;
  706. if (j4 == 4844213572013444662L) {
  707. i8 = i37;
  708. iArr20[(i6 * 2) + 1] = iArr24[1][(bArr12[0][(bArr12[1][i50] &amp; 255) ^ g(i51)] &amp; 255) ^ g(i52)];
  709. j4 = 1189820553702033682L;
  710. } else {
  711. i8 = i37;
  712. }
  713. if (j4 == 2479939902309983355L) {
  714. j4 = i6 < 256 ? 4414711808604472165L : 3816401808965634220L;
  715. }
  716. if (j4 == 6539778732394021364L) {
  717. i6++;
  718. j4 = 3288829365377197701L;
  719. }
  720. if (j4 == 4406359568694291741L) {
  721. final_cip[13] = 34;
  722. j4 = 3717774128157910605L;
  723. }
  724. if (j4 == 8467294207452721452L) {
  725. j4 = i6 < 16 ? 5577077923868017099L : 5035786145376624859L;
  726. }
  727. if (j4 == 1446293772852257370L) {
  728. j4 = 4019322378267872035L;
  729. }
  730. if (j4 == 5780988963199426860L) {
  731. j4 = 7029503371282280059L;
  732. }
  733. if (j4 == 3853058995086597827L) {
  734. j4 = 2827565969431776290L;
  735. i6 = 0;
  736. }
  737. if (j4 == 7650200577204707019L) {
  738. bArr9[i6] = (byte) (input_part4[i6] ^ bArr11[i53]);
  739. j4 = 8049116761699692167L;
  740. }
  741. if (j4 == 7828254552561955106L) {
  742. return true;
  743. }
  744. if (j4 == 1542568896301610920L) {
  745. return false;
  746. }
  747. if (j4 == 5674382685779100318L) {
  748. return true;
  749. }
  750. if (j4 == 3799650815120663631L) {
  751. int rev = i46;
  752. i46 = (i46 >>> 1) | (i46 << 31);
  753. System.out.printf("0x%x = (0x%x >>> 1) | (0x%x << 31);\n",i46,rev,rev);
  754. j4 = 3664515501258973547L;
  755. }
  756. if (j4 == 5785321344550860296L) {
  757. j4 = 2380097332528943626L;
  758. i6 = 0;
  759. i2 = 0;
  760. }
  761. if (j4 == 3635089787362081630L) {
  762. i78 = (i78 >>> 31) | (i78 << 1);
  763. j4 = 7606829752949254081L;
  764. }
  765. if (j4 == 6870659348541134994L) {
  766. int rev = i72;
  767. i72 ^= iArr23[5];
  768. System.out.printf("0x%x ^= iArr23[5](0x%x); ==> 0x%x\n",rev,iArr23[5],i72);
  769. j4 = 7957423564036594724L;
  770. }
  771. if (j4 == 3651248876173446844L) {
  772. j4 = i6 < bArr8.length ? 3261491808297697902L : 6154526864824538477L;
  773. }
  774. if (j4 == 8429256749154793372L) {
  775. i6++;
  776. j4 = 7559115683265846437L;
  777. }
  778. if (j4 == 6684206521967284343L) {
  779. final_cip[7] = -102;
  780. j4 = 6629490099819822416L;
  781. }
  782. if (j4 == 4489495459518801626L) {
  783. i6++;
  784. j4 = 6065652472169461293L;
  785. }
  786. if (j4 == 4913171088445306692L) {
  787. j4 = 7102882857441765884L;
  788. i55 = ((bArr11[i54] &amp; 255) + i55) &amp; 255;
  789. }
  790. if (j4 == 2971360862616034517L) {
  791. i46 ^= iArr23[2];
  792. j4 = 7679858687335731309L;
  793. }
  794. if (j4 == 5632710845036330174L) {
  795. final_cip[15] = 115;
  796. j4 = 2999075064852109317L;
  797. }
  798. if (j4 == 8712993034539386972L) {
  799. i41 = (i41 << 8) | (i41 >>> 24);
  800. j4 = 2385330523779930222L;
  801. }
  802. if (j4 == 4069681874230164976L) {
  803. bArr11[i56] = b2;
  804. j4 = 8995230908817835821L;
  805. }
  806. if (j4 == 1383509948187139942L) {
  807. iArr22[i57] = c(iArr21[i6], iArr[i6]);
  808. j4 = 2165639815662633400L;
  809. }
  810. if (j4 == 3641357321518337437L) {
  811. j4 = i6 < 16 ? 4367072516203707509L : 9155753144681893636L;
  812. }
  813. if (j4 == 7338973850236663134L) {
  814. i46 ^= iArr23[4];
  815. j4 = 5687179084370450098L;
  816. }
  817. if (j4 == 8147838551163462352L) {
  818. j4 = i6 < bArr8.length ? 1515150366864584833L : 7268096038668322638L;
  819. }
  820. if (j4 == 2267521650283250943L) {
  821. j4 = 1543835537816689303L;
  822. }
  823. if (j4 == 6066511524528422362L) {
  824. final_cip[13] = 34;
  825. j4 = 7916273223981762345L;
  826. }
  827. if (j4 == 7627928995385457046L) {
  828. bArr11[i56] = b2;
  829. j4 = 8642648116757711055L;
  830. }
  831. if (j4 == 8858813628494679889L) {
  832. iArr20 = new int[1024];
  833. j4 = 5002450969468452359L;
  834. }
  835. if (j4 == 7830774370852576407L) {
  836. int i81 = i4 + 3;
  837. bArr2 = input_part4;
  838. int i82 = ((bArr8[i4 + 2] &amp; 255) << 16) | ((bArr8[i4 + 1] &amp; 255) << 8) | (bArr8[i4] &amp; 255);
  839. i4 += 4;
  840. iArr[i6] = i82 | ((bArr8[i81] &amp; 255) << 24);
  841. j4 = 4253974366483718512L;
  842. } else {
  843. bArr2 = input_part4;
  844. }
  845. if (j4 == 2006261316763383880L) {
  846. i6++;
  847. j4 = 4268434749325211515L;
  848. }
  849. if (j4 == 4981578060776525784L) {
  850. int i83 = iArr22[2];
  851. j4 = 2354860184047444979L;
  852. }
  853. if (j4 == 5665212773913217619L) {
  854. bArr11[i6] = (byte) i6;
  855. j4 = 7936308356012564598L;
  856. }
  857. if (j4 == 1925267828353292404L) {
  858. i52 = iArr22[0];
  859. j4 = 3141556051555878191L;
  860. }
  861. if (j4 == 7477109834176307884L) {
  862. final_cip[1] = -39;
  863. j4 = 6536862633203215031L;
  864. }
  865. if (j4 == 5733075732827349729L) {
  866. final_cip[11] = -88;
  867. j4 = 6456065269618269061L;
  868. }
  869. if (j4 == 2979491677337701483L) {
  870. final_cip[0] = -87;
  871. j4 = 1186625407244930214L;
  872. }
  873. if (j4 == 8806141432899778163L) {
  874. j4 = 3658748673678459194L;
  875. iArr2 = new int[4];
  876. } else {
  877. iArr2 = iArr;
  878. }
  879. if (j4 == 5158554594830700929L) {
  880. j4 = i6 < 256 ? 5680233300170691155L : 5985635937414591521L;
  881. }
  882. if (j4 == 3857582825715051590L) {
  883. final_cip[9] = -106;
  884. j4 = 5712797840902770362L;
  885. }
  886. if (j4 == 3239610692754448539L) {
  887. i57--;
  888. j4 = 6062811699616037457L;
  889. }
  890. if (j4 == 2228412114913783121L) {
  891. i9 = 40;
  892. j4 = 7048362897848211972L;
  893. } else {
  894. i9 = i7;
  895. }
  896. if (j4 == 2464113797535833870L) {
  897. j4 = 1874544657470527590L;
  898. }
  899. if (j4 == 8899342501041115189L) {
  900. bArr9 = new byte[16];
  901. j4 = 6856100014110617486L;
  902. }
  903. if (j4 == 4502191866101741942L) {
  904. final_cip[3] = -45;
  905. j4 = 6003035240079781244L;
  906. }
  907. if (j4 == 6239062422289160234L) {
  908. i46 ^= (i47 + i48) + iArr23[i49];
  909. i49++;
  910. j4 = 2558574102511333837L;
  911. }
  912. if (j4 == 3944034548958798065L) {
  913. iArr3 = iArr21;
  914. j4 = 1715651793431489116L;
  915. i53 = ((bArr11[i54] &amp; 255) + (bArr11[i55] &amp; 255)) &amp; 255;
  916. } else {
  917. iArr3 = iArr21;
  918. }
  919. if (j4 == 8601808016329414299L) {
  920. return false;
  921. }
  922. if (j4 == 1576871852716234009L) {
  923. i46 ^= (i47 + i48) + iArr23[i49];
  924. j4 = 7122579587187539743L;
  925. i49++;
  926. }
  927. if (j4 == 7134777286922640409L) {
  928. i6++;
  929. j4 = 7742223888133137430L;
  930. }
  931. if (j4 == 3408812674582655891L) {
  932. j4 = 4546317725273286940L;
  933. iArr4 = new int[4];
  934. } else {
  935. iArr4 = iArr3;
  936. }
  937. if (j4 == 6291717555241868931L) {
  938. iArr5 = iArr22;
  939. bArr3 = bArr9;
  940. input__part4 = Arrays.copyOfRange(input.getBytes(), 48, 64);
  941. j4 = 1477878882031581069L;
  942. } else {
  943. iArr5 = iArr22;
  944. bArr3 = bArr9;
  945. input__part4 = bArr2;
  946. }
  947. if (j4 == 5830459252270867373L) {
  948. j4 = 1307281791046846137L;
  949. i40 = 0;
  950. }
  951. if (j4 == 2272798444665954523L) {
  952. j4 = i6 < 16 ? 7922265040538291434L : 1949128521960768022L;
  953. }
  954. if (j4 == 5030664747537294245L) {
  955. final_cip[11] = -113;
  956. j4 = 3645268212325467906L;
  957. }
  958. if (j4 == 2243047018611698496L) {
  959. bArr4 = input__part4;
  960. iArr20[(i6 * 2) + 512] = iArr24[2][(bArr12[1][(bArr12[0][i58] &amp; 255) ^ h(i51)] &amp; 255) ^ h(i52)];
  961. j4 = 2012634943331272739L;
  962. } else {
  963. bArr4 = input__part4;
  964. }
  965. if (j4 == 1230993959279055670L) {
  966. j4 = i73 < 16 ? 1671474751395228828L : 6230299255924766997L;
  967. }
  968. if (j4 == 8614510693619874143L) {
  969. int rev = i59;
  970. i59 ^= (i47 + i48) + iArr23[i49];
  971. System.out.printf("0x%x ^= (0x%x + 0x%x) + iArr23[0x%x](0x%x); ==> 0x%x ===1\n",rev,i47,i48,i49,iArr23[i49],i59);
  972. j4 = 2101580866933054237L;
  973. i49++;
  974. }
  975. int i84 = i59;
  976. if (j4 == 2642256598463014223L) {
  977. final_cip[12] = 26;
  978. j4 = 5546371364110668020L;
  979. }
  980. if (j4 == 8571264530881593712L) {
  981. final_cip[13] = -114;
  982. j4 = 2136818370012310171L;
  983. }
  984. if (j4 == 1776589645593272517L) {
  985. final_cip[8] = -20;
  986. j4 = 1536915158700845943L;
  987. }
  988. if (j4 == 3216270323582324779L) {
  989. final_cip[6] = 86;
  990. j4 = 8354771225526520440L;
  991. }
  992. if (j4 == 5128669412318362325L) {
  993. j4 = 8858626231332964772L;
  994. }
  995. if (j4 == 6203948773157381693L) {
  996. int i85 = i4 + 3;
  997. i10 = i73;
  998. int i86 = ((bArr8[i4 + 1] &amp; 255) << 8) | (bArr8[i4] &amp; 255) | ((bArr8[i4 + 2] &amp; 255) << 16);
  999. i4 += 4;
  1000. iArr2[i6] = i86 | ((bArr8[i85] &amp; 255) << 24);
  1001. j4 = 6140926885576835727L;
  1002. } else {
  1003. i10 = i73;
  1004. }
  1005. if (j4 == 2143903162775120184L) {
  1006. i6++;
  1007. j4 = 6965451223574289359L;
  1008. }
  1009. if (j4 == 3524251343514742352L) {
  1010. i72 = (i72 << 1) | (i72 >>> 31);
  1011. j4 = 3232129143333112632L;
  1012. }
  1013. if (j4 == 2765340047003677131L) {
  1014. i47 = b(i84, 0, iArr20);
  1015. System.out.printf("0x%x = b(0x%x, 0, iArr20);\n",i47,i84);
  1016. j4 = 8320362214494129059L;
  1017. }
  1018. if (j4 == 8113068425133703218L) {
  1019. i2 += 33686018;
  1020. j4 = 1615637139671222434L;
  1021. }
  1022. if (j4 == 1922411276633870490L) {
  1023. iArr6 = new int[4];
  1024. j4 = 2983171159703272091L;
  1025. } else {
  1026. iArr6 = iArr5;
  1027. }
  1028. if (j4 == 4249658298115383554L) {
  1029. iArr7 = iArr6;
  1030. iArr20[(i6 * 2) + 512] = iArr24[2][(bArr12[1][(bArr12[0][i58] &amp; 255) ^ h(i51)] &amp; 255) ^ h(i52)];
  1031. j4 = 7796303291830281045L;
  1032. } else {
  1033. iArr7 = iArr6;
  1034. }
  1035. if (j4 == 8256907239556468412L) {
  1036. final_cip[9] = -77;
  1037. j4 = 3498352284358828315L;
  1038. }
  1039. if (j4 == 6505983967259753973L) {
  1040. bArr11[i55] = b2;
  1041. j4 = 5439844282370393304L;
  1042. }
  1043. if (j4 == 9171905176519800148L) {
  1044. j4 = input.length() < 64 ? 4195029094423679636L : 3757062276099973803L;
  1045. }
  1046. if (j4 == 8045731683183909714L) {
  1047. j4 = 7885522936240168470L;
  1048. i55 = 0;
  1049. }
  1050. if (j4 == 9058600938452428912L) {
  1051. int rev = i84;
  1052. i84 = (i84 << 31) | (i84 >>> 1);
  1053. System.out.printf("i84 = (i84 << 31) | (i84 >>> 1);\n",i84,rev,rev);
  1054. j4 = 5744181537574184685L;
  1055. }
  1056. if (j4 == 9069075618791280805L) {
  1057. final_cip[5] = 34;
  1058. j4 = 1843429843798473511L;
  1059. }
  1060. if (j4 == 3689168917021238793L) {
  1061. iArr20[(i6 * 2) + 512] = iArr24[2][(bArr12[1][(bArr12[0][i58] &amp; 255) ^ h(i51)] &amp; 255) ^ h(i52)];
  1062. j4 = 3564308124560413862L;
  1063. }
  1064. if (j4 == 5301379100569539273L) {
  1065. j4 = 6399356390896869309L;
  1066. i55 = 0;
  1067. }
  1068. if (j4 == 3918062052349580671L) {
  1069. j4 = 2466964143165741837L;
  1070. i56 = 0;
  1071. }
  1072. if (j4 == 4967406293272637771L) {
  1073. int rev1 = i46;
  1074. int rev2 = iArr23[4];
  1075. i46 ^= iArr23[4];
  1076. // System.out.printf("i46: 0x%x\n",i46);
  1077. System.out.printf("0x%x ^= iArr23[4](0x%x) ==> 0x%x // 0x%x\n",rev1,iArr23[4],i46,rev2);
  1078. j4 = 6870659348541134994L;
  1079. }
  1080. int i87 = i46;
  1081. if (j4 == 4655572712013400706L) {
  1082. j4 = 4597609935169428732L;
  1083. }
  1084. if (j4 == 3166750012504996540L) {
  1085. int rev = i78;
  1086. i78 ^= iArr23[7];
  1087. System.out.printf("0x%x ^= iArr23[7](0x%x); ==> 0x%x\n",rev,iArr23[7],i78);
  1088. j4 = 6017806319896199361L;
  1089. }
  1090. if (j4 == 3759730075617569039L) {
  1091. j4 = 5454795868479267733L;
  1092. iArr8 = new int[4];
  1093. } else {
  1094. iArr8 = iArr7;
  1095. }
  1096. if (j4 == 6069099502938214271L) {
  1097. j4 = 7738313729691083676L;
  1098. i6 = 0;
  1099. i2 = 0;
  1100. }
  1101. if (j4 == 8733995111375603342L) {
  1102. return false;
  1103. }
  1104. if (j4 == 8474438945361269523L) {
  1105. i48 = b(i78, 3, iArr20);
  1106. System.out.printf("i48 = b(i78, 3, iArr20);1\n");
  1107. j4 = 6628989894226553698L;
  1108. }
  1109. if (j4 == 6882462805502957432L) {
  1110. final_cip[1] = -39;
  1111. j4 = 6379026488496223403L;
  1112. }
  1113. if (j4 == 8451739037481316613L) {
  1114. i6++;
  1115. j4 = 2460950143244437765L;
  1116. }
  1117. if (j4 == 1506771280779625252L) {
  1118. j4 = i6 < i9 / 2 ? 3691596519119015595L : 7571741907448362931L;
  1119. }
  1120. if (j4 == 1700983361891594708L) {
  1121. j4 = 6236359899965482168L;
  1122. i6 = 0;
  1123. i11 = 0;
  1124. } else {
  1125. i11 = i2;
  1126. }
  1127. if (j4 == 6791763692716894148L) {
  1128. i41 = (i41 << 8) | (i41 >>> 24);
  1129. j4 = 6641130065549689505L;
  1130. }
  1131. if (j4 == 5143211481986516166L) {
  1132. i12 = i78;
  1133. i13 = i11;
  1134. iArr8[i57] = c(iArr4[i6], iArr2[i6]);
  1135. j4 = 7891276519961275113L;
  1136. } else {
  1137. i12 = i78;
  1138. i13 = i11;
  1139. }
  1140. if (j4 == 6742635737946316261L) {
  1141. i60 += i41;
  1142. j4 = 3392984551034355170L;
  1143. }
  1144. if (j4 == 7423862695494096725L) {
  1145. final_cip[14] = -120;
  1146. j4 = 5025360563600307522L;
  1147. }
  1148. if (j4 == 1298355068347161880L) {
  1149. z2 = false;
  1150. final_cip[0] = -97;
  1151. j4 = 4192332344726786256L;
  1152. } else {
  1153. z2 = false;
  1154. }
  1155. if (j4 == 1872248020497693162L) {
  1156. return z2;
  1157. }
  1158. if (j4 == 7113837318717080147L) {
  1159. i14 = bArr8.length;
  1160. j4 = 3460300782170937607L;
  1161. } else {
  1162. i14 = i8;
  1163. }
  1164. if (j4 == 8689932493166301704L) {
  1165. i6++;
  1166. j4 = 2559141778370937007L;
  1167. }
  1168. if (j4 == 2712255506212294232L) {
  1169. b2 = bArr11[i6];
  1170. j4 = 2637559127033415801L;
  1171. }
  1172. if (j4 == 7895119885594720875L) {
  1173. final_cip[2] = Byte.MIN_VALUE;
  1174. j4 = 4797263790202639931L;
  1175. }
  1176. if (j4 == 4723608467462860668L) {
  1177. i47 = b(i87, 0, iArr20);
  1178. j4 = 4494853218025089243L;
  1179. }
  1180. if (j4 == 2417995832646284659L) {
  1181. j4 = 4227288482303383078L;
  1182. }
  1183. if (j4 == 4646339510735050251L) {
  1184. i60 += i41;
  1185. j4 = 1818157425461567934L;
  1186. }
  1187. if (j4 == 4369458919546020466L) {
  1188. i15 = i14;
  1189. iArr20[(i6 * 2) + 1] = iArr24[1][(bArr12[0][(bArr12[1][i50] &amp; 255) ^ g(i51)] &amp; 255) ^ g(i52)];
  1190. j4 = 2243047018611698496L;
  1191. } else {
  1192. i15 = i14;
  1193. }
  1194. if (j4 == 3169104890646436008L) {
  1195. j4 = i6 < 256 ? 3490326607433591043L : 6156216816975470944L;
  1196. }
  1197. if (j4 == 8328790806156357318L) {
  1198. final_cip[12] = 101;
  1199. j4 = 1687871497192565496L;
  1200. }
  1201. if (j4 == 4876709113984680946L) {
  1202. bArr11[i6] = (byte) i6;
  1203. j4 = 2757157254562105502L;
  1204. }
  1205. if (j4 == 4967752726726655102L) {
  1206. i87 ^= iArr23[4];
  1207. j4 = 1881227562238638542L;
  1208. }
  1209. if (j4 == 6629490099819822416L) {
  1210. final_cip[8] = 49;
  1211. j4 = 8256907239556468412L;
  1212. }
  1213. if (j4 == 4253974366483718512L) {
  1214. iArr8[i57] = c(iArr4[i6], iArr2[i6]);
  1215. j4 = 3348113858426447674L;
  1216. }
  1217. if (j4 == 5328979100626095900L) {
  1218. j4 = 6583809806457227315L;
  1219. i49 = 8;
  1220. }
  1221. if (j4 == 9139492487154675731L) {
  1222. i48 = b(i72, 3, iArr20);
  1223. System.out.printf("0x%x = b(0x%x, 3, iArr20);2\n",i48,i72);
  1224. j4 = 3676839726527528229L;
  1225. }
  1226. if (j4 == 3232348833396235159L) {
  1227. j4 = i6 < 256 ? 2774930016233698765L : 5830459252270867373L;
  1228. }
  1229. if (j4 == 8790842551072430122L) {
  1230. j4 = 5809570720048932031L;
  1231. i53 = ((bArr11[i54] &amp; 255) + (bArr11[i55] &amp; 255)) &amp; 255;
  1232. }
  1233. if (j4 == 3195178661704652520L) {
  1234. b2 = bArr11[i6];
  1235. j4 = 6597678744472727573L;
  1236. }
  1237. if (j4 == 7225103017975505690L) {
  1238. bArr11[i54] = bArr11[i55];
  1239. j4 = 1341808814515513048L;
  1240. }
  1241. if (j4 == 2119690742806089054L) {
  1242. j4 = 7697030109774584633L;
  1243. i54 = (i54 + 1) &amp; 255;
  1244. }
  1245. if (j4 == 1404052937569931777L) {
  1246. j4 = 3553147099752082898L;
  1247. }
  1248. if (j4 == 9037117679071136801L) {
  1249. int i88 = i40 + 3;
  1250. iArr9 = iArr4;
  1251. int i89 = ((input_part3[i40 + 2] &amp; 255) << 16) | ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255);
  1252. i40 += 4;
  1253. i16 = ((input_part3[i88] &amp; 255) << 24) | i89;
  1254. System.out.printf("i16 = ((input_part3[i88] &amp; 255) << 24) | i89;\n");
  1255. j4 = 2683712846824466970L;
  1256. } else {
  1257. iArr9 = iArr4;
  1258. i16 = i12;
  1259. }
  1260. if (j4 == 5249992174669506009L) {
  1261. i47 = b(i84, 0, iArr20);
  1262. System.out.printf("0x%x = b(0x%x, 0, iArr20);3\n",i47,i84);
  1263. j4 = 1757468250215542428L;
  1264. }
  1265. if (j4 == 8113126029116536782L) {
  1266. final_cip[5] = 34;
  1267. j4 = 7215458347621232043L;
  1268. }
  1269. if (j4 == 5346212181092580745L) {
  1270. i87 ^= iArr23[2];
  1271. j4 = 3552493032350408280L;
  1272. }
  1273. if (j4 == 8226334980212259602L) {
  1274. j4 = 5613764015967390693L;
  1275. }
  1276. if (j4 == 8867156692366178090L) {
  1277. i6++;
  1278. j4 = 3645427461145798578L;
  1279. }
  1280. if (j4 == 3603503257907849991L) {
  1281. j4 = i6 < i9 / 2 ? 3563910683601917326L : 4132824574133018925L;
  1282. }
  1283. if (j4 == 3498352284358828315L) {
  1284. final_cip[10] = -34;
  1285. j4 = 5733075732827349729L;
  1286. }
  1287. if (j4 == 4915374719664229127L) {
  1288. j4 = 7851583652737565876L;
  1289. }
  1290. if (j4 == 7370392102556209775L) {
  1291. final_cip[14] = 26;
  1292. j4 = 2968432505771842589L;
  1293. }
  1294. if (j4 == 7922265040538291434L) {
  1295. j4 = 3256821261585855975L;
  1296. }
  1297. if (j4 == 6797381422692238257L) {
  1298. i6++;
  1299. j4 = 8484923127125558638L;
  1300. }
  1301. if (j4 == 8822634336683979982L) {
  1302. final_cip[11] = -88;
  1303. j4 = 2283802967392970500L;
  1304. }
  1305. if (j4 == 2799049228121383361L) {
  1306. bArr8[i6] = (byte) i6;
  1307. j4 = 4616176720591788319L;
  1308. }
  1309. if (j4 == 7303333862302918217L) {
  1310. i6++;
  1311. j4 = 2771646971449226877L;
  1312. }
  1313. if (j4 == 1157556858167321294L) {
  1314. i60 += i41;
  1315. j4 = 6761671813385298993L;
  1316. }
  1317. if (j4 == 8533640950399556720L) {
  1318. j4 = 7816334058516889118L;
  1319. i53 = ((bArr11[i54] &amp; 255) + (bArr11[i55] &amp; 255)) &amp; 255;
  1320. }
  1321. if (j4 == 2240421224603994624L) {
  1322. i16 ^= iArr23[7];
  1323. System.out.printf("i16 ^= iArr23[7];\n");
  1324. j4 = 4851634851769503870L;
  1325. }
  1326. if (j4 == 7430299891549265788L) {
  1327. i47 = b(i87, 0, iArr20);
  1328. j4 = 6998551651859783261L;
  1329. }
  1330. if (j4 == 3108054655050818576L) {
  1331. j4 = 2849892291077788860L;
  1332. i55 = ((bArr11[i54] &amp; 255) + i55) &amp; 255;
  1333. }
  1334. if (j4 == 5889839625189711156L) {
  1335. i6++;
  1336. j4 = 7592770177733069920L;
  1337. }
  1338. if (j4 == 8513954143616756791L) {
  1339. iArr20 = new int[1024];
  1340. j4 = 4199913159470633820L;
  1341. }
  1342. if (j4 == 6385765029630073007L) {
  1343. final_cip[8] = -20;
  1344. j4 = 2741486890114654248L;
  1345. }
  1346. if (j4 == 3805451690314712856L) {
  1347. j4 = 5235021199741258527L;
  1348. iArr10 = new int[4];
  1349. } else {
  1350. iArr10 = iArr9;
  1351. }
  1352. if (j4 == 5407125151982145331L) {
  1353. iArr23[(i6 * 2) + 1] = (i60 << 9) | (i60 >>> 23);
  1354. j4 = 2006261316763383880L;
  1355. }
  1356. byte[] bArr13 = bArr8;
  1357. if (j4 == 6017806319896199361L) {
  1358. j4 = 2940914719786750343L;
  1359. bArr3 = new byte[]{(byte) i87, (byte) (i87 >>> 8), (byte) (i87 >>> 16), (byte) (i87 >>> 24), (byte) i72, (byte) (i72 >>> 8), (byte) (i72 >>> 16), (byte) (i72 >>> 24), (byte) i84, (byte) (i84 >>> 8), (byte) (i84 >>> 16), (byte) (i84 >>> 24), (byte) i16, (byte) (i16 >>> 8), (byte) (i16 >>> 16), (byte) (i16 >>> 24)};
  1360. }
  1361. if (j4 == 6353868812675907408L) {
  1362. i17 = i13;
  1363. i60 = a(i38, i17, iArr10);
  1364. j4 = 7193859361834778956L;
  1365. } else {
  1366. i17 = i13;
  1367. }
  1368. if (j4 == 5680233300170691155L) {
  1369. j4 = 7720877091476958305L;
  1370. }
  1371. if (j4 == 6246276100940706152L) {
  1372. final_cip[4] = 119;
  1373. j4 = 3269202292537843991L;
  1374. }
  1375. if (j4 == 7608592725865706243L) {
  1376. i6++;
  1377. j4 = 6621328629503001747L;
  1378. }
  1379. if (j4 == 6317465591117429424L) {
  1380. int rev = i84;
  1381. i84 ^= iArr23[6];
  1382. System.out.printf("0x%x ^= iArr23[6];// 0x%x \n",rev,iArr23[6]);
  1383. j4 = 8990284059334595524L;
  1384. }
  1385. if (j4 == 2137603072377791592L) {
  1386. i18 = i72;
  1387. j4 = bArr3[i6] != final_cip[i6] ? 3696715939049432759L : 4319018985115126267L;
  1388. } else {
  1389. i18 = i72;
  1390. }
  1391. if (j4 == 2776803616288623434L) {
  1392. i60 = a(i38, i17, iArr10);
  1393. j4 = 2624883423877033675L;
  1394. }
  1395. if (j4 == 4390732763753961871L) {
  1396. int i90 = i40 + 3;
  1397. iArr11 = iArr2;
  1398. int i91 = ((input_part3[i40 + 2] &amp; 255) << 16) | ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255);
  1399. i40 += 4;
  1400. i19 = ((input_part3[i90] &amp; 255) << 24) | i91;
  1401. System.out.printf("i19 = ((input_part3[i90] &amp; 255) << 24) | i91;");
  1402. j4 = 8271636431825400542L;
  1403. } else {
  1404. iArr11 = iArr2;
  1405. i19 = i18;
  1406. }
  1407. if (j4 == 2168699168102359386L) {
  1408. final_cip[1] = -39;
  1409. j4 = 7377732012589796128L;
  1410. }
  1411. if (j4 == 6922153080934778037L) {
  1412. iArr23[i6 * 2] = i60;
  1413. j4 = 7063269725703171761L;
  1414. }
  1415. if (j4 == 8139682663513707735L) {
  1416. int rev1 = i87;
  1417. int rev2 = iArr23[2];
  1418. i87 ^= iArr23[2];
  1419. System.out.printf("0x%x ^= iArr23[2]; ==> 0x%x// 0x%x\n",rev1,i87,rev2);
  1420. j4 = 1818264258760743319L;
  1421. }
  1422. if (j4 == 6258872612775795445L) {
  1423. bArr5 = new byte[16];
  1424. j4 = 6728389485969756476L;
  1425. } else {
  1426. bArr5 = bArr13;
  1427. }
  1428. if (j4 == 3885594324910219477L) {
  1429. i19 ^= iArr23[5];
  1430. System.out.printf("i19 ^= iArr23[5];\n");
  1431. j4 = 5107504885568133637L;
  1432. }
  1433. if (j4 == 3593043533289075260L) {
  1434. j4 = 3635178025052271786L;
  1435. i56 = 0;
  1436. }
  1437. if (j4 == 2435557629452229653L) {
  1438. j4 = 5509768734639095146L;
  1439. }
  1440. if (j4 == 4766834611894299394L) {
  1441. final_cip[9] = -106;
  1442. j4 = 1515725586281083405L;
  1443. }
  1444. if (j4 == 2763205489416023289L) {
  1445. final_cip[10] = -34;
  1446. j4 = 1376792466778633276L;
  1447. }
  1448. if (j4 == 6583809806457227315L) {
  1449. j4 = 2100408234106893388L;
  1450. i10 = 0;
  1451. }
  1452. if (j4 == 6816337433391007991L) {
  1453. final_cip[8] = -20;
  1454. j4 = 8844440844274236713L;
  1455. }
  1456. if (j4 == 2330796828706545701L) {
  1457. j4 = 6265501985217721867L;
  1458. i54 = 0;
  1459. }
  1460. if (j4 == 1206664505993188401L) {
  1461. j4 = 4416966639446818591L;
  1462. i10 = 0;
  1463. }
  1464. if (j4 == 7152594270267019474L) {
  1465. j4 = 8601808016329414299L;
  1466. }
  1467. if (j4 == 3193075933208574218L) {
  1468. j4 = 5311422641086316628L;
  1469. i6 = 0;
  1470. }
  1471. if (j4 == 2134414655671570111L) {
  1472. final_cip[15] = 50;
  1473. j4 = 8077015324826886926L;
  1474. }
  1475. if (j4 == 7615576072437806969L) {
  1476. i6++;
  1477. j4 = 3169104890646436008L;
  1478. }
  1479. if (j4 == 7342767995630740962L) {
  1480. j4 = 5594187482349100765L;
  1481. i49 = 8;
  1482. }
  1483. if (j4 == 2012634943331272739L) {
  1484. int[] iArr25 = iArr24[3];
  1485. byte[] bArr14 = bArr12[1];
  1486. i20 = i87;
  1487. iArr20[(i6 * 2) + 513] = iArr25[(bArr14[(bArr14[i61] &amp; 255) ^ i(i51)] &amp; 255) ^ i(i52)];
  1488. j4 = 8016446346432534725L;
  1489. } else {
  1490. i20 = i87;
  1491. }
  1492. if (j4 == 3124355357281158283L) {
  1493. j4 = bArr3[i6] != final_cip[i6] ? 8401000026215651795L : 3749337558494560640L;
  1494. System.out.printf("cmp en_inp222, final_cip222\n");
  1495. System.out.printf("dump en_inp222:\n");
  1496. for(int i=0;i<16;i++){
  1497. System.out.printf("0x%x,",bArr3[i]);
  1498. }
  1499. System.out.printf("\n");
  1500. System.out.printf("dump final_cip222:\n");
  1501. for(int i=0;i<16;i++){
  1502. System.out.printf("0x%x,",final_cip[i]);
  1503. }
  1504. System.out.printf("\n");
  1505. // System.out.printf("dump iArr23\n");
  1506. // for(int i=0;i<40;i++){
  1507. // System.out.printf("0x%x,",iArr23[i]);
  1508. // }
  1509. // System.out.printf("\n");
  1510. }
  1511. if (j4 == 7738313729691083676L) {
  1512. j4 = i6 < i9 / 2 ? 4202436593687076484L : 7628593932436149125L;
  1513. }
  1514. if (j4 == 3638715073757882335L) {
  1515. if(i6 ==15){
  1516. System.out.printf("hhh\n");
  1517. }
  1518. j4 = bArr3[i6] != final_cip[i6] ? 4765566201281400311L : 7708592395920482331L;
  1519. System.out.printf("cmp en_inp, final_cip\n");
  1520. System.out.printf("dump en_inp:\n");
  1521. for(int i=0;i<16;i++){
  1522. System.out.printf("0x%x,",bArr3[i]);
  1523. }
  1524. System.out.printf("\n");
  1525. System.out.printf("dump final cip:\n");
  1526. for(int i=0;i<16;i++){
  1527. System.out.printf("0x%x,",final_cip[i]);
  1528. }
  1529. System.out.printf("\n");
  1530. System.out.printf("dump iArr23\n");
  1531. for(int i=0;i<40;i++){
  1532. System.out.printf("0x%x,",iArr23[i]);
  1533. }
  1534. System.out.printf("\n");
  1535. }
  1536. if (j4 == 7084261336607768407L) {
  1537. j4 = 1372428978400526091L;
  1538. i54 = 0;
  1539. }
  1540. if (j4 == 2469602840783646837L) {
  1541. j4 = 2610219915628716936L;
  1542. }
  1543. if (j4 == 2886594228447074028L) {
  1544. j4 = bArr3[i6] != final_cip[i6] ? 7812355649959096589L : 9206504687413913692L;
  1545. }
  1546. if (j4 == 7235245031966433308L) {
  1547. j4 = i6 < 256 ? 3879487290150562409L : 2908355311707016655L;
  1548. }
  1549. if (j4 == 6783335171051007387L) {
  1550. iArr23[(i6 * 2) + 1] = (i60 << 9) | (i60 >>> 23);
  1551. j4 = 3698409039146345710L;
  1552. }
  1553. if (j4 == 8494914655617116318L) {
  1554. j4 = 3308045856010871254L;
  1555. }
  1556. if (j4 == 7391897490478601836L) {
  1557. j4 = i6 < 16 ? 1947295455057318086L : 1784429727674430321L;
  1558. }
  1559. if (j4 == 9128083677415659622L) {
  1560. final_cip[13] = -114;
  1561. j4 = 9217510483877698234L;
  1562. }
  1563. if (j4 == 1729443654799488062L) {
  1564. i57--;
  1565. j4 = 8797484323472943077L;
  1566. }
  1567. if (j4 == 5592042121434727091L) {
  1568. final_cip[5] = -69;
  1569. j4 = 1323827752692402101L;
  1570. }
  1571. if (j4 == 1818264258760743319L) {
  1572. c2 = 3;
  1573. int rev = i19;
  1574. i19 ^= iArr23[3];
  1575. // System.out.printf("i19 ^= iArr23[3];1\n");
  1576. System.out.printf("0x%x ^= iArr23[3](0x%x); ==> 0x%x\n",rev,iArr23[3],i19);
  1577. j4 = 5328979100626095900L;
  1578. } else {
  1579. c2 = 3;
  1580. }
  1581. if (j4 == 6418068088604690665L) {
  1582. i19 ^= iArr23[c2];
  1583. System.out.printf("i19 ^= iArr23[c2];\n");
  1584. j4 = 1503792404112071770L;
  1585. }
  1586. if (j4 == 4594646578689629539L) {
  1587. j4 = 3365615621264263466L;
  1588. bArr3 = new byte[16];
  1589. }
  1590. if (j4 == 9195216308108861773L) {
  1591. final_cip[8] = 49;
  1592. j4 = 3200337655383209956L;
  1593. }
  1594. if (j4 == 1577535481649201043L) {
  1595. j4 = 3478198951987437965L;
  1596. i6 = 0;
  1597. }
  1598. if (j4 == 3759219415620181525L) {
  1599. i57 = i38 - 1;
  1600. j4 = 6062811699616037457L;
  1601. }
  1602. if (j4 == 3256821261585855975L) {
  1603. j4 = 3779293355388292368L;
  1604. i54 = (i54 + 1) &amp; 255;
  1605. }
  1606. if (j4 == 6329663680677574624L) {
  1607. final_cip[15] = 50;
  1608. j4 = 4912547151723290384L;
  1609. }
  1610. if (j4 == 6187038164260617255L) {
  1611. j4 = 1311781772751449630L;
  1612. i6 = 0;
  1613. }
  1614. if (j4 == 2685803154186139471L) {
  1615. int i92 = i40 + 3;
  1616. iArr12 = iArr10;
  1617. int i93 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  1618. i40 += 4;
  1619. i21 = i93 | ((input_part3[i92] &amp; 255) << 24);
  1620. j4 = 4729681422063648060L;
  1621. } else {
  1622. iArr12 = iArr10;
  1623. i21 = i20;
  1624. }
  1625. if (j4 == 3504079853553908765L) {
  1626. i6++;
  1627. j4 = 8954707163893861550L;
  1628. }
  1629. if (j4 == 6600686903247428085L) {
  1630. c3 = 3;
  1631. int i94 = iArr8[3];
  1632. j4 = 8816681305993860676L;
  1633. } else {
  1634. c3 = 3;
  1635. }
  1636. if (j4 == 7573029167043807009L) {
  1637. int i95 = iArr8[c3];
  1638. j4 = 8002130431631985630L;
  1639. }
  1640. if (j4 == 5388008578103207358L) {
  1641. j4 = 3805431862040669091L;
  1642. i51 = iArr8[1];
  1643. }
  1644. if (j4 == 1868667817538176147L) {
  1645. int i96 = i40 + 3;
  1646. int i97 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  1647. i40 += 4;
  1648. i21 = i97 | ((input_part3[i96] &amp; 255) << 24);
  1649. j4 = 2889001075928355608L;
  1650. }
  1651. if (j4 == 7677570233584385171L) {
  1652. int rev = i84;
  1653. i84 = (i84 >>> 1) | (i84 << 31);
  1654. System.out.printf("0x%x = (0x%x >>> 1) | (0x%x << 31);\n",i84,rev,rev);
  1655. j4 = 1923774560246569152L;
  1656. }
  1657. if (j4 == 7215264321897972490L) {
  1658. j4 = 7299484503295174969L;
  1659. i10 = 0;
  1660. }
  1661. if (j4 == 7269244363048797189L) {
  1662. j4 = 8344335594272363090L;
  1663. }
  1664. if (j4 == 5153625468444186480L) {
  1665. int rev = i84;
  1666. i84 = (i84 >>> 1) | (i84 << 31);
  1667. System.out.printf("0x%x = (0x%x >>> 1) | (0x%x << 31);\n",i84,rev,rev);
  1668. j4 = 1160266727076026994L;
  1669. }
  1670. if (j4 == 8405907736709769083L) {
  1671. j4 = bArr3[i6] != final_cip[i6] ? 4727667340962820071L : 8074621974338335444L;
  1672. }
  1673. if (j4 == 7720877091476958305L) {
  1674. j4 = 2712255506212294232L;
  1675. i56 = ((bArr5[i62] &amp; 255) + (bArr11[i6] &amp; 255) + i56) &amp; 255;
  1676. }
  1677. if (j4 == 5859366234801575937L) {
  1678. bArr3[i6] = (byte) (bArr4[i6] ^ bArr11[i53]);
  1679. j4 = 4375059743535676664L;
  1680. }
  1681. if (j4 == 8642648116757711055L) {
  1682. i62 = (i62 + 1) % 16;
  1683. j4 = 3176206153682062025L;
  1684. }
  1685. if (j4 == 7927706331794218369L) {
  1686. final_cip[10] = -4;
  1687. j4 = 4044116278763382115L;
  1688. }
  1689. if (j4 == 7620824939062689078L) {
  1690. i19 ^= iArr23[3];
  1691. System.out.printf("i19 ^= iArr23[3];2\n");
  1692. j4 = 9203235650833687810L;
  1693. }
  1694. if (j4 == 3176206153682062025L) {
  1695. i6++;
  1696. j4 = 5158554594830700929L;
  1697. }
  1698. if (j4 == 3785530020709649507L) {
  1699. bArr11[i6] = (byte) i6;
  1700. j4 = 7615576072437806969L;
  1701. }
  1702. if (j4 == 6830438277265895922L) {
  1703. final_cip[15] = 115;
  1704. j4 = 5737565298662478736L;
  1705. }
  1706. if (j4 == 4730643406790254771L) {
  1707. j4 = 4975363132170806438L;
  1708. i62 = 0;
  1709. }
  1710. if (j4 == 4687532178299999822L) {
  1711. int rev = i84;
  1712. i84 ^= (i47 + i48) + iArr23[i49];
  1713. System.out.printf("0x%x ^= (0x%x + 0x%x) + iArr23[0x%x]; ==> 0x%x//0x%x ===2\n",rev,i47,i48,i49,i84,iArr23[i49]);
  1714. j4 = 7677570233584385171L;
  1715. i49++;
  1716. }
  1717. if (j4 == 3511893548020497197L) {
  1718. int rev = i84;
  1719. i84 ^= iArr23[6];
  1720. System.out.printf("0x%x ^= iArr23[6]; ==> 0x%x // 0x%x\n",rev,i84,iArr23[6]);
  1721. j4 = 7197100520713411792L;
  1722. }
  1723. if (j4 == 3490326607433591043L) {
  1724. j4 = 3785530020709649507L;
  1725. }
  1726. if (j4 == 8964480036317405863L) {
  1727. i60 += i41;
  1728. j4 = 6411465233834267853L;
  1729. }
  1730. if (j4 == 7053198258759358084L) {
  1731. j4 = 9072050633124824651L;
  1732. i6 = 0;
  1733. }
  1734. if (j4 == 4919743909045453378L) {
  1735. final_cip[3] = -45;
  1736. j4 = 7612433227526352592L;
  1737. }
  1738. if (j4 == 3918700728063325793L) {
  1739. int rev1 = i21;
  1740. i21 ^= (i47 + i48) + iArr23[i49];
  1741. // System.out.printf("i21: 0x%x\n",i21);
  1742. System.out.printf("0x%x ^= (0x%x + 0x%x) + iArr23[0x%x]; ==> 0x%x // 0x%x ===3 \n",rev1,i47,i48,i49,i21,iArr23[i49]);
  1743. j4 = 3799650815120663631L;
  1744. i49++;
  1745. }
  1746. if (j4 == 3244817401922083652L) {
  1747. j4 = 3508095575112387696L;
  1748. i40 = 0;
  1749. }
  1750. if (j4 == 1791103446893765993L) {
  1751. int[] iArr26 = iArr24[3];
  1752. byte[] bArr15 = bArr12[1];
  1753. iArr20[(i6 * 2) + 513] = iArr26[(bArr15[(bArr15[i61] &amp; 255) ^ i(i51)] &amp; 255) ^ i(i52)];
  1754. j4 = 5028010433435687981L;
  1755. }
  1756. if (j4 == 2754848930084988709L) {
  1757. final_cip[0] = -97;
  1758. j4 = 4098100907245666696L;
  1759. }
  1760. if (j4 == 5634423947985751522L) {
  1761. j4 = 6069099502938214271L;
  1762. iArr23 = new int[i9];
  1763. }
  1764. if (j4 == 7907227585526812034L) {
  1765. j4 = 8327337783489553350L;
  1766. i56 = ((bArr5[i62] &amp; 255) + (bArr11[i6] &amp; 255) + i56) &amp; 255;
  1767. }
  1768. if (j4 == 3150114737913458226L) {
  1769. i10 += 2;
  1770. j4 = 2100408234106893388L;
  1771. }
  1772. int i98 = i10;
  1773. if (j4 == 8057179424399068224L) {
  1774. bArr11[i54] = bArr11[i55];
  1775. j4 = 8706528655033256702L;
  1776. }
  1777. if (j4 == 4013039085825403792L) {
  1778. final_cip[7] = -33;
  1779. j4 = 6385765029630073007L;
  1780. }
  1781. if (j4 == 4268434749325211515L) {
  1782. i22 = 33686018 + i17;
  1783. j4 = 7738313729691083676L;
  1784. } else {
  1785. i22 = i17;
  1786. }
  1787. if (j4 == 9090300621190835968L) {
  1788. j4 = 9002596763800113747L;
  1789. i50 = i6;
  1790. i58 = i50;
  1791. i61 = i58;
  1792. i63 = i61;
  1793. }
  1794. if (j4 == 6742327015997388752L) {
  1795. i16 ^= ((i48 * 2) + i47) + iArr23[i49];
  1796. System.out.printf("i16 ^= ((i48 * 2) + i47) + iArr23[i49];\n");
  1797. j4 = 7233187872281632736L;
  1798. i49++;
  1799. }
  1800. if (j4 == 4335696836688972368L) {
  1801. i23 = bArr5.length;
  1802. j4 = 4477685489247392220L;
  1803. } else {
  1804. i23 = i15;
  1805. }
  1806. if (j4 == 5982238460718101231L) {
  1807. bArr11[i6] = bArr11[i56];
  1808. j4 = 7734105193329641264L;
  1809. }
  1810. if (j4 == 7079524315661024246L) {
  1811. i24 = i98;
  1812. j4 = i6 < 16 ? 4839378301785589868L : 4531779885876544223L;
  1813. } else {
  1814. i24 = i98;
  1815. }
  1816. if (j4 == 3798078227232544657L) {
  1817. int rev = i19;
  1818. i19 ^= ((i48 * 2) + i47) + iArr23[i49];
  1819. System.out.printf("0x%x ^= ((0x%x * 2) + 0x%x) + iArr23[0x%x](0x%x); ==> 0x%x ===4 \n",rev,i48,i47,i49,iArr23[i49],i19);
  1820. i49++;
  1821. j4 = 4170216661130793823L;
  1822. }
  1823. if (j4 == 1875129475667370410L) {
  1824. int[] iArr27 = iArr24[3];
  1825. byte[] bArr16 = bArr12[1];
  1826. bArr6 = bArr12;
  1827. iArr20[(i6 * 2) + 513] = iArr27[(bArr16[(bArr16[i61] &amp; 255) ^ i(i51)] &amp; 255) ^ i(i52)];
  1828. j4 = 9181295485946627806L;
  1829. } else {
  1830. bArr6 = bArr12;
  1831. }
  1832. if (j4 == 7780188459499837486L) {
  1833. i57 = i38 - 1;
  1834. j4 = 3286379070729456885L;
  1835. }
  1836. if (j4 == 5426809489659825220L) {
  1837. int i99 = i4 + 3;
  1838. i25 = i16;
  1839. System.out.printf("i25 = i16;\n");
  1840. int i100 = ((bArr5[i4 + 1] &amp; 255) << 8) | (bArr5[i4] &amp; 255) | ((bArr5[i4 + 2] &amp; 255) << 16);
  1841. i4 += 4;
  1842. iArr12[i6] = i100 | ((bArr5[i99] &amp; 255) << 24);
  1843. j4 = 7830774370852576407L;
  1844. } else {
  1845. i25 = i16;
  1846. }
  1847. if (j4 == 8738922874029281563L) {
  1848. i6++;
  1849. j4 = 1909122035249646259L;
  1850. }
  1851. if (j4 == 6665095630221528608L) {
  1852. bArr5 = new byte[16];
  1853. j4 = 7621196338214628961L;
  1854. }
  1855. if (j4 == 6179510455852880218L) {
  1856. final_cip[12] = 101;
  1857. j4 = 8310787871818619634L;
  1858. }
  1859. if (j4 == 3569809687587833405L) {
  1860. i52 = iArr8[0];
  1861. j4 = 8603388170022135396L;
  1862. }
  1863. if (j4 == 1167911205115368985L) {
  1864. int i101 = i4 + 3;
  1865. int i102 = ((bArr5[i4 + 1] &amp; 255) << 8) | (bArr5[i4] &amp; 255) | ((bArr5[i4 + 2] &amp; 255) << 16);
  1866. i4 += 4;
  1867. iArr11[i6] = i102 | ((bArr5[i101] &amp; 255) << 24);
  1868. j4 = 6994571557561233697L;
  1869. }
  1870. int i103 = i4;
  1871. if (j4 == 8623714993202893823L) {
  1872. final_cip[11] = -88;
  1873. j4 = 2189736568610615783L;
  1874. }
  1875. if (j4 == 4577416787505181944L) {
  1876. final_cip[2] = 118;
  1877. j4 = 5378952491855986803L;
  1878. }
  1879. if (j4 == 8789625248543143702L) {
  1880. final_cip[2] = 118;
  1881. j4 = 7991109021174387007L;
  1882. }
  1883. if (j4 == 1485094653842035027L) {
  1884. j4 = (i6 >= 4 || i103 >= i23) ? 8504695950589395449L : 8461713412992271361L;
  1885. }
  1886. if (j4 == 4170216661130793823L) {
  1887. i47 = b(i21, 0, iArr20);
  1888. System.out.printf("0x%x = b(0x%x, 0, iArr20);4\n",i47,i21);
  1889. // System.out.printf("i47: 0x%x\n",i47);
  1890. j4 = 2381872149833716276L;
  1891. }
  1892. if (j4 == 8666010438815626922L) {
  1893. b2 = bArr11[i54];
  1894. j4 = 8057179424399068224L;
  1895. }
  1896. if (j4 == 7041655693530341265L) {
  1897. i19 ^= ((i48 * 2) + i47) + iArr23[i49];
  1898. System.out.printf("i19 ^= ((i48 * 2) + i47) + iArr23[i49]; ===5\n");
  1899. j4 = 3169561277751192603L;
  1900. i49++;
  1901. }
  1902. if (j4 == 4609849330570144880L) {
  1903. final_cip[9] = -77;
  1904. j4 = 2289044719646071181L;
  1905. }
  1906. if (j4 == 5449112193696891016L) {
  1907. j4 = 3124355357281158283L;
  1908. }
  1909. if (j4 == 8662712234784089029L) {
  1910. i23 = bArr5.length;
  1911. j4 = 8878582214211818374L;
  1912. }
  1913. if (j4 == 6115233329846619454L) {
  1914. j4 = 5395204442363878272L;
  1915. }
  1916. if (j4 == 4483906068230756548L) {
  1917. j4 = 6676485492170781350L;
  1918. }
  1919. if (j4 == 1956686733200189415L) {
  1920. final_cip = new byte[16];
  1921. j4 = 7006355891692714059L;
  1922. }
  1923. if (j4 == 8053000807881165967L) {
  1924. int rev =i84;
  1925. i84 ^= (i47 + i48) + iArr23[i49];
  1926. System.out.printf("0x%x ^= (0x%x + 0x%x) + iArr23[0x%x]; ==> 0x%x//0x%x ===6 \n",rev,i47,i48,i49,i84,iArr23[i49]);
  1927. j4 = 5495851403009851521L;
  1928. i49++;
  1929. }
  1930. if (j4 == 7143194817459945248L) {
  1931. j4 = 3373811553476160062L;
  1932. }
  1933. if (j4 == 1749537745733462777L) {
  1934. j4 = (i6 >= 4 || i103 >= i23) ? 6551390027023926275L : 4570635662716578048L;
  1935. }
  1936. if (j4 == 2188405883759779224L) {
  1937. j4 = 3918062052349580671L;
  1938. i62 = 0;
  1939. }
  1940. if (j4 == 7235937894701642304L) {
  1941. int rev = i21;
  1942. i21 = (i21 << 31) | (i21 >>> 1);
  1943. System.out.printf("0x%x = (0x%x << 31) | (0x%x >>> 1);\n",i21,rev,rev);
  1944. j4 = 7301888031531657853L;
  1945. }
  1946. if (j4 == 2995796423546491127L) {
  1947. j4 = 9170084184750692299L;
  1948. }
  1949. if (j4 == 8002130431631985630L) {
  1950. iArr20 = new int[1024];
  1951. j4 = 7166648683214755429L;
  1952. }
  1953. if (j4 == 2860092959791447983L) {
  1954. j4 = 7348308086934515854L;
  1955. i56 = ((bArr5[i62] &amp; 255) + (bArr11[i6] &amp; 255) + i56) &amp; 255;
  1956. }
  1957. if (j4 == 7591776709387561072L) {
  1958. iArr13 = new int[4];
  1959. j4 = 4062230737866491849L;
  1960. } else {
  1961. iArr13 = iArr11;
  1962. }
  1963. if (j4 == 3688747761534332265L) {
  1964. int rev = i84;
  1965. i84 ^= iArr23[0];
  1966. System.out.printf("0x%x ^= iArr23[0]; ==> 0x%x // 0x%x\n",rev,i84,iArr23[0]);
  1967. j4 = 2443751596759295723L;
  1968. }
  1969. if (j4 == 6453676624431139898L) {
  1970. i6++;
  1971. j4 = 1913249944150004525L;
  1972. }
  1973. if (j4 == 5235021199741258527L) {
  1974. iArr13 = new int[4];
  1975. j4 = 8117727425067800668L;
  1976. }
  1977. if (j4 == 7708592395920482331L) {
  1978. i6++;
  1979. j4 = 1210447254521047538L;
  1980. }
  1981. if (j4 == 4538286560804077206L) {
  1982. i47 = b(i84, 0, iArr20);
  1983. System.out.printf("0x%x = b(0x%x, 0, iArr20);5\n",i47,i84);
  1984. j4 = 5165812183614621889L;
  1985. }
  1986. if (j4 == 7068862727388703850L) {
  1987. j4 = 3933803068447152709L;
  1988. }
  1989. if (j4 == 7957723699443428076L) {
  1990. i26 = i84;
  1991. int i104 = i103 + 3;
  1992. i27 = i21;
  1993. int i105 = (bArr5[i103] &amp; 255) | ((bArr5[i103 + 1] &amp; 255) << 8) | ((bArr5[i103 + 2] &amp; 255) << 16);
  1994. i103 += 4;
  1995. iArr12[i6] = i105 | ((bArr5[i104] &amp; 255) << 24);
  1996. j4 = 6933247193213399925L;
  1997. } else {
  1998. i26 = i84;
  1999. i27 = i21;
  2000. }
  2001. if (j4 == 5595710579549419349L) {
  2002. i6++;
  2003. j4 = 1620820052340096368L;
  2004. }
  2005. if (j4 == 8097574055691912384L) {
  2006. int i106 = i40 + 3;
  2007. int i107 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  2008. i40 += 4;
  2009. i28 = i107 | ((input_part3[i106] &amp; 255) << 24);
  2010. System.out.printf("i28 = i107 | ((input_part3[i106] &amp; 255) << 24);\n");
  2011. j4 = 4298963903025309444L;
  2012. } else {
  2013. i28 = i26;
  2014. }
  2015. if (j4 == 2617081080307970335L) {
  2016. j4 = 4473724296154421454L;
  2017. i54 = (i54 + 1) &amp; 255;
  2018. }
  2019. if (j4 == 8528493068304898123L) {
  2020. final_cip[8] = 49;
  2021. j4 = 3725381910638361431L;
  2022. }
  2023. if (j4 == 5710521428222058283L) {
  2024. j4 = 6282419177198653002L;
  2025. i6 = 0;
  2026. }
  2027. if (j4 == 5509705484215944470L) {
  2028. i41 = a(i38, 0x1010101 + i22, iArr13);
  2029. j4 = 9155937893447827252L;
  2030. }
  2031. if (j4 == 8141640372958328067L) {
  2032. b2 = bArr11[i6];
  2033. j4 = 3883979507512821622L;
  2034. }
  2035. if (j4 == 5014224365646153772L) {
  2036. final_cip[14] = -120;
  2037. j4 = 6781964674139290256L;
  2038. }
  2039. if (j4 == 2741486890114654248L) {
  2040. final_cip[9] = -106;
  2041. j4 = 7927706331794218369L;
  2042. }
  2043. if (j4 == 5351528138698026150L) {
  2044. iArr23[i6 * 2] = i60;
  2045. j4 = 8223258137555177735L;
  2046. }
  2047. if (j4 == 1307281791046846137L) {
  2048. int i108 = i40 + 3;
  2049. int i109 = ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255) | ((input_part3[i40 + 2] &amp; 255) << 16);
  2050. i40 += 4;
  2051. i28 = i109 | ((input_part3[i108] &amp; 255) << 24);
  2052. System.out.printf("i28 = 0x%x\n",i28);
  2053. j4 = 8545670441877195089L;
  2054. }
  2055. if (j4 == 3315634246002652401L) {
  2056. j4 = 7391422008886710088L;
  2057. i6 = 0;
  2058. }
  2059. if (j4 == 8726141804031885222L) {
  2060. j4 = 6206967618882655077L;
  2061. iArr23 = new int[i9];
  2062. }
  2063. if (j4 == 6265501985217721867L) {
  2064. j4 = 7228169035332109883L;
  2065. i55 = 0;
  2066. }
  2067. if (j4 == 6042232201362629815L) {
  2068. return false;
  2069. }
  2070. if (j4 == 4915474783797972804L) {
  2071. j4 = 4721983077526601781L;
  2072. i6 = 0;
  2073. }
  2074. if (j4 == 1644016907092934503L) {
  2075. final_cip[11] = -113;
  2076. j4 = 2009277883651077966L;
  2077. }
  2078. if (j4 == 3242248119027284566L) {
  2079. final_cip[2] = Byte.MIN_VALUE;
  2080. j4 = 4919743909045453378L;
  2081. }
  2082. if (j4 == 8401000026215651795L) {
  2083. j4 = 6042232201362629815L;
  2084. }
  2085. int i110 = i25;
  2086. if (j4 == 1757468250215542428L) {
  2087. i48 = b(i110, 3, iArr20);
  2088. // System.out.printf("i48 = b(i110, 3, iArr20);\n");
  2089. System.out.printf("0x%x = b(0x%x, 3, iArr20);6\n",i48,i110);
  2090. j4 = 3918700728063325793L;
  2091. }
  2092. if (j4 == 3805431862040669091L) {
  2093. int i111 = iArr8[2];
  2094. j4 = 7573029167043807009L;
  2095. }
  2096. if (j4 == 1562483755754170452L) {
  2097. b2 = bArr11[i54];
  2098. j4 = 1281267670811563792L;
  2099. }
  2100. if (j4 == 4775749037024366417L) {
  2101. bArr11 = new byte[256];
  2102. j4 = 6667018595382172981L;
  2103. }
  2104. if (j4 == 7215458347621232043L) {
  2105. final_cip[6] = 22;
  2106. j4 = 4013039085825403792L;
  2107. }
  2108. if (j4 == 8851840692175027013L) {
  2109. j4 = 3971401812264761653L;
  2110. }
  2111. if (j4 == 6496457465553891320L) {
  2112. final_cip[3] = -45;
  2113. j4 = 9067166631630121596L;
  2114. }
  2115. if (j4 == 4899867139846737305L) {
  2116. j4 = 3291362829469222813L;
  2117. i6 = 0;
  2118. }
  2119. if (j4 == 4949400257663735525L) {
  2120. return true;
  2121. }
  2122. if (j4 == 6624026845403021411L) {
  2123. i9 = 40;
  2124. j4 = 1384619611072712114L;
  2125. }
  2126. if (j4 == 3717774128157910605L) {
  2127. final_cip[14] = -120;
  2128. j4 = 5632710845036330174L;
  2129. }
  2130. if (j4 == 4703006722331764068L) {
  2131. final_cip[1] = 46;
  2132. j4 = 5925562685676025045L;
  2133. }
  2134. if (j4 == 8906950120270949104L) {
  2135. i110 = (i110 >>> 31) | (i110 << 1);
  2136. System.out.printf("i110 = (i110 >>> 31) | (i110 << 1);1\n");
  2137. j4 = 4054239504286538232L;
  2138. }
  2139. if (j4 == 2968358151039079624L) {
  2140. j4 = 8694332280188348797L;
  2141. i62 = 0;
  2142. }
  2143. if (j4 == 4731072527315935075L) {
  2144. i29 = i103;
  2145. j4 = input.length() < 64 ? 7152594270267019474L : 7207634175374518959L;
  2146. } else {
  2147. i29 = i103;
  2148. }
  2149. if (j4 == 5837388147636045013L) {
  2150. final_cip[13] = 34;
  2151. j4 = 4209003260697362161L;
  2152. }
  2153. if (j4 == 3348113858426447674L) {
  2154. i6++;
  2155. j4 = 3239610692754448539L;
  2156. }
  2157. if (j4 == 8499802369700230427L) {
  2158. i62 = (i62 + 1) % 16;
  2159. j4 = 6852692350973101702L;
  2160. }
  2161. if (j4 == 1355827378937596861L) {
  2162. int i112 = iArr8[2];
  2163. j4 = 3159131613398236155L;
  2164. }
  2165. if (j4 == 3765463719702917373L) {
  2166. final_cip[3] = -67;
  2167. j4 = 6246276100940706152L;
  2168. }
  2169. if (j4 == 7439466117788503430L) {
  2170. final_cip[10] = -4;
  2171. j4 = 4184352008924436096L;
  2172. }
  2173. if (j4 == 7328217541416181185L) {
  2174. i62 = (i62 + 1) % 16;
  2175. j4 = 7494950256479009720L;
  2176. }
  2177. if (j4 == 4931416120428297318L) {
  2178. j4 = 3272108066239338657L;
  2179. i41 = a(i38, 0x1010101 + i22, iArr13);
  2180. }
  2181. if (j4 == 1853586948992287921L) {
  2182. i110 ^= iArr23[7];
  2183. System.out.printf("i110 ^= iArr23[7];1\n");
  2184. j4 = 3369304386314801955L;
  2185. }
  2186. int i113 = i24;
  2187. if (j4 == 2100408234106893388L) {
  2188. j4 = i113 < 16 ? 6044249269185916930L : 4967406293272637771L;
  2189. }
  2190. if (j4 == 6202119020092438945L) {
  2191. bArr11 = new byte[256];
  2192. j4 = 6207585730399429197L;
  2193. }
  2194. if (j4 == 1239202435642479562L) {
  2195. j4 = 6282588756826602766L;
  2196. i6 = 0;
  2197. }
  2198. if (j4 == 2921277261483052884L) {
  2199. j4 = 3805451690314712856L;
  2200. i9 = 40;
  2201. }
  2202. if (j4 == 4571385285247507939L) {
  2203. iArr23[(i6 * 2) + 1] = (i60 << 9) | (i60 >>> 23);
  2204. j4 = 1234569916309842559L;
  2205. }
  2206. if (j4 == 3460300782170937607L) {
  2207. i38 = i23 / 8;
  2208. j4 = 2921277261483052884L;
  2209. }
  2210. if (j4 == 3124726175048856375L) {
  2211. i110 ^= iArr23[1];
  2212. System.out.printf("i110 ^= iArr23[1];2\n");
  2213. j4 = 8088807405999475448L;
  2214. }
  2215. if (j4 == 7309113347123373839L) {
  2216. j4 = 2272798444665954523L;
  2217. i6 = 0;
  2218. }
  2219. if (j4 == 3997704319387063135L) {
  2220. j4 = 8997468243049584150L;
  2221. }
  2222. if (j4 == 8861860503648848567L) {
  2223. i30 = i9;
  2224. iArr14 = iArr8;
  2225. input_partt4 = Arrays.copyOfRange(input.getBytes(), 48, 64);
  2226. j4 = 2330796828706545701L;
  2227. } else {
  2228. i30 = i9;
  2229. iArr14 = iArr8;
  2230. input_partt4 = bArr4;
  2231. }
  2232. if (j4 == 4410622224915986892L) {
  2233. final_cip[1] = 46;
  2234. j4 = 6711257227006116877L;
  2235. }
  2236. if (j4 == 7194106817561645911L) {
  2237. final_cip[13] = -114;
  2238. j4 = 5512350061105350170L;
  2239. }
  2240. if (j4 == 6612240120868137916L) {
  2241. bArr11[i56] = b2;
  2242. j4 = 5693093104358912780L;
  2243. }
  2244. if (j4 == 2982641033187796690L) {
  2245. iArr20[(i6 * 2) + 1] = iArr24[1][(bArr6[0][(bArr6[1][i50] &amp; 255) ^ g(i51)] &amp; 255) ^ g(i52)];
  2246. j4 = 3486271154687386954L;
  2247. }
  2248. if (j4 == 3031198949573775541L) {
  2249. i6++;
  2250. j4 = 9203595848917361081L;
  2251. }
  2252. if (j4 == 5055689685515914335L) {
  2253. j4 = i6 < 256 ? 1247075058077372606L : 6091441190737178001L;
  2254. }
  2255. if (j4 == 8682936313381034341L) {
  2256. i31 = i6;
  2257. input_part3 = Arrays.copyOfRange(input.getBytes(), 32, 48);
  2258. j4 = 5026574997973149922L;
  2259. } else {
  2260. i31 = i6;
  2261. }
  2262. if (j4 == 4765566201281400311L) {
  2263. j4 = 4878474884038157657L;
  2264. }
  2265. if (j4 == 3434639405684086363L) {
  2266. final_cip[7] = -33;
  2267. j4 = 2197600650028069726L;
  2268. }
  2269. if (j4 == 8117727425067800668L) {
  2270. iArr15 = new int[4];
  2271. j4 = 7442085785176969176L;
  2272. } else {
  2273. iArr15 = iArr14;
  2274. }
  2275. if (j4 == 7857940782209243597L) {
  2276. j4 = 3759219415620181525L;
  2277. i31 = 0;
  2278. }
  2279. if (j4 == 2003868226519400571L) {
  2280. j4 = 4691140216346611221L;
  2281. }
  2282. if (j4 == 2466964143165741837L) {
  2283. j4 = 3169104890646436008L;
  2284. i31 = 0;
  2285. }
  2286. if (j4 == 8308487276324327784L) {
  2287. bArr11[i31] = bArr11[i56];
  2288. j4 = 2555970059350819025L;
  2289. }
  2290. if (j4 == 4202436593687076484L) {
  2291. j4 = 2776803616288623434L;
  2292. }
  2293. if (j4 == 6996128371779785436L) {
  2294. j4 = 8730538436400569799L;
  2295. i29 = 0;
  2296. }
  2297. if (j4 == 8935933772175304137L) {
  2298. int rev = i28;
  2299. i28 ^= iArr23[0];
  2300. System.out.printf("0x%x ^= iArr23[0](0x%x); ==> 0x%x \n",rev, iArr23[0],i28);
  2301. j4 = 7219960127837973449L;
  2302. }
  2303. if (j4 == 1715651793431489116L) {
  2304. bArr3[i31] = (byte) (input_partt4[i31] ^ bArr11[i53]);
  2305. System.out.printf("==> 0x%x = (input_partt4[0x%x] ^ bArr11[0x%x](0x%x));\n",bArr3[i31],i31,i53,bArr11[i53]);
  2306. j4 = 1688352577061095122L;
  2307. }
  2308. if (j4 == 4192332344726786256L) {
  2309. final_cip[1] = 46;
  2310. j4 = 3242248119027284566L;
  2311. }
  2312. if (j4 == 6097367080807002346L) {
  2313. j4 = input.length() < 64 ? 4134022033126525745L : 9084636122582124317L;
  2314. }
  2315. if (j4 == 1645136258490241993L) {
  2316. j4 = 4956183964370101238L;
  2317. i31 = 0;
  2318. }
  2319. if (j4 == 8865616538709174935L) {
  2320. i32 = (((i48 * 2) + i47) + iArr23[i49]) ^ i110;
  2321. System.out.printf("0x%x = (((0x%x * 2) + 0x%x) + iArr23[0x%x]) ^ 0x%x; // 0x%x |3\n",i32,i48,i47,i49,i110,iArr23[i49]);
  2322. j4 = 3150114737913458226L;
  2323. i49++;
  2324. } else {
  2325. i32 = i110;
  2326. }
  2327. if (j4 == 5163304606225864297L) {
  2328. final_cip[4] = 119;
  2329. j4 = 5175101841935525119L;
  2330. }
  2331. if (j4 == 9026190483180684217L) {
  2332. int i114 = i40 + 3;
  2333. bArr7 = input_partt4;
  2334. int i115 = ((input_part3[i40 + 2] &amp; 255) << 16) | ((input_part3[i40 + 1] &amp; 255) << 8) | (input_part3[i40] &amp; 255);
  2335. i40 += 4;
  2336. i33 = i115 | ((input_part3[i114] &amp; 255) << 24);
  2337. j4 = 7022880009955170057L;
  2338. } else {
  2339. bArr7 = input_partt4;
  2340. i33 = i27;
  2341. }
  2342. if (j4 == 2300035979815882265L) {
  2343. i60 += i41;
  2344. j4 = 5407125151982145331L;
  2345. }
  2346. if (j4 == 7076999511290385819L) {
  2347. final_cip[10] = -4;
  2348. j4 = 5005580943279474124L;
  2349. }
  2350. if (j4 == 7957423564036594724L) {
  2351. int rev = i28;
  2352. i28 ^= iArr23[6];
  2353. // System.out.printf("i28 ^= iArr23[6];\n");
  2354. System.out.printf("0x%x ^= iArr23[6](0x%x); ==> 0x%x \n",rev,iArr23[6],i28);
  2355. j4 = 3166750012504996540L;
  2356. }
  2357. if (j4 == 2082226578850038631L) {
  2358. j4 = 8587595791621758818L;
  2359. i34 = 0;
  2360. } else {
  2361. i34 = i31;
  2362. }
  2363. if (j4 == 7377732012589796128L) {
  2364. final_cip[2] = 118;
  2365. j4 = 3765463719702917373L;
  2366. }
  2367. if (j4 == 8706528655033256702L) {
  2368. bArr11[i55] = b2;
  2369. j4 = 3944034548958798065L;
  2370. }
  2371. if (j4 == 7207634175374518959L) {
  2372. bArr5 = new byte[16];
  2373. j4 = 8619643661940722843L;
  2374. }
  2375. if (j4 == 5958651804061655044L) {
  2376. iArr16 = iArr12;
  2377. i60 = a(i38, i22, iArr16);
  2378. j4 = 4120500615914686322L;
  2379. } else {
  2380. iArr16 = iArr12;
  2381. }
  2382. if (j4 == 5373825686582120237L) {
  2383. int[] iArr28 = iArr24[0];
  2384. byte[] bArr17 = bArr6[0];
  2385. iArr17 = iArr16;
  2386. iArr20[i34 * 2] = iArr28[(bArr17[(bArr17[i63] &amp; 255) ^ f(i51)] &amp; 255) ^ f(i52)];
  2387. j4 = 5188016447122403309L;
  2388. } else {
  2389. iArr17 = iArr16;
  2390. }
  2391. if (j4 == 8657852808421337216L) {
  2392. final_cip[0] = -97;
  2393. j4 = 7303977094428283562L;
  2394. }
  2395. if (j4 == 2559141778370937007L) {
  2396. j4 = i34 < bArr5.length ? 8226334980212259602L : 1807466501694616499L;
  2397. }
  2398. if (j4 == 7612433227526352592L) {
  2399. final_cip[4] = 56;
  2400. j4 = 8113126029116536782L;
  2401. }
  2402. if (j4 == 6641130065549689505L) {
  2403. i60 += i41;
  2404. j4 = 4904370970975869766L;
  2405. }
  2406. if (j4 == 6249148651518141632L) {
  2407. c4 = 6;
  2408. final_cip[6] = 22;
  2409. j4 = 8443672320267095196L;
  2410. } else {
  2411. c4 = 6;
  2412. }
  2413. if (j4 == 7100981003187767618L) {
  2414. final_cip[c4] = 86;
  2415. j4 = 6684206521967284343L;
  2416. }
  2417. int i116 = i38;
  2418. if (j4 == 5985635937414591521L) {
  2419. j4 = 7309113347123373839L;
  2420. bArr3 = new byte[16];
  2421. }
  2422. if (j4 == 4904370970975869766L) {
  2423. iArr23[i34 * 2] = i60;
  2424. j4 = 2300035979815882265L;
  2425. }
  2426. if (j4 == 8095882760764902094L) {
  2427. int[] iArr29 = iArr24[0];
  2428. byte[] bArr18 = bArr6[0];
  2429. iArr20[i34 * 2] = iArr29[(bArr18[(bArr18[i63] &amp; 255) ^ f(i51)] &amp; 255) ^ f(i52)];
  2430. j4 = 1614246019380523334L;
  2431. }
  2432. if (j4 == 8485630121070762057L) {
  2433. j4 = i34 < 256 ? 1578923656121161355L : 2196269207190278500L;
  2434. }
  2435. if (j4 == 1807466501694616499L) {
  2436. iArr18 = iArr13;
  2437. j4 = 7113837318717080147L;
  2438. input_part3 = Arrays.copyOfRange(input.getBytes(), 32, 48);
  2439. } else {
  2440. iArr18 = iArr13;
  2441. }
  2442. if (j4 == 4136628260743276174L) {
  2443. j4 = 7015557725723415691L;
  2444. i50 = i34;
  2445. i58 = i50;
  2446. i61 = i58;
  2447. i63 = i61;
  2448. }
  2449. if (j4 == 7628593932436149125L) {
  2450. j4 = 5388008578103207358L;
  2451. i52 = iArr15[0];
  2452. }
  2453. if (j4 == 1688352577061095122L) {
  2454. i34++;
  2455. j4 = 2272798444665954523L;
  2456. }
  2457. if (j4 == 9156114371027586341L) {
  2458. return false;
  2459. }
  2460. if (j4 == 8003113504676674850L) {
  2461. final_cip[7] = -33;
  2462. j4 = 4020479843606037028L;
  2463. }
  2464. if (j4 == 5538777342439939651L) {
  2465. bArr11[i54] = bArr11[i55];
  2466. j4 = 5136352466433219964L;
  2467. }
  2468. if (j4 == 6062303455322103900L) {
  2469. j4 = 3727400916568393083L;
  2470. i56 = 0;
  2471. }
  2472. if (j4 == 2112374256663903657L) {
  2473. final_cip[5] = -69;
  2474. j4 = 6479748932467918819L;
  2475. }
  2476. if (j4 == 7105550752828252141L) {
  2477. j4 = 5426809489659825220L;
  2478. }
  2479. if (j4 == 3779293355388292368L) {
  2480. j4 = 8666010438815626922L;
  2481. i55 = ((bArr11[i54] &amp; 255) + i55) &amp; 255;
  2482. }
  2483. if (j4 == 4044116278763382115L) {
  2484. final_cip[11] = -113;
  2485. j4 = 1931444552567951803L;
  2486. }
  2487. if (j4 == 2228853410470432732L) {
  2488. j4 = 5808169080060243476L;
  2489. bArr3 = new byte[]{(byte) i33, (byte) (i33 >>> 8), (byte) (i33 >>> 16), (byte) (i33 >>> 24), (byte) i19, (byte) (i19 >>> 8), (byte) (i19 >>> 16), (byte) (i19 >>> 24), (byte) i28, (byte) (i28 >>> 8), (byte) (i28 >>> 16), (byte) (i28 >>> 24), (byte) i32, (byte) (i32 >>> 8), (byte) (i32 >>> 16), (byte) (i32 >>> 24)};
  2490. System.out.printf("bArr3 = new byte[]{(byte) i33, (byte) (i33 >>> 8), (byte) (i33 >>> 16), (byte) (i33 >>> 24), (byte)\n");
  2491. }
  2492. if (j4 == 9179206018690720602L) {
  2493. int rev = i19;
  2494. i19 ^= iArr23[5];
  2495. System.out.printf("0x%x ^= iArr23[5](0x%x); ==> 0x%x\n",rev,iArr23[5],i19);
  2496. j4 = 3612472421307200740L;
  2497. }
  2498. if (j4 == 6016756214847724921L) {
  2499. int rev = i19;
  2500. i19 = (i19 >>> 31) | (i19 << 1);
  2501. System.out.printf("0x%x = (0x%x >>> 31) | (0x%x << 1);1 \n",i19,rev,rev);
  2502. j4 = 5461752164917072913L;
  2503. }
  2504. if (j4 == 4803956414827796846L) {
  2505. int[] iArr30 = iArr24[0];
  2506. byte[] bArr19 = bArr6[0];
  2507. iArr20[i34 * 2] = iArr30[(bArr19[(bArr19[i63] &amp; 255) ^ f(i51)] &amp; 255) ^ f(i52)];
  2508. j4 = 4369458919546020466L;
  2509. }
  2510. if (j4 == 6962662929294394300L) {
  2511. return false;
  2512. }
  2513. if (j4 == 8016446346432534725L) {
  2514. i34++;
  2515. j4 = 3232348833396235159L;
  2516. }
  2517. if (j4 == 6087563668281968390L) {
  2518. j4 = 7310006369231674608L;
  2519. i49 = 8;
  2520. }
  2521. if (j4 == 1787685171167549243L) {
  2522. i22 += 33686018;
  2523. j4 = 7412843220635102870L;
  2524. }
  2525. i39 = i22;
  2526. if (j4 == 2699912527891922057L) {
  2527. j4 = 1392904840951541524L;
  2528. i34 = 0;
  2529. }
  2530. if (j4 == 4755329529059895386L) {
  2531. j4 = 7781468632794343149L;
  2532. iArr21 = new int[4];
  2533. } else {
  2534. iArr21 = iArr17;
  2535. }
  2536. if (j4 == 8062189661182021718L) {
  2537. bArr11[i55] = b2;
  2538. j4 = 4392895671140748120L;
  2539. }
  2540. if (j4 == 8209964894033195569L) {
  2541. i113 += 2;
  2542. j4 = 2325655040068091391L;
  2543. }
  2544. if (j4 == 2329622646202800515L) {
  2545. j4 = 6933244932276356793L;
  2546. bArr3 = new byte[]{(byte) i33, (byte) (i33 >>> 8), (byte) (i33 >>> 16), (byte) (i33 >>> 24), (byte) i19, (byte) (i19 >>> 8), (byte) (i19 >>> 16), (byte) (i19 >>> 24), (byte) i28, (byte) (i28 >>> 8), (byte) (i28 >>> 16), (byte) (i28 >>> 24), (byte) i32, (byte) (i32 >>> 8), (byte) (i32 >>> 16), (byte) (i32 >>> 24)};
  2547. System.out.printf("bArr3 = new byte[]{(byte) i33, (byte) (i33 >>> 8), (by\n");
  2548. }
  2549. if (j4 == 4896714650032568544L) {
  2550. int rev = i19;
  2551. i19 ^= ((i48 * 2) + i47) + iArr23[i49];
  2552. System.out.printf("0x%x ^= ((0x%x * 2) + 0x%x) + iArr23[0x%x](0x%x); ==> 0x%x ===7\n",rev,i48,i47,i49,iArr23[i49],i19);
  2553. j4 = 8940878725577409718L;
  2554. i49++;
  2555. }
  2556. if (j4 == 6833218581303746055L) {
  2557. return false;
  2558. }
  2559. if (j4 == 2637559127033415801L) {
  2560. bArr11[i34] = bArr11[i56];
  2561. j4 = 7627928995385457046L;
  2562. }
  2563. if (j4 == 4261074493174756469L) {
  2564. j4 = i34 < 256 ? 3408743489810642039L : 8375352851180859940L;
  2565. }
  2566. if (j4 == 8969184396941120013L) {
  2567. j4 = 7541922949363534567L;
  2568. i38 = i23 / 8;
  2569. } else {
  2570. i38 = i116;
  2571. }
  2572. if (j4 == 1917218271936056345L) {
  2573. j4 = 4803956414827796846L;
  2574. i50 = i34;
  2575. i58 = i50;
  2576. i61 = i58;
  2577. i63 = i61;
  2578. }
  2579. if (j4 == 3958656691010217951L) {
  2580. i57--;
  2581. j4 = 8093763168178308163L;
  2582. }
  2583. if (j4 == 8966069347392902833L) {
  2584. j4 = 1697106464609179154L;
  2585. b2 = bArr11[i54];
  2586. }
  2587. if (j4 == 5288938734069839879L) {
  2588. j4 = 3194583820407555776L;
  2589. i54 = 0;
  2590. }
  2591. if (j4 == 6044249269185916930L) {
  2592. j4 = 5249992174669506009L;
  2593. }
  2594. if (j4 == 1206168581136677569L) {
  2595. final_cip[15] = 50;
  2596. j4 = 4915474783797972804L;
  2597. }
  2598. if (j4 == 1225816651125339139L) {
  2599. final_cip[15] = 115;
  2600. j4 = 6949424180928127742L;
  2601. }
  2602. if (j4 == 7228169035332109883L) {
  2603. bArr11 = new byte[256];
  2604. j4 = 2188405883759779224L;
  2605. }
  2606. if (j4 == 9201993842457705897L) {
  2607. i34++;
  2608. j4 = 7273042193299891196L;
  2609. }
  2610. if (j4 == 7492257630851803835L) {
  2611. j4 = 8650561979795023195L;
  2612. }
  2613. if (j4 == 7107095938156443067L) {
  2614. final_cip = new byte[16];
  2615. j4 = 3906426331893585755L;
  2616. }
  2617. if (j4 == 2619183670644040407L) {
  2618. int rev = i28;
  2619. i28 ^= iArr23[0];
  2620. System.out.printf("0x%x ^= iArr23[0](0x%x); ==> 0x%x \n",rev, iArr23[0],i28);
  2621. j4 = 8450049976084005921L;
  2622. }
  2623. i59 = i28;
  2624. if (j4 == 2510646431895229276L) {
  2625. final_cip[7] = -102;
  2626. j4 = 5437327595751534596L;
  2627. }
  2628. if (j4 == 2999075064852109317L) {
  2629. j4 = 1210447254521047538L;
  2630. i34 = 0;
  2631. }
  2632. if (j4 == 8619643661940722843L) {
  2633. j4 = 2559141778370937007L;
  2634. i34 = 0;
  2635. }
  2636. if (j4 == 8401256578222293697L) {
  2637. final_cip[2] = Byte.MIN_VALUE;
  2638. j4 = 1899084405611363136L;
  2639. }
  2640. if (j4 == 3480570335270326812L) {
  2641. i34++;
  2642. j4 = 8373337668999560823L;
  2643. }
  2644. if (j4 == 7341970985672155477L) {
  2645. final_cip[9] = -77;
  2646. j4 = 7101323025934545574L;
  2647. }
  2648. if (j4 == 6604647837791727209L) {
  2649. final_cip[4] = 119;
  2650. j2 = 5029569272935880611L;
  2651. } else {
  2652. j2 = j4;
  2653. }
  2654. if (j2 == 5613764015967390693L) {
  2655. bArr5[i34] = (byte) i34;
  2656. j2 = 8689932493166301704L;
  2657. }
  2658. i45 = i32;
  2659. iArr22 = iArr15;
  2660. i35 = i34;
  2661. i36 = i30;
  2662. i44 = i29;
  2663. bArr9 = bArr3;
  2664. i46 = i33;
  2665. iArr19 = iArr18;
  2666. int i117 = i113;
  2667. i37 = i23;
  2668. bArr8 = bArr5;
  2669. j3 = j2;
  2670. i43 = i117;
  2671. i42 = i19;
  2672. bArr10 = bArr7;
  2673. }
  2674. return false;
  2675. }
  2676. }
  • 发表于 2024-11-12 10:00:02
  • 阅读 ( 2560 )
  • 分类:二进制

0 条评论

TLSN
TLSN

1 篇文章

站长统计