format PE entry start section '.data' data readable writeable cs_string DB "copy me", 0 r_string DB " " section '.text' code readable executable start: push cs_string push r_string call strcpy add esp, 8 int 3 strcpy: jmp skip_new_byte db 0B8h skip_new_byte: push 0F4DCE10h push edx call do_nothing_2 jmp moved1 bebacksoon: jmp goingback back1: shl edx, 10h add esp, ebx jmp skip_moved2_chain moved2_chain: jmp moved2 skip_moved2_chain: mov dh, [ebp+09h] push dword [ebp+0Ch] mov dl, [ebp+08h] jmp skip_moved2 do_nothing_2: push ebp mov ebp, esp push ecx mov ecx, 0 repe cmpsw pop ecx pop ebp retn 4 moved2: smsw bp xor byte [edi], 5Fh and ebp, 1 add esi, ebp jnc bebacksoon push 1E3D22h call do_nothing_2 goingback: sub edi, eax stc retn skip_moved2: pop esi push edx jmp skip_new_word db 05h, 12h skip_new_word: lea edx, [ebp+08h] mov edi, [edx] pop edx copy: mov ah, [esi] mov byte [edi], 5Fh xchg ah, al xor [edi], al push ebp call moved2_chain pop ebp adc edi, eax add al, ch cmp al, ch jmp moved3 back3: jmp copy_chain moved1: mov [esp], ebp sub esp, ebx jmp skip_new_dword db 66h, 81h, 34h, 9Ch skip_new_dword: mov ebp, esp add ebp, ebx mov dx, [ebp+0Ah] jmp back1 finished: xor eax, edx push ebp call do_nothing_2 xor edx, eax jmp skip_moved3 moved3: ja copy jnb finished jmp back3 copy_chain: jmp copy skip_moved3: mov ebp, [esp] pop dword [esp+4] push 80001h call do_nothing_2 pop ecx xor eax, edx jmp ecx