Разблокировка кнопок API - Assembler
Формулировка задачи:
Доброго времени суток! Это мой первый пост, но я надеюсь мой вопрос будет полезен не только мне. Мне интересно как разблокировать кнопки API. Допустим, есть демо программа, которая ограничивает полную версию ТОЛЬКО блокировкой некоторых функций таких как: не активная кнопка сохранения. Как её можно разблокировать? Мне интересен общий случай, как это делается вообще, а не с конкретными программами.
Решение задачи: «Разблокировка кнопок API»
textual
Листинг программы
format PE GUI 4.0 entry Start include 'win32a.inc' include 'ENCODING\win1251.inc' WIN = 1000 ; ID окна L_BUT = 2000 ; ID левой кнопки R_BUT = 3000 ; ID правой кнопки STRING = 4000 ; ID рамки ;=============================================================================== section '.text' code readable executable Start: invoke GetModuleHandle, 0 ; получить хендл процесса invoke DialogBoxParam, eax,WIN,0,WndProc,0 ; создать модальное диалоговое окно invoke ExitProcess,0 ;------------------------------------------------------------------------------- proc WndProc hwnddlg,msg,wparam,lparam cmp [msg],WM_INITDIALOG ; окно только создаётся? je .init_win ; тогда переход cmp [msg],WM_CLOSE ; окно закрывается? je .close_win ; тогда переход cmp [wparam],L_BUT ; левая кнопка нажата? je .l_but_push ; тогда переход cmp [wparam],R_BUT ; правая кнопка нажата? je .r_but_push ; тогда переход xor eax,eax ; выход из процедуры окна ret ;------------------------------------------------------------------------------- .init_win: invoke GetDlgItem,[hwnddlg],L_BUT ; получить хендл левой кнопки mov [hL_but],eax ; сохранить invoke GetDlgItem,[hwnddlg],R_BUT ; получить хендл правой кнопки mov [hR_but],eax ; сохранить invoke GetDlgItem,[hwnddlg],STRING ; получить хендл рамки mov [hString],eax ; сохранить invoke EnableWindow,[hR_but],0 ; заблокировать музыку xor eax,eax ; выход из процедуры окна ret ;------------------------------------------------------------------------------- .l_but_push: ; блокирующая кнопка invoke IsDlgButtonChecked,[hwnddlg],L_BUT cmp eax,0 je @f invoke EnableWindow,[hR_but],1 ; заветная API invoke SetWindowText,[hString],but_yes xor eax,eax ; выход из процедуры окна ret @@: invoke EnableWindow,[hR_but],0 ; заветная API invoke SetWindowText,[hString],but_no xor eax,eax ; выход из процедуры окна ret ;------------------------------------------------------------------------------- .r_but_push: ; музыкальная кнопка mov esi,500 mov ecx,16 @@: push ecx invoke Beep,esi,110 add esi,80 pop ecx loop @r xor eax,eax ; выход из процедуры окна ret ;------------------------------------------------------------------------------- .close_win: ; закрыть окно invoke EndDialog,[hwnddlg],0 ; уничтожить окно ret endp ;=============================================================================== section '.data' data readable writeable but_yes db 'Доступна',0 but_no db 'Заблокирована',0 hL_but dd ? ; хендл левой кнопки hR_but dd ? ; хендл правой кнопки hString dd ? ; хендл рамки ;=============================================================================== section '.rsrc' resource data readable directory RT_DIALOG,dialogs resource dialogs,WIN,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration dialog demonstration,'Адский ХАКИНГ',15,15,152,60,\ WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME,0,0,'Times New Roman',16 dialogitem 'BUTTON','Заблокирована',STRING,70,3,66,50,WS_VISIBLE+BS_GROUPBOX dialogitem 'BUTTON','Левая кнопка (разблокировки)',L_BUT,8,12,54,35,\ BS_CENTER+WS_VISIBLE+ WS_GROUP+BS_MULTILINE+BS_PUSHLIKE+BS_AUTOCHECKBOX dialogitem 'BUTTON','Правая кнопка (слушать музыку)',R_BUT,78,12,50,35,\ WS_CHILDWINDOW+WS_VISIBLE+ WS_TABSTOP+ES_UPPERCASE+BS_MULTILINE,\ WS_EX_CLIENTEDGE+WS_EX_DLGMODALFRAME enddialog ;=============================================================================== section '.idata' import data readable writeable library kernel32, 'KERNEL32.DLL',user32, 'USER32.DLL' include 'api\kernel32.inc' include 'api\user32.inc'