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

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

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

Создано: 13 мая 2016 16:23
· Личное сообщение · #1

В двух словах, крякми через GetVolumeInformation проводит махинации с FileSystemNameBuffer и VolumeSerialNumber, создавая отображаемый ID No и проверочный код, который на самом деле просто соединяет FileSystemNameBuffer с VolumeSerialNumber, делит на 4 и пускает через BSWAP . А затем с моим введенным кодом проводятся следующие действия:
Code:
  1. 0040149E  |.  8A06          MOV AL, BYTE PTR DS:[ESI]  //помещяется цифра моего номера
  2. 004014A0  |.  46            INC ESI
  3. 004014A1  |.  3C 02         CMP AL, 2
  4. 004014A3  |.  75 12         JNZ SHORT Crackme1.004014B7
  5. 004014A5  |.  8A06          MOV AL, BYTE PTR DS:[ESI]
  6. 004014A7  |.  F7D2          NOT EDX
  7. 004014A9  |.  46            INC ESI
  8. 004014AA  |.  EB 0B         JMP SHORT Crackme1.004014B7
  9. 004014AC  |>  2C 30         /SUB AL, 30
  10. 004014AE  |.  8D0C89        |LEA ECX, DWORD PTR DS:[ECX+ECX*4]
  11. 004014B1  |.  8D0C48        |LEA ECX, DWORD PTR DS:[EAX+ECX*2]
  12. 004014B4  |.  8A06          |MOV AL, BYTE PTR DS:[ESI]
  13. 004014B6  |.  46            |INC ESI
  14. 004014B7  |>  0AC0           OR AL, AL
  15. 004014B9  |.75 F1         \JNZ SHORT Crackme1.004014AC
  16.  

и получается какое-то значение, которое потом ксорится, рорится и еще чего-то там, но это легко обратимо, и наконец-то сравнивается с моим. Застрял на восстановлении в районе 4014AE и 4014B1. Может математику подзабыл, но не могу как там дальше можно что-то преобразовать в серийник.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 13 мая 2016 16:59 · Поправил: Kindly
· Личное сообщение · #2

g3r0n1m0 пишет:
004014AE |. 8D0C89 |LEA ECX, DWORD PTR DS:[EAX+ECX*2]

LEA указатель, но если ECX = 1, а не адрес, в EAX, например, значения из цикла, то так и будет ECX := EAX+ECX*2
если данные не могут указываться из-за отсутствия адреса, то они не могут быть прочитаны, и эта команда будет выполнять обычную арифметику из имеющихся в регистре значений.

-----
Array[Login..Logout] of Life




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

Создано: 13 мая 2016 17:11 · Поправил: g3r0n1m0
· Личное сообщение · #3

Kindly
ECX изначально нулевой и служит результирующим хранилищем. Но все равно так как идет два подряд уравнения с парой неизвестных (да еще неясно, какая длина серийника у тогда на какой итерации надо остановиться) это сколько комбинаций надо перепробовать. Может проще вырезать код и забрутить.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 13 мая 2016 17:52 · Поправил: Kindly
· Личное сообщение · #4

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

-----
Array[Login..Logout] of Life




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

Создано: 13 мая 2016 18:07 · Поправил: albatros
· Личное сообщение · #5

Kindly так с конца и начинал) далее там вот что творится со значением полученного в ecx и перенесенного в eax:
Code:
  1. 004013C0  /$  60            PUSHAD
  2. 004013C1  |.  C1C0 02       ROL EAX, 2
  3. 004013C4  |.  A3 6D314000   MOV DWORD PTR DS:[40316D], EAX
  4. 004013C9  |.  05 79740000   ADD EAX, 7479
  5. 004013CE  |.  35 33323100   XOR EAX, 313233
  6. 004013D3  |.  C1E0 06       SHL EAX, 6
  7. 004013D6  |.  A3 72314000   MOV DWORD PTR DS:[403172], EAX
  8. 004013DB  |.  61            POPAD
  9. 004013DC  \.  C3            RETN
  10.  

и по выходу сразу сравнение двух преобразований
Code:
  1. 0040128D  |.  8B35 77314000 MOV ESI, DWORD PTR DS:[403177]
  2. 00401293  |.  8B3D 72314000 MOV EDI, DWORD PTR DS:[403172]
  3. 00401299  |.  3BF7          CMP ESI, EDI
  4. 0040129B  |.  74 02         JE SHORT Crackme1.0040129F

конечнее уже некуда




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 14 мая 2016 11:48 · Поправил: Kindly
· Личное сообщение · #6

ну видимо надо начать с преобразования hwid в нужное для сравнения значение, в дельфи примерно так:

Code:
  1.   par1 := $1C705627; {hwid}
  2.   asm
  3.     PUSH EAX
  4.     MOV EAX,par1
  5.     SUB EAX,$0313233
  6.     XOR EAX,$07479
  7.     BSWAP EAX
  8.     SAR EAX,2
  9.     ADD EAX,$044464347
  10.  
  11.     SHR EAX,2
  12.     MOV par1,EAX
  13.     POP EAX
  14.   end;

далее высчитываем серийник под это значение.
на этом пол крякми ящетаю решено

добавлено:
ну вобщем крякми на внимательность, ответный код под мой hwid:
3262759216
в мой код нужно добавить еще нужное количество инструкций кое куда, определите опытным путем
возможно, я где-то не доработал, но не решать же мне крякми за вас, так не научитесь

добавлено еще:
можно и так, но это не будет полноценным кигеном:
где складываются два значения от GetVolumeInformation
00401350 |. 03C3 ADD EAX,EBX
после пишешь
SHR EAX,2
ROR EAX,2
переводишь EAX в десятичную и вот тебе серийник.
для кигена надо раскручивать, но там немного загвоздка с числами и обратимостью SHL, некорректно будет использовать SHR или SAR статично, нужно как-то сравнивать флаговые регистры, по всей видимости (я сам нуб, если что ), ибо обратное смещение не всегда будет правильным на разных hwid.

а вообще тут давно обсуждали...
https://exelab.ru/f/action=vthread&forum=5&topic=13496

-----
Array[Login..Logout] of Life


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


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