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

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

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

Создано: 08 октября 2011 03:00
· Личное сообщение · #1

Здраствуйте. У меня возникла проблема с поиском алгоритма проверки регистрационного номера в програме, которая находится в аттаче.
Я нашел место где считывается код:
0047769C >/. 55 PUSH EBP ; <-TfmEnterKey@edCDKeyKeyPress
0047769D |. 8BEC MOV EBP,ESP
0047769F |. 6A 00 PUSH 0
004776A1 |. 53 PUSH EBX
004776A2 |. 8BD9 MOV EBX,ECX
004776A4 |. 33C0 XOR EAX,EAX
004776A6 |. 55 PUSH EBP
004776A7 |. 68 EF764700 PUSH <->System.@HandleFinally;>
004776AC |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004776AF |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004776B2 |. 8A03 MOV AL,BYTE PTR DS:[EBX]
004776B4 >|. E8 FFB7F8FF CALL <system.UpCase> ; ->System.UpCase(Char):Char;
004776B9 |. 8803 MOV BYTE PTR DS:[EBX],AL
004776BB |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004776BE |. 8A13 MOV DL,BYTE PTR DS:[EBX]
004776C0 >|. E8 97CFF8FF CALL <system.@LStrFromChar> ; ->System.@LStrFromChar(String;String;Char);
004776C5 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004776C8 |. BA 04774700 MOV EDX,<aQp2awes7d3f8_1>
004776CD >|. E8 A6D3F8FF CALL <system.@LStrPos> ; ->System.@LStrPos;
004776D2 |. 85C0 TEST EAX,EAX
004776D4 |. 75 03 JNZ SHORT <loc_4776D9>
004776D6 |. C603 00 MOV BYTE PTR DS:[EBX],0
004776D9 >|> 33C0 XOR EAX,EAX
004776DB |. 5A POP EDX
004776DC |. 59 POP ECX
004776DD |. 59 POP ECX
004776DE |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004776E1 |. 68 F6764700 PUSH <loc_4776F6>
004776E6 >|> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004776E9 >|. E8 86CDF8FF CALL <system.@LStrClr> ; ->System.@LStrClr(void;void);
004776EE \. C3 RETN

Но на этом всё.
Подскажите хотя бы направление.

b0c4_08.10.2011_EXELAB.rU.tgz - сходинки.rar




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 08 октября 2011 10:21 · Поправил: neomant
· Личное сообщение · #2

Поздравляю, вы нашли обработчик нажатия клавиши в полях ввода кода активаци продукта. Обратите внимание на это:
Code:
  1. 004776C5 MOV EAX,DWORD PTR SS:[EBP-4]
  2. 004776C8 MOV EDX,aQp2awes7d3f8_1
  3. 004776CD CALL <system.@LStrPos>
Это проверка на допустимость вводимого символа. Это уже многое даёт. Возвращайтесь из этой функции. Если символ допустим, он где-то будет добавляться к общему коду, после чего код будет проходить проверку. В вашем случае я бы поступал именно так или ориентировался на активацию кнопки "Далее".

-----
Следуй за белым кроликом




Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 08 октября 2011 10:59
· Личное сообщение · #3

Ну какое может быть направление, как не вперёд? После ввода данных надо нажать кнопку "next" (или как она там называется), вот и смотри ее обработчик.



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

Создано: 08 октября 2011 15:44
· Личное сообщение · #4

neomant пишет:
Это проверка на допустимость вводимого символа. Это уже многое даёт. Возвращайтесь из этой функции. Если символ допустим, он где-то будет добавляться к общему коду, после чего код будет проходить проверку. В вашем случае я бы поступал именно так или ориентировался на активацию кнопки "Далее".

Спасибо за ответ, но как я понимаю в самом обработчике TfmEnterKey@edCDKeyKeyPress активация кнопки не происходит. Там есть только функции:
1. 004776A7 |. 68 EF764700 PUSH <->System.@HandleFinally;>
2. 004776B4 >|. E8 FFB7F8FF CALL <system.UpCase> ; ->System.UpCase(Char):Char; - я так понял что это функция перевода символов в верхний регистр;
3. 004776C0 >|. E8 97CFF8FF CALL <system.@LStrFromChar> ; ->System.@LStrFromChar(String;String;Char); - перевод символов в строку;
4. 004776CD >|. E8 A6D3F8FF CALL <system.@LStrPos> ; ->System.@LStrPos; - проверка символа на принадлежность его к символам строки QP2AWES7D3F8YH1JKT5LZXC4VRBUN69M
5. 004776E9 >|. E8 86CDF8FF CALL <system.@LStrClr> ; ->System.@LStrClr(void;void); - функция очистки строки.
Я думал что проверка рег. номера и активация кнопки должна вызыватся из обработчика TfmEnterKey@edCDKeyKeyPress, потому что кнопка не активируется если полностью введенный номер неверный. То-есть я хочу сказать что кнопка "далее" не активна даже когда вводится полностью номер а не один символ.
Я также думаю что активация кнопки должна происходить где-то здесь:
004693E4 >/. 55 PUSH EBP
004693E5 |. 8BEC MOV EBP,ESP
004693E7 |. 83C4 F8 ADD ESP,-8
004693EA |. 56 PUSH ESI
004693EB |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX
004693EE |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
004693F1 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
004693F4 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004693F7 |. E8 C0CFFDFF CALL <Controls.TWinControl.CMEnabledChanged> ; EnableWindow
004693FC |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004693FF |. 66:BE B1FF MOV SI,0FFB1
00469403 |. E8 E8A4F9FF CALL <system.@CallDynaInst>
00469408 |. 5E POP ESI
00469409 |. 59 POP ECX
0046940A |. 59 POP ECX
0046940B |. 5D POP EBP
0046940C \. C3 RETN

Но как узнать при каких условиях?
Заранее благодарен за помощь.



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 08 октября 2011 18:20
· Личное сообщение · #5

А может здесь?
Code:
  1. 004778F6    call       004718F4
  2.  004778FB    mov        edx,dword ptr ds:[479F8C]; ^gvar_0047BC5D
  3.  00477901    mov        byte ptr [edx],al
  4.  00477903    mov        edx,dword ptr ds:[479F8C]; ^gvar_0047BC5D
  5.  00477909    mov        dl,byte ptr [edx]
  6.  0047790B    mov        eax,dword ptr [ebx+304]; TfmEnterKey.btNext:TdxButton
  7.  00477911    mov        ecx,dword ptr [eax]
  8.  00477913    call       dword ptr [ecx+64]; TControl.SetEnabled


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


Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 08 октября 2011 20:15
· Личное сообщение · #6

А может нет,а может да,а может это всё слова
А может я,а может you,а может я тебя люблю!

(c) Света

-----
Yann Tiersen best and do not fuck


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

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

Создано: 08 октября 2011 23:55
· Личное сообщение · #7

Code:
  1. CODE:004715E1                 cmp     eax, 0Bh

Тут и
Code:
  1. CODE:00471857                 call    sub_47115C

Думаю нужены Бряки !

Далее изучай защиту !

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

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

Создано: 12 октября 2011 01:57
· Личное сообщение · #8

Кто может, пожалуйста, объяснить этот участок кода:
0047189B |. DD00 FLD QWORD PTR DS:[EAX]
0047189D |. D825 EC184700 FSUB DWORD PTR DS:[<flt_4718EC>]
004718A3 |. D81D F0184700 FCOMP DWORD PTR DS:[<flt_4718F0>]
004718A9 |. DFE0 FSTSW AX
004718AB |. 9E SAHF




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 12 октября 2011 02:49
· Личное сообщение · #9

STUDENTUS1985
курим доки
http://ref.x86asm.net/



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

Создано: 12 октября 2011 12:03
· Личное сообщение · #10

- загрузили число с плавающей точкой из восьмибайтового массива (в eax указатель) в xmm0
- вычитаем из xmm0 flt_4718EC, xmm0 результат вычитания
- сверяем xmm0 с flt_4718F0
- сбросили статус в AX
- загрузили биты
...
дальше по идее должен идти условный прыжок

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


Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 октября 2011 12:19
· Личное сообщение · #11

Вообще F... инструкции работают со стеком ST регистров, а не с xmm регистрами.

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

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

Создано: 12 октября 2011 16:00
· Личное сообщение · #12

drone пишет:
- загрузили число с плавающей точкой из восьмибайтового массива (в eax указатель) в xmm0- вычитаем из xmm0 flt_4718EC, xmm0 результат вычитания- сверяем xmm0 с flt_4718F0- сбросили статус в AX- загрузили биты...дальше по идее должен идти условный прыжок

Большое спасибо за информацию.
Да действительно дальше идет условный переход, просто я его что-то опустил.
Просто в этом месте у меня программа идет по ложной ветке.



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

Создано: 14 октября 2011 17:09
· Личное сообщение · #13

С защитой более менее разобрался. Но там есть несколько проверок, которые влияют на результат:
1) 004711DC |. 3B45 E8 CMP EAX,DWORD PTR SS:[EBP-18]
004711DF |. 74 0F JE SHORT <loc_4711F0>

2) 0047189B |. DD00 FLD QWORD PTR DS:[EAX]
0047189D |. D825 EC184700 FSUB DWORD PTR DS:[<flt_4718EC>]
004718A3 |. D81D F0184700 FCOMP DWORD PTR DS:[<flt_4718F0>]
004718A9 |. DFE0 FSTSW AX
004718AB |. 9E SAHF
004718AC |. 76 0C JBE SHORT <loc_4718BA>

3) 004719A2 >|> 8845 F3 MOV BYTE PTR SS:[EBP-D],AL
004719A5 |. 807D F3 00 CMP BYTE PTR SS:[EBP-D],0
004719A9 |. 75 0F JNZ SHORT <loc_4719BA>
.
Я смог подобрать рег номер чтобы удовлетворить первое условие:
PCName=SCHOOL-1
LicID=CR-11111111
ActivationKey=RQQQ-QQR-QQQY

Но другая проверка почему-то при таких условиях ведет программу по "ложному следу".
Я так понимаю что при вводе ActivationKey здесь
004715DC |. E8 5331F9FF CALL <system.@LStrLen>
004715E1 |. 83F8 0B CMP EAX,0B

проходит проверка на ввод всех символов;
Далее идет прыжок
004715E4 |. 74 0F JE SHORT <loc_4715F5>
по которому программа вычисляет некую сумму из вводимой строки по такому алгоритму:
"сумма" ="сумма"*20+"номер символа в эталонной строке"
Еталонная строка: (ASCII "QP2AWES7D3F8YH1JKT5LZXC4VRBUN69M")
Далее в функцию
00471857 |. E8 00F9FFFF CALL <_Unit57.sub_0047115C>
передается эта сумма и PCName=SCHOOL-1 LicID=CR-11111111.
Внутри этой функции два раза вызывается функция
CALL <_Unit57.sub_00470DE8> аргументами первый раз есть наша "сумма" и имя компьютера, результат записывается в ту же "сумму", а второй раз аргументами есть наша "сумма" и LicID и опять результат сохраняется в пременную "сумма".
А дальше я запутался.
Помогите разобратся, пожалуйста, или найти рег номер на PCName=SCHOOL-1 LicID=CR-11111111.



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

Создано: 14 октября 2011 17:56
· Личное сообщение · #14

STUDENTUS1985 пишет:
или найти рег номер

Пропатчить Не Проще ?!



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

Создано: 14 октября 2011 19:39
· Личное сообщение · #15

Tyra пишет:
Пропатчить Не Проще ?!

Дело в том что эта программа - это только форма для регистрации. Созданый с помощью неё ini-файл проверяется кучей других программ которые входят в пакет. Так что не выйдет.



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

Создано: 14 октября 2011 22:18
· Личное сообщение · #16

STUDENTUS1985 пишет:
Так что не выйдет.

Судя по всему Защита самописная.
Рекомендую определить , что и как зашито в Рег.Номере(минимум Дата и Проверка ИД КОДа).
Далее писать мини брут или реверсить.


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