Как это работает? AutoIt3 Script: ProcessClose("calc.exe") - всего одна строчка! Причём, скрипт кампилится в бинарь ProcessClose.exe и исполняется без всякого движка! Можно ли на fasm это воспроизвести? Пожалуйста если не трудно в студию?
у меня в windows taskkill.exe не работает ежели чего, пишет Class not registered... вот такие вот апи
lpModuleName db 'calc.exe',0 start: invoke GetModuleHandle,lpModuleName mov eax,lpModuleName invoke ExitProcess,eax 8)
1. процесс убивает TerminateProcess, а не ExitProcess. 2. GetModuleHandle ищет модуль в контексте только текущего процесса.
Злые Вы все какие-то после пополнения состава модераторов. Semiono Код (Text): format PE GUI 4.0 include 'win32a.inc' TH32CS_SNAPPROCESS equ 2 TOKEN_ADJUST_PRIVILEGES equ 20h TOKEN_QUERY equ 8h SE_PRIVILEGE_ENABLED equ 2h 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 struct TOKEN_PRIVILEGES PrivilegeCount dd ? LUID1 dd ? LUID2 dd ? Attributes dd ? ends main: call AdjustMyToken stdcall findProcessID,procName invoke OpenProcess,PROCESS_TERMINATE,FALSE,eax push eax invoke TerminateProcess,eax,1 invoke CloseHandle ret AdjustMyToken: invoke LookupPrivilegeValue,emptyStr,privName,tokenPriv.LUID1 mov dword[tokenPriv.PrivilegeCount],1h mov dword[tokenPriv.Attributes],SE_PRIVILEGE_ENABLED invoke OpenProcessToken,-1,TOKEN_ADJUST_PRIVILEGES OR TOKEN_QUERY,hToken invoke AdjustTokenPrivileges,[hToken],FALSE,tokenPriv,0,0,0 invoke CloseHandle,[hToken] ret ;takes one parameter through stack: pointer to the process name findProcessID: push ebp invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 mov ebp,eax mov dword[procEntry.dwSize],sizeof.PROCESSENTRY32 invoke Process32First,eax,procEntry @@: invoke Process32Next,ebp,procEntry test eax,eax jz @F invoke lstrcmpi,procEntry.szExeFile,[esp+8] test eax,eax jnz @B mov eax,dword[procEntry.th32ProcessID] @@: pop ebp retn 4 emptyStr db '',0 privName db 'SeDebugPrivilege',0 procName db 'winlogon.exe',0 data import library kernel,'kernel32.dll',\ advapi,'advapi32.dll' import kernel,\ OpenProcess,'OpenProcess',\ TerminateProcess,'TerminateProcess',\ CloseHandle,'CloseHandle',\ lstrcmpi,'lstrcmpiA',\ CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\ Process32First,'Process32First',\ Process32Next,'Process32Next' import advapi,\ OpenProcessToken,'OpenProcessToken',\ LookupPrivilegeValue,'LookupPrivilegeValueA',\ AdjustTokenPrivileges,'AdjustTokenPrivileges' end data align 4 hToken dd ? tokenPriv TOKEN_PRIVILEGES <> procEntry PROCESSENTRY32 <> P.S. Я бы рекомендовал сперва разобраться в коде.
Код (Text): include '%fasm%\win32ax.inc' ... invoke lstrcmpi,procEntry.szExeFile,[esp+8] ; < Error: operrand size not specified win32a.inc < так работает! но почему?
Semiono Потому что win32a.inc раскрывает макрос invoke, используя мнемонику pushd, которая подразумевает, что операнд - двойное слово. А win32ax.inc использует мнемонику push. Соответственно необходимо явно указывать размер операнда: Код (Text): invoke lstrcmpi,procEntry.szExeFile,dword[esp+8] P.S. Лучше не использовать win32ax.inc. Макросы там сложнее и допускают больше наворотов, но разворачиваться они могут в довольно неоптимальный грубый код. Поэтому лучше к ним не привыкать.
хотел использовать Код (Text): include '%fasm%\api\shell32.inc' оказалось там нету CommandLineToArgv теперь прицепил Код (Text): include '%fasm%\api\kernel32.inc' тоже самое, не исполняется код под наборчег Код (Text): import kernel32,OpenProcess,'OpenProcess',TerminateProcess,'TerminateProcess',\ CloseHandle,'CloseHandle',lstrcmpi,'lstrcmpiW',CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\ Process32First,'Process32FirstW',Process32Next,'Process32NextW', GetCommandLine,'GetCommandLineW',\ LocalFree,'LocalFree' чему нас тогда учат? в первом классе.. )))