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

 eXeL@B —› Вопросы новичков —› crackme и генерация ключа
Посл.ответ Сообщение

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

Создано: 21 сентября 2008 16:24
· Личное сообщение · #1

00401310 |> /803E 00 /CMP BYTE PTR DS:[ESI],0
00401313 |. |74 15 |JE SHORT CRACKME4.0040132A
00401315 |. |8A06 |MOV AL,BYTE PTR DS:[ESI]
00401317 |. |02C1 |ADD AL,CL
00401319 |. |32C1 |XOR AL,CL
0040131B |. |F6F3 |DIV BL
0040131D |. |66:C1E8 08 |SHR AX,8
00401321 |. |04 41 |ADD AL,41
00401323 |. |8807 |MOV BYTE PTR DS:[EDI],AL
00401325 |. |47 |INC EDI
00401326 |. |46 |INC ESI
00401327 |. |41 |INC ECX
00401328 |.^\EB E6 \JMP SHORT CRACKME4.00401310
0040132A |> C607 00 MOV BYTE PTR DS:[EDI],0
0040132D |. 33C0 XOR EAX,EAX
0040132F |. 83F9 00 CMP ECX,0
00401332 |. 74 1A JE SHORT CRACKME4.0040134E
00401334 |. 68 84324000 PUSH CRACKME4.00403284 ; /String2 = "NHB"
00401339 |. 68 84314000 PUSH CRACKME4.00403184 ; |String1 = "1234321"
0040133E |. E8 A1000000 CALL <JMP.&KERNEL32.lstrcmpA> ; \lstrcmpA
00401343 |. 83F8 00 CMP EAX,0
00401346 |. 74 04 JE SHORT CRACKME4.0040134C
00401348 |. 33C0 XOR EAX,EAX
0040134A |. EB 02 JMP SHORT CRACKME4.0040134E
0040134C |> 8BC1 MOV EAX,ECX
0040134E |> 5F POP EDI
0040134F |. 5E POP ESI
00401350 |. C9 LEAVE
00401351 \. C2 0400 RETN 4



Знающие люди помогите разобраться, имеем данный код программы, начинающийся по адресу 00401310 и заканчивая 00401328 вроде бы тута генирируется ключ программы на основе имени, но если мы имеем имя Ami то как видим не правильный серийник ( 1234321 ) сравнивается с NHB, то при вводе его получается всё зарегестрировано, но при использовании другого имени и кода оно так же сверяется но уже не подходит, перечитал кучу имеющихся туториалов, и руководство по ассму но ни как не могу вот это понять, помогите пожалуйста кто чем может, только для таких как я поподробнее если моно спс.
(olly всё делал и доки по оли тоже читал но что то туго идёт как то)



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 сентября 2008 16:29
· Личное сообщение · #2

Скорее всего это не та "самая главная проверка". Если хочешь что бы кто-то помог - выкладывай сам crackme



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

Создано: 21 сентября 2008 17:59 · Поправил: Amido
· Личное сообщение · #3

малясь не то вы правы
00401310 |> /803E 00 /CMP BYTE PTR DS:[ESI],0
00401313 |. |74 15 |JE SHORT CRACKME4.0040132A
00401315 |. |8A06 |MOV AL,BYTE PTR DS:[ESI]
00401317 |. |02C1 |ADD AL,CL
00401319 |. |32C1 |XOR AL,CL
0040131B |. |F6F3 |DIV BL
0040131D |. |66:C1E8 08 |SHR AX,8
00401321 |. |04 41 |ADD AL,41
00401323 |. |8807 |MOV BYTE PTR DS:[EDI],AL
00401325 |. |47 |INC EDI
00401326 |. |46 |INC ESI
00401327 |. |41 |INC ECX
00401328 |.^\EB E6 \JMP SHORT CRACKME4.00401310
0040132A |> C607 00 MOV BYTE PTR DS:[EDI],0
0040132D |. 33C0 XOR EAX,EAX
0040132F |. 83F9 00 CMP ECX,0
00401332 |. 74 1A JE SHORT CRACKME4.0040134E
00401334 |. 68 84324000 PUSH CRACKME4.00403284 ; /String2 = "NHB"
00401339 |. 68 84314000 PUSH CRACKME4.00403184 ; |String1 = "1234321"
0040133E |. E8 A1000000 CALL <JMP.&KERNEL32.lstrcmpA> ; \lstrcmpA
00401343 |. 83F8 00 CMP EAX,0
00401346 |. 74 04 JE SHORT CRACKME4.0040134C
00401348 |. 33C0 XOR EAX,EAX
0040134A |. EB 02 JMP SHORT CRACKME4.0040134E
0040134C |> 8BC1 MOV EAX,ECX
0040134E |> 5F POP EDI
0040134F |. 5E POP ESI
00401350 |. C9 LEAVE
00401351 \. C2 0400 RETN 4



00401334 |. 68 84324000 PUSH CRACKME4.00403284 ; /String2 = "NHB"- вроде бы правильный серийник
00401339 |. 68 84314000 PUSH CRACKME4.00403184 ; |String1 = "1234321" - мой который ввёл
0040133E |. E8 A1000000 CALL <JMP.&KERNEL32.lstrcmpA> ; \lstrcmpA - вроде бы как бы сравнение двух строк идущих выше (String2 String1)

Соответственно вопрос к знающим людям если при вводе в качестве имени используем Ami то при сравнение строк string2 и string1 видим сравнение неправильного серейного номера с NHB пробуем и радость получаем то что хотели верную регистрацию,
но при вводе другого имени и сравнение его с помощью того что выше получаем фиг с маслом, вот и вопрос как же вычмсляется данный ключ на основе другого имени. Просьба не пинать так как только учусь и вот это дается с трудом вычисление серийного номера на основе имени уже на первых парах, и еще раз извините если что не так.

p/s Если не трудно и можно поподробнее с раскоментированы строчкми для начинающих или объяснение как оно генерируется.
p.p.s спс еще раз за прочтение сего опуса и за отнятое у вас время на таких как мы только начинающих сее деяние и творение в исследование программ.

43e1_21.09.2008_CRACKLAB.rU.tgz - CRACKME4.EXE



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 сентября 2008 18:10 · Поправил: tempread
· Личное сообщение · #4

У меня все подходит - пара
tempread
MZFIKHTE

Просьба более подробно сформулировать вопрос, потому что в крекми все очень очевидно, и работает так,как и должно.



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 сентября 2008 20:19 · Поправил: tempread
· Личное сообщение · #5

Amido
но при вводе другого имени и сравнение его с помощью того что выше получаем фиг с маслом,

Пароль вычисляется из логина в блоке:
Code:
  1. 004012FE  LEA ESI,DWORD PTR DS:[403084]; значение в esi - адрес строки логина
  2. 00401304  LEA EDI,DWORD PTR DS:[403284]; значение в edi - сюда будем писать вычисляемый пароль
  3. 0040130A  XOR EAX,EAX;обнуляем eax
  4. 0040130C  XOR ECX,ECX;обнуляем ecx
  5. 0040130E  MOV BL,1A ;константа 1a
  6. 00401310  CMP BYTE PTR DS:[ESI],0;мы уже дошли до конца строки?
  7. 00401313  JE SHORT CRACKME4.0040132A; тогда прыгаем
  8. 00401315  MOV AL,BYTE PTR DS:[ESI];берем символ из логина(hex)
  9. 00401317  ADD AL,CL;совершаем
  10. 00401319  XOR AL,CL;разные
  11. 0040131B  DIV BL ;математические
  12. 0040131D  SHR AX,8;операции
  13. 00401321  ADD AL,41;с байтом из логина
  14. 00401323  MOV BYTE PTR DS:[EDI],AL;результат записываем как символ пароля
  15. 00401325  INC EDI;увеличиваем указатель на текущий символ логина
  16. 00401326  INC ESI;увеличиваем указатель на будущий символ пароля
  17. 00401327  INC ECX;меняем значение,для "усложнения" пароля
  18. 00401328  JMP SHORT CRACKME4.00401310;прыгаем на вычисление следующего символа пароля
  19. 0040132A  MOV BYTE PTR DS:[EDI],0;сюда попадаем,когда попали на конец строки в логине


Ответил на вопрос?



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

Создано: 21 сентября 2008 20:56
· Личное сообщение · #6

Code:
  1. 00401332 |. 74 1A JE SHORT CRACKME4.0040134E 
  2. 00401334 |. 68 84324000 PUSH CRACKME4.00403284 ; /String2 = "NHB"
  3. 00401339 |. 68 84314000 PUSH CRACKME4.00403184 ; |String1 = "1234321"
  4. 0040133E |. E8 A1000000 CALL <JMP.&KERNEL32.lstrcmpA> ; \lstrcmpA
  5. 00401343 |. 83F8 00 CMP EAX,0 
  6. 00401346 |. 74 04 JE SHORT CRACKME4.0040134C 
  7. 00401348 |. 33C0 XOR EAX,EAX 
  8. 0040134A |. EB 02 JMP SHORT CRACKME4.0040134E 
  9. 0040134C |> 8BC1 MOV EAX,ECX 
  10. 0040134E |> 5F POP EDI 
  11. 0040134F |. 5E POP ESI 
  12. 00401350 |. C9 LEAVE 
  13. 00401351 \. C2 0400 RETN 4


А если поставить вот сюда брэкпоинт 0040133E |. E8 A1000000 CALL <JMP.&KERNEL32.lstrcmpA> ; \lstrcmpA

И нажать на выполнение крекми то получим желаемый рез-тат помоему быстрее или я не прав малясь



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 сентября 2008 21:46
· Личное сообщение · #7

Amido
то получим желаемый рез-тат

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




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 21 сентября 2008 21:50 · Поправил: coderess
· Личное сообщение · #8

И нажать на выполнение крекми то получим желаемый рез-тат помоему быстрее или я не прав малясь

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

В действительности же, блок выше вычесляет серийный номер по введенному имени, а WinAPI функция lstrcmp
сравнивает сгенерированный номер с введенным тобой, если ты ставишь бряк на неё, то видишь её аргументы.

//Опоздал я

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




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

Создано: 21 сентября 2008 22:30
· Личное сообщение · #9

Да не вроде не опоздал честно я туп как пробка но познания есть и желание есть, охото хоть чему то научиться и будущая специальность вроде бы как то этого требует.
Code:
  1. 00401315  MOV AL,BYTE PTR DS:[ESI]; - то есть если первый символ имени A то берём вроде бы как 41
  2. 00401317  ADD AL,CL; - вот тут прибавляем к AL(41) вроде бы CL - номер символа имени
  3. 00401319  XOR AL,CL; - хорим AL с CL
  4. 0040131B  DIV BL ; - вот тут загвоздка вроде бы как бы делим то что получили в рез-те в AL делим на BL
  5. 0040131D  SHR AX,8; - ?
  6. 00401321  ADD AL,41; - прибавление к всему вот этому то что в AL 41
  7. 00401323  MOV BYTE PTR DS:[EDI],AL; И после всего этого получим первый символ пароля и так пока не кончится имя ввёденное пользователем


ВОТ вроде бы так или где то ошибся при написании коментариев в этом чуде.



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 21 сентября 2008 22:52 · Поправил: tempread
· Личное сообщение · #10

Amido
Обрати внимание на следующее - в общем случае,что бы получить нормальный пароль из логина,нужно что бы символы пароля были буквенно-числовые. Иначе пароль получится такой,что его с клавы и набрать то нельзя будет

Поэтому константа 0x1a(живет в bl), сложение al и числа 0x41(по адресу 401321) - это не произвольные числа.
Как ты верно подметил, 0x41 - это сивол 'A'. А теперь вспоминаем, что в ASCII таблице именно с этого символа начинаются алфавитные символы...
0x1a - это количество букв в английском алфавите... Дальше уже ясен алгоритм крекми?




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 22 сентября 2008 10:13
· Личное сообщение · #11

tempread

Обрати внимание на следующее - в общем случае,что бы получить нормальный пароль из логина,нужно что бы символы пароля были буквенно-числовые

Че то крэкми splish ломал, так там на выходе ключ получается следующего содержания: 1
при чем:
 - HEX(1)
 - HEX(2)
 - HEX(3)
 - HEX(4)

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes



 eXeL@B —› Вопросы новичков —› crackme и генерация ключа
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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