Разблокировка кнопок 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'

Оцени полезность:

11   голосов , оценка 4.545 из 5
Похожие ответы