All pastes #38896 Raw Edit

Someone

public text v1 · immutable
#38896 ·published 2006-01-28 13:12 UTC
rendered paste body

.586p 
.model flat,stdcall 
option casemap:none 

SearchBytePattern PROTO :DWORD, :DWORD, :DWORD, :DWORD, :BYTE, :BYTE

;-----------------------------------------------------------------------

      include \masm32\include\windows.inc
      include \masm32\include\imagehlp.inc
      include \masm32\include\comdlg32.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\include\masm32.inc

      includelib \masm32\lib\imagehlp.lib
      includelib \masm32\lib\comdlg32.lib
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
      includelib \masm32\lib\masm32.lib

      Main   PROTO

;-----------------------------------------------------------------------

.data
ofn                          OPENFILENAME <>
buffer                       db 260 dup(0) 
buffer2                      db 260 dup(0)
FilterString                 db "choose the file",0,"*.*",0,0




.data?
hFileWrite      HANDLE ? 
hFileRead       HANDLE ?
processInfo	    PROCESS_INFORMATION		  <>
startInfo       STARTUPINFO 		      <>



BytePattern     db 072h 016h 061h 


memory_ptr      dd  ?   ; ptr to our allocated memory
memory_size     dd  ?   
filehandle      dd  ?   
file_size       dd ?
bytesrw       dd ?

.Code



Main proc      



SearchBytePattern 	 proc BytePattern:DWORD
                    LOCAL SizeOfBytePattern:DWORD
			LCOAL SearchField:DWORD 
			LOCAL SizeOfSearchField:DWORD
                        LOCAL Wildcard:BYTE 
			LCOAL WildcardCharacter:BYTE
			LOCAL FoundBytePattern:DWORD
                       
                       
local FoundBytePattern: DWORD

    mov [FoundBytePattern], -1h
    xor eax, eax
    mov ecx, [SearchField]
    mov edx, [BytePattern]
    .while eax < SizeOfSearchField
      xor esi, esi
      push eax
      .while esi < SizeOfBytePattern
        .if eax >= SizeOfSearchField
          .break
        .endif
        mov bl, [ecx+eax]
        mov bh, [edx+esi]
        .if Wildcard == TRUE
          .if bh == WildcardCharacter
            jmp _
          .endif
        .endif
        .if bh == bl
_:        
          inc eax
          inc esi
          .if esi == SizeOfBytePattern
            sub eax, SizeOfBytePattern
            mov FoundBytePattern, eax
            jmp @end
          .endif
        .else
          pop eax
          .break
        .endif
      .endw
      inc eax
    .endw
@end:
    mov eax, FoundBytePattern
	ret
SearchBytePattern endp



	mov  ofn.lStructSize, SIZEOF ofn
    	mov  ofn.lpstrFilter, OFFSET FilterString
    	mov  ofn.lpstrFile, OFFSET buffer
    	mov  ofn.nMaxFile, 260
    	mov  ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or 

OFN_HIDEREADONLY

invoke GetOpenFileName, ADDR ofn
mov eax, ofn.lpstrFile
mov eax, [eax]
test eax, eax	; no filename? end prog immediately...
jz ERRORMSG

invoke    CreateFileA, addr buffer, 80000000h, 0, 0, 3, 80h, 0
cmp     eax, 0FFFFFFFFh
jz      ERRORMSG
mov     dword ptr [filehandle], eax

; Speicher schaffen
invoke  VirtualAlloc, 0, eax, MEM_COMMIT, PAGE_EXECUTE_READWRITE
mov [memory_ptr], eax
test eax, eax
jz ERRORMSG
      
; ExE in Speicher lesen
invoke ReadFile, filehandle, eax, file_size, offset bytesrw, 0
mov eax, [file_size]

invoke SearchBytePattern, addr BytePattern , sizeof BytePattern , file_size, SizeOfSearchField, 0, 0

ERRORMSG:
	;Error occured


Main endp

	start:
	invoke Main
end start