用Win32汇编语言对PE格式的EXE文件进行口令加密(下)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用Win32汇编语言对PE格式的EXE文件进行口令加密(下)

szUser32 db 'user32',0

szMessageBox db 'MessageBoxA',0

;定义指向对话框函数的指针变量及常量的定义

_GetModuleHandle _ApiGetModuleHandle ?

_GlobalAlloc _ApiGlobalAlloc ?

_MultiByteToWideChar _ApiMultiByteToWideChar ?

_DialogBoxIndirectParam _ApiDialogBoxIndirectParam ?

_GlobalFree _ApiGlobalFree ?

_EndDialog _ApiEndDialog ?

_GetDlgItemText _ApiGetDlgItemText ?

_SetWindowText _ApiSetWindowText ?

_SendDlgItemMessage _ApiSendDlgItemMessage ?

szGetModuleHandle db 'GetModuleHandleA',0

szGlobalAlloc db 'GlobalAlloc',0

szMultiByteToWideChar db 'MultiByteToWideChar',0 szDialogBoxIndirectParam db 'DialogBoxIndirectParamA',0 szGlobalFree db 'GlobalFree',0

szEndDialog db 'EndDialog',0

szGetDlgItemText db 'GetDlgItemTextA',0

szSetWindowText db 'SetWindowTextA',0

szSendDlgItemMessage db 'SendDlgItemMessageA',0

APPEND_PASSWD_CODE equ this byte

OldPswdText db 30 dup(0) ;加密后留存的口令

PswdText db 30 dup(0) ;对话框输入的验证口令

TitleName db 'Enter PassWord',0

ButtonName db '确定',0

FontName db 'Times New Roman',0

ID_PSWD equ 101

ID_EXIT equ 202

ID_CAPTION equ 11011

szCaption db "问题提示:",0

TitleText db "请输入口令:",0

ErrPasswd db "口令错误!",0

hInstance1 dd ?

@strlen11 dd ?

@strlen22 dd ?

;取字符串长度过程

strlen proc _dwarg

local @count

mov @count,0

pushad

cld

mov esi,_dwarg

@@: lodsb

inc @count

cmp al,0

jz exit

jmp @b

exit:

popad

mov eax,@count

ret

strlen endp

;口令核对过程

ChkEnterpswd proc

pushad

call @f

@@:

pop ebx

sub ebx,offset @b

lea eax,[ebx+PswdText]

invoke strlen,eax

mov [ebx+@strlen11],eax lea eax,[ebx+OldPswdText] invoke strlen,eax

mov [ebx+@strlen22],eax mov ecx,[ebx+@strlen11] mov eax,[ebx+@strlen22] .if ecx < eax

xchg eax,ecx

.endif

lea esi,[ebx+OldPswdText] lea edi,[ebx+PswdText]

cld

repe cmpsb

.if ZERO?

popad

mov eax,TRUE

ret

.else

popad

mov eax,FALSE

ret

.endif ChkEnterpswd endp

;对话框过程

DlgProc proc hWnd:dword,uMsg:dword,wParam:dword,lParam:dword

call @f

@@:

pop ebx

sub ebx,offset @b

.if uMsg==WM_COMMAND

mov eax,wParam

.if ax==ID_PSWD

lea edx,[ebx+PswdText]

invoke [ebx+_GetDlgItemText],hWnd,ID_PSWD,edx,30

.elseif ax==ID_EXIT

invoke [ebx+_EndDialog],hWnd,NULL

.endif

.elseif uMsg==WM_INITDIALOG

lea ecx,[ebx+TitleText]

invoke [ebx+_SetWindowText],hWnd,ecx

invoke

[ebx+_SendDlgItemMessage],hWnd,ID_PSWD,EM_LIMITTEXT,18,NULL

invoke

[ebx+_SendDlgItemMessage],hWnd,ID_PSWD,EM_SETPASSWORDCHAR,42,NULL

.else

mov eax,FALSE

ret

.endif

mov eax,TRUE

ret

DlgProc endp

;口令加密代码的入口

_NewEntry:

;重定位

call @F

@@:

pop ebx

sub ebx,offset @B

invoke _GetKernelBase,[esp] ;获取Kernel32.dll基地址

mov [ebx+hDllKernel32],eax

lea eax,[ebx+szGetProcAddress] ;获取GetProcAddress入口地址

invoke _GetApi,[ebx+hDllKernel32],eax

mov [ebx+_GetProcAddress],eax

lea eax,[ebx+szLoadLibrary] ;获取LoadLibrary入口地址

invoke [ebx+_GetProcAddress],[ebx+hDllKernel32],eax

mov [ebx+_LoadLibrary],eax

lea eax,[ebx+szUser32] ;获取User32.dll基地址

相关文档
最新文档