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

 eXeL@B —› Вопросы новичков —› Помощь в переводе асм кода
Посл.ответ Сообщение

Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 01 января 2012 15:41 · Поправил: dimka_new
· Личное сообщение · #1

С новым 2012 годом уважаемые форумчане !

Столкнулся с проблемой -требуется перевести ассемблерный код в Делфи\паскаль

Code:
  1. 0046239B   .  E8 9407FAFF   CALL More.00402B34                 <<Данную функу разобрал
  2. 004623A0   .  75 61         JNZ SHORT More.00462403            <<При правильных символах не прыгаем)
  3. 004623A2   .  BE 01000000   MOV ESI,1
  4. 004623A7   .  A1 E8014700   MOV EAX,DWORD PTR DS:[4701E8]
  5. 004623AC   .  C700 2FCB0400 MOV DWORD PTR DS:[EAX],4CB2F
  6. 004623B2   >  B8 00010000   MOV EAX,100
  7. 004623B7   .  E8 0808FAFF   CALL More.00402BC4                  <<Похоже функция рандомизации - не уверен
  8. 004623BC   .  8BD8          MOV EBX,EAX                                             ?
  9. 004623BE   .  8BC6          MOV EAX,ESI                                             ?
  10. 004623C0   .  B9 14000000   MOV ECX,14                                           ?
  11. 004623C5   .  99            CDQ                                                         ?
  12. 004623C6   .  F7F9          IDIV ECX                                                 ?
  13. 004623C8   .  0FB680 0B1C47>MOVZX EAX,BYTE PTR DS:[EAX+471C0B]    ?
  14. 004623CF   .  0FAFD8        IMUL EBX,EAX                        <<Умножаем наш символ на 4A
  15. 004623D2   .  83C3 0E       ADD EBX,0E                          <<Прибавляем OE
  16. 004623D5   .  81E3 FF000080 AND EBX,800000FF                    <<Прибавляем 800000FF
  17. 004623DB   .  79 08         JNS SHORT More.004623E5     ?
  18. 004623DD   .  4B            DEC EBX                                    ?
  19. 004623DE   .  81CB 00FFFFFF OR EBX,FFFFFF00            ?
  20. 004623E4   .  43            INC EBX                                    ?
  21. 004623E5   >  885C35 9A     MOV BYTE PTR SS:[EBP+ESI-66],BL    ?
  22. 004623E9   .  3A9E 1F1C4700 CMP BL,BYTE PTR DS:[ESI+471C1F]    ?
  23. 004623EF   .  75 06         JNZ SHORT More.004623F7     ?
  24. 004623F1   .  C645 FF FF    MOV BYTE PTR SS:[EBP-1],0FF         <<!!!Требуется попасть сюда
  25. 004623F5   .  EB 06         JMP SHORT More.004623FD
  26. 004623F7   >  C645 FF 00    MOV BYTE PTR SS:[EBP-1],0
  27. 004623FB   .  EB 06         JMP SHORT More.00462403
  28. 004623FD   >  46            INC ESI
  29. 004623FE   .  83FE 64       CMP ESI,64
  30. 00462401   .7C AF         JL SHORT More.004623B2
  31. 00462403   >  33C0          XOR EAX,EAX


С ассемблером не дружу - вроде разобрал всю процедуру генерации серийника, но нарвался на непонятный код (выделен символом ?)




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 01 января 2012 15:58
· Личное сообщение · #2

не можешь перевести, рипай код

-----
[nice coder and reverser]


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

Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 января 2012 16:35
· Личное сообщение · #3

004623D5 . 81E3 FF000080 AND EBX,800000FF <<Прибавляем 800000FF

в этой строке не прибавление, а обнуление некоторых бит. aNd вместо aDd

Открой это место в ида про и нажми ф5 - получишь свой сишный код

004623DD . 4B DEC EBX ?
004623DE . 81CB 00FFFFFF OR EBX,FFFFFF00 ?
004623E4 . 43 INC EBX

вот это похоже на работу со знаком. Может перевод int8 в int32? Вобщем, посмотри хексрейс, там все увидишь



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 января 2012 16:48 · Поправил: MSoft
· Личное сообщение · #4

Code:
  1. 004623B7   .  E8 0808FAFF   CALL More.00402BC4                  <<Похоже функция рандомизации - не уверен
  2. 004623BC   .  8BD8          MOV EBX,EAX


это не функция рандомизации. Судя по всему, получает нужный совершенно определенный байт. Может введенное имя?

Code:
  1. 004623BE   .  8BC6          MOV EAX,ESI                                             ?
  2. 004623C0   .  B9 14000000   MOV ECX,14                                           ?
  3. 004623C5   .  99            CDQ                                                         ?
  4. 004623C6   .  F7F9          IDIV ECX


esi - счетчик. Тут он "выравнивается", чтобы быть индексом в таблице.

Code:
  1. 004623C8   .  0FB680 0B1C47>MOVZX EAX,BYTE PTR DS:[EAX+471C0B]    ?


это та самая таблица. Судя по всему, имеет размер 0х20 байт. Т.е. берется индекс текущего байта, если он больше 20, то грубо говоря он обнуляется, потом из этой таблицы берется байт с этим индексом.

Code:
  1. 004623CF   .  0FAFD8        IMUL EBX,EAX                        <<Умножаем наш символ на 4A
  2. 004623D2   .  83C3 0E       ADD EBX,0E                          <<Прибавляем OE
  3. 004623D5   .  81E3 FF000080 AND EBX,800000FF                    <<Прибавляем 800000FF
  4. 004623DB   .  79 08         JNS SHORT More.004623E5     ?


Вот тут число, которое получено в функции "рандомизации" (как ты ее назвал), умножается на тот самый байт из таблицы, приьавляется число 0Е, обнуляются все байты, кроме 8000000ФФ. Судя по всему, просто проверяется, не стал ли символ отрицательным. Если нет, тогда идет прыжок

Code:
  1. 004623DD   .  4B            DEC EBX                                    ?
  2. 004623DE   .  81CB 00FFFFFF OR EBX,FFFFFF00            ?
  3. 004623E4   .  43            INC EBX


Если байт стал отрицательным, скорее всего он расширяется до дворда. Мусорный код компилятора скорее всего.

Code:
  1. 004623E5   >  885C35 9A     MOV BYTE PTR SS:[EBP+ESI-66],BL    ?
  2. 004623E9   .  3A9E 1F1C4700 CMP BL,BYTE PTR DS:[ESI+471C1F]    ?


тут полученный байт сохраняется в локальную переменную, потом сравнивается с другой таблицей. Если не равен, идет прыжок



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 января 2012 16:55 · Поправил: MSoft
· Личное сообщение · #5

dword counter = 1;
dword X = call 00402BC4

X = ((471C0B[counter mod 0x20] * X) + 0E) & 0xFF
if (X == 471C1F[counter])
{
004623F1 . C645 FF FF MOV BYTE PTR SS:[EBP-1],0FF <<!!!Требуется попасть сюда
004623F5 . EB 06 JMP SHORT More.004623FD
}

Вот примерно так это выглядит на чем-то, что отдаленно напоминает си и паскать одновременно
П.С.: перепроверь, я могу ошибаться



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 01 января 2012 17:02 · Поправил: dimka_new
· Личное сообщение · #6

MSoft

Да действительно по поводу Call - моя ошибка там формируется значение 4A

Пробежался еще раз под отладчиком, получил

Code:
  1. 004623CF   .  0FAFD8        IMUL EBX,EAX
  2. EAX=31 (выбрал символ 1)
  3. EBX=4A
  4. EBX=E2A
  5.  
  6. 004623D2   .  83C3 0E       ADD EBX,0E
  7. EBX=E38
  8.  
  9. 004623D5   .  81E3 FF000080 AND EBX,800000FF
  10. EBX=38


Твой код сейчас проверю



Ранг: 5.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 января 2012 17:08
· Личное сообщение · #7

dimka_new, а в idapro с hexrays, нелегче засунуть и получить код на С, и разбирать его, я думаю так было бы по легче.



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 01 января 2012 17:33 · Поправил: dimka_new
· Личное сообщение · #8

Блин, проглядел - ниже ESI сравнивается с 64 и идет оператор jl - на 004623B2
То есть как я понимаю с таблицы берутся разные значения - 0x64 раз и если все правильно - зарег
Не догоню только вот это
004623E5 > 885C35 9A MOV BYTE PTR SS:[EBP+ESI-66],BL
004623E9 . 3A9E 1F1C4700 CMP BL,BYTE PTR DS:[ESI+471C1F]
и дальше я думаю, все попрет...



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 января 2012 18:38
· Личное сообщение · #9

Code:
  1. 004623E5 > 885C35 9A MOV BYTE PTR SS:[EBP+ESI-66],BL

это сохранение в локальную переменную. Видимо, где-то дальше используется полученная строка
Code:
  1. 004623E9 . 3A9E 1F1C4700 CMP BL,BYTE PTR DS:[ESI+471C1F]

это сравнение с шаблонной строкой. ESI в обоих случаях выступает как счетчик байт (индекс байта в строке)

П.С.: байт 4А - это символ J. Уверен, это прочитанный логин или че ты там куда вводишь



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 01 января 2012 18:51 · Поправил: dimka_new
· Личное сообщение · #10

MSoft

Не автор хитер - пункта регистрации нет - проверяется наличие файла в каталоге проги,
0046239B . E8 9407FAFF CALL More.00402B34 - здесь строка, причем код первого символа = 06, нашел прогу отображающую непечатные символы - все вкатило
После этой строки добавил 1 - после расчета сдесь
004623E9 . 3A9E 1F1C4700 CMP BL,BYTE PTR DS:[ESI+471C1F]
8 сравнивается с нулем (скажем так с константой 4A)
5B сравнивается с нулем (скажем так с константой DD) ну и т.д.

Код который ты разместил чет не могу вкурить...
На всякий случай (да простят меня модераторы) - вот ссыль ~500Kb http://rghost.ru/35699079
ЗЫ сама прога не важна - главное опыт



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 января 2012 19:11
· Личное сообщение · #11

Ну и толку от этой проги? Я ж те по шагам описал, что делает этот ассемблерный код. Это раз. Во-вторых, ты в хексрейсе этот код смотрел?



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 01 января 2012 19:14
· Личное сообщение · #12

Как бы подумал, что вот:

MSoft пишет:

П.С.: перепроверь, я могу ошибаться


MSoft пишет:
ты в хексрейсе этот код смотрел?

Нет



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

Создано: 01 января 2012 19:38 · Поправил: doctor_flasher
· Личное сообщение · #13

dimka_new, код, что ты дал, - обертка. Возможно, там вообще только стандартные функции Дельфи. Грузишь все это в ИДУ, применяешь сигнатуры нормальные и уже начинаешь анализировать. Через минут двадцать начнешь привыкать к логике компилятора. А если потом еще и в HexRays, то вообще красота может получиться.



Ранг: 22.4 (новичок), 19thx
Активность: 0.020
Статус: Участник

Создано: 01 января 2012 19:49 · Поправил: Johnny Mnemonic
· Личное сообщение · #14

Code:
  1.  0046239B    call       @AStrCmp
  2. >004623A0    jne        00462403
  3.  004623A2    mov        esi,1
  4.  004623A7    mov        eax,[004701E8]; ^RandSeed:Longint
  5.  004623AC    mov        dword ptr [eax],4CB2F
  6.  004623B2    mov        eax,100
  7.  004623B7    call       @RandInt
  8.  004623BC    mov        ebx,eax
  9.  004623BE    mov        eax,esi
  10.  004623C0    mov        ecx,14
  11.  004623C5    cdq
  12.  004623C6    idiv       eax,ecx
  13.  004623C8    movzx      eax,byte ptr [eax+471C0B]; gvar_00471C0B:PShortString
  14.  004623CF    imul       ebx,eax
  15.  004623D2    add        ebx,0E
  16.  004623D5    and        ebx,800000FF
  17. >004623DB    jns        004623E5
  18.  004623DD    dec        ebx
  19.  004623DE    or         ebx,0FFFFFF00
  20.  004623E4    inc        ebx
  21.  004623E5    mov        byte ptr [ebp+esi-66],bl
  22.  004623E9    cmp        bl,byte ptr [esi+471C1F]
  23. >004623EF    jne        004623F7
  24.  004623F1    mov        byte ptr [ebp-1],0FF
  25. >004623F5    jmp        004623FD
  26.  004623F7    mov        byte ptr [ebp-1],0
  27. >004623FB    jmp        00462403
  28.  004623FD    inc        esi
  29.  004623FE    cmp        esi,64
  30. <00462401    jl         004623B2
  31.  00462403    xor        eax,eax

вазъми idr



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 01 января 2012 19:51 · Поправил: dimka_new
· Личное сообщение · #15

Johnny Mnemonic

А интересно код из шапки откуда ? Или вопрос не ко мне ?

doctor_flasher

HexRays никогда не пробовал - показалось, что пара строчек на ассемблере не проблема...
Буду пробовать

Johnny Mnemonic
Сорри запутался, точно с Олли



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

Создано: 01 января 2012 21:08
· Личное сообщение · #16

dimka_new из ольки же

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

Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 03 января 2012 11:37
· Личное сообщение · #17

Вообщем допер как генерируется ключег - сначала формируется строка _SVGame (первый символ непечатаемый - 06), затем любой символ - этот символ умножается на i-значение из таблицы и добавляется E, удаляются два знака спереди - и сравниваются с 30+i символом файла key.reg
И так 0x64 раз
Сейчас пробую все это заавтоматизировать
Прога нафиг не нужна - поспорил с одним товарищем на пузырь коньяка, который выпью с наглой мордой на рождество
Всем спасибо за помощь


 eXeL@B —› Вопросы новичков —› Помощь в переводе асм кода
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати