All pastes #138552 Raw Edit

APFC

public text v1 · immutable
#138552 ·published 2006-08-19 08:08 UTC
rendered paste body
.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc

DlgProc			proto	:HWND,:UINT,:WPARAM,:LPARAM
GetProcAddr		proto	:DWORD, :DWORD
K32Base			proto

.data
	szlmao		 		db "i win", 0
	K32BASE				dd 0
	U32BASE				dd 0
	USER32DLL			db "USER32.DLL", 0

	LoadLibrary_str		db "LoadLibraryA", 0
	LoadLibrary_fn		dd 0
	FreeLibrary_str		db "FreeLibrary", 0
	FreeLibrary_fn		dd 0
	ExitProcess_str		db "ExitProcess", 0
	ExitProcess_fn		dd 0
	MessageBox_str		db "MessageBoxA", 0
	MessageBox_fn		dd 0
	DialogBoxParam_str	db "DialogBoxParamA", 0
	DialogBoxParam_fn	dd 0
	EndDialog_str		db "EndDialog", 0
	EndDialog_fn		dd 0

.code
K32Base proc
	mov ecx, [esp + 4]
@@:	xor edx, edx
	dec ecx
	mov dx, [ecx + 3ch]
	test dx, 0f800h
	jnz @b
	cmp ecx, [ecx + edx + 34h]
	jnz @b
	mov eax, ecx
	ret
K32Base endp

GetProcAddr proc uses esi edi ecx ebx edx, hLib:DWORD, szProc:DWORD

	mov esi, hLib
	cmp word ptr [esi], 5a4dh				
	jnz @@error_exit

	add esi, [esi + 03ch]
	cmp dword ptr [esi], 00004550h				
	jnz @@error_exit

	mov edi, szProc						
	mov ecx, 200
	xor al, al
	repnz scasb
	mov ecx, edi
	sub ecx, szProc						

	mov edx, [esi + 078h]					
	add edx, hLib						

	assume	edx:ptr IMAGE_EXPORT_DIRECTORY
	mov ebx, [edx].AddressOfNames
	add ebx, hLib						
	xor eax, eax						

@@:	mov edi, [ebx]
	add edi, hLib
	mov esi, szProc
	push ecx
	repz cmpsb							
	jz @@sth_done

	pop ecx
	add ebx, 4
	inc eax
	cmp eax, [edx].NumberOfNames
	jne @b
	jmp @f

	@@sth_done:
	add esp, 4

@@:	cmp eax, [edx].NumberOfNames				
	je @@error_exit

	mov esi, [edx].AddressOfNameOrdinals			
	add esi, hLib
	push edx							
	mov ebx, 2
	xor edx, edx
	mul ebx
	pop edx
	add eax, esi
	xor ecx, ecx
	mov word ptr cx, [eax]					
	
	mov edi, [edx].AddressOfFunctions			
	xor edx, edx
	mov ebx, 4
	mov eax, ecx
	mul ebx
	add eax, hLib
	add eax, edi
	mov eax, [eax]
	add eax, hLib
	jmp @f

	assume	edx:nothing
	@@error_exit:
	xor eax, eax						
@@:	ret								
GetProcAddr endp

start:
	call @F
@@:	pop ebp
	sub ebp, OFFSET @B
	call [K32Base]
	mov K32BASE, eax
	push offset LoadLibrary_str
	push K32BASE
	call [GetProcAddr]
	mov LoadLibrary_fn, eax
	push offset FreeLibrary_str
	push K32BASE
	call [GetProcAddr]
	mov FreeLibrary_fn, eax
	push offset ExitProcess_str
	push K32BASE
	call [GetProcAddr]
	mov  ExitProcess_fn, eax
	push OFFSET USER32DLL
	call [LoadLibrary_fn]
	mov U32BASE, EAX			
	push offset DialogBoxParam_str
	push U32BASE
	call [GetProcAddr]
	mov DialogBoxParam_fn, eax
	push 0
	push offset DlgProc
	push 0
	push 101
	push 00400000h
	call [DialogBoxParam_fn]
	push U32BASE
	call [FreeLibrary_fn]
	push NULL
	call [ExitProcess_fn]

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
 	mov eax,uMsg
	cmp eax, WM_COMMAND
	je @@WMCMD
	cmp eax, WM_CLOSE
	je @@WMCLS
 	xor eax,eax
 	ret

@@WMCMD:
	mov eax,wParam
	mov ecx,eax
	shr ecx,16
	cmp cx,BN_CLICKED
	jne @@EXT
	cmp ax,1003
	jne @@EXT
	push OFFSET USER32DLL
	call [LoadLibrary_fn]
	mov U32BASE, EAX			
	push offset MessageBox_str
	push U32BASE
	call [GetProcAddr]
	mov MessageBox_fn, eax
	push 0
	push offset szlmao
	push offset szlmao
	push 0		
	call [MessageBox_fn]
	push U32BASE
	call [FreeLibrary_fn]
	jmp @@EXT

@@WMCLS:
	push OFFSET USER32DLL
	call [LoadLibrary_fn]
	mov U32BASE, EAX			
	push offset EndDialog_str
	push U32BASE
	call [GetProcAddr]
	mov EndDialog_fn, eax
	push 0
	push hWin
	call [EndDialog_fn]
	push U32BASE
	call [FreeLibrary_fn]

@@EXT:	mov eax,1
ret
DlgProc endp
end start