Войны Дзена, помогите разобраться. прога - инжектит код в чужой процесс, всё стандартно но не работает.. начал копаться используя ollydbg, ситуация такая p = VirtualAllocEx( h, 0, MAXINJECTSIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE ); отрабатывает нормально p после этого = 0x37000 в ollydbg в процессе куда инжектю эта страница в карте памяти показывается Memory map, item 14 Address=00370000 Size=00001000 (4096.) Owner= 00370000 (itself) Section= Type=Priv 00021040 Access=RWE Initial access=RWE дальше по коду if ( ! WriteProcessMemory( h, p, &bem, MAXINJECTSIZE, 0 ) ) где bem адрес кода для инжекта (тоже вроде всё стандартно), отрабатывает нормально, в памяти по адресу 0x37000 появляется следущее (до этого 0и) 00370000 - E9 194F0600 JMP 003D4F1E <-- по идее (как мне кажется) это должен быть jmp на собственно код инжекта 00370005 - E9 14D80000 JMP 0037D81E <- этот мусор хз откуда.... 0037000A - E9 9FF90000 JMP 0037F9AE <-- 0037000F - E9 EA600000 JMP 003760FE <-- 00370014 - E9 B5CF0000 JMP 0037CFCE <-- 00370019 - E9 80260000 JMP 0037269E но этого адреса 003D4F1E просто нет, и последующий CreateRemoteThread есстественно валит процесс, olly вываливается - по адресу eip 003D4F1E (где глубокое ничто) т.е. я не понимаю куда копируется код инжекта и в целом почему так происходит. помогите словом или ссылкой спасибо.
Забей на createremotethread в висте. Юзай RtlCreateUserThread только так можно заинжектиться в explorer и проч., ибо в висте CreateRemoteThread неповсюду работает. RtlCreateUserThread начинает поток не с BaseThreadStart, поэтому инжектить надо код и явно вызывать ExitThread.