Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

Защита информации   Найти похожие ветки 

 
Асякин ©   (2004-09-21 21:30) [0]

Добрый вечер уважаемые МАСТЕРА !!!
Я в данный момент пишу программу которая ставит защиту на определенный файл (т.е не дает другим пользователям открывать, изменять, копировать,удалять его и т.д)
Эту часть кода я написал, но у меня возник следующий вопрос
"Как сделать программу, которая будет висеть в памяти все время, и ее не будет видно в CTR+ALT+DEL"
у меня есть одна процедура которая в WInXP убирает программу из CTR+ALT+DEL НО есть такая программулина Starter так вот в нейвидны все процесы !!! как от ентого избавиться и еще как сделать чтобы мою программу не могли "TERMINATE"

Мне это очень нужно для написания программы по защите информации

С уважением, Андрей


 
Dimaxx   (2004-09-21 22:15) [1]

Если не влом, приведи процедурку по скрытию проги... Может, из нее понятно будет, как starter находит ее. Може чего-то ты забыл...


 
Асякин ©   (2004-09-23 12:56) [2]

library Hide;

uses
 Windows,
 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;

const
 ImagehlpLib = "IMAGEHLP.DLL";

function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
 DirectoryEntry: Word; var Size: ULONG): Pointer; stdcall; external ImagehlpLib
   name "ImageDirectoryEntryToData";

function AllocMem(Size: Cardinal): Pointer;
begin
 GetMem(Result, Size);
 FillChar(Result^, Size, 0);
end;

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;

 { By Wasm.ru}

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;


 
Асякин ©   (2004-09-23 12:58) [3]

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.

Текст програмки, прячущей саму себя:

Код

program HideProj;

uses
 windows, messages;

function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall;
 external "hide.dll";

function ProcessMessage(var Msg: TMsg): Boolean;
var
 Handled: Boolean;
begin
 Result := False;
 begin
   Result := True;
   if Msg.Message <> WM_QUIT then
   begin
     Handled := False;
     begin
       TranslateMessage(Msg);
       DispatchMessage(Msg);
     end;
   end
 end;
end;

procedure ProcessMessages;
var
 Msg: TMsg;
begin
 while ProcessMessage(Msg) do {loop}
   ;
end;

begin
 HideProcess(GetCurrentProcessId, false);
 while true do
 begin
   ProcessMessages;
 end;
end.


 
Defunct ©   (2004-09-24 04:25) [4]

Хм... О ! Попробуйте переставить иконки на своем рабочем столе... ;)


 
xShadow ©   (2004-09-24 11:51) [5]

От толковых людей всёравно не спрячешь!


 
xShadow ©   (2004-09-24 11:53) [6]

А если по теме то переделать свою программу в DLL и цеплять её системному процессу.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.03 c
1-1097828947
STM
2004-10-15 12:29
2004.10.31
Application.Minimize


3-1096624461
stud
2004-10-01 13:54
2004.10.31
использование параметра в хранимой процедуре


4-1095952236
Mirror
2004-09-23 19:10
2004.10.31
Поиск файла


6-1093021889
Asd
2004-08-20 21:11
2004.10.31
TcpClient и TcpServer или Indy Delphi 7


1-1097609853
Павел
2004-10-12 23:37
2004.10.31
прицепить PopupMenu к DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский