Сейчас на форуме: vsv1, NIKOLA, r0lka, johnniewalker (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› FGInt Verify...?
Посл.ответ Сообщение


Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 18 августа 2018 23:55 · Поправил: BlackCode
· Личное сообщение · #1

Привет всем
Помогите идентифицировать функцию проверки электронной подписи.
Функция из FGInt - это 101%
Но какая именно? В инете все сигнатуры для иды старье. Криптосканеры или ничего не "видят" или врут.
Скачал с tuts4you все исходники FGInt-а, скомпилил в надежде, что в "ручном" режиме
хотя бы распознаю функцию. Но не тут-то было. Внешне, дизассемблерный код сильно отличается от скомпиленного мной.
Короче вот функция
Code:
  1. sub_A44AF0      proc near               ; CODE XREF: sub_D0FFF0+120↓p
  2.  
  3. var_29          = byte ptr -29h
  4. var_28          = dword ptr -28h
  5. var_24          = byte ptr -24h
  6. var_1C          = byte ptr -1Ch
  7. var_14          = byte ptr -14h
  8. var_C           = dword ptr -0Ch
  9. var_8           = dword ptr -8
  10. var_4           = dword ptr -4
  11. arg_0           = dword ptr  8
  12. arg_4           = dword ptr  0Ch
  13.  
  14.                 push    ebp
  15.                 mov     ebp, esp
  16.                 add     esp, 0FFFFFFD4h
  17.                 push    ebx
  18.                 push    esi
  19.                 push    edi
  20.                 xor     ebx, ebx
  21.                 mov     [ebp+var_28], ebx
  22.                 mov     [ebp+var_C], ecx
  23.                 mov     [ebp+var_8], edx
  24.                 mov     [ebp+var_4], eax
  25.                 lea     eax, [ebp+var_14]
  26.                 mov     edx, off_A3FFBC
  27.                 call    @System@@AddRefRecord$qqrv ; System::__linkproc__ AddRefRecord(void)
  28.                 lea     eax, [ebp+var_1C]
  29.                 mov     edx, off_A3FFBC
  30.                 call    @System@@AddRefRecord$qqrv ; System::__linkproc__ AddRefRecord(void)
  31.                 lea     eax, [ebp+var_24]
  32.                 mov     edx, off_A3FFBC
  33.                 call    @System@@AddRefRecord$qqrv ; System::__linkproc__ AddRefRecord(void)
  34.                 xor     eax, eax
  35.                 push    ebp
  36.                 push    offset loc_A44C01
  37.                 push    dword ptr fs:[eax]
  38.                 mov     fs:[eax], esp
  39.                 mov     eax, [ebp+arg_0]
  40.                 call    sub_406378
  41.                 mov     [ebp+var_29], 0
  42.                 lea     eax, [ebp+var_24]
  43.                 call    FGIntDestroy
  44.                 lea     edx, [ebp+var_28]
  45.                 mov     eax, [ebp+var_C]
  46.                 call    sub_A403D8
  47.                 lea     edx, [ebp+var_14]
  48.                 mov     eax, [ebp+var_28]
  49.                 call    sub_A41F6C
  50.                 lea     edx, [ebp+var_28]
  51.                 mov     eax, [ebp+arg_4]
  52.                 call    sub_A403D8
  53.                 lea     edx, [ebp+var_1C]
  54.                 mov     eax, [ebp+var_28]
  55.                 call    sub_A41F6C
  56.                 xor     eax, eax
  57.                 push    ebp
  58.                 push    offset loc_A44BAD
  59.                 push    dword ptr fs:[eax]
  60.                 mov     fs:[eax], esp
  61.                 lea     eax, [ebp+var_1C]
  62.                 push    eax
  63.                 lea     eax, [ebp+var_29]
  64.                 push    eax
  65.                 lea     ecx, [ebp+var_14]
  66.                 mov     edx, [ebp+var_8]
  67.                 mov     eax, [ebp+var_4]
  68.                 call    <b>sub_A448A8</b>
  69.                 xor     eax, eax
  70.                 pop     edx
  71.                 pop     ecx
  72.                 pop     ecx
  73.                 mov     fs:[eax], edx
  74.                 jmp     short loc_A44BB7
  75. ; ---------------------------------------------------------------------------
  76.  
  77. loc_A44BAD:                             ; DATA XREF: sub_A44AF0+92↑o
  78.                 jmp     @System@@HandleAnyException$qqrv ; System::__linkproc__ HandleAnyException(void)
  79. ; ---------------------------------------------------------------------------
  80.                 call    sub_405D28
  81.  
  82. loc_A44BB7:                             ; CODE XREF: sub_A44AF0+BB↑j
  83.                 cmp     [ebp+var_29], 0
  84.                 jz      short loc_A44BC8
  85.                 mov     eax, [ebp+arg_0]
  86.                 mov     edx, [ebp+var_4]
  87.                 call    sub_4063CC
  88.  
  89. loc_A44BC8:                             ; CODE XREF: sub_A44AF0+CB↑j
  90.                 lea     eax, [ebp+var_14]
  91.                 call    FGIntDestroy
  92.                 lea     eax, [ebp+var_1C]
  93.                 call    FGIntDestroy
  94.                 xor     eax, eax
  95.                 pop     edx
  96.                 pop     ecx
  97.                 pop     ecx
  98.                 mov     fs:[eax], edx
  99.                 push    offset loc_A44C08
  100.  
  101. loc_A44BE5:                             ; CODE XREF: sub_A44AF0+116↓j
  102.                 lea     eax, [ebp+var_28]
  103.                 call    sub_406378
  104.                 lea     eax, [ebp+var_24]
  105.                 mov     edx, off_A3FFBC
  106.                 mov     ecx, 3
  107.                 call    sub_407314
  108.                 retn
  109. ; ---------------------------------------------------------------------------
  110.  
  111. loc_A44C01:                             ; DATA XREF: sub_A44AF0+44↑o
  112.                 jmp     @System@@HandleFinally$qqrv ; System::__linkproc__ HandleFinally(void)
  113. ; ---------------------------------------------------------------------------
  114.                 jmp     short loc_A44BE5
  115. ; ---------------------------------------------------------------------------
  116.  
  117. loc_A44C08:                             ; CODE XREF: sub_A44AF0+110↑j
  118.                                         ; DATA XREF: sub_A44AF0+F0↑o
  119.                 pop     edi
  120.                 pop     esi
  121.                 pop     ebx
  122.                 mov     esp, ebp
  123.                 pop     ebp
  124.                 retn    8
  125. sub_A44AF0      endp
  126.  
  127. ; ---------------------------------------------------------------------------
  128.  
  129. <b>sub_A448A8</b>      proc near               ; CODE XREF: sub_A44AF0+AE↓p
  130.  
  131. var_24          = byte ptr -24h
  132. var_1C          = byte ptr -1Ch
  133. var_14          = byte ptr -14h
  134. var_C           = dword ptr -0Ch
  135. var_8           = dword ptr -8
  136. var_4           = dword ptr -4
  137. arg_0           = dword ptr  8
  138. arg_4           = dword ptr  0Ch
  139.  
  140.                 push    ebp
  141.                 mov     ebp, esp
  142.                 add     esp, 0FFFFFFDCh
  143.                 mov     [ebp+var_C], ecx
  144.                 mov     [ebp+var_8], edx
  145.                 mov     [ebp+var_4], eax
  146.                 mov     eax, [ebp+var_4]
  147.                 call    unknown_libname_56 ; BDS2008-RADxe10 Component Library & Packages
  148.                 mov     eax, [ebp+var_8]
  149.                 call    unknown_libname_56 ; BDS2008-RADxe10 Component Library & Packages
  150.                 lea     eax, [ebp+var_14]
  151.                 mov     edx, off_A3FFBC
  152.                 call    @System@@AddRefRecord$qqrv ; System::__linkproc__ AddRefRecord(void)
  153.                 lea     eax, [ebp+var_1C]
  154.                 mov     edx, off_A3FFBC
  155.                 call    @System@@AddRefRecord$qqrv ; System::__linkproc__ AddRefRecord(void)
  156.                 lea     eax, [ebp+var_24]
  157.                 mov     edx, off_A3FFBC
  158.                 call    @System@@AddRefRecord$qqrv ; System::__linkproc__ AddRefRecord(void)
  159.                 xor     eax, eax
  160.                 push    ebp
  161.                 push    offset loc_A4499C
  162.                 push    dword ptr fs:[eax]
  163.                 mov     fs:[eax], esp
  164.                 lea     edx, [ebp+var_1C]
  165.                 mov     eax, [ebp+var_8]
  166.                 call    sub_A41F6C
  167.                 lea     edx, [ebp+var_14]
  168.                 mov     eax, [ebp+var_4]
  169.                 call    sub_A41F6C
  170.                 lea     ecx, [ebp+var_24]
  171.                 mov     edx, [ebp+arg_4]
  172.                 lea     eax, [ebp+var_14]
  173.                 call    sub_A42A5C
  174.                 lea     edx, [ebp+var_14]
  175.                 lea     eax, [ebp+var_24]
  176.                 call    sub_A413F4
  177.                 lea     eax, [ebp+var_24]
  178.                 push    eax
  179.                 mov     ecx, [ebp+arg_4]
  180.                 mov     edx, [ebp+var_C]
  181.                 lea     eax, [ebp+var_1C]
  182.                 call    sub_A432D4
  183.                 lea     edx, [ebp+var_1C]
  184.                 lea     eax, [ebp+var_24]
  185.                 call    sub_A413F4
  186.                 lea     edx, [ebp+var_14]
  187.                 lea     eax, [ebp+var_1C]
  188.                 call    FGIntCompareAbs
  189.                 cmp     al, 2
  190.                 mov     eax, [ebp+arg_0]
  191.                 setz    byte ptr [eax]
  192.                 lea     eax, [ebp+var_1C]
  193.                 call    FGIntDestroy
  194.                 lea     eax, [ebp+var_14]
  195.                 call    FGIntDestroy
  196.                 xor     eax, eax
  197.                 pop     edx
  198.                 pop     ecx
  199.                 pop     ecx
  200.                 mov     fs:[eax], edx
  201.                 push    offset loc_A449A3
  202.  
  203. loc_A4497B:                             ; CODE XREF: sub_A448A8+F9↓j
  204.                 lea     eax, [ebp+var_24]
  205.                 mov     edx, off_A3FFBC
  206.                 mov     ecx, 3
  207.                 call    sub_407314
  208.                 lea     eax, [ebp+var_8]
  209.                 mov     edx, 2
  210.                 call    sub_40639C
  211.                 retn
  212. ; ---------------------------------------------------------------------------
  213.  
  214. loc_A4499C:                             ; DATA XREF: sub_A448A8+4C↑o
  215.                 jmp     @System@@HandleFinally$qqrv ; System::__linkproc__ HandleFinally(void)
  216. ; ---------------------------------------------------------------------------
  217.                 jmp     short loc_A4497B
  218. ; ---------------------------------------------------------------------------
  219.  
  220. loc_A449A3:                             ; CODE XREF: sub_A448A8+F3↑j
  221.                                         ; DATA XREF: sub_A448A8+CE↑o
  222.                 mov     esp, ebp
  223.                 pop     ebp
  224.                 retn    8
  225. sub_A448A8      endp
  226.  
  227. ; ---------------------------------------------------------------------------
  228.  

Некоторые функции все же удалось распознать, но в целом sub_A44AF0 осталась неизвестной.
Входящие параметры
ecx - указатель на ascii строку "bnAL"
edx - указатель на буфер где находятся байты подписи (768 бит)
eax - буфер с данными, от которых подпись.
В стеке
esp - указатель на память размером dword
esp+4 - указатель на ascii строку "j8THsd+Y6I642RP4EjUhF5JsRLrTV/cf84S8dA9dWrJN5fWVnK+zqwbA6RpmljLRBH9kCpB3q9MPD3Y1ORHSO4Uv42Va9kdsuF96PkX5Q/mNdIR20QriODXz8yy4OzBB




Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 18 августа 2018 23:59 · Поправил: BlackCode
· Личное сообщение · #2

Здесь sub_A403D8 ascii строки преобразуются в байты, короткая в dword, длинная в хекс размером 768 бит (60h)
Здесь sub_A41F6C полученные хекс данные преобразуются, как я понял, в FGInt
Далее sub_A448A8, там происходит сравнение результатов вычислений.

В общем, может кто сталкивался с похожим?
Пните, пожалуйста, в нужную сторону.
Заранее благодарен

P.S. Все не уместилась в одно сообщение, почему-то




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 00:11
· Личное сообщение · #3

Так ты ничего кроме CompareAbs и Destroy не распознал, их там как грзяи, и дал обрубок какой-то. Больше информации.

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 00:17
· Личное сообщение · #4

f13nd пишет:
Больше информации.

Конкретизируй, какую информацию еще необходимо?




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 00:31 · Поправил: f13nd
· Личное сообщение · #5

BlackCode пишет:
Конкретизируй, какую информацию еще необходимо?

Больше функций второстепенных.

Из того, что есть, возможные варианты
Procedure RSAVerify(M, S : String; Var e, n : TFGInt; Var valid : boolean);
Procedure DSAVerify(Var p, q, g, y : TFGInt; m, r, s : String; Var ok : Boolean);
Procedure ECDSAVerify(M, r, s : String; p, a, n : TFGInt; B, Bx : TECPoint; Var Valid : Boolean);
Procedure GOSTDSAVerify(p, q, a, y : TFGInt; m, r, s : String; Var ok : Boolean);
Procedure ElGamalVerify(Var g, y, p : TFGInt; a, b, M : String; Var ok : Boolean);

Скорей всего sub_A448A8 это RSAVerify, с установки SEH по FGIntCompareAbs ровно 6 вызовов (причем первые два одна и та же функция, 4 и 6 одна и та же), как в исходниках, в остальных их побольше. Между FGIntCompareAbs и снятием SEH два FGIntDestroy. Даю 95.5% что она.
Code:
  1.    Base256StringToFGInt(S, SGInt);
  2.    Base256StringToFGInt(M, MGInt);
  3.    FGIntMod(MGInt, n, temp);
  4.    FGIntCopy(temp, MGInt);
  5.    FGIntMontgomeryModExp(SGInt, e, n, temp);
  6.    FGIntCopy(temp, SGInt);
  7.    valid := (FGIntCompareAbs(SGInt, MGInt) = Eq);
  8.    FGIntDestroy(SGInt);
  9.    FGIntDestroy(MGInt);


-----
2 оттенка серого


| Сообщение посчитали полезным: BlackCode


Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 09:45 · Поправил: BlackCode
· Личное сообщение · #6

f13nd пишет:
Скорей всего sub_A448A8 это RSAVerify,

У меня было такое же предположение. Но у меня появились сомнения после того как,
я выдернул из программы, после конвертации большой ascii строки, байты (предполагаемый модулус 768 бит)
Засунул его в msieve и через час получил "Error: evaluated polynomial value polyval is not a multiple of n!"
Потом я проверил dword, который получается из короткой строки, на простоту. Как ни крути его, оно составное.
Короче вот это как я полагаю FGInt

2CF87EA8 01 00 00 00 00 00 00 00 D7 7A 01 00 00 00 00 00 - это короткое аля паблик экспанента
-------------------------------------------------------------------------------------------------------------------
017AD700 - Это предполагаемая паблик экспонента
-------------------------------------------------------------------------------------------------------------------
148B4AB8 19 00 00 00 00 00 00 00 8F 15 76 14 00 00 00 00 <- 19h или 25 dword-ов
148B4AC8 14 2B A4 55 00 00 00 00 BC 70 51 48 00 00 00 00
148B4AD8 7C 2F 3F 11 00 00 00 00 8D DB 63 24 00 00 00 00
148B4AE8 34 CF 24 7D 00 00 00 00 DF 5D 9A 6B 00 00 00 00
148B4AF8 AA EE 9F 6A 00 00 00 00 3E 37 D6 7C 00 00 00 00
148B4B08 23 CF 5B 67 00 00 00 00 E2 BB CC 64 00 00 00 00
148B4B18 0E 35 B6 0A 00 00 00 00 45 A3 CE 65 00 00 00 00
148B4B28 C4 E6 07 3E 00 00 00 00 AA 3A DF 73 00 00 00 00
148B4B38 E4 73 8B 3A 00 00 00 00 9F 57 B4 3B 00 00 00 00
148B4B48 E7 CE AC 75 00 00 00 00 88 C3 96 4D 00 00 00 00
148B4B58 64 DA B1 59 00 00 00 00 D0 D5 3B 42 00 00 00 00
148B4B68 F5 6C 92 7A 00 00 00 00 89 B3 B9 11 00 00 00 00
148B4B78 65 C6 62 4E 00 00 00 00 AE 67 0A 00 00 00 00 00 - это длинное аля модулус
--------------------------------------------------------------------------------------------------------------------
8F1576148A15D22A2F5C1492EFE527D2B83D46A27926E97F7769AE55DD3FD53E37D6FC91E7ADB3F82E33D9A1C6565134EA5C26363FF0A9EA7CCFC9E716759F57B4BB7367D63AE2B065934C3B360B5DBD23AC6793D427CEE646CA8CC59CAE670A
Это предполагаемый модулус до преобразования в FGInt, в памяти он в обратном виде.
--------------------------------------------------------------------------------------------------------------------

Преобразование в FGInt это отдельная песня.
То что в памяти, об байтах размером 60h напоминает только начало и конец (8F 15 76 14 и AE 67 0A)
И это все. То что в буфере уже на целый dword больше. Т.е. 768 бит трансформировалось в 800 бит.
На входе цифры не соответствующие параметрам RSA, т.е. предполагаемая E составное а не простое, N вообще хз что... (ошибка msieve)
Или я что-то не так делаю?




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 10:15 · Поправил: f13nd
· Личное сообщение · #7

BlackCode пишет:
Т.е. 768 бит трансформировалось в 800 бит

RSA в стоковом варианте, предложенным самими изобретателями, оперирует с дайджестами (равными слову процессора, у тебя 19h это и есть число дайджестов), там можно нулями до любой длины расширить. Я не знаю что именно тебе надо сделать, но сам влез бы в FGIntMontgomeryModExp, и смотрел как параметры передаются ему, рса это по сути только оно, остальное мишура. Найди в интерноте калькулятор tibinuca я все, что с рса связано, им тестирую. Ну или перл/питон с длинной арифметикой.

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 10:27
· Личное сообщение · #8

f13nd пишет:
Я не знаю что именно тебе надо сделать

Объясняю...
Выдернуть модулус в "нормальном" виде и факторизовать его, если только длина 768, то это реально.




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 10:30
· Личное сообщение · #9

BlackCode пишет:
Выдернуть модулус в "нормальном" виде и факторизовать его, если только длина 768, то это реально.

FGIntMontgomeryModExp(SGInt, e, n, temp)
для нормального вида тебе надо SGInt, e и n вынуть и преобразовать так, чтоб цп расшифровывалась со стандартным блобом в начале (если эта библиотека хоть немного стандарты уважает)

-----
2 оттенка серого




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 19 августа 2018 10:45
· Личное сообщение · #10

скорее всего E=63537
а это N
[code]
00000000: 8F C4 C7 B1-DF 98 E8 8E-B8 D9 13 F8-12 35 21 17
00000010: 92 6C 44 BA-D3 57 F7 1F-F3 84 BC 74-0F 5D 5A B2
00000020: 4D E5 F5 95-9C AF B3 AB-06 C0 E9 1A-66 96 32 D1
00000030: 04 7F 64 0A-90 77 AB D3-0F 0F 76 35-39 11 D2 3B
00000040: 85 2F E3 65-5A F6 47 6C-B8 5F 7A 3E-45 F9 43 F9
00000050: 8D 74 84 76-D1 0A E2 38-35 F3 F3 2C-B8 3B 30 41
[/code]

-----
...или ты работаешь хорошо, или ты работаешь много...





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 10:45
· Личное сообщение · #11

f13nd
Вроде нашел FGIntMontgomeryModExp
Code:
  1. .text:00A44926                 lea     eax, [ebp+var_24]
  2. .text:00A44929                 call    FGIntCopy
  3. .text:00A4492E                 lea     eax, [ebp+var_24]
  4. .text:00A44931                 push    eax
  5. .text:00A44932                 mov     ecx, [ebp+arg_4]
  6. .text:00A44935                 mov     edx, [ebp+var_C]
  7. .text:00A44938                 lea     eax, [ebp+var_1C]
  8. .text:00A4493B                 call    FGIntMontgomeryModExp
  9. .text:00A44940                 lea     edx, [ebp+var_1C]
  10. .text:00A44943                 lea     eax, [ebp+var_24]
  11. .text:00A44946                 call    FGIntCopy
  12. .text:00A4494B                 lea     edx, [ebp+var_14]
  13. .text:00A4494E                 lea     eax, [ebp+var_1C]
  14. .text:00A44951                 call    FGIntCompareAbs
  15. .text:00A44956                 cmp     al, 2
  16. .text:00A44958                 mov     eax, [ebp+arg_0]
  17. .text:00A4495B                 setz    byte ptr [eax]
  18. .text:00A4495E                 lea     eax, [ebp+var_1C]
  19. .text:00A44961                 call    FGIntDestroy
  20. .text:00A44966                 lea     eax, [ebp+var_14]
  21. .text:00A44969                 call    FGIntDestroy





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 11:03 · Поправил: f13nd
· Личное сообщение · #12

"j8THsd+Y6I642RP4EjUhF5JsRLrTV/cf84S8dA9dWrJN5fWVnK+zqwbA6RpmljLRBH9kCpB3q9MPD3Y1ORHSO4Uv42Va9kdsuF96PkX5Q/mNdIR20QriODXz8yy4OzBB" = (base64)8F C4 C7 B1 DF 98 E8 8E B8 D9 13 F8 12 35 21 17 92 6C 44 BA D3 57 F7 1F F3 84 BC 74 0F 5D 5A B2 4D E5 F5 95 9C AF B3 AB 06 C0 E9 1A 66 96 32 D1 04 7F 64 0A 90 77 AB D3 0F 0F 76 35 39 11 D2 3B 85 2F E3 65 5A F6 47 6C B8 5F 7A 3E 45 F9 43 F9 8D 74 84 76 D1 0A E2 38 35 F3 F3 2C B8 3B 30 41
"bnAL" = (base64)6E 70 0B
Первые два Base256StringToFGInt - преобразование в бин. Название функции конечно на пять баллов.

BfoX пишет:
E=63537

Как это получилось?

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 11:32 · Поправил: BlackCode
· Личное сообщение · #13

f13nd пишет:
Название функции конечно на пять баллов.

Стринги я поменял, а байты правильные. Аля конспирация

f13nd пишет:
BfoX пишет:
E=63537
Как это получилось?

Кстати число-то не простое




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 11:38
· Личное сообщение · #14

BlackCode пишет:
Кстати число-то не простое

Видимо опечатался, стандартные публичные 3, 5, 17, 257 и 65537. Но все равно интересно откуда.

-----
2 оттенка серого




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 19 августа 2018 12:12
· Личное сообщение · #15

f13nd пишет:
Но все равно интересно откуда.


опечатался =)
65537

-----
...или ты работаешь хорошо, или ты работаешь много...





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 13:16 · Поправил: BlackCode
· Личное сообщение · #16

f13nd
Ты оказался прав, это RSAVerify.
Но непонятка с паблик экспонентой.
В оригинале после ConvertBase64to256
01 3B D7 00 или если развернуть 00D73B01h == 14105345 и оно не простое.
После Base256StringToFGInt
01 00 00 00 00 00 00 00 D7 3B 01 00 00 00 00 00
и на вход FGIntMontgomeryModExp
подается в неизменном виде.

P.S. Хотя, если подумать, я имею дело с подписью, т.е. необратимым преобразованием данных,
аля хеш, то простое оно или нет не должно играть роли. Это только с шифрованием имеет значение.




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 13:20 · Поправил: f13nd
· Личное сообщение · #17

BlackCode пишет:
01 00 00 00 00 00 00 00 D7 3B 01 00 00 00 00 00

1 дайджест 0000000000013BD7, он же 80855 - публичная экспонента, ты забыл что писи это литтл эндиан) Почему оно не простое, шут его знает. Это ограничение только чтоб дважды в степень нельзя было возвести, в множители экспоненты, по идее ничего не мешает и непростое использовать.

Добавлено спустя 8 минут
BlackCode пишет:
Хотя, если подумать, я имею дело с подписью, т.е. необратимым преобразованием данных,
аля хеш, то простое оно или нет не должно играть роли. Это только с шифрованием имеет значение.

Ты чё, подпись очень даже обратимая вещь. Рса это экспоненциальное модулирование a = b^e mod n, экспоненты выбираются так, чтобы оба преобразования обратимы были.

Просто достань саму подпись, экспоненту и модулус и расшифруй. Если сойдется - вот оно, не сойдется, флипай байты в дворде и дворды меж собой. Зависит от того, как они кодируются в памяти.

На выходе в принципе должна быть примерно такая картина:
0001FFFFFFFFFFFFFFFF0016911B7103A41F49A0456A775B3B20FC78C7105A265B000000000000000000000000000000000000000000000000000000000000000000009F757184000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Но никто не принуждает разработчика следовать стандартам. Тем более если у него такая экспонента. Так что сравнивай с результатом функции.

Вот тебе пацанский калькулятор http://sendfile.su/1437138

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 13:40 · Поправил: BlackCode
· Личное сообщение · #18

f13nd пишет:
Просто достань саму подпись, экспоненту и модулус и расшифруй.

Т.е. получается, что модулус так
0A67AE9CC58CCA46E6CE27D49367AC23BD5D0B363B4C9365B0E23AD66773BBB4579F7516E7C9CF7CEAA9F03F36265CEA345156C6A1D9332EF8B3ADE791FCD6373ED53FDD55AE69777FE92679A2463DB8D227E5EF92145C2F2AD2158A1476158F
В "правильном" виде?
В десятеричном виде
63101419384576048692623190661912409071483279371692390307081746405454140854035870517026556482528068028105915747658583779815442722492667273864070161560105105235131974300881902464112784092874607989785205179999669746236722073608525199
Я к тому, в каком виде на факторизацию запустить?




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 13:42 · Поправил: f13nd
· Личное сообщение · #19

BlackCode пишет:
Т.е. получается, что модулус так

Не факт. Дампни мне саму подпись, скажу. Для факторизации, насколько я видел, от старших к младшим, числом задается. Вроде бы обычно десятеричным.

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 13:47 · Поправил: BlackCode
· Личное сообщение · #20

f13nd пишет:
Дампни мне саму подпись, скажу.

Так...
Это подпись из памяти до Base256StringToFGInt
077451CCC78D018D3B9E71C34510598F5CB6F7A011E551CCAE21164F676696115ED0BCF11A5A243775FEA0160D3DD266BEB5287E456EE54014529A248463641FC13107E97F32CA921D1339D844D6631B954EEE8BE81BACF3B1371F3B6CF4D7CF
Это сам FGInt
149049D8 19 00 00 00 00 00 00 00 CF D7 F4 6C 00 00 00 00
149049E8 76 3E 6E 62 00 00 00 00 CE B3 6E 20 00 00 00 00
149049F8 5F 74 77 2A 00 00 00 00 B9 31 66 4D 00 00 00 00
14904A08 08 3B 67 22 00 00 00 00 87 A4 B2 4C 00 00 00 00
14904A18 BF F4 83 18 00 00 00 00 C1 1F 64 63 00 00 00 00
14904A28 08 49 34 25 00 00 00 00 51 00 95 3B 00 00 00 00
14904A38 2B F2 43 29 00 00 00 00 EB 6B 26 5D 00 00 00 00
14904A48 A7 C1 02 54 00 00 00 00 7F DD 0D 09 00 00 00 00
14904A58 2D 8D 78 5E 00 00 00 00 D0 5E 11 16 00 00 00 00
14904A68 CD CE 9E 2C 00 00 00 00 84 B8 32 47 00 00 00 00
14904A78 2A 8F 00 3D 00 00 00 00 6F CB F5 18 00 00 00 00
14904A88 0B A2 68 38 00 00 00 00 9C E7 4E 63 00 00 00 00
14904A98 80 C6 63 66 00 00 00 00 51 74 07 00 00 00 00 00




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 14:23
· Личное сообщение · #21

Красивого (с блобом) ничего не получается, а на выходе что?

Добавлено спустя 8 минут
BlackCode пишет:
01 00 00 00 00 00 00 00 D7 7A 01 00 00 00 00 00

BlackCode пишет:
01 00 00 00 00 00 00 00 D7 3B 01 00 00 00 00 00

И почему экспоненты разные?

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 14:36 · Поправил: BlackCode
· Личное сообщение · #22

f13nd пишет:
И почему экспоненты разные?

Функция несколько раз вызывается, перепутал
Вот правильная
01 00 00 00 00 00 00 00 D7 7A 01 00 00 00 00 00 == 96983

Добавлено спустя 9 минут
f13nd пишет:
Красивого (с блобом) ничего не получается, а на выходе что?


Так.. в хексе, как лежит в памяти, все данные
E - 01 7A D7 00
N - 0A67AE9CC58CCA46E6CE27D49367AC23BD5D0B363B4C9365B0E23AD66773BBB4579F7516E7C9CF7CEAA9F03F36265CEA345156C6A1D9332EF8B3ADE791FCD6373ED53FDD55AE69777FE92679A2463DB8D227E5EF92145C2F2AD2158A1476158F
Sign - 077451CCC78D018D3B9E71C34510598F5CB6F7A011E551CCAE21164F676696115ED0BCF11A5A243775FEA0160D3DD266BEB5287E456EE54014529A248463641FC13107E97F32CA921D1339D844D6631B954EEE8BE81BACF3B1371F3B6CF4D7CF
Message в аттаче.


1d75_19.08.2018_EXELAB.rU.tgz - Message.bin




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 14:48
· Личное сообщение · #23

BlackCode пишет:
перепутал

Если то, что на выходе, не похоже ни на что из этого, значит кто-то еще что-то перепутал:
5358B427E056C1E8745BE0A8892E53CAEADCE1BF5619FF9B5EA9927F2147DF83E5FED6954C5996F048DC20BFF1A5F470FFBD7F82B51A1695D02C14B26E68D2806FB338436AEFCBD37C5402B4DACAAA4CC0519A1F001518FD2F6D6C45D8F5E191E86ECE00
05B9662B238737A43D8C9C04D5BBC0C357B6FB605DC160A867C1DEE9E9AD4475DAD612DA4EE93DCD75093B5DAA092B739A3A04D2E7B7D79867FE2208F103CC932C2C3B51AA724F51EFA88626BB3D43E3C1D88094ABACD5161F374EB5CE4B6BF0BC0D3819
82517677EFD3EF317832E776EA6538E7284AAAEB5EDF0A50245C86E24EB233DE40193EB2FD7384B40709610ABCF57826DCD134BBAC40309FECBCAAC0904DFAED7F57A7DF0E81A2FDF9C2EDB3ECBF3FE496DB3A2AE71F1803EFF9F807A91C565A84A75638
0006206E652D9B0C74D0AAF113070300C16B075FEEF9DAA009484C9AD4517BD348BC8CD4773CBCCA998A2F34354C258DEF73B0DE1B9CD2D7B9AC98805D349A88C7A8AEBD1F6F012FE49D6DD7C5F37EF37D06EB47AA0556F9F0869A98C5CEF155A1229851

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 14:55
· Личное сообщение · #24

В FGIntCompareAbs сравниваются такие данные

149849D8 19 00 00 00 00 00 00 00 DC AA 43 61 00 00 00 00
149849E8 0F 05 6E 4F 00 00 00 00 A3 62 19 65 00 00 00 00
149849F8 76 4B C4 0D 00 00 00 00 DF 5E 0E 65 00 00 00 00
14984A08 82 F5 5D 7C 00 00 00 00 B5 C2 59 50 00 00 00 00
14984A18 37 99 AE 58 00 00 00 00 9B F6 E8 3E 00 00 00 00
14984A28 F3 53 A3 54 00 00 00 00 30 7E 3C 76 00 00 00 00
14984A38 8C 5C 02 6B 00 00 00 00 29 52 07 56 00 00 00 00
14984A48 31 FE 45 5F 00 00 00 00 10 A4 DB 59 00 00 00 00
14984A58 B5 49 20 63 00 00 00 00 34 B3 69 16 00 00 00 00
14984A68 B4 FF 83 30 00 00 00 00 75 09 B9 3D 00 00 00 00
14984A78 C1 CE 3D 0D 00 00 00 00 35 56 DC 19 00 00 00 00
14984A88 4E C7 4A 4F 00 00 00 00 7B 5D 50 3C 00 00 00 00
14984A98 46 8F FA 35 00 00 00 00 F0 E9 04 00 00 00 00 00




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 19 августа 2018 15:02 · Поправил: f13nd
· Личное сообщение · #25


sign 077451CCC78D018D3B9E71C34510598F5CB6F7A011E551CCAE21164F676696115ED0BCF11A5A243775FEA0160D3DD266BEB5287E456EE54014529A248463641FC13107E97F32CA921D1339D844D6631B954EEE8BE81BACF3B1371F3B6CF4D7CF
exp 17ad7
mod 0A67AE9CC58CCA46E6CE27D49367AC23BD5D0B363B4C9365B0E23AD66773BBB4579F7516E7C9CF7CEAA9F03F36265CEA345156C6A1D9332EF8B3ADE791FCD6373ED53FDD55AE69777FE92679A2463DB8D227E5EF92145C2F2AD2158A1476158F

преобразуй модулус в 10ричное и факторизуй
ЗЫ: ёбушки-воробушки...

-----
2 оттенка серого





Ранг: 71.5 (постоянный), 95thx
Активность: 0.10.38
Статус: Участник

Создано: 19 августа 2018 15:05
· Личное сообщение · #26

f13nd пишет:
значит кто-то еще что-то перепутал

Сравнил, все правильно

На входе FGIntMontgomeryModExp(SGInt, e, n, temp)

SGInt
149248F8 19 00 00 00 00 00 00 00 CF D7 F4 6C 00 00 00 00
14924908 76 3E 6E 62 00 00 00 00 CE B3 6E 20 00 00 00 00
14924918 5F 74 77 2A 00 00 00 00 B9 31 66 4D 00 00 00 00
14924928 08 3B 67 22 00 00 00 00 87 A4 B2 4C 00 00 00 00
14924938 BF F4 83 18 00 00 00 00 C1 1F 64 63 00 00 00 00
14924948 08 49 34 25 00 00 00 00 51 00 95 3B 00 00 00 00
14924958 2B F2 43 29 00 00 00 00 EB 6B 26 5D 00 00 00 00
14924968 A7 C1 02 54 00 00 00 00 7F DD 0D 09 00 00 00 00
14924978 2D 8D 78 5E 00 00 00 00 D0 5E 11 16 00 00 00 00
14924988 CD CE 9E 2C 00 00 00 00 84 B8 32 47 00 00 00 00
14924998 2A 8F 00 3D 00 00 00 00 6F CB F5 18 00 00 00 00
149249A8 0B A2 68 38 00 00 00 00 9C E7 4E 63 00 00 00 00
149249B8 80 C6 63 66 00 00 00 00 51 74 07 00 00 00 00 00

e
1E2D7C08 01 00 00 00 00 00 00 00 D7 7A 01 00 00 00 00 00

n
149241F8 19 00 00 00 00 00 00 00 8F 15 76 14 00 00 00 00
14924208 14 2B A4 55 00 00 00 00 BC 70 51 48 00 00 00 00
14924218 7C 2F 3F 11 00 00 00 00 8D DB 63 24 00 00 00 00
14924228 34 CF 24 7D 00 00 00 00 DF 5D 9A 6B 00 00 00 00
14924238 AA EE 9F 6A 00 00 00 00 3E 37 D6 7C 00 00 00 00
14924248 23 CF 5B 67 00 00 00 00 E2 BB CC 64 00 00 00 00
14924258 0E 35 B6 0A 00 00 00 00 45 A3 CE 65 00 00 00 00
14924268 C4 E6 07 3E 00 00 00 00 AA 3A DF 73 00 00 00 00
14924278 E4 73 8B 3A 00 00 00 00 9F 57 B4 3B 00 00 00 00
14924288 E7 CE AC 75 00 00 00 00 88 C3 96 4D 00 00 00 00
14924298 64 DA B1 59 00 00 00 00 D0 D5 3B 42 00 00 00 00
149242A8 F5 6C 92 7A 00 00 00 00 89 B3 B9 11 00 00 00 00
149242B8 65 C6 62 4E 00 00 00 00 AE 67 0A 00 00 00 00 00

Out Temp

14924498 19 00 00 00 00 00 00 00 DC AA 43 61 00 00 00 00
149244A8 0F 05 6E 4F 00 00 00 00 A3 62 19 65 00 00 00 00
149244B8 76 4B C4 0D 00 00 00 00 DF 5E 0E 65 00 00 00 00
149244C8 82 F5 5D 7C 00 00 00 00 B5 C2 59 50 00 00 00 00
149244D8 37 99 AE 58 00 00 00 00 9B F6 E8 3E 00 00 00 00
149244E8 F3 53 A3 54 00 00 00 00 30 7E 3C 76 00 00 00 00
149244F8 8C 5C 02 6B 00 00 00 00 29 52 07 56 00 00 00 00
14924508 31 FE 45 5F 00 00 00 00 10 A4 DB 59 00 00 00 00
14924518 B5 49 20 63 00 00 00 00 34 B3 69 16 00 00 00 00
14924528 B4 FF 83 30 00 00 00 00 75 09 B9 3D 00 00 00 00
14924538 C1 CE 3D 0D 00 00 00 00 35 56 DC 19 00 00 00 00
14924548 4E C7 4A 4F 00 00 00 00 7B 5D 50 3C 00 00 00 00
14924558 46 8F FA 35 00 00 00 00 F0 E9 04 00 00 00 00 00

Добавлено спустя 1 час 36 минут
f13nd
Большое спасибо за помощь!


 eXeL@B —› Крэки, обсуждения —› FGInt Verify...?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати