Сейчас на форуме: igorcauret, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Испорченный алгоритм хеширования?
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 31 января 2015 23:47
· Личное сообщение · #1

Добрый вечер!
Ковыряю небольшую программульку, в которой защита основана на проверке контрольной суммы исполняемого файла. Алгоритм хеширования SHA-512, но у меня почему-то не сходятся хеши генерируемые программой и генератором онлайн. Вообще в программе также используется SHA-1\256\384, но лишь 1\256 отрабатываю правильно. Возможна ли порча алгоритма или же я что-то неправильно делаю?
Начало хеширования:
Code:
  1. 0041B2F0  /$  55            PUSH EBP

Хеширование:
Code:
  1. 0041B3AD  |.  E8 42FBFFFF   CALL FKEX_4_0.0041AEF4


ce87_31.01.2015_EXELAB.rU.tgz - proga.zip




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 февраля 2015 00:01
· Личное сообщение · #2

dex015 пишет:
Начало хеширования:
Code:

0041B2F0 /$ 55 PUSH EBP

Это MD5

-----
Лучше быть одиноким, но свободным © $me




Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2015 00:05
· Личное сообщение · #3

А можно поподробней как определили? По длине вроде не совсем MD5




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 февраля 2015 00:06
· Личное сообщение · #4

По началу кода хеширования, с такой инструкции только он может начинатся.

-----
Лучше быть одиноким, но свободным © $me




Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2015 00:17
· Личное сообщение · #5

И всё же мне кажется, что это SHA-512. Перед началом хеширования, он обращается к константам:
Code:
  1. 0041ADC4  |.  C700 08C9BCF3 MOV DWORD PTR DS:[EAX],F3BCC908





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 01 февраля 2015 00:20
· Личное сообщение · #6

BoRoV
Это жестоко.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 февраля 2015 00:40
· Личное сообщение · #7

ARCHANGEL пишет:
Это жестоко.

А что он хотел, какие исходные данные, такой и ответ.

-----
Лучше быть одиноким, но свободным © $me




Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2015 02:46
· Личное сообщение · #8

BoRoV пишет:
какие исходные данные

А какие исходные данные нужны? Прогу приатачил, адреса где смотреть написал или мне надо было листинг всей проги сюда скопировать?




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 01 февраля 2015 04:11
· Личное сообщение · #9

dex015 пишет:
в которой защита основана на проверке контрольной суммы исполняемого файла

Ну так бряк на CreateFileA и из этого выходи.

dex015 пишет:
Прогу приатачил

На обменник заливать надо (и оригинальную, а не после VMUnpacker'a), а не аттачить сюда.

В конце файла 64 байта - вот на них думаю стоит обратить внимание.

Добавлено спустя 5 минут
Code:
  1. 0041B427  |. /75 1E         JNZ SHORT 0041B447
  2. 0041B429  |. |8B45 FC       MOV EAX, DWORD PTR [EBP-0x4]
  3. 0041B42C  |. |E8 4B7EFEFF   CALL <system.@LStrLen>

Вот тут размер файла - 64 байта

-----
ds




Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2015 04:27
· Личное сообщение · #10

Оригинальная версия :--> Link <--
DimitarSerg пишет:
Ну так бряк на CreateFileA и из этого выходи.

С защитой я уже давно разобрался, пропатчил, с этим проблем нет, вопрос именно в правильности алгоритма, хочу всё-таки понять, что там не так. Видимо hmac.



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

Создано: 01 февраля 2015 12:47
· Личное сообщение · #11

dex015 пишет:
Оригинальная версия :--> Link <--

Очередной говнобот.

-----
TEST YOUR MIGHT





Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 01 февраля 2015 19:39
· Личное сообщение · #12

Code:
  1. 00000001  01  [CODE    ]  0001A8A2  .0041A8A2  00000000          ™y‚Z         Transform 2: MD4, RIPEMD-128, RIPEMD-160, SHA-160
  2. 00000002  01  [CODE    ]  0001A8AD  .0041A8AD  00000000          ЎлЩn         Transform 3: MD4, RIPEMD-128, RIPEMD-160, SHA-160
  3. 00000003  01  [CODE    ]  0001A8B8  .0041A8B8  00000000          Ьј.Џ         Transform 0: RIPEMD128, RIPEMD160, SHAx
  4. 00000004  01  [CODE    ]  0001A8BE  .0041A8BE  00000000          ЦБbК         SHA160: Transform 1




Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2015 20:06
· Личное сообщение · #13

И что это за код?




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 02 февраля 2015 00:03
· Личное сообщение · #14

Судя по набору констант - SHA-160. (0001A8BE - offset / .0041A8BE - VA etc.)



Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2015 00:55
· Личное сообщение · #15

Не знаю где вы смотрите, но у меня в OllyDbg константы
Code:
  1. 0041ACB2  |.  C700 01234567 MOV DWORD PTR DS:[EAX],67452301





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 февраля 2015 02:10
· Личное сообщение · #16

у вас в Олли, то одни то другие константы
хватит уже угадывать
там 4 штуки хешей SHA1 SHA256 SHA384 SHA512
берите в ручную и разбирайте каждый, при каких условиях они инициализируются(используются)

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


Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 02 февраля 2015 02:32 · Поправил: gazlan
· Личное сообщение · #17

dex015 пишет:
Не знаю где вы смотрите


В файле, разумеется.


3085_02.02.2015_EXELAB.rU.tgz - proggy.7z

reversecode пишет:
там 4 штуки хешей SHA1 SHA256 SHA384 SHA512


Действительно, там ниже по коду:

Code:
  1. 00000049  02  [DATA    ]  00049860  .00449860  00000000982F8A42  ?/ЉB‘D7q   D SHA256: Transform (K set) ; 4*64 = 256 bytes { 0040 SHA_256_Transform_D_64_00449860 }
  2. 0000004A  02  [DATA    ]  00049960  .00449960  0000000022AE28D7  "®(Ч?/ЉB Q SHA384/SHA512: Transform (K set) ; 8*80 = 640 bytes { 0050 SHA_384_512_Transform_Q_80_00449960 }




Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2015 04:18
· Личное сообщение · #18

В проге по всей видимости кривая реализация SHA384\512, хеш SHA-384 цифры 1 там получается:
b23c7bb52a9420a6fa46d8230fe998a7e1c264e195247260e4e0d75c456758fc340bb0814f7395d19ef6c50a9b98bb58
а по всем православным канонам, должен:
47f05d367b0c32e438fb63e6cf4a5f35c2aa2f90dc7543f8a41a0f95ce8a40a313ab5cf36134a2068c4c969cb50db776

SHA1\256 там хеширует правильно.



Ранг: 51.8 (постоянный), 58thx
Активность: 0.03=0.03
Статус: Участник

Создано: 02 февраля 2015 05:47
· Личное сообщение · #19

dex015 пишет:
В проге по всей видимости кривая реализация SHA384\512

Либо специально модифицированная.

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


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 февраля 2015 10:54
· Личное сообщение · #20

никто на делфи велосипедов изобретать не будет
значит либа хешей на паблике
например функция
Code:
  1. CODE:0041A89C _kt1_sub_41A89C proc near               ; CODE XREF: _Update_1_sub_41A8C4+95p
  2. CODE:0041A89C                 cmp     al, 13h
  3. CODE:0041A89F                 jg      short loc_41A8A7
  4. CODE:0041A8A1                 mov     eax, 5A827999h
  5. CODE:0041A8A6                 retn
  6. CODE:0041A8A7 ; ---------------------------------------------------------------------------
  7. CODE:0041A8A7
  8. CODE:0041A8A7 loc_41A8A7:                             ; CODE XREF: _kt1_sub_41A89C+3j
  9. CODE:0041A8A7                 cmp     al, 27h
  10. CODE:0041A8AA                 jg      short loc_41A8B2
  11. CODE:0041A8AC                 mov     eax, 6ED9EBA1h
  12. CODE:0041A8B1                 retn
  13. CODE:0041A8B2 ; ---------------------------------------------------------------------------
  14. CODE:0041A8B2
  15. CODE:0041A8B2 loc_41A8B2:                             ; CODE XREF: _kt1_sub_41A89C+Ej
  16. CODE:0041A8B2                 cmp     al, 3Bh
  17. CODE:0041A8B5                 jg      short loc_41A8BD
  18. CODE:0041A8B7                 mov     eax, 8F1BBCDCh
  19. CODE:0041A8BC                 retn
  20. CODE:0041A8BD ; ---------------------------------------------------------------------------
  21. CODE:0041A8BD
  22. CODE:0041A8BD loc_41A8BD:                             ; CODE XREF: _kt1_sub_41A89C+19j
  23. CODE:0041A8BD                 mov     eax, 0CA62C1D6h
  24. CODE:0041A8C2                 retn
  25. CODE:0041A8C2 _kt1_sub_41A89C endp

очень напоминает код от сюда
--> Link <--
итд
если продолжить гуглить обязательно найдете всю реализацию



Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2015 14:34
· Личное сообщение · #21

Prober пишет:
Либо специально модифицированная.

Не думаю, так как хеш exe файла, впоследствии, ещё немного портится, в нём нули заменяются девятками, то есть после модифицированного алгоритма это как бы бессмысленно. имхо.
reversecode пишет:
никто на делфи велосипедов изобретать не будет

Согласен, я уже тоже думал об этом и хотел посмотреть реализацию SHA в KOL, ну а теперь и по ссылке.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 02 февраля 2015 17:51
· Личное сообщение · #22

Code:
  1. CODE:0041ACA8 sub_41ACA8      proc near               ; CODE XREF: sub_41B208+43p
  2. CODE:0041ACA8                 xor     edx, edx
  3. CODE:0041ACAA                 mov     [eax+24h], edx
  4. CODE:0041ACAD                 xor     edx, edx
  5. CODE:0041ACAF                 mov     [eax+20h], edx
  6. CODE:0041ACB2                 mov     dword ptr [eax], 67452301h ; <$ignsrch> "SHA1 / SHA0 / RIPEMD-160 initialization [32.le.20&]"
  7. CODE:0041ACB8                 mov     dword ptr [eax+4], 0EFCDAB89h
  8. CODE:0041ACBF                 mov     dword ptr [eax+8], 98BADCFEh
  9. CODE:0041ACC6                 mov     dword ptr [eax+0Ch], 10325476h
  10. CODE:0041ACCD                 mov     dword ptr [eax+10h], 0C3D2E1F0h
  11. CODE:0041ACD4                 retn


Code:
  1. CODE:0041ACD8 sub_41ACD8      proc near               ; CODE XREF: sub_41B208+4Cp
  2. CODE:0041ACD8                 xor     edx, edx
  3. CODE:0041ACDA                 mov     [eax+24h], edx
  4. CODE:0041ACDD                 xor     edx, edx
  5. CODE:0041ACDF                 mov     [eax+20h], edx
  6. CODE:0041ACE2                 mov     dword ptr [eax], 6A09E667h ; <$ignsrch> "SHA256 Initial hash value H (0x6a09e667UL) [32.le.32&]"
  7. CODE:0041ACE8                 mov     dword ptr [eax+4], 0BB67AE85h
  8. CODE:0041ACEF                 mov     dword ptr [eax+8], 3C6EF372h
  9. CODE:0041ACF6                 mov     dword ptr [eax+0Ch], 0A54FF53Ah
  10. CODE:0041ACFD                 mov     dword ptr [eax+10h], 510E527Fh
  11. CODE:0041AD04                 mov     dword ptr [eax+14h], 9B05688Ch
  12. CODE:0041AD0B                 mov     dword ptr [eax+18h], 1F83D9ABh
  13. CODE:0041AD12                 mov     dword ptr [eax+1Ch], 5BE0CD19h
  14. CODE:0041AD19                 retn


кстати, есть еще
Code:
  1. CODE:00431860                 dd 0FFFFFFFFh, 40h
  2. CODE:00431868 aAbcdefghijklmn db 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',0
  3. CODE:00431868                                         ; DATA XREF: DATA:off_449D88o
  4. CODE:00431868                                         ; <$ignsrch> "rfc3548 Base 64 Encoding with URL and Filename Safe Alphabet [..62]"


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

Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2015 19:18
· Личное сообщение · #23

ELF_7719116 пишет:
кстати, есть еще

Есть, но пока я не встречал, где он там используется.
reversecode пишет:
очень напоминает код от сюда

Код оттуда, тоже хеширует не правильно, хотя может я как-то не так его использую:
Code:
  1. ShowMessage(TBuffer(TSHA1(TSHA1.Create).ComputeHash('1')).ToHexString);

Получается почему-то: E91FE173F59B063D620A934CE1A010F2B114C1F3



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

Создано: 02 февраля 2015 19:43
· Личное сообщение · #24

я рекомендую смотреть в др. стророну.. берем нотепад.. ищем DCP (модуль DCPCrypt) популярный делфишный.. не находим.. ищем Crypt.. ну находим hiCryptography ищем Hash нахоидм hiHashsum гуглим находим в сорцах
http://hiasm.googlecode.com/svn/elements/delphi/code/hiHashsum.pas
и поддерживаю reversecode.. никто великов особо не изобретает.. есть 3-4 либы которыю юзают.. + варианты виндовой криптоАПИ. ВСЕ. еще рекомендуется поскролить.. высше функи.. там вобще имя либы частенько встречается..

Добавлено спустя 1 минуту
так же замечательно гугляца либы по сообщениям об ошибке которые они выдают

Добавлено спустя 12 минут
и еще.. да.. 100кб экзешник на делфе непакованный попахивает КОЛом

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2015 20:47
· Личное сообщение · #25

VodoleY пишет:
http://hiasm.googlecode.com/svn/elements/delphi/code/hiHashsum.pas

По всей видимости, оно самое.

Добавлено спустя 18 минут
Но там нет реализации SHA, только MD5.
На сайте KOL есть KOLCryptoLIB, но он с SHA отрабатывает правильно.



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

Создано: 02 февраля 2015 21:45 · Поправил: VodoleY
· Личное сообщение · #26

dex015 пишет:
На сайте KOL есть KOLCryptoLIB, но он с SHA отрабатывает правильно.

твоюж девизию.. тебе в идеалии надо САМ МОДУЛЬ. делаеш себе прогу.. типа хелоу вердом.. и вызовом твого SHA компилиш.. и разбираеш СВОЮ прогу. увидеш где засранцы че поменяли, кол-во раундов боксы инит константы и т.д. Т,Е, я пытаюсь ВАМ сказать, что если вы будете алго из асма в хай левел переводить ВЫ напотеете сильно. А найти разницу на порядок проще
я вобщем кому методику поиска рассказывал? ищятся не функи а имена модулей вкомпиленных в прогу, потом ищется их паблик реализация.. выб страдали кодить SHA ? делать свою 25ую модификацию?

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....


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


Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 02 февраля 2015 21:55
· Личное сообщение · #27

Константы все стандартные. Будь модификация намеренной, их бы правили в первую очередь. Так что, не исключена просто случайная ошибка (типа xor -> or. В каком-то коде мне попадалась опечатка '| 0xFF' вместо
'& 0xFF' в одном из раундов). Так что либо сравнивать построчно с исходником, либо параллельно в двух отладчиках смотреть состояние контекста после каждого раунда итд.

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

Ранг: 3.4 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2015 21:58
· Личное сообщение · #28

VodoleY пишет:
делаеш себе прогу..

Как раз и пытаюсь это сделать, скачал компилятор с hiasm.com, и вроде там есть SHA.

Добавлено спустя 4 минуты
gazlan пишет:
Так что либо сравнивать построчно с исходником, либо параллельно в двух отладчиках смотреть состояние контекста после каждого раунда итд.

Видимо так, больше ничего и не остаётся.



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

Создано: 02 февраля 2015 23:46
· Личное сообщение · #29

dex015 пишет:
Видимо так, больше ничего и не остаётся.

создавал похожую тему - алгоритм был md5 с солью, тоже Delphi - так и не смог подобрать подходящую реализацию
в итоге, быстрее оказалось перенести код asm вставками

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

Ранг: 196.0 (ветеран), 72thx
Активность: 0.140.02
Статус: Участник

Создано: 03 февраля 2015 01:27
· Личное сообщение · #30

dex015 пишет:
http://hiasm.googlecode.com/svn/elements/delphi/code/hiHashsum.pas

Хоть бы погуглил, что это такое hiasm это не компилятор, а конструктор.Насколько я помню лет 5-6 назад там использовался компилятор fpc и кол, отсюда такой размер маленький. Это я к чему, в нём программы строятся из готовых блоков, поэтому изменить существующий компонент (например md5) изменить не так то легко. Поэтому скорее всего считывается там хеши обычно, а потом их уже модифицируют.

| Сообщение посчитали полезным: dex015
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Испорченный алгоритм хеширования?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати