Код (Text): invoke GetCurrentDirectory,MAX_PATH,lpBuffer invoke lpstring,lpBuffer,lpFile lpFile db '\prog.exe',NULL ; возможно что слеш нужен!
Код (Text): GetModuleFileNameEx GetMappedFileName __asm { mov eax, fs:[ 0x30 ] // get a pointer to the PEB mov eax, [ eax + 0x10 ] mov eax, [ eax + 0x3c ] }
eshkinkot Разумеется, винапи это толстая обёртка вокруг нэйтива. ProcessImageFileName(вам ведь имя экзешника из которого процесс создан нужно).
А ты убежден, что ав ругается на получение своего пути, а не на копирование себя в системную папку и записывание в реестр? Если тебе нужен собственный файл, попробуй сделать дамп образа из памяти на диск.
Можно так достать Код (Text): .386 .model small, stdcall option casemap :none assume fs:nothing include \MASM32\INCLUDE\user32.inc include \MASM32\INCLUDE\kernel32.inc include \MASM32\INCLUDE\ntdll.inc include \MASM32\INCLUDE\windows.inc includelib \MASM32\LIB\kernel32.lib includelib \MASM32\LIB\user32.lib includelib \MASM32\LIB\ntdll.lib ; ######################################################################### .data tit db "Путь", 0 .data? buff dd MAX_PATH dup (?) .code start: mov edi, offset buff mov eax,dword ptr fs:[018h] mov eax,dword ptr ds:[eax+030h] mov eax,dword ptr ds:[eax+0ch] add eax,0ch mov eax,dword ptr ds:[eax] mov eax,dword ptr ds:[eax+028h] cicle: cmp byte ptr ds:[eax], 0 jz endcicle mov cl, byte ptr ds:[eax] mov byte ptr ds:[edi], cl inc edi inc eax inc eax jmp cicle endcicle: push 0 push offset tit push offset buff push 0 Call MessageBoxA push 0 call ExitProcess end start ; #########################################################################
Flint_ta Зачем вы кодите цифрами, не поняно ведь, не все знают или помнят смещение полей: Код (Text): mov eax,fs:[TEB.TIB.Self] mov eax,TEB.Peb[eax] mov eax,PEB.Ldr[eax] mov eax,PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax] mov eax,LDR_DATA_TABLE_ENTRY.FullDllName.Buffer[eax] Имя экзешника из лдр может быть каким угодно, туда оно загружается из параметров процесса(блок ProcessParameters), туда в свою очередь записывается родителем и может быть каким угодно.
На запись в реестр не ругается. Ругается на запись себя в любую папку, но если копируешь тот же самый файл с сервера в любую папку, то молчит. А вот на GetModuleFileName ругается.
Да не бывает так. Ладно, давай по-другому. Как ты определил, что ругается именно на эту функцию? Это нехарактерно для касперского. У тебя есть код, где твой файл копируется в системную папку. Ты затер эту функцию и каспер замолчал? Ты пробовал жестко прописать имя своего файла, откуда его надо копировать? Что сказал каспер? Вообще, попробуй все-таки копировать свой файл из памяти - так будет проще. Т.к. всякие извраты типа PEB, TEB и т.д. вызывают еще больше раздражения эвристики.
ууу... ты прям в двух словах хочешь или чтобы тебе апишку дали? GetModuleHandle - а дальше учи формат РЕ. Просто скопировать мало. Надо правильно расположить секции. На васме все это есть
Тока сейчас дошло, что имелось ввиду под "как копировать из памяти?". Это получится дамп, там еще импорт нужно будет восстановить. Задача сложнее чем кажется на первый взгляд. Можно GetCommandLineA заюзать вместо GetModuleFileNameA