ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

30.04.2009, 20:39
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 desTiny А ты незабывай что есть скрытые процессы, а есть зомби.
Зомби в смысле - завершенные процессы, но еще неубитые виндой хз по каким причинам. Отличить зомби от скрытого процесса можно через запрос списка модулей процесса(EnumProcessModules) Если список не может быть получен, значит это зомби, в противном случае - скрытый процесс.
Это связано скоре всего с тем, что данные о модулях хранятся в PEB, а т.к. юзермодная часть уже уничтожена (и PEB отсутствует) то запрос проваливается.
Последний раз редактировалось slesh; 30.04.2009 в 20:45..
|
|
|

30.04.2009, 20:44
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
да я и не забываю... просто я к тому, что совысем тупой перебор не поможет. но среди этих процессов есть и вполне легальные)
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

30.04.2009, 21:05
|
|
Постоянный
Регистрация: 29.04.2007
Сообщений: 496
Провел на форуме: 2715445
Репутация:
588
|
|
у рема в phunter всё это было реализовано 
|
|
|

30.04.2009, 22:33
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
а теперь - в том коде есть несколько (много) багов
вот (вроде) правильный (+ добавил получение SeDebugPrivilege):
Код:
#define MPID 0xFFFF+1
#define SHOW_ALL
#define SEDEBUG
#if defined(WIN32) && !defined(_WIN32)
#define _WIN32
#endif
#define _WIN32_WINNT 0x0500
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <winbase.h>
#include <psapi.h>
#pragma comment(lib,"Psapi.lib")
#ifndef STATUS_INFO_LENGTH_MISMATCH
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
#endif
#define NtQuerySystemInformation _NtQuerySystemInformation
#include <winternl.h>
#undef NtQuerySystemInformation
#define SystemHandleInformation 16
typedef LONG KPRIORITY;
typedef struct {
int index;
bool hidden;
HANDLE handle;
TCHAR Name[MAX_PATH];
} Process;
Process List[MPID];
SYSTEM_PROCESS_INFORMATION SystemPrInfo[MPID];
typedef struct {
ULONG NextEntryOffset;
ULONG NumberOfThreads;
LARGE_INTEGER SpareLi1;
LARGE_INTEGER SpareLi2;
LARGE_INTEGER SpareLi3;
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ImageName;
KPRIORITY BasePriority;
HANDLE UniqueProcessId;
HANDLE InheritedFromUniqueProcessId;
ULONG HandleCount;
ULONG SessionId;
ULONG SpareUl3;
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
ULONG PeakWorkingSetSize;
ULONG WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
SIZE_T PrivatePageCount;
LARGE_INTEGER ReadOperationCount;
LARGE_INTEGER WriteOperationCount;
LARGE_INTEGER OtherOperationCount;
LARGE_INTEGER ReadTransferCount;
LARGE_INTEGER WriteTransferCount;
LARGE_INTEGER OtherTransferCount;
} MORE_SYSTEM_PROCESS_INFORMATION;
typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO {
USHORT UniqueProcessId;
USHORT CreatorBackTraceIndex;
UCHAR ObjectTypeIndex;
UCHAR HandleAttributes;
USHORT HandleValue;
PVOID Object;
ULONG GrantedAccess;
} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
typedef struct _SYSTEM_HANDLE_INFORMATION {
ULONG NumberOfHandles;
SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[ 1 ];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
typedef NTSTATUS (WINAPI* NTQUERYSYSTEMINFORMATION)(DWORD, PVOID, DWORD, DWORD*);
NTQUERYSYSTEMINFORMATION NtQuerySystemInformation;
static DWORD find(int* xt)
{ int k = 0;
SIZE_T RequiredLength;
NTSTATUS s;
MORE_SYSTEM_PROCESS_INFORMATION *ProcTable,*Proc;
RequiredLength=64*1024;
ProcTable = (MORE_SYSTEM_PROCESS_INFORMATION *)VirtualAlloc(NULL,RequiredLength,MEM_COMMIT,PAGE_READWRITE);
if (ProcTable == NULL) return -1;
while ((s=NtQuerySystemInformation(SystemProcessInformation,
ProcTable,
(ULONG)RequiredLength,NULL))
== STATUS_INFO_LENGTH_MISMATCH)
{
RequiredLength += 16*1024;
VirtualFree(ProcTable,0,MEM_RELEASE);
ProcTable = (MORE_SYSTEM_PROCESS_INFORMATION *)VirtualAlloc (NULL,RequiredLength,
MEM_COMMIT,PAGE_READWRITE);
if (ProcTable == NULL) return -1;
}
Proc=ProcTable;
do {
k++;
RtlCopyMemory(List[(DWORD)Proc->UniqueProcessId].Name,Proc->ImageName.Buffer,Proc->ImageName.MaximumLength);
if(!List[(DWORD)Proc->UniqueProcessId].hidden){
(*xt)++;
printf("strange one: %.4X ", (DWORD)Proc->UniqueProcessId);
_putts(List[(DWORD)Proc->UniqueProcessId].Name);
}
List[(DWORD)Proc->UniqueProcessId].hidden = false ;
Proc=(MORE_SYSTEM_PROCESS_INFORMATION *)((char *)Proc+Proc->NextEntryOffset);
} while (Proc->NextEntryOffset);
VirtualFree (ProcTable,0,MEM_RELEASE);
return k;
}
void Enum2(){
int f1 = 0, f2 = 0, xt = 0, z = 0;
HMODULE hNtDll = LoadLibrary(TEXT("ntdll.dll"));
NtQuerySystemInformation = (NTQUERYSYSTEMINFORMATION)GetProcAddress(
hNtDll, "NtQuerySystemInformation");
for(int i = 0; i < MPID; i+=4){
HANDLE p = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, false, i);
HMODULE a; DWORD b=0;
if (p&&(EnumProcessModules(p,&a,0,&b)||(b>0))||i==4){
List[i].handle = p;
GetModuleFileNameExW(p, 0, List[i].Name, MAX_PATH);
CloseHandle(p);
List[i].hidden = true;
f1++;
}else{
if(p){
List[i].handle = (HANDLE)-1;
List[i].hidden = true;
z++;
}
}
}
f2 = find(&xt);
/**/
int cpid = GetCurrentProcessId();
//f1 -- : current
f1--;
f2--;
/**/
#ifdef SHOW_ALL
for (int i = 0; i<MPID; i+=4)
if(List[i].handle && List[i].handle!=(HANDLE)-1 && i != cpid){
printf("%.4X - ",i);
if (List[i].hidden)
printf("(warning! hidden one!) ");
_putts(List[i].Name);
}
printf("Zombies:\n");
int k = 0;
for (int i = 0; i<MPID; i+=4)
if(List[i].handle==(HANDLE)-1){
printf("%X",i);
if (++k!=z) printf(", ");
}
printf("\n\n------------\n");
printf("all: %d + %d\nvisible: %d\nzombies: %d\n",f1, xt, f2, z);
#endif
int i;
scanf("%c", &i);
}
bool SetDebugPrivileges() {
LUID Luid;
TOKEN_PRIVILEGES tpToken;
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) {
return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid)) {
CloseHandle (hToken);
return false;
}
tpToken.PrivilegeCount = 1;
tpToken.Privileges[0].Luid = Luid;
tpToken.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, false, &tpToken, NULL, NULL, NULL)) {
CloseHandle(hToken);
return false;
}
CloseHandle(hToken);
return true;
}
int main(){
#ifdef SEDEBUG
SetDebugPrivileges();
#endif
Enum2();
return 0;
}
thx 2 slesh
>>у рема в phunter всё это было реализовано
Да тут нетрудно реализутся-то ) другое дело, что во время кодинга можно какие-то забавные вещи узнать.. вот например, оказалось, что во время загрузки программы (то есть при исследуемый pid = CurrentPid), в имени модуля лежит не имя экзешника, а полный путь..
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
Последний раз редактировалось desTiny; 30.04.2009 в 22:38..
|
|
|

30.04.2009, 23:07
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
<offtop>Тема прикольно развилась ) Начали за здравие закончили заупакой (только в нашем случае наоборот)</offtop>
А вообще для скрытия попробуйте заюзать код DLL из Delphi World - "Ныкаем программу от Ctrl Alt Del в WinXP"
Покрайней мере 6 каспер молчит на такое )
|
|
|

30.04.2009, 23:15
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
да.. точно.. сабж ведь есть) Вообще такая либа вроде работает (не знаю, может я что-нть лишнее вырезал, когда код выбирал - но вряд ли)
http://pastebin.com/f4b4169cf
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
Последний раз редактировалось desTiny; 30.04.2009 в 23:18..
|
|
|

04.05.2009, 00:51
|
|
Познающий
Регистрация: 24.01.2009
Сообщений: 56
Провел на форуме: 132567
Репутация:
9
|
|
 desTiny!!! slesh!!! Большое спасибо за внимание и за полезную информацию!!! кстати очень помогло!!! Конечно хотелось бы и узнать побольше про скрытые процессы и зомби!!!
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Секреты Windows 7
|
Campery |
Статьи |
17 |
19.11.2009 02:33 |
|
Помогите скрыть ID
|
nickname4ik |
Анонимность |
7 |
16.02.2009 19:37 |
|
ЛЮДИ ПОМОГИТЕ В Delphi
|
Bill |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
16 |
21.03.2006 04:39 |
|
Многопоточность в Unix
|
KEZ |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
11 |
10.08.2005 18:29 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|