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

 eXeL@B —› Вопросы новичков —› Посоветуйте плиз
Посл.ответ Сообщение

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

Создано: 04 июня 2009 17:16 · Поправил: xtiger22
· Личное сообщение · #1

Вот прога, которую необходимо сломать http://priceua.com/cdplus/file.php?name=cdplus_str2009_harkov_setup
Написана на Delphi
В окне регистрации, при нажатии кнопки Ок форма закрывается и срабатывает ф-ция CloseQuerry. Она, по идее и "проверяет правильность" имени и ключа.
Правильно ли то, что здесь проверяется ключ? Или эта ф-ция просто выдирает данные, а проверяются они уже в Main'e?
И еще вопрос, а в GetText может проверяться ключ и имя? Я в асм не силен, помогите плиз =)
Вот код ф-ции CloseQuery, выданный DeDe'м

006FB848 push ebp
006FB849 mov ebp, esp
006FB84B push $00
006FB84D push $00
006FB84F push $00
006FB851 push $00
006FB853 push $00
006FB855 push $00
006FB857 push ebx
006FB858 push esi
006FB859 mov esi, ecx
006FB85B mov ebx, eax
006FB85D xor eax, eax
006FB85F push ebp

* Possible String Reference to: 'й8„Рялл^[‹е]ГU‹мj'
|
006FB860 push $006FB93F

***** TRY
|
006FB865 push dword ptr fs:[eax]
006FB868 mov fs:[eax], esp

* Reference to field TRegForm.ModalResult : TModalResult
|
006FB86B cmp dword ptr [ebx+$024C], +$01 <--------- Проверяем чем закрыли (крестиком или кнопкой)
006FB872 jnz 006FB924 <--------- И если крестиком то идем просто на выход
006FB878 lea edx, [ebp-$04] <--------- В EDX адрес первого эл-та стека

* Reference to control TRegForm.EName : TEdit
|
006FB87B mov eax, [ebx+$02F8] <-------- в EAX указатель на EName (это поле ввода имени)

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
006FB881 call 0048276C <--------- Вызов GetText для EName (указатель на "имя" в первый эл-т стека)
006FB886 cmp dword ptr [ebp-$04], +$00 <--------- Сравниваем первый эл-т стека (в котором помещено ИМЯ) с 0 (выполнилась ли ф-ция GetText)
006FB88A jz 006FB8BB <--------- Если там 0, то идем на 006FB8BB
006FB88C lea edx, [ebp-$08] <--------- В EDX адрес второго эл-та стека

* Reference to control TRegForm.EName : TEdit
|
006FB88F mov eax, [ebx+$02F8] <--------- Опять в EAX указыватель на EName

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
006FB895 call 0048276C <--------- Вызов GetText (указатель на "Имя" во второй эл-т стека)
006FB89A mov eax, [ebp-$08] <--------- В EAX значение второго эл-та стека (указатель на имя)

* Reference to: System.@LStrLen(String):Integer;
|
006FB89D call 00404708 <--------- Вызов ф-ции определения длины(для EAX) (результат в EAX)
006FB8A2 cmp eax, +$03 <--------- Сравниваем EAX с 3
006FB8A5 jl 006FB8BB <--------- Если меньше, то идем на 006FB8BB
006FB8A7 lea edx, [ebp-$0C] <--------- В EDX адрес третьего эл-та стека

* Reference to control TRegForm.EReg : TEdit
|
006FB8AA mov eax, [ebx+$02FC]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
006FB8B0 call 0048276C <--------- Вызов GetText (указатель на "Ключ" в третий эл-т стека)
006FB8B5 cmp dword ptr [ebp-$0C], +$00 <--------- Проверяем есть ли "ключ" в третьем эл-те
006FB8B9 jnz 006FB8BF <--------- Если да, то идем сюда 006FB8BF
006FB8BB xor eax, eax <--------- обнуляем EAX
006FB8BD jmp 006FB8C1 <--------- переходим на 006FB8C1
006FB8BF mov al, $01 <--------- в EAX заносим 1
006FB8C1 mov [esi], al <--------- в сегмент данных по адресу esi заносим 1
006FB8C3 lea edx, [ebp-$10] <--------- В EDX адрес четвертого эл-та стека

* Reference to control TRegForm.EName : TEdit
|
006FB8C6 mov eax, [ebx+$02F8]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
006FB8CC call 0048276C <--------- Вызов GetText (указатель на "Имя" в 4й эл-т стека)
006FB8D1 cmp dword ptr [ebp-$10], +$00 <--------- Есть ли "Имя" в 4м эл-те стека
006FB8D5 jz 006FB8F2 <--------- Если нет, то идем на 006FB8F2
006FB8D7 lea edx, [ebp-$14] <--------- В EDX адрес пятого эл-та стека

* Reference to control TRegForm.EName : TEdit
|
006FB8DA mov eax, [ebx+$02F8]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
006FB8E0 call 0048276C <--------- Вызов GetText (указатель на "Имя" в 5й эл-т стека)
006FB8E5 mov eax, [ebp-$14] <--------- В EAX значение пятого эл-та стека (указатель на имя)

* Reference to: System.@LStrLen(String):Integer;
|
006FB8E8 call 00404708 <--------- Вызов ф-ции определения длины (результат в EAX)
006FB8ED cmp eax, +$03 <--------- Сравниваем EAX с 3
006FB8F0 jnl 006FB902 <--------- Если больше, то идем на 006FB902

* Reference to control TRegForm.EName : TEdit
|
006FB8F2 mov eax, [ebx+$02F8]
006FB8F8 mov edx, [eax]

* Reference to method TEdit.SetFocus()
|
006FB8FA call dword ptr [edx+$00C4]
006FB900 jmp 006FB924
006FB902 lea edx, [ebp-$18] <--------- В EDX адрес шестого эл-та стека

* Reference to control TRegForm.EReg : TEdit
|
006FB905 mov eax, [ebx+$02FC]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
006FB90B call 0048276C <--------- Вызов GetText (указатель на "Ключ" в 6й эл-т стека)
006FB910 cmp dword ptr [ebp-$18], +$00 <--------- Проверяем не пусто ли в 6м
006FB914 jnz 006FB924 <--------- Если нет, то идем на 006FB924

* Reference to control TRegForm.EReg : TEdit
|
006FB916 mov eax, [ebx+$02FC]
006FB91C mov edx, [eax]

* Reference to method TEdit.SetFocus()
|
006FB91E call dword ptr [edx+$00C4]
006FB924 xor eax, eax
006FB926 pop edx
006FB927 pop ecx
006FB928 pop ecx
006FB929 mov fs:[eax], edx

****** FINALLY
|

* Possible String Reference to: '^[‹е]ГU‹мj'
|
006FB92C push $006FB946
006FB931 lea eax, [ebp-$18] <--------- в EAX указатель на 6й эл-т стека (там Ключ)
006FB934 mov edx, $00000006 <--------- в EDX заносим 6

* Reference to: System.@LStrArrayClr(void;void;Integer);
|
006FB939 call 0040445C
006FB93E ret


* Reference to: System.@HandleFinally;
|
006FB93F jmp 00403D7C
006FB944 jmp 006FB931

****** END
|
006FB946 pop esi
006FB947 pop ebx
006FB948 mov esp, ebp
006FB94A pop ebp
006FB94B ret



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

Создано: 05 июня 2009 02:53 · Поправил: SVLab
· Личное сообщение · #2

Нет здесь проверки, и в GetText не будет. Эта функция даже не "выдирает данные". Здесь просто проверяется, все ли данные введены и можно ли закрыть форму ввода.



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

Создано: 05 июня 2009 13:34
· Личное сообщение · #3

Большое спасибо!
Вопрос исчерпан.




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

Создано: 05 июня 2009 18:09
· Личное сообщение · #4

Раз решено, закрою тогда.


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