Сейчас на форуме: padad42664, kris_sexy, site-pro, vasilevradislav (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› USB Lyzer 1.0 (MFC)
Посл.ответ Сообщение

Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 13:48 · Поправил: cppasm
· Личное сообщение · #1

Привет.
В общем есть прога - залил сюда http://dump.ru/files/h/h23486100/ http://dump.ru/files/h/h23486100/ (1.1Мб)
Анализатор USB трафика. Как заведено триал на 30 дней...
Стал копатся, пакеров протов нету, Visual C++ с Debug info, по коду видно что юзали MFC.
В общем хочу ключген сделать, но проблема в том что не могу найти где оно введённый ключ читает
Для ввода ключа создаётся диалог при помощи CreateDialogIndirectParamW.
Процедура создания диалога находится тут: 42F700h
Процедура обработки сообщений диалога 468CA7h:

00468CA7 . 817C24 08 1001>CMP DWORD PTR SS:[ESP+8],110 ; RegCodeDlgProc
00468CAF . 75 2B JNZ SHORT USBlyzer.00468CDC
00468CB1 . FF7424 04 PUSH DWORD PTR SS:[ESP+4]
00468CB5 . E8 54C9FFFF CALL USBlyzer.0046560E
00468CBA . 50 PUSH EAX
00468CBB . 68 38E54900 PUSH USBlyzer.0049E538
00468CC0 . E8 9EB3FFFF CALL USBlyzer.00464063
00468CC5 . 59 POP ECX
00468CC6 . 85C0 TEST EAX,EAX
00468CC8 . 59 POP ECX
00468CC9 . 74 0C JE SHORT USBlyzer.00468CD7
00468CCB . 8B10 MOV EDX,DWORD PTR DS:[EAX]
00468CCD . 8BC8 MOV ECX,EAX
00468CCF . FF92 BC000000 CALL DWORD PTR DS:[EDX+BC]
00468CD5 . EB 07 JMP SHORT USBlyzer.00468CDE
00468CD7 > 6A 01 PUSH 1
00468CD9 . 58 POP EAX
00468CDA . EB 02 JMP SHORT USBlyzer.00468CDE
00468CDC > 33C0 XOR EAX,EAX
00468CDE > C2 1000 RETN 10
00468CE1 . B8 58E54900 MOV EAX,USBlyzer.0049E558
00468CE6 . C3 RETN

Как видно обрабатывает только WM_INITDIALOG.
WM_COMMAND, WM_KEYDOWN, WM_CHAR нету вообще...
После создания диалога тоже нигде не видно чтения введённой строки :/
Вот собственно вопрос - кто чего скажет, как оно рег код читает?
Может у кого опыта больше, IDA грит что это MFC.

Момент второй, прога валится тут:
0042F745 |. E8 B89A0300 CALL USBlyzer.00469202 ; SerialDlg
0042F74A |. 83F8 01 CMP EAX,1
0042F74D |. 75 79 JNZ SHORT USBlyzer.0042F7C8
0042F74F |. 8B4424 64 MOV EAX,DWORD PTR SS:[ESP+64]
0042F753 |. 85C0 TEST EAX,EAX
0042F755 |. 74 43 JE SHORT USBlyzer.0042F79A <--------------- тут переход должен не выполниться

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

0042DBE0 /$ 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
0042DBE4 |. 56 PUSH ESI
0042DBE5 |. 50 PUSH EAX
0042DBE6 |. 8BF1 MOV ESI,ECX
0042DBE8 |. 68 82000000 PUSH 82
0042DBED |. E8 5BB50300 CALL USBlyzer.0046914D ; CDialog::CDialog(int, CObject *)
0042DBF2 |. 33C0 XOR EAX,EAX
0042DBF4 |. C706 780D4800 MOV DWORD PTR DS:[ESI],USBlyzer.00480D78 ; ASCII "YcG"
0042DBFA |. 8946 5C MOV DWORD PTR DS:[ESI+5C],EAX
0042DBFD |. 8946 60 MOV DWORD PTR DS:[ESI+60],EAX <------- вот она
0042DC00 |. 8BC6 MOV EAX,ESI
0042DC02 |. 5E POP ESI
0042DC03 \. C2 0400 RETN 4

Т.е. в неё всегда пишется ноль, других обращений нету...
Может эту прогу вообще нормально зарегать нельзя, я уже не врубаюсь что-то...
Уже даже просто интересно, да и прога нужна...



Ранг: 161.0 (ветеран)
Активность: 0.120
Статус: Участник

Создано: 10 августа 2007 13:58
· Личное сообщение · #2

ставь бряки на GetDlgItemTextA или GetDlgItemTextW..



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

Создано: 10 августа 2007 14:06
· Личное сообщение · #3

На Взоре 9 августа выложена SysNucleus USBTrace 2.0.28.
Посмотри, может устроит и заморачиваться не надо будет.



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 14:15 · Поправил: cppasm
· Личное сообщение · #4

kaiZer пишет:
ставь бряки на GetDlgItemTextA или GetDlgItemTextW..

Сча бум пробовать...
xlETO пишет:
На Взоре 9 августа выложена SysNucleus USBTrace 2.0.28.
Посмотри, может устроит и заморачиваться не надо будет.

Дело интереса
USBTrace я вчера сам закейгенил, а точнее модифицировал свой кейген от версии 1.3
Возможности у них немного разные, в смысле они в разные места фильтры инсталят - USBTrace не всё ловит.

---- Добавлено: ----
На GetDlgItemInt, GetDlgItemTextA, GetDlgItemTextW не брякаеццо




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 10 августа 2007 14:20
· Личное сообщение · #5

0042DCED . E8 4E000300 CALL USBlyzer.0045DD40 ; \USBlyzer.0045DD40
0042DCF2 . 3BC3 CMP EAX,EBX
0042DCF4 . 0F84 06020000 JE USBlyzer.0042DF00

Первый Call вроде проверяет... потом JE не должен сработать (EAX<>EBX)

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 14:25
· Личное сообщение · #6

Isaev оч похоже что оно
а как нашёл - типа удочку давай а не рыбу



Ранг: 161.0 (ветеран)
Активность: 0.120
Статус: Участник

Создано: 10 августа 2007 14:56
· Личное сообщение · #7

вот собсно и интересный код:

0042F745 |. E8 B89A0300 CALL USBlyzer.00469202
0042F74A 83F8 01 CMP EAX,1
0042F74D |. 75 79 JNZ SHORT USBlyzer.0042F7C8
0042F74F 8B4424 64 MOV EAX,DWORD PTR SS:[ESP+64] - в ЕАХ кладется 0, а надо 1
0042F753 85C0 TEST EAX,EAX
0042F755 74 43 JE SHORT USBlyzer.0042F79A - если ЕАХ=0, то непрально
0042F757 |. 8B4424 78 MOV EAX,DWORD PTR SS:[ESP+78]
0042F75B |. BE 982E4B00 MOV ESI,USBlyzer.004B2E98 ; UNICODE "Thank you for registration! Please restart the application to complete the registration."
0042F760 |. 85C0 TEST EAX,EAX
0042F762 |. 75 05 JNZ SHORT USBlyzer.0042F769
0042F764 |. BE 602E4B00 MOV ESI,USBlyzer.004B2E60 ; UNICODE "Thank you for registration!"



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 14:58
· Личное сообщение · #8

Да, и тут у меня попутно вопрос.
Я полазил, посметрел - скорее всего место нашлось по GetWindowTextW
Вот как раз по этому поводу вопрос, давно спросить хотел
В общем если поставить бряк на GetWindowTextA/W - он будет срабатывать сразу при активации окна.
В смысле с окна Olly переключаемся на прогу - и сразу бряк срабатывает.
Так нифига отлаживать вообще не возможно.
Так вопрос:
1. какого фига оно срабатывает постоянно
2. мож я бряк неправильно как-то ставлю, или условный бряк ставить?



Ранг: 161.0 (ветеран)
Активность: 0.120
Статус: Участник

Создано: 10 августа 2007 15:08
· Личное сообщение · #9

cppasm
Ну дык это походу просто считывается текст в окне, а не считывается серийник..
А мот затем и серийник..



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 15:15
· Личное сообщение · #10

kaiZer пишет:
вот собсно и интересный код:

Дык собстна я этот код в первом посте и привёл.
Вот только в EAX там единица никак не получится, потому как где оно в ноль устанавливается я писал, а вот где не в ноль - так и не нашёл.
kaiZer пишет:
Ну дык это походу просто считывается текст в окне, а не считывается серийник..
А мот затем и серийник..

В данном случае потом и серийник тоже, только вот вопрос как его отлаживать если при переходе в окно проги сразу ловим бряк?



Ранг: 161.0 (ветеран)
Активность: 0.120
Статус: Участник

Создано: 10 августа 2007 15:27
· Личное сообщение · #11

Ну значит этот бряк не катит..
А ЕАХ вообще можно подменить, но надо прально подменить..



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 15:46
· Личное сообщение · #12

kaiZer пишет:
Ну значит этот бряк не катит..

Дык он во всех прогах таким макаром не катит - но как-то же люди юзают.
Вот и вопрос - как?
kaiZer пишет:
А ЕАХ вообще можно подменить, но надо прально подменить..

Не покатит заменить - оно при старте в другом месте где-то проверяет ключ...



Ранг: 161.0 (ветеран)
Активность: 0.120
Статус: Участник

Создано: 10 августа 2007 16:07
· Личное сообщение · #13

чаще всего юзают GetDlgItemTextA, GetDlgItemTextW..
плюс анализ кода



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 16:40
· Личное сообщение · #14

kaiZer пишет:
чаще всего юзают GetDlgItemTextA, GetDlgItemTextW..

Но тут оно не катит...

Ладно, может Isaev расскажет как это место нашёл - подождём.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 10 августа 2007 18:32
· Личное сообщение · #15

Чтобы найти куда записывается строка, я ввожу обычно в окне что-нибудь zB: "123666", потом ничего не нажимая в Olly в Memory map поиск по этой строке... и мы уже знаем где она будет после ввода...
Можно бряк на доступ к памяти ставить и ловить проверку...
Если после появления окна (где код вводишь) нажать F12, потом держишь F8, пока не начнёшь крутиться в цикле... Это цикл обработки окном сообщений... Здесь могут проверяться вводимые данные, отфильтровываться ненужые символы или даже налету кей генериться (когда кнопка Reg активируется только при правильном Seriale).
Это всего лишь мои предположения, до которых я дошёл "методом научного тыка"... Да исправят меня Guru!

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 10 августа 2007 23:22
· Личное сообщение · #16

Ясно, как-то так я и делаю...
Просто бывает сразу отлавливаеш, а бывает попарится надо.
В общем спасибо.
Топ пока не закрывайте плз - может ещё вопросы будут по генерации



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 13 августа 2007 16:56
· Личное сообщение · #17

Как знал что вернусь :/
В общем расковырял я алго - немного даже интересно
Но счас всё упёрлось в крипто апи, а конкретно юзается:
CryptImportKey
CryptCreateHash
CryptHashData
CryptVerifySignature
CryptDestroyHash
Столкнулся впервые, по сему вопрос - нет ли у кого простенького примера как оно используется?
И второе, что за алгоритм шифрования - в CryptCreateHash передаётся AlgID=0x8003
В h от VS6 что-то такого не нахожу...




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 августа 2007 17:03
· Личное сообщение · #18

Private Declare Function CryptCreateHash Lib "advapi32.dll" _
(ByVal hProv As Long, ByVal algid As Long, _
ByVal hkey As Long, ByVal dwFlags As Long, _
ByRef phHash As Long) As Long

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 13 августа 2007 17:11
· Личное сообщение · #19

Эээ...
Это я на MSDN посмотрел.
Мне бы примерчик как оно работает...

Ну ID расшифровывается так:
ALG_CLASS=4 (ALG_CLASS_HASH)
ALG_TYPE =0 (ALG_TYPE_ANY)
ALG_SID =3 (ALG_SID_RSA_ENTRUST)

Помогло мне не сильно...
Чё это за алгоритм и есть ли смысл связываться??
Меня пугает RSA в названии алго, потому что в ресурсах у проги ключ лежит длиной в 128 байт...
Правда как конкретно она его юзает я пока не разобрался.

Возможно ли обратить эти функции??
Т.е. ключ мой прога практически хавает, валится всё на CryptVerifySignature.
Можно ли создать ключ чтоб проходил проверку CryptVerifySignature, что для этого знать надо??



Ранг: 49.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 13 августа 2007 17:27
· Личное сообщение · #20

cppasm, первоисточник: msdn2.microsoft.com/en-us/library/aa380252.aspx



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 13 августа 2007 17:46
· Личное сообщение · #21

Люди, ёлки ну не надо постить ссылки на MSDN!!!
Я тама был. Только что толку?
Ясно что при помощи CreateHashData добавляются данные в хэш и потом проверяется соответствие при помощи CryptVerifySignature.
Только вот вопрос как мне эти функции обратить...



Ранг: 77.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 13 августа 2007 17:49
· Личное сообщение · #22

cppasm пишет:
вопрос как мне эти функции обратить...

Никак. Только подменив ключ на свой и сгенерив сигнатуру самому.



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 13 августа 2007 21:34
· Личное сообщение · #23

Т.е. кроме патча вариантов нет?
Если да то обидно А вообще авторы ботаны
Я просто кейген хотел сделать.
А так там 30 дней полнофункционально прога работает - патчить 3 строчки и все дела.
Ну при желании можно ещё в ресурсах косметику навести...

Что правда вариантов нету кроме патча ключа???



Ранг: 39.4 (посетитель), 9thx
Активность: 0.01=0.01
Статус: Участник

Создано: 13 августа 2007 23:02 · Поправил: 2nd
· Личное сообщение · #24

>Ну ID расшифровывается так:
>ALG_CLASS=4 (ALG_CLASS_HASH)
>ALG_TYPE =0 (ALG_TYPE_ANY)
>ALG_SID =3 (ALG_SID_RSA_ENTRUST)

нет не так
CALG_MD5 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_MD5); //0x8003



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 14 августа 2007 09:47
· Личное сообщение · #25

2nd пишет:
нет не так
CALG_MD5 = (ALG_CLASS_HASH or ALG_TYPE_ANY or ALG_SID_MD5); //0x8003

Угу, не ту константу взял...
Хотя ALG_SID_RSA_ENTRUST тоже 3.
Ну MD5 это чуть получше.
Никто не в курсе - это классический MD5 или CryptoAPI какую-то модификацию использует??
Есть мысли SAM Inside заюзать для брута...



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 14 августа 2007 13:21
· Личное сообщение · #26

Ладно, ну его нафиг это крипто.
Пропатчил и все дела.
Всем спасибо за участие.
Думаю тему можно прикрыть.


 eXeL@B —› Крэки, обсуждения —› USB Lyzer 1.0 (MFC)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати