Опознание алгоритма - требуется помощь...

Тема в разделе "WASM.CRYPTO", создана пользователем DMD, 20 мар 2008.

  1. DMD

    DMD Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2005
    Сообщения:
    56
    Господа!

    Столкнулся с алгоритмом. Выполняется как "Decrypt".

    аргументы при вызове:
    0012EA30 0012EBBD |Arg1 = 0012EBBD ; cipher
    0012EA34 0012EAF4 |Arg2 = 0012EAF4
    0012EA38 0012EA74 |Arg3 = 0012EA74
    0012EA3C 0012EBBD \Arg4 = 0012EBBD ; cipher / перезаписывается восстановленной информацией

    размер cipher = 0х80

    используются два доп.блока тоже по 0х80

    0012EAF4
    Код (Text):
    1. 0012EAF4  11 1B 9F 3B EA 81 AB C1 2B F8 51 EF F1 81 6F 94
    2. 0012EB04  8E B6 7F 69 40 29 9F 59 B6 FC 87 1A AE 84 88 82
    3. 0012EB14  7F ED 8D 1F 6D 7A 47 A0 62 AB 4F ED E9 9C CA 3E
    4. 0012EB24  BD 00 F4 24 52 BF E5 3C 95 37 B5 D2 60 A5 1A 10
    5. 0012EB34  E8 96 F2 25 D2 DA 4D 7B 6B AC A9 56 4B 76 F6 4B
    6. 0012EB44  AF 86 31 0E C9 14 97 72 A1 DE 46 7C C4 E9 22 14
    7. 0012EB54  F0 DE 19 02 55 27 29 F1 06 F9 2F 16 E2 D7 68 C0
    8. 0012EB64  28 F9 98 33 16 7A 04 92 9F F0 B3 00 1D EA 71 5F
    и

    0012EA74
    Код (Text):
    1. 0012EA74  E9 07 9F 70 7D C3 51 11 E6 1D 71 C0 41 F1 A8 B6
    2. 0012EA84  BA 81 87 2D 7F D3 AE 47 01 DC 7E 10 12 42 DC 26
    3. 0012EA94  6D DB 2A 35 A0 ED E8 9D 66 39 7E DF 63 99 DD 90
    4. 0012EAA4  AB B4 89 17 A2 80 5C F0 5D 8C 90 61 CB AA FE 5F
    5. 0012EAB4  08 09 C7 22 F6 28 A2 23 EF 29 19 2D 05 CB 28 19
    6. 0012EAC4  2E C7 8B 8A DB 0B 46 34 98 96 1F 93 F0 FF 74 4A
    7. 0012EAD4  46 A5 71 9D 56 28 D0 00 49 60 32 7F 70 99 B6 89
    8. 0012EAE4  0C A6 52 46 BC 80 09 35 BC E9 96 0F 34 98 A4 0F
    собственно процедура:
    Код (Text):
    1. 00F22258   55                         PUSH    EBP
    2. 00F22259   8BEC                       MOV     EBP, ESP
    3. 00F2225B   53                         PUSH    EBX
    4. 00F2225C   51                         PUSH    ECX
    5. 00F2225D   52                         PUSH    EDX
    6. 00F2225E   56                         PUSH    ESI
    7. 00F2225F   57                         PUSH    EDI
    8. 00F22260   FC                         CLD
    9. 00F22261   8B75 08                    MOV     ESI, DWORD PTR [EBP+8]
    10. 00F22264   8D3D FCA6F300              LEA     EDI, DWORD PTR [F3A6FC]
    11. 00F2226A   B9 80000000                MOV     ECX, 80
    12. 00F2226F   C1E9 02                    SHR     ECX, 2
    13. 00F22272   89CA                       MOV     EDX, ECX
    14. 00F22274   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    15. 00F22276   8B75 0C                    MOV     ESI, DWORD PTR [EBP+C]
    16. 00F22279   8D3D 7CA6F300              LEA     EDI, DWORD PTR [F3A67C]
    17. 00F2227F   89D1                       MOV     ECX, EDX
    18. 00F22281   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    19. 00F22283   8B75 10                    MOV     ESI, DWORD PTR [EBP+10]
    20. 00F22286   8D3D 7CA7F300              LEA     EDI, DWORD PTR [F3A77C]
    21. 00F2228C   89D1                       MOV     ECX, EDX
    22. 00F2228E   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    23. 00F22290   8D35 FCA6F300              LEA     ESI, DWORD PTR [F3A6FC]
    24. 00F22296   8D3D FCA7F300              LEA     EDI, DWORD PTR [F3A7FC]
    25. 00F2229C   89D1                       MOV     ECX, EDX
    26. 00F2229E   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    27. 00F222A0   8915 90A9F300              MOV     DWORD PTR [F3A990], EDX
    28. 00F222A6   8B05 7CA6F300              MOV     EAX, DWORD PTR [F3A67C]
    29. 00F222AC   31DB                       XOR     EBX, EBX
    30. 00F222AE   89C1                       MOV     ECX, EAX
    31. 00F222B0   43                         INC     EBX
    32. 00F222B1   89DA                       MOV     EDX, EBX
    33. 00F222B3   01D8                       ADD     EAX, EBX
    34. 00F222B5   74 12                      JE      SHORT 00F222C9
    35. 00F222B7   D1E3                       SHL     EBX, 1
    36. 00F222B9   72 0E                      JB      SHORT 00F222C9
    37. 00F222BB   D1E1                       SHL     ECX, 1
    38. 00F222BD   85D8                       TEST    EAX, EBX
    39. 00F222BF  ^74 F6                      JE      SHORT 00F222B7
    40. 00F222C1   01C8                       ADD     EAX, ECX
    41. 00F222C3   01DA                       ADD     EDX, EBX
    42. 00F222C5   D1E3                       SHL     EBX, 1
    43. 00F222C7  ^73 F2                      JNB     SHORT 00F222BB
    44. 00F222C9   8915 78A6F300              MOV     DWORD PTR [F3A678], EDX
    45. 00F222CF   31C0                       XOR     EAX, EAX
    46. 00F222D1   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    47. 00F222D7   C1E1 02                    SHL     ECX, 2
    48. 00F222DA   8DB9 7CA7F300              LEA     EDI, DWORD PTR [ECX+F3A77C]
    49. 00F222E0   4F                         DEC     EDI
    50. 00F222E1   FD                         STD
    51. 00F222E2   F3:AE                      REPE    SCAS BYTE PTR ES:[EDI]
    52. 00F222E4   FC                         CLD
    53. 00F222E5   75 13                      JNZ     SHORT 00F222FA
    54. 00F222E7   8D3D FCA6F300              LEA     EDI, DWORD PTR [F3A6FC]
    55. 00F222ED   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    56. 00F222F3   F3:AB                      REP     STOS DWORD PTR ES:[EDI]
    57. 00F222F5   E9 7C010000                JMP     00F22476
    58. 00F222FA   66:BA 0001                 MOV     DX, 100
    59. 00F222FE   66:D1EA                    SHR     DX, 1
    60. 00F22301   8491 7CA7F300              TEST    BYTE PTR [ECX+F3A77C], DL
    61. 00F22307  ^74 F5                      JE      SHORT 00F222FE
    62. 00F22309   80FA 01                    CMP     DL, 1
    63. 00F2230C   75 0D                      JNZ     SHORT 00F2231B
    64. 00F2230E   39C1                       CMP     ECX, EAX
    65. 00F22310   0F84 60010000              JE      00F22476
    66. 00F22316   49                         DEC     ECX
    67. 00F22317   66:BA 0001                 MOV     DX, 100
    68. 00F2231B   890D 8CA9F300              MOV     DWORD PTR [F3A98C], ECX
    69. 00F22321   66:D1EA                    SHR     DX, 1
    70. 00F22324   66:8915 98A9F300           MOV     WORD PTR [F3A998], DX
    71. 00F2232B   8D1D FCA6F300              LEA     EBX, DWORD PTR [F3A6FC]
    72. 00F22331   E8 5B010000                CALL    00F22491
    73. 00F22336   8B1D 8CA9F300              MOV     EBX, DWORD PTR [F3A98C]
    74. 00F2233C   66:8B15 98A9F300           MOV     DX, WORD PTR [F3A998]
    75. 00F22343   8493 7CA7F300              TEST    BYTE PTR [EBX+F3A77C], DL
    76. 00F22349   75 14                      JNZ     SHORT 00F2235F
    77. 00F2234B   8D35 FCA6F300              LEA     ESI, DWORD PTR [F3A6FC]
    78. 00F22351   8D3D 7CA8F300              LEA     EDI, DWORD PTR [F3A87C]
    79. 00F22357   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    80. 00F2235D   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    81. 00F2235F   8D1D FCA7F300              LEA     EBX, DWORD PTR [F3A7FC]
    82. 00F22365   E8 27010000                CALL    00F22491
    83. 00F2236A   8B1D 8CA9F300              MOV     EBX, DWORD PTR [F3A98C]
    84. 00F22370   66:8B15 98A9F300           MOV     DX, WORD PTR [F3A998]
    85. 00F22377   8493 7CA7F300              TEST    BYTE PTR [EBX+F3A77C], DL
    86. 00F2237D   75 3E                      JNZ     SHORT 00F223BD
    87. 00F2237F   8D35 FCA6F300              LEA     ESI, DWORD PTR [F3A6FC]
    88. 00F22385   8D3D FCA8F300              LEA     EDI, DWORD PTR [F3A8FC]
    89. 00F2238B   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    90. 00F22391   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    91. 00F22393   8D35 7CA8F300              LEA     ESI, DWORD PTR [F3A87C]
    92. 00F22399   8D3D FCA6F300              LEA     EDI, DWORD PTR [F3A6FC]
    93. 00F2239F   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    94. 00F223A5   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    95. 00F223A7   8D35 FCA8F300              LEA     ESI, DWORD PTR [F3A8FC]
    96. 00F223AD   8D3D 7CA8F300              LEA     EDI, DWORD PTR [F3A87C]
    97. 00F223B3   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    98. 00F223B9   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    99. 00F223BB   EB 14                      JMP     SHORT 00F223D1
    100. 00F223BD   8D35 FCA6F300              LEA     ESI, DWORD PTR [F3A6FC]
    101. 00F223C3   8D3D 7CA8F300              LEA     EDI, DWORD PTR [F3A87C]
    102. 00F223C9   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    103. 00F223CF   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    104. 00F223D1   66:D12D 98A9F300           SHR     WORD PTR [F3A998], 1
    105. 00F223D8   73 16                      JNB     SHORT 00F223F0
    106. 00F223DA   66:C705 98A9F300 8000      MOV     WORD PTR [F3A998], 80
    107. 00F223E3   832D 8CA9F300 01           SUB     DWORD PTR [F3A98C], 1
    108. 00F223EA   0F82 86000000              JB      00F22476
    109. 00F223F0   8D1D FCA6F300              LEA     EBX, DWORD PTR [F3A6FC]
    110. 00F223F6   E8 96000000                CALL    00F22491
    111. 00F223FB   66:8B15 98A9F300           MOV     DX, WORD PTR [F3A998]
    112. 00F22402   8B1D 8CA9F300              MOV     EBX, DWORD PTR [F3A98C]
    113. 00F22408   8493 7CA7F300              TEST    BYTE PTR [EBX+F3A77C], DL
    114. 00F2240E  ^74 C1                      JE      SHORT 00F223D1
    115. 00F22410   66:D1EA                    SHR     DX, 1
    116. 00F22413   73 16                      JNB     SHORT 00F2242B
    117. 00F22415   66:19D3                    SBB     BX, DX
    118. 00F22418   73 0D                      JNB     SHORT 00F22427
    119. 00F2241A   8D1D FCA7F300              LEA     EBX, DWORD PTR [F3A7FC]
    120. 00F22420   E8 6C000000                CALL    00F22491
    121. 00F22425   EB 4F                      JMP     SHORT 00F22476
    122. 00F22427   66:BA 8000                 MOV     DX, 80
    123. 00F2242B   66:8915 98A9F300           MOV     WORD PTR [F3A998], DX
    124. 00F22432   891D 8CA9F300              MOV     DWORD PTR [F3A98C], EBX
    125. 00F22438   8493 7CA7F300              TEST    BYTE PTR [EBX+F3A77C], DL
    126. 00F2243E   75 1B                      JNZ     SHORT 00F2245B
    127. 00F22440   8D1D FCA7F300              LEA     EBX, DWORD PTR [F3A7FC]
    128. 00F22446   E8 46000000                CALL    00F22491
    129. 00F2244B   8D1D FCA6F300              LEA     EBX, DWORD PTR [F3A6FC]
    130. 00F22451   E8 3B000000                CALL    00F22491
    131. 00F22456  ^E9 76FFFFFF                JMP     00F223D1
    132. 00F2245B   8D1D FCA6F300              LEA     EBX, DWORD PTR [F3A6FC]
    133. 00F22461   E8 2B000000                CALL    00F22491
    134. 00F22466   8D1D 7CA8F300              LEA     EBX, DWORD PTR [F3A87C]
    135. 00F2246C   E8 20000000                CALL    00F22491
    136. 00F22471  ^E9 5BFFFFFF                JMP     00F223D1
    137. 00F22476   8D35 FCA6F300              LEA     ESI, DWORD PTR [F3A6FC]
    138. 00F2247C   8B7D 14                    MOV     EDI, DWORD PTR [EBP+14]
    139. 00F2247F   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    140. 00F22485   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    141. 00F22487   5F                         POP     EDI
    142. 00F22488   5E                         POP     ESI
    143. 00F22489   5A                         POP     EDX
    144. 00F2248A   59                         POP     ECX
    145. 00F2248B   5B                         POP     EBX
    146. 00F2248C   E9 2A010000                JMP     00F225BB
    147. 00F22491   53                         PUSH    EBX
    148. 00F22492   31C0                       XOR     EAX, EAX
    149. 00F22494   8D3D FCA8F300              LEA     EDI, DWORD PTR [F3A8FC]
    150. 00F2249A   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    151. 00F224A0   41                         INC     ECX
    152. 00F224A1   F3:AB                      REP     STOS DWORD PTR ES:[EDI]
    153. 00F224A3   8905 94A9F300              MOV     DWORD PTR [F3A994], EAX
    154. 00F224A9   89C7                       MOV     EDI, EAX
    155. 00F224AB   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    156. 00F224B1   31F6                       XOR     ESI, ESI
    157. 00F224B3   58                         POP     EAX
    158. 00F224B4   8B1CB8                     MOV     EBX, DWORD PTR [EAX+EDI*4]
    159. 00F224B7   31FF                       XOR     EDI, EDI
    160. 00F224B9   50                         PUSH    EAX
    161. 00F224BA   8B04B5 FCA6F300            MOV     EAX, DWORD PTR [ESI*4+F3A6FC]
    162. 00F224C1   F7E3                       MUL     EBX
    163. 00F224C3   01F8                       ADD     EAX, EDI
    164. 00F224C5   83D2 00                    ADC     EDX, 0
    165. 00F224C8   0104B5 FCA8F300            ADD     DWORD PTR [ESI*4+F3A8FC], EAX
    166. 00F224CF   83D2 00                    ADC     EDX, 0
    167. 00F224D2   46                         INC     ESI
    168. 00F224D3   89D7                       MOV     EDI, EDX
    169. 00F224D5  ^E2 E3                      LOOPD   SHORT 00F224BA
    170. 00F224D7   31FF                       XOR     EDI, EDI
    171. 00F224D9   0114B5 FCA8F300            ADD     DWORD PTR [ESI*4+F3A8FC], EDX
    172. 00F224E0   113CB5 00A9F300            ADC     DWORD PTR [ESI*4+F3A900], EDI
    173. 00F224E7   8B05 78A6F300              MOV     EAX, DWORD PTR [F3A678]
    174. 00F224ED   89FE                       MOV     ESI, EDI
    175. 00F224EF   F725 FCA8F300              MUL     DWORD PTR [F3A8FC]
    176. 00F224F5   89C3                       MOV     EBX, EAX
    177. 00F224F7   F725 7CA6F300              MUL     DWORD PTR [F3A67C]
    178. 00F224FD   0305 FCA8F300              ADD     EAX, DWORD PTR [F3A8FC]
    179. 00F22503   11D7                       ADC     EDI, EDX
    180. 00F22505   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    181. 00F2250B   49                         DEC     ECX
    182. 00F2250C   8B04B5 80A6F300            MOV     EAX, DWORD PTR [ESI*4+F3A680]
    183. 00F22513   F7E3                       MUL     EBX
    184. 00F22515   01F8                       ADD     EAX, EDI
    185. 00F22517   83D2 00                    ADC     EDX, 0
    186. 00F2251A   0304B5 00A9F300            ADD     EAX, DWORD PTR [ESI*4+F3A900]
    187. 00F22521   83D2 00                    ADC     EDX, 0
    188. 00F22524   8904B5 FCA8F300            MOV     DWORD PTR [ESI*4+F3A8FC], EAX
    189. 00F2252B   89D7                       MOV     EDI, EDX
    190. 00F2252D   46                         INC     ESI
    191. 00F2252E  ^E2 DC                      LOOPD   SHORT 00F2250C
    192. 00F22530   31DB                       XOR     EBX, EBX
    193. 00F22532   0314B5 00A9F300            ADD     EDX, DWORD PTR [ESI*4+F3A900]
    194. 00F22539   131CB5 04A9F300            ADC     EBX, DWORD PTR [ESI*4+F3A904]
    195. 00F22540   8914B5 FCA8F300            MOV     DWORD PTR [ESI*4+F3A8FC], EDX
    196. 00F22547   891CB5 00A9F300            MOV     DWORD PTR [ESI*4+F3A900], EBX
    197. 00F2254E   890CB5 04A9F300            MOV     DWORD PTR [ESI*4+F3A904], ECX
    198. 00F22555   FF05 94A9F300              INC     DWORD PTR [F3A994]
    199. 00F2255B   8B3D 94A9F300              MOV     EDI, DWORD PTR [F3A994]
    200. 00F22561   3B3D 90A9F300              CMP     EDI, DWORD PTR [F3A990]
    201. 00F22567  ^0F82 3EFFFFFF              JB      00F224AB
    202. 00F2256D   39D9                       CMP     ECX, EBX
    203. 00F2256F   72 1A                      JB      SHORT 00F2258B
    204. 00F22571   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    205. 00F22577   8D348D 78A6F300            LEA     ESI, DWORD PTR [ECX*4+F3A678]
    206. 00F2257E   8D3C8D F8A8F300            LEA     EDI, DWORD PTR [ECX*4+F3A8F8]
    207. 00F22585   FD                         STD
    208. 00F22586   F3:A7                      REPE    CMPS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    209. 00F22588   FC                         CLD
    210. 00F22589   77 1A                      JA      SHORT 00F225A5
    211. 00F2258B   F8                         CLC
    212. 00F2258C   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    213. 00F22592   31F6                       XOR     ESI, ESI
    214. 00F22594   8B04B5 7CA6F300            MOV     EAX, DWORD PTR [ESI*4+F3A67C]
    215. 00F2259B   1904B5 FCA8F300            SBB     DWORD PTR [ESI*4+F3A8FC], EAX
    216. 00F225A2   46                         INC     ESI
    217. 00F225A3  ^E2 EF                      LOOPD   SHORT 00F22594
    218. 00F225A5   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    219. 00F225AB   8D35 FCA8F300              LEA     ESI, DWORD PTR [F3A8FC]
    220. 00F225B1   8D3D FCA6F300              LEA     EDI, DWORD PTR [F3A6FC]
    221. 00F225B7   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    222. 00F225B9   5B                         POP     EBX
    223. 00F225BA   C3                         RETN
    224. 00F225BB   5D                         POP     EBP
    225. 00F225BC   C2 1000                    RETN    10
    в ней есть еще одна процедура:

    Код (Text):
    1. 00F22491   53                         PUSH    EBX
    2. 00F22492   31C0                       XOR     EAX, EAX
    3. 00F22494   8D3D FCA8F300              LEA     EDI, DWORD PTR [F3A8FC]
    4. 00F2249A   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    5. 00F224A0   41                         INC     ECX
    6. 00F224A1   F3:AB                      REP     STOS DWORD PTR ES:[EDI]
    7. 00F224A3   8905 94A9F300              MOV     DWORD PTR [F3A994], EAX
    8. 00F224A9   89C7                       MOV     EDI, EAX
    9. 00F224AB   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    10. 00F224B1   31F6                       XOR     ESI, ESI
    11. 00F224B3   58                         POP     EAX
    12. 00F224B4   8B1CB8                     MOV     EBX, DWORD PTR [EAX+EDI*4]
    13. 00F224B7   31FF                       XOR     EDI, EDI
    14. 00F224B9   50                         PUSH    EAX
    15. 00F224BA   8B04B5 FCA6F300            MOV     EAX, DWORD PTR [ESI*4+F3A6FC]
    16. 00F224C1   F7E3                       MUL     EBX
    17. 00F224C3   01F8                       ADD     EAX, EDI
    18. 00F224C5   83D2 00                    ADC     EDX, 0
    19. 00F224C8   0104B5 FCA8F300            ADD     DWORD PTR [ESI*4+F3A8FC], EAX
    20. 00F224CF   83D2 00                    ADC     EDX, 0
    21. 00F224D2   46                         INC     ESI
    22. 00F224D3   89D7                       MOV     EDI, EDX
    23. 00F224D5  ^E2 E3                      LOOPD   SHORT 00F224BA
    24. 00F224D7   31FF                       XOR     EDI, EDI
    25. 00F224D9   0114B5 FCA8F300            ADD     DWORD PTR [ESI*4+F3A8FC], EDX
    26. 00F224E0   113CB5 00A9F300            ADC     DWORD PTR [ESI*4+F3A900], EDI
    27. 00F224E7   8B05 78A6F300              MOV     EAX, DWORD PTR [F3A678]
    28. 00F224ED   89FE                       MOV     ESI, EDI
    29. 00F224EF   F725 FCA8F300              MUL     DWORD PTR [F3A8FC]
    30. 00F224F5   89C3                       MOV     EBX, EAX
    31. 00F224F7   F725 7CA6F300              MUL     DWORD PTR [F3A67C]
    32. 00F224FD   0305 FCA8F300              ADD     EAX, DWORD PTR [F3A8FC]
    33. 00F22503   11D7                       ADC     EDI, EDX
    34. 00F22505   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    35. 00F2250B   49                         DEC     ECX
    36. 00F2250C   8B04B5 80A6F300            MOV     EAX, DWORD PTR [ESI*4+F3A680]
    37. 00F22513   F7E3                       MUL     EBX
    38. 00F22515   01F8                       ADD     EAX, EDI
    39. 00F22517   83D2 00                    ADC     EDX, 0
    40. 00F2251A   0304B5 00A9F300            ADD     EAX, DWORD PTR [ESI*4+F3A900]
    41. 00F22521   83D2 00                    ADC     EDX, 0
    42. 00F22524   8904B5 FCA8F300            MOV     DWORD PTR [ESI*4+F3A8FC], EAX
    43. 00F2252B   89D7                       MOV     EDI, EDX
    44. 00F2252D   46                         INC     ESI
    45. 00F2252E  ^E2 DC                      LOOPD   SHORT 00F2250C
    46. 00F22530   31DB                       XOR     EBX, EBX
    47. 00F22532   0314B5 00A9F300            ADD     EDX, DWORD PTR [ESI*4+F3A900]
    48. 00F22539   131CB5 04A9F300            ADC     EBX, DWORD PTR [ESI*4+F3A904]
    49. 00F22540   8914B5 FCA8F300            MOV     DWORD PTR [ESI*4+F3A8FC], EDX
    50. 00F22547   891CB5 00A9F300            MOV     DWORD PTR [ESI*4+F3A900], EBX
    51. 00F2254E   890CB5 04A9F300            MOV     DWORD PTR [ESI*4+F3A904], ECX
    52. 00F22555   FF05 94A9F300              INC     DWORD PTR [F3A994]
    53. 00F2255B   8B3D 94A9F300              MOV     EDI, DWORD PTR [F3A994]
    54. 00F22561   3B3D 90A9F300              CMP     EDI, DWORD PTR [F3A990]
    55. 00F22567  ^0F82 3EFFFFFF              JB      00F224AB
    56. 00F2256D   39D9                       CMP     ECX, EBX
    57. 00F2256F   72 1A                      JB      SHORT 00F2258B
    58. 00F22571   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    59. 00F22577   8D348D 78A6F300            LEA     ESI, DWORD PTR [ECX*4+F3A678]
    60. 00F2257E   8D3C8D F8A8F300            LEA     EDI, DWORD PTR [ECX*4+F3A8F8]
    61. 00F22585   FD                         STD
    62. 00F22586   F3:A7                      REPE    CMPS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    63. 00F22588   FC                         CLD
    64. 00F22589   77 1A                      JA      SHORT 00F225A5
    65. 00F2258B   F8                         CLC
    66. 00F2258C   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    67. 00F22592   31F6                       XOR     ESI, ESI
    68. 00F22594   8B04B5 7CA6F300            MOV     EAX, DWORD PTR [ESI*4+F3A67C]
    69. 00F2259B   1904B5 FCA8F300            SBB     DWORD PTR [ESI*4+F3A8FC], EAX
    70. 00F225A2   46                         INC     ESI
    71. 00F225A3  ^E2 EF                      LOOPD   SHORT 00F22594
    72. 00F225A5   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    73. 00F225AB   8D35 FCA8F300              LEA     ESI, DWORD PTR [F3A8FC]
    74. 00F225B1   8D3D FCA6F300              LEA     EDI, DWORD PTR [F3A6FC]
    75. 00F225B7   F3:A5                      REP     MOVS DWORD PTR ES:[EDI], DWORD PTR [ESI]
    76. 00F225B9   5B                         POP     EBX
    77. 00F225BA   C3                         RETN
    78. 00F225BB   5D                         POP     EBP
    79. 00F225BC   C2 1000                    RETN    10
    помогите понять алгоритм..
    реализуем ли режим "Encrypt"? (если реализуем, то "как это сделать"?)

    Thanks in advance!
     
  2. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    DMD
    перепишите алгоритм на высокоуровневом языке (типа C или паскаль), а там посмотрим что с ним можно сделать..
     
  3. Ruptor

    Ruptor Marcos el Ruptor

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    167
    Адрес:
    Australia
    А вообще мы в 21м веке уже. Есть hexrays чтобы такие процедуры в С переводить за 5 сек прежде чем ими форумы засорять.
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ruptor
    А похоже встроенный ассемблер. HexRays такое не потянет. ИМХО.
     
  5. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Код (Text):
    1. 00F2249A   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    2. 00F224A0   41                         INC     ECX
    3. 00F224A1   F3:AB                      REP     STOS DWORD PTR ES:[EDI]
    какой-то Pascal наверно.

    P.S. не Pascal, но всё-таки компилятор какой-то.
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    t00x
    Я у "нормальных" компиляторов не встречал таких манипуляций флажками, да еще инструкция loop используется. ИМХО все-таки написано на ассемблере. А если учесть тематику...
    Еще меня смущают две последние инструкции второй процедуры после retn.
     
  7. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    а
    Код (Text):
    1. 00F2258B   F8                         CLC
    ?

    P.S. "вторая процедура" - конец первого блока кода ;

    P.P.S.
    Код (Text):
    1. 00F22588   FC                         CLD
    2. 00F22589   77 1A                      JA      SHORT 00F225A5
    3. 00F2258B   F8                         CLC
    4. 00F2258C   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    5. 00F22592   31F6                       XOR     ESI, ESI
    6. 00F22594   8B04B5 7CA6F300            MOV     EAX, DWORD PTR [ESI*4+F3A67C]
    7. 00F2259B   1904B5 FCA8F300            SBB     DWORD PTR [ESI*4+F3A8FC], EAX
    8. 00F225A2   46                         INC     ESI
    9. 00F225A3  ^E2 EF                      LOOPD   SHORT 00F22594
    длииное вычитание?
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    t00x
    Видимо я такой же внимательный как аффтар:
    Обычное, флажок C очищен.

    ЗЫЫЫ
    Сдается мне (после чтения по диагонали"), что во второй процедуре используется обычное умножение больших чисел в столбик.
     
  9. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Да вообще эти дамбы похожи на 1024 ключ, по размеру.
     
  10. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Код (Text):
    1. 00F22492   31C0                       XOR     EAX, EAX
    2. 00F22494   8D3D FCA8F300              LEA     EDI, DWORD PTR [F3A8FC]
    3. 00F2249A   8B0D 90A9F300              MOV     ECX, DWORD PTR [F3A990]
    4. 00F224A0   41                         INC     ECX
    5. 00F224A1   F3:AB                      REP     STOS DWORD PTR ES:[EDI]
    заполнение нулями...
    Код (Text):
    1. 00F224A3   8905 94A9F300              MOV     DWORD PTR [F3A994], EAX
    2. 00F224A9   89C7                       MOV     EDI, EAX
    а может и ассемблер
     
  11. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Второй дамб правда на 3 делится, если я правильно посчитал...
     
  12. DMD

    DMD Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2005
    Сообщения:
    56
    crypto
    я тоже сначала думал, что это "лишние" команды.. ан-нет, не "лишние"...

    Код (Text):
    1. 00F2248C   E9 2A010000                JMP     00F225BB
    2. .
    3. .
    4. 00F225B9   5B                         POP     EBX
    5. 00F225BA   C3                         RETN
    6. 00F225BB   5D                         POP     EBP
    7. 00F225BC   C2 1000                    RETN    10
    "лучи" смогу опробовать, но это будет позднее вечером.. (если получится)

    основной проблемой, мне кажется, будет то, что код выполняется в виртуальной памяти, но есть Bin как дамп этой виртуальной секции с кодом.
    если в этом есть необходимость - hххp://ifolder.ru/5810862 (204К)
     
  13. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    DMD
    Разобрались уже.
    Есть очень серьезные сомнения :)

    Точно, писано на ассемблере, потом встроено в код высокого уровня. ИМХО подобная конструкция написана руками, а не создана компилятором:
    Код (Text):
    1. 00F222B5   74 12                      JE      SHORT 00F222C9
    2. 00F222B7   D1E3                       SHL     EBX, 1
    3. 00F222B9   72 0E                      JB      SHORT 00F222C9
    4. 00F222BB   D1E1                       SHL     ECX, 1
    5. 00F222BD   85D8                       TEST    EAX, EBX
    6. 00F222BF  ^74 F6                      JE      SHORT 00F222B7
    7. 00F222C1   01C8                       ADD     EAX, ECX
    8. 00F222C3   01DA                       ADD     EDX, EBX
    9. 00F222C5   D1E3                       SHL     EBX, 1
    10. 00F222C7  ^73 F2                      JNB     SHORT 00F222BB
     
  14. DMD

    DMD Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2005
    Сообщения:
    56
    господа, какие есть предположения о самом алго?

    crypto
    о лучах - готов согласиться :)
     
  15. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    DMD
    Разбирайтесь во второй процедуре - она "ключевая". В ней похоже арифметические операции над большими числами: обнуление, умножение, вычитание, сравнение. По-крайней мере первый цикл можно коротко записать так:

    Код (Text):
    1.   DWORD number_F3A8FC[var_F3A990 + 1];
    2.   memset(var_F3A8FC, 0, (var_F3A990 + 1)*sizeof(DWORD));
    3.   var_F3A994 = 0;
    4.   number_F3A8FC = number_F3A6FC * A[0];
    A[0] - первый DWORD массива A (arg_0 процедуры)

    Дальше реверсировать лениво...
     
  16. DMD

    DMD Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2005
    Сообщения:
    56
    crypto
    да, сомнения были, но развеялись.

    Ruptor
    согласен! банально в тот момент под рукой инструмента не было..

    RElf

    Код (Text):
    1. /*
    2.    Detected compiler: Unknown
    3. */
    4.  
    5. #include <defs.h>
    6.  
    7.  
    8. //-------------------------------------------------------------------------
    9. // Data declarations
    10.  
    11.  
    12. //-------------------------------------------------------------------------
    13. // Function declarations
    14.  
    15. int __cdecl sub_12258(const void *a1, const void *a2, const void *a3, void *a4);
    16. _DWORD sub_12491(); // weak
    17.  
    18.  
    19. //----- (00012258) --------------------------------------------------------
    20. int __cdecl sub_12258(const void *a1, const void *a2, const void *a3, void *a4)
    21. {
    22.   int v4; // eax@1
    23.   signed int v5; // edx@1
    24.   int v6; // ecx@1
    25.   signed int v7; // ebx@1
    26.   char v8; // zf@5
    27.   int result; // eax@5
    28.   int v10; // ecx@5
    29.   int v11; // edi@5
    30.   unsigned __int16 v12; // dx@11
    31.   int v13; // ebx@23
    32.   __int16 v14; // dx@24
    33.   unsigned __int8 v15; // cf@2
    34.   unsigned __int8 v16; // cf@4
    35.   unsigned __int8 v17; // cf@21
    36.   char v18; // cf@22
    37.  
    38.   memcpy((void *)0xF3A6FC, a1, 0x80u);
    39.   memcpy((void *)0xF3A67C, a2, 0x80u);
    40.   memcpy((void *)0xF3A77C, a3, 0x80u);
    41.   memcpy((void *)0xF3A7FC, (const void *)0xF3A6FC, 0x80u);
    42.   vf3a990 = 32;
    43.   v6 = vf3a67c;
    44.   v7 = 1;
    45.   v5 = 1;
    46.   v4 = vf3a67c + 1;
    47.   if ( vf3a67c != -1 )
    48.   {
    49.     while ( 1 )
    50.     {
    51.       v15 = __MKCSHL__(v7, 1);
    52.       v7 *= 2;
    53.       if ( v15 )
    54.         break;
    55.       while ( 1 )
    56.       {
    57.         v6 *= 2;
    58.         if ( !(v4 & v7) )
    59.           break;
    60.         v4 += v6;
    61.         v5 += v7;
    62.         v16 = __MKCSHL__(v7, 1);
    63.         v7 *= 2;
    64.         if ( v16 )
    65.           goto LABEL_5;
    66.       }
    67.     }
    68.   }
    69. LABEL_5:
    70.   vf3a678 = v5;
    71.   result = 0;
    72.   v10 = 4 * vf3a990;
    73.   v11 = 4 * vf3a990 + 15968123;
    74.   v8 = 4 * vf3a990 == -15968123;
    75.   do
    76.   {
    77.     if ( !v10 )
    78.       break;
    79.     v8 = *MK_FP(__ES__, v11++) == 0;
    80.     --v10;
    81.   }
    82.   while ( v8 );
    83.   if ( v8 )
    84.   {
    85.     memset((void *)0xF3A6FC, 0, 4 * vf3a990);
    86.   }
    87.   else
    88.   {
    89.     v12 = 256;
    90.     do
    91.       v12 >>= 1;
    92.     while ( !((_BYTE)v12 & *(_BYTE *)(v10 + 15968124)) );
    93.     if ( (_BYTE)v12 == 1 )
    94.     {
    95.       if ( !v10 )
    96.         goto LABEL_31;
    97.       --v10;
    98.       v12 = 256;
    99.     }
    100.     vf3a98c = v10;
    101.     vf3a998 = v12 >> 1;
    102.     sub_12491();
    103.     if ( !(vf3a998 & *(_BYTE *)(vf3a98c + 15968124)) )
    104.       memcpy((void *)0xF3A87C, (const void *)0xF3A6FC, 4 * vf3a990);
    105.     result = sub_12491();
    106.     if ( vf3a998 & *(_BYTE *)(vf3a98c + 15968124) )
    107.     {
    108.       memcpy((void *)0xF3A87C, (const void *)0xF3A6FC, 4 * vf3a990);
    109.     }
    110.     else
    111.     {
    112.       memcpy((void *)0xF3A8FC, (const void *)0xF3A6FC, 4 * vf3a990);
    113.       memcpy((void *)0xF3A6FC, (const void *)0xF3A87C, 4 * vf3a990);
    114.       memcpy((void *)0xF3A87C, (const void *)0xF3A8FC, 4 * vf3a990);
    115.     }
    116.     while ( 1 )
    117.     {
    118.       v17 = __MKCSHR__(vf3a998, 1);
    119.       vf3a998 >>= 1;
    120.       if ( v17 )
    121.       {
    122.         vf3a998 = 128;
    123.         v18 = vf3a98c-- < 1u;
    124.         if ( v18 )
    125.           break;
    126.       }
    127.       result = sub_12491();
    128.       v13 = vf3a98c;
    129.       if ( vf3a998 & *(_BYTE *)(vf3a98c + 15968124) )
    130.       {
    131.         v14 = vf3a998 >> 1;
    132.         if ( __MKCSHR__(vf3a998, 1) )
    133.         {
    134.           LOWORD(v13) = (unsigned __int16)vf3a98c - (__MKCSHR__(vf3a998, 1) + v14);
    135.           if ( (unsigned __int16)vf3a98c < (unsigned __int16)(__MKCSHR__(vf3a998, 1) + v14) )
    136.           {
    137.             result = sub_12491();
    138.             break;
    139.           }
    140.           v14 = 128;
    141.         }
    142.         vf3a998 = v14;
    143.         vf3a98c = v13;
    144.         if ( (_BYTE)v14 & *(_BYTE *)(v13 + 15968124) )
    145.         {
    146.           sub_12491();
    147.           result = sub_12491();
    148.         }
    149.         else
    150.         {
    151.           sub_12491();
    152.           result = sub_12491();
    153.         }
    154.       }
    155.     }
    156.   }
    157. LABEL_31:
    158.   memcpy(a4, (const void *)0xF3A6FC, 4 * vf3a990);
    159.   return result;
    160. }
    и

    Код (Text):
    1. /*
    2.    Detected compiler: Unknown
    3. */
    4.  
    5. #include <defs.h>
    6.  
    7.  
    8. //-------------------------------------------------------------------------
    9. // Data declarations
    10.  
    11.  
    12. //-------------------------------------------------------------------------
    13. // Function declarations
    14.  
    15. int __cdecl sub_12258(const void *a1, const void *a2, const void *a3, void *a4);
    16. int __cdecl sub_12491();
    17.  
    18.  
    19. //----- (00012491) --------------------------------------------------------
    20. int __cdecl sub_12491()
    21. {
    22.   int v0; // edi@1
    23.   int v1; // ecx@2
    24.   unsigned int v2; // ebx@2
    25.   int v3; // edi@2
    26.   int v4; // esi@2
    27.   int v5; // edx@3
    28.   int v6; // ecx@4
    29.   int v7; // ebx@4
    30.   int v8; // edi@4
    31.   int v9; // esi@4
    32.   __int64 v10; // qax@5
    33.   int v11; // ebx@6
    34.   char v12; // cf@7
    35.   unsigned __int8 v13; // zf@7
    36.   int v14; // ecx@8
    37.   unsigned int v15; // edi@8
    38.   int v16; // esi@8
    39.   unsigned __int8 v17; // cf@13
    40.   int v18; // ecx@13
    41.   int v19; // esi@13
    42.   __int64 v20; // qax@3
    43.   unsigned __int8 v21; // cf@3
    44.   unsigned __int8 v22; // cf@4
    45.   int v23; // ett@14
    46.   int v24; // et0@14
    47.   int v25; // [sp+0h] [bp-4h]@2
    48.  
    49.   memset((void *)0xF3A8FC, 0, 4 * (vf3a990 + 1));
    50.   vf3a994 = 0;
    51.   v0 = 0;
    52.   do
    53.   {
    54.     v1 = vf3a990;
    55.     v4 = 0;
    56.     v2 = *(_DWORD *)(v25 + 4 * v0);
    57.     v3 = 0;
    58.     v25 = v25;
    59.     do
    60.     {
    61.       v20 = v3 + v2 * *(_DWORD *)(4 * v4 + 0xF3A6FC);
    62.       v21 = __MKCADD__(v20, *(_DWORD *)(4 * v4 + 0xF3A8FC));
    63.       *(_DWORD *)(4 * v4 + 0xF3A8FC) += v20;
    64.       v5 = v21 + *((_DWORD *)&v20 + 1);
    65.       ++v4;
    66.       v3 = v5;
    67.       --v1;
    68.     }
    69.     while ( v1 );
    70.     v22 = __MKCADD__(v5, *(_DWORD *)(4 * v4 + 0xF3A8FC));
    71.     *(_DWORD *)(4 * v4 + 0xF3A8FC) += v5;
    72.     *(_DWORD *)(4 * v4 + 0xF3A900) += v22;
    73.     v9 = 0;
    74.     v7 = vf3a8fc * vf3a678;
    75.     v8 = (vf3a67c * (unsigned __int64)(unsigned int)(vf3a8fc * vf3a678) >> 32)
    76.        + __MKCADD__(vf3a8fc, vf3a67c * vf3a8fc * vf3a678);
    77.     v6 = vf3a990 - 1;
    78.     do
    79.     {
    80.       v10 = *(_DWORD *)(4 * v9 + 0xF3A900) + v8 + (unsigned int)v7 * *(_DWORD *)(4 * v9 + 0xF3A680);
    81.       *(_DWORD *)(4 * v9 + 0xF3A8FC) = v10;
    82.       v8 = *((_DWORD *)&v10 + 1);
    83.       ++v9;
    84.       --v6;
    85.     }
    86.     while ( v6 );
    87.     v11 = *(_DWORD *)(4 * v9 + 0xF3A904) + __MKCADD__(*(_DWORD *)(4 * v9 + 0xF3A900), *((_DWORD *)&v10 + 1));
    88.     *(_DWORD *)(4 * v9 + 0xF3A8FC) = *(_DWORD *)(4 * v9 + 0xF3A900) + *((_DWORD *)&v10 + 1);
    89.     *(_DWORD *)(4 * v9 + 0xF3A900) = v11;
    90.     *(_DWORD *)(4 * v9 + 0xF3A904) = v6;
    91.     ++vf3a994;
    92.     v0 = vf3a994;
    93.   }
    94.   while ( vf3a994 < vf3a990 );
    95.   v12 = v6 < (unsigned int)v11;
    96.   v13 = v6 == v11;
    97.   if ( v6 < (unsigned int)v11 )
    98.     goto LABEL_19;
    99.   v14 = vf3a990;
    100.   v16 = 4 * vf3a990 + 15967864;
    101.   v15 = 4 * vf3a990 + 15968504;
    102.   do
    103.   {
    104.     if ( !v14 )
    105.       break;
    106.     v12 = *(_DWORD *)v16 < *MK_FP(__ES__, v15);
    107.     v13 = *(_DWORD *)v16 == *MK_FP(__ES__, v15);
    108.     v16 += 4;
    109.     v15 += 4;
    110.     --v14;
    111.   }
    112.   while ( v13 );
    113.   if ( v12 | v13 )
    114.   {
    115. LABEL_19:
    116.     v18 = vf3a990;
    117.     v19 = 0;
    118.     v17 = 0;
    119.     do
    120.     {
    121.       *(_DWORD *)&v10 = *(_DWORD *)(4 * v19 + 0xF3A67C);
    122.       v23 = v17 + (_DWORD)v10;
    123.       v17 = *(_DWORD *)(4 * v19 + 0xF3A8FC) < (unsigned int)v17 + (_DWORD)v10;
    124.       v24 = *(_DWORD *)(4 * v19 + 0xF3A8FC) - v23;
    125.       *(_DWORD *)(4 * v19++ + 0xF3A8FC) = v24;
    126.       --v18;
    127.     }
    128.     while ( v18 );
    129.   }
    130.   memcpy((void *)0xF3A6FC, (const void *)0xF3A8FC, 4 * vf3a990);
    131.   return v10;
    132. }
     
  17. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    t00x
    Вычитание "длинных" чисел :) Понял, что имелось в виду.
     
  18. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    DMD
    И что, понятнее стало? :))) Попробуй еще rec запустить, думается тот же результат получишь.
    По мне так руками проще из ассемблерного текста алгоритм выковыривать, чем из полученного "листинга".
     
  19. DMD

    DMD Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2005
    Сообщения:
    56
    мне - нет, не стало. Правда, о переводе писал RElf , но это не столь важно :)
    и мне асм "ближе"... буду пробовать, но от помощи не отказываюсь! :))))
     
  20. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    DMD
    ИМХО он имел в виду формальную высокоуровневую запись алгоритма.