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

 eXeL@B —› Основной форум —› Помогите разобратся с алгоритмом.
Посл.ответ Сообщение

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

Создано: 23 января 2007 02:46
· Личное сообщение · #1

Хочу закейгенить, но не пойму как тут что реализовано.

0051192C 55 push ebp
0051192D 8BEC mov ebp, esp
0051192F 33C9 xor ecx, ecx
00511931 51 push ecx
00511932 51 push ecx
00511933 51 push ecx
00511934 51 push ecx
00511935 51 push ecx
00511936 51 push ecx
00511937 51 push ecx
00511938 51 push ecx
00511939 53 push ebx
0051193A 56 push esi
0051193B 57 push edi
0051193C 8BF0 mov esi, eax
0051193E 33C0 xor eax, eax
00511940 55 push ebp

* Possible String Reference to: 'é¯'ïÿëÑ_^[‹å]Ã'
|
00511941 68941A5100 push $00511A94

***** TRY
|
00511946 64FF30 push dword ptr fs:[eax]
00511949 648920 mov fs:[eax], esp
0051194C 33DB xor ebx, ebx
0051194E 8D55EC lea edx, [ebp-$14]

* Reference to control name_txt : TEdit
|
00511951 8B860C030000 mov eax, [esi+$030C]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
00511957 E85C6CF5FF call 004685B8
0051195C 8B45EC mov eax, [ebp-$14]
0051195F 8D55F4 lea edx, [ebp-$0C]

* Reference to: SysUtils.Trim(AnsiString):AnsiString;overload;
|
00511962 E8B57CEFFF call 0040961C
00511967 8D55E8 lea edx, [ebp-$18]

* Reference to control pass_txt : TEdit
|
0051196A 8B8610030000 mov eax, [esi+$0310]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
00511970 E8436CF5FF call 004685B8
00511975 8B45E8 mov eax, [ebp-$18]
00511978 8D55F0 lea edx, [ebp-$10]

* Reference to: SysUtils.Trim(AnsiString):AnsiString;overload;
|
0051197B E89C7CEFFF call 0040961C

* Reference to control lic_cmb : TComboBox
|
00511980 8B861C030000 mov eax, [esi+$031C]
00511986 8B10 mov edx, [eax]
00511988 FF92CC000000 call dword ptr [edx+$00CC]
0051198E 8BF8 mov edi, eax
00511990 8BD7 mov edx, edi
00511992 8B8628030000 mov eax, [esi+$0328]

* Reference to: Classes.TList.Get(TList;Integer):Pointer;
|
00511998 E8EBB9F0FF call 0041D388
0051199D 8B5004 mov edx, [eax+$04]
005119A0 8D45FC lea eax, [ebp-$04]

* Reference to: System.@LStrLAsg(void;void;void;void);
|
005119A3 E81C30EFFF call 004049C4
005119A8 8BD7 mov edx, edi
005119AA 8B8628030000 mov eax, [esi+$0328]

* Reference to: Classes.TList.Get(TList;Integer):Pointer;
|
005119B0 E8D3B9F0FF call 0041D388
005119B5 8B5008 mov edx, [eax+$08]
005119B8 8D45F8 lea eax, [ebp-$08]

* Reference to: System.@LStrLAsg(void;void;void;void);
|
005119BB E80430EFFF call 004049C4
005119C0 80BE2D03000000 cmp byte ptr [esi+$032D], $00
005119C7 741B jz 005119E4
005119C9 8B45F4 mov eax, [ebp-$0C]
005119CC 50 push eax
005119CD 8B45F0 mov eax, [ebp-$10]
005119D0 50 push eax

* Possible String Reference to: 'KYLE'
|
005119D1 B9AC1A5100 mov ecx, $00511AAC

* Possible String Reference to: 'KATARN'
|
005119D6 BABC1A5100 mov edx, $00511ABC
005119DB 8BC6 mov eax, esi

|
005119DD E842010000 call 00511B24
005119E2 8BD8 mov ebx, eax
005119E4 84DB test bl, bl
005119E6 7517 jnz 005119FF
005119E8 8B45F4 mov eax, [ebp-$0C]
005119EB 50 push eax
005119EC 8B45F0 mov eax, [ebp-$10]
005119EF 50 push eax
005119F0 8B4DF8 mov ecx, [ebp-$08]
005119F3 8B55FC mov edx, [ebp-$04]
005119F6 8BC6 mov eax, esi

|
005119F8 E827010000 call 00511B24
005119FD 8BD8 mov ebx, eax
005119FF 84DB test bl, bl
00511A01 7434 jz 00511A37
00511A03 6A04 push $04
00511A05 8D4DE4 lea ecx, [ebp-$1C]

* Possible String Reference to: 'Valid Licence. Thank you for regist
| ering our product.'
|
00511A08 BACC1A5100 mov edx, $00511ACC

* Reference to control TS_reg : TTextStorage
|
00511A0D 8B8614030000 mov eax, [esi+$0314]

* Reference to : TTextStorage._PROC_004C0594()
|
00511A13 E87CEBFAFF call 004C0594
00511A18 8B45E4 mov eax, [ebp-$1C]
00511A1B 50 push eax
00511A1C 8BC6 mov eax, esi

* Reference to: Controls.TWinControl.GetHandle(TWinControl):HWND;
|
00511A1E E891D4F5FF call 0046EEB4
00511A23 33C9 xor ecx, ecx
00511A25 5A pop edx

* Reference to : TeditDlg._PROC_004C6980()
|
00511A26 E8554FFBFF call 004C6980
00511A2B C7864C02000001000000 mov dword ptr [esi+$024C], $00000001
00511A35 EB28 jmp 00511A5F
00511A37 6A02 push $02
00511A39 8D4DE0 lea ecx, [ebp-$20]

* Possible String Reference to: 'Invalid Licence Data.'
|
00511A3C BA0C1B5100 mov edx, $00511B0C

* Reference to control TS_reg : TTextStorage
|
00511A41 8B8614030000 mov eax, [esi+$0314]

* Reference to : TTextStorage._PROC_004C0594()
|
00511A47 E848EBFAFF call 004C0594
00511A4C 8B45E0 mov eax, [ebp-$20]
00511A4F 50 push eax
00511A50 8BC6 mov eax, esi

* Reference to: Controls.TWinControl.GetHandle(TWinControl):HWND;
|
00511A52 E85DD4F5FF call 0046EEB4
00511A57 33C9 xor ecx, ecx
00511A59 5A pop edx

* Reference to : TeditDlg._PROC_004C6980()
|
00511A5A E8214FFBFF call 004C6980
00511A5F 33C0 xor eax, eax
00511A61 5A pop edx
00511A62 59 pop ecx
00511A63 59 pop ecx
00511A64 648910 mov fs:[eax], edx

****** FINALLY
|

* Possible String Reference to: '_^[‹å]Ã'
|
00511A67 689B1A5100 push $00511A9B
00511A6C 8D45E0 lea eax, [ebp-$20]
00511A6F BA02000000 mov edx, $00000002

* Reference to: System.@LStrArrayClr(void;void;Integer);
|
00511A74 E8D72EEFFF call 00404950
00511A79 8D45E8 lea eax, [ebp-$18]
00511A7C BA02000000 mov edx, $00000002

* Reference to: System.@LStrArrayClr(void;void;Integer);
|
00511A81 E8CA2EEFFF call 00404950
00511A86 8D45F0 lea eax, [ebp-$10]
00511A89 BA04000000 mov edx, $00000004

* Reference to: System.@LStrArrayClr(void;void;Integer);
|
00511A8E E8BD2EEFFF call 00404950
00511A93 C3 ret


* Reference to: System.@HandleFinally;
|
00511A94 E9AF27EFFF jmp 00404248
00511A99 EBD1 jmp 00511A6C

****** END
|
00511A9B 5F pop edi
00511A9C 5E pop esi
00511A9D 5B pop ebx
00511A9E 8BE5 mov esp, ebp
00511AA0 5D pop ebp
00511AA1 C3 ret

00511B24 55 push ebp
00511B25 8BEC mov ebp, esp
00511B27 6A00 push $00
00511B29 6A00 push $00
00511B2B 6A00 push $00
00511B2D 6A00 push $00
00511B2F 6A00 push $00
00511B31 53 push ebx
00511B32 56 push esi
00511B33 57 push edi
00511B34 894DF8 mov [ebp-$08], ecx
00511B37 8955FC mov [ebp-$04], edx
00511B3A 8BF0 mov esi, eax
00511B3C 8B45FC mov eax, [ebp-$04]

* Reference to: System.@LStrAddRef(void;void):Pointer;
|
00511B3F E89832EFFF call 00404DDC
00511B44 8B45F8 mov eax, [ebp-$08]

* Reference to: System.@LStrAddRef(void;void):Pointer;
|
00511B47 E89032EFFF call 00404DDC
00511B4C 8B450C mov eax, [ebp+$0C]

* Reference to: System.@LStrAddRef(void;void):Pointer;
|
00511B4F E88832EFFF call 00404DDC
00511B54 8B4508 mov eax, [ebp+$08]

* Reference to: System.@LStrAddRef(void;void):Pointer;
|
00511B57 E88032EFFF call 00404DDC
00511B5C 33C0 xor




Ранг: 264.0 (наставник), 5thx
Активность: 0.210
Статус: Участник
Vanilla Sky

Создано: 23 января 2007 02:48
· Личное сообщение · #2

Мдааа.
Мужик, ты б хоть написал, до чего уже докапался и что уже понял/знаешь или предлогаешь тебе кейген написать? Пиши подробней.



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

Создано: 23 января 2007 02:51 · Поправил: rat
· Личное сообщение · #3

Софтина написана на Delphi. Насколько я понимаю, то логин и пароль каким-то образом преобразовываются с помошью ListString("KYLE","KATARN"). А вот каким образом, х.з. вроде особо никаких мат. операций не производится.



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

Создано: 23 января 2007 03:27
· Личное сообщение · #4

Никак не пойму. На что обычно указывает ebp в delphi программах при входе в функцию?



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

Создано: 23 января 2007 11:43
· Личное сообщение · #5

А это смотря в какой функции. Если не ошибаюсь (а скорее всего ошибаюсь) В ebp идут переменные (в тч и аргумены).
ЗЫ Люди, если не влом, подкиньте хоть пару линков на статейки где делфи-проги кейгенятся или вообще разбираются.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 23 января 2007 14:19
· Личное сообщение · #6

rat пишет:
Никак не пойму. На что обычно указывает ebp в delphi программах при входе в функцию?

При входе EBP имеет внешнее значение, которое сразу же сохраняется в стек:
0051192C 55 push ebp
И затем указатель вершины стека помещается в EBP:
0051192D 8BEC mov ebp, esp
Так оформляется вступление в функцию (если не была включена никакая дополнительная оптимизация кода).
Соответственно теперь любое обращение к [EBP+X] можно рассматривать как обращение к [ESP+X] в состоянии ESP до использования самой функцией.

Дальше определяются локальные переменные.
Если в исходнике локали не были инициализированы сразу, то просто выделяется стековый кадр:
add ESP,-X
Где X/4 = количество всех локальных переменных.

Если локали инициализированы на первом этапе, то мы видим что-то вроде этого:

0051192F 33C9 xor ecx, ecx
00511931 51 push ecx
00511932 51 push ecx
00511933 51 push ecx
00511934 51 push ecx
00511935 51 push ecx
00511936 51 push ecx
00511937 51 push ecx
00511938 51 push ecx
00511939 53 push ebx
0051193A 56 push esi
0051193B 57 push edi

А затем начинается обращение к этим переменным в диапазоне от [EBP-4] и до [EBP-X].

Примерно так.
Если напутал, поправьте меня, пожалуйста, я ведь Delphi в глаза не видел, только в дизасме =).

-----
Всем привет, я вернулся




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 23 января 2007 21:41
· Личное сообщение · #7

где-то я уже это видел, случайно не wintools?



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

Создано: 23 января 2007 22:51
· Личное сообщение · #8

Нет не wintools. Это [link=ftp://ftp2.kcsoftwares.com/kcsoftwa/files/audiograil.exe]AudioGr ail (K-MP3)[/link]. Я так понимаю, алгоритм там у всех прог одинаковый.

Я так думаю, вы поняли, что я привел здесь то, что мне выдал DeDe.
И, убей, никак не пойму что делает функция: System.@LStrLAsg(void;void;void;void); ? Длину проверяет?
И как результат ее работы связан с:
005119C0 80BE2D03000000 cmp byte ptr [esi+$032D], $00
005119C7 741B jz 005119E4
?
Вот весь этот кусок кода:

* Reference to: System.@LStrLAsg(void;void;void;void);
|
005119A3 E81C30EFFF call 004049C4
005119A8 8BD7 mov edx, edi
005119AA 8B8628030000 mov eax, [esi+$0328]

* Reference to: Classes.TList.Get(TList;Integer):Pointer;
|
005119B0 E8D3B9F0FF call 0041D388
005119B5 8B5008 mov edx, [eax+$08]
005119B8 8D45F8 lea eax, [ebp-$08]

* Reference to: System.@LStrLAsg(void;void;void;void);
|
005119BB E80430EFFF call 004049C4
005119C0 80BE2D03000000 cmp byte ptr [esi+$032D], $00
005119C7 741B jz 005119E4
005119C9 8B45F4 mov eax, [ebp-$0C]
005119CC 50 push eax
005119CD 8B45F0 mov eax, [ebp-$10]
005119D0 50 push eax

* Possible String Reference to: 'KYLE'
|
005119D1 B9AC1A5100 mov ecx, $00511AAC

* Possible String Reference to: 'KATARN'
|
005119D6 BABC1A5100 mov edx, $00511ABC
005119DB 8BC6 mov eax, esi

|
005119DD E842010000 call 00511B24
005119E2 8BD8 mov ebx, eax
005119E4 84DB test bl, bl
005119E6 7517 jnz 005119FF



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

Создано: 23 января 2007 23:36
· Личное сообщение · #9

LStrLAsg, помоему, увеличивает счетчик ссылок на строку (её адрес - в edx),
а во второй переданный параметр (в eax) записывает адрес этой строки.
Правда точно не помню , а вообще там в отладчике видно



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 24 января 2007 01:13
· Личное сообщение · #10

Такие длинные коды лучше в аттач цеплять. Все что ты тут разбирал, я обычно пропускаю - это манипуляции со строками перед обработкой. Сама проверка вызывается здесь :
rat пишет: 005119F8 E827010000 call 00511B24
Но как раз из этой подпрограммы ты привел только ненужные строчки Раз не умеешь "отсечь лишнее" по тексту : отладчик в зубы и вперед - так быстрее будет, наверное. Для основного форума вопрос явно слабоват.



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

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

Спасибо за помощь.
А зачем тогда весь этот бред со строками KYLE и KATARN?



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 24 января 2007 02:23
· Личное сообщение · #12

tundra37 пишет:
отладчик в зубы и вперед

+1
rat, к сожалению, без длительной медитации, самоистязаний и лишений, просветление не настанет.

-----
Всем привет, я вернулся





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 24 января 2007 02:52
· Личное сообщение · #13

а, так и думал - знакомый код.. вечером запощу код кейгена..

-----
Тут не могла быть ваша реклама





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

Создано: 24 января 2007 02:59
· Личное сообщение · #14

хех

0051207D |. E8 2A2CEFFF CALL KMP3.00404CAC
00512082 |. 8B85 C4FEFFFF MOV EAX,[LOCAL.79] // тут готовый код
00512088 |. 8B55 08 MOV EDX,[ARG.1]
0051208B |. E8 D472EFFF CALL <KMP3.@SameText$qqrx10AnsiStringt1>


а чуть выше этого места, генерация с.н.

-----
[nice coder and reverser]





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 24 января 2007 03:06
· Личное сообщение · #15

хм..как и обещал..(хотя получилось пораньше)
код генерации на делфях - в аттаче.. код писался давно..и малопонятный имхо, но работает.. только строки свои вставь (KYLE, KATARN) и про кредитсы не забудь ;)
зы. код робит для всех kc software - только в каждой проги разные "строки"

d775_24.01.2007_CRACKLAB.rU.tgz - kg.txt

-----
Тут не могла быть ваша реклама




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

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

Маленькое уточнение, существуют два типа серийников - общие и для конкретной версии, для генерации используется одна и та же функция, но с разными строками, плюс для конкретной версии эта версия добавляется к имени.
В коде lord_Phoenix'a строки для общего серийника так, что ничего менять не надо. Kyle и Katarn - для версии 6.7.
Ну и приведу мой вариант кейгена на MFC (кстати без goto ):


4059_26.01.2007_CRACKLAB.rU.tgz - keygen.txt




Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 28 января 2007 00:44
· Личное сообщение · #17

0046CAEF |. 50 PUSH EAX ; /lParam
0046CAF0 |. 8B43 04 MOV EAX,DWORD PTR DS:[EBX+4] ; |
0046CAF3 |. 50 PUSH EAX ; |wParam
0046CAF4 |. 57 PUSH EDI ; |Message = WM_GETTEXT
0046CAF5 |. 8B86 80010000 MOV EAX,DWORD PTR DS:[ESI+180] ; |
0046CAFB |. 50 PUSH EAX ; |hWnd
0046CAFC |. 8B86 74010000 MOV EAX,DWORD PTR DS:[ESI+174] ; |
0046CB02 |. 50 PUSH EAX ; |PrevProc
0046CB03 |. E8 FCADF9FF CALL <JMP.&user32.CallWindowProcA> ; CallWindowProcA


Это считывание кода? Маленький вопросец как не заходя в эту функцию узнать где будет считанная строка.. куда кладется адрес?

-----
Researcher





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

Создано: 28 января 2007 02:07
· Личное сообщение · #18

WM_GETTEXT
wParam = (WPARAM) cchTextMax; // число копируемых символов
lParam = (LPARAM) lpszText; // адрес буфера для текста

-----
[nice coder and reverser]





Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 28 января 2007 02:29
· Личное сообщение · #19

Спасиб, Хелл

-----
Researcher





Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 28 января 2007 05:36
· Личное сообщение · #20

rat
Как это нету математических операций.. да там же после того, как считан ключ только операции в основном и идут..
А вообще мне не понравилось "Foobarsucks" это в проге строчка встретилась.. блин сволочи Фубар рулит!!

-----
Researcher



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


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