Hello Guys
i get a warning:: reserved word used as symbol :END
And the full code as follows:
;----------------------------------------------------------------
; BMP2enhancedLSB v0.1
; Freeware, Open Source, GPL, Copyleft, whatever you want.
;----------------------------------------------------------------
;
; Steganography visual attack by enhancing the LSBs.
;
; This program asks you to choose a 24-bits uncompressed
; BMP file.
; Assemble it with:
; TASM32 /ml /m3 /z /t BMP2enhancedLSB
; TLINK32 -Tpe -aa BMP2enhancedLSB,,,import32
; Rebuild with LordPE (by yoda) to shrink it to the maximum.
callW macro x
extrn x:PROC
call x
endm
.386
.model flat
.data
;----------------- structures --------------------
openfilename_struct:
lStructSize dd openfilename_struct_size
hwndOwner dd 0
hInstance dd 0
lpstrFilter dd offset filter
lpstrCustomFilter dd 0
nMaxCustFilter dd 0
nFilterIndex dd 0
lpstrFile dd offset namebuffer
nMaxFile dd 255
lpstrFileTitle dd 0
nMaxFileTitle dd 32
lpstrInitialDir dd 0
lpstrTitle dd 0
Flags dd 1000h+4h+200000h
nFileOffset dw 0
nFileExtension dw 0
lpstrDefExt dd 0
lCustData dd 0
lpfnHook dd 0
lpTemplateName dd 0
openfilename_struct_size equ $-offset openfilename_struct
;------------- file/memory stuff --------------------
filter db "Bmp files *.bmp",0,"*.bmp",0,0
namebuffer db 255 dup(0)
result_title db "BMP2LSB", 0
no_bmp db "This file does not have the 24-bits BMP signature",0
file_handle2 dd ?
file_size dd ?
file_handle dd ?
file_mem_buffer dd ?
file_nb_bytes_read dd ?
pixels_data_start dd ?
.code
programme:
;-------- choose a file -------------
push offset openfilename_struct
callW GetOpenFileNameA
test eax, eax
jz end
;-------- open it --------------
push 0
push 80h
push 3
push 0
push 0
push 80000000h+40000000h
push dword ptr [lpstrFile]
callW CreateFileA
inc eax
jz end
dec eax
mov file_handle, eax
;---------- get its size ---------
push 0
push dword ptr file_handle
callW GetFileSize
inc eax
jz close_file
dec eax
mov file_size, eax
;--------- alloc memory for file --------
mov eax, file_size
add eax, 1024
push eax
push 40h
callW LocalAlloc
test eax, eax
jz close_file
mov file_mem_buffer, eax
;------- read entire file ------------
push 0
push offset file_nb_bytes_read
push file_size
push file_mem_buffer
push file_handle
callW ReadFile
test eax, eax
jz free_memory
mov eax, file_nb_bytes_read
cmp eax, file_size
jnz free_memory
;-------- find BMP signature ---------
mov esi, file_mem_buffer
lodsw
cmp ax, "MB"
jne trouble
;------- find number of bits per pixel ------
add esi, 8
lodsd
add eax, file_mem_buffer
mov pixels_data_start, eax
add esi, 14
lodsw
cmp ax, 24
je this_looks_like_a_bmp
;-------- not 24-bits BMP -----------
trouble:
push 0
push offset result_title
push offset no_bmp
push 0
callW MessageBoxA
jmp free_memory
;------ Enhance LSBs -----------
this_looks_like_a_bmp:
mov eax, pixels_data_start
sub eax, file_mem_buffer
mov ecx, file_size
sub ecx, eax
mov esi, pixels_data_start
mov edi, esi
change_all:
lodsb ;get byte
and al, 1 ;eliminate everything except LSB
jz no_fill ;if 0, do nothing
mov al, 0ffh ;if 1, replace by 255
no_fill:
stosb ;put the byte back
loop change_all
;------- add _LSB to the name ----------------
mov esi, offset namebuffer
mov ecx, 255
find_extension:
mov al, [esi+ecx]
cmp al, "."
je modify_name
loop find_extension
modify_name:
mov eax, "BSL_"
mov [esi+ecx], eax
mov eax, "pmb."
mov [esi+ecx+4], eax
;------- open a new file on the disk ----------------
push 0
push 80h
push 2
push 0
push 0
push 40000000h
push offset namebuffer
call CreateFileA
mov file_handle2, eax
;------- write buffer in it ----------------
push 0
push offset file_nb_bytes_read
push file_size
push file_mem_buffer
push file_handle2
callW WriteFile
;------- close it ----------------
push file_handle2
callW CloseHandle
jmp free_memory
;------- close memory ----------------
free_memory:
push file_mem_buffer
callW LocalFree
;-------- close file ----------
close_file:
push dword ptr file_handle
callW CloseHandle
;----------- exit ----------
end:
push -1
callW ExitProcess
end programme