· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Как удолить самого себя?????

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Мар 17, 2003 04:02:57

К сожалению, в XP тоже не пашет.


Дата: Мар 18, 2003 12:46:48

Глянул под ХР - все именно так, как я и предполагал.
Таблица хендлов имеет всего 6 хендлов, причем это стандартные объекты для управления процессом.
Т.е. для всех процессов на этих местах те же объекты.
И объекта Section среди них нет.
А хендл 4 имеет KeyedEvent, который успешно и закрывается.
Так что под ХР работать не будет - дырочку закрыли ;-)


Дата: Мар 18, 2003 13:41:37

Four-F: спасибо за столь подробное объяснение. Еще пара вопросов:
1)А где можно глянуть структуру EPROCESS? Например в WINDOWS.INC от MASM32 таковой не наблюдается.
2)"Просто при загрузке образа в память работает механизм проецирования файлов"
Я так думаю, что этот механизм работает в такой последовательности: сначала вызывается CreateFile(возвращается хэндл открытого файла), затем CreateFileMapping(возвращается хэндл отмэппированного файла) ну и далее со всеми остановками. Так вот "магическая команда" CloseHandle, 4 пытается использовать хэндл первой или второй ф-ии?


Дата: Мар 18, 2003 21:47:53

EPROCESS для 2000 есть у мя в KmdKit (include\w2kundoc.inc).

http://four-f.narod.ru/KmdKit10.zip
http://www32.brinkster.com/fourf/KmdKit10.zip
http://wasm.ru/tools/11/KmdKit10.zip

Структуры недокументированы, так что все очень ОС-зависимо.
Для 2000 вытащено из дебужных символов для 2000+sp2
Для XP точно не помню, вроде XP First Release Cabdidate.

Для ХР вот (форматирование конечно пропало :( )

KPROCESS STRUCT ; sizeof = 06Ch
Header DISPATCHER_HEADER <> ; DO_TYPE_PROCESS (0x1B)
ProfileListHead LIST_ENTRY <>
DirectoryTableBase DWORD 2 dup(?) ; 018h Physical address of Page Data Directory (cr3 contains the same phys address)
LdtDescriptor KGDTENTRY <> ; 020h
Int21Descriptor KIDTENTRY <> ; 028h
IopmOffset WORD ? ; 030h
Iopl BYTE ? ; 032h
Unused BOOLEAN ? ; 033h
ActiveProcessors DWORD ? ; 034h
KernelTime DWORD ? ; ticks
UserTime DWORD ? ; ticks
ReadyListHead LIST_ENTRY <> ; 040h
SwapListEntry SINGLE_LIST_ENTRY <> ; 048h
VdmTrapcHandler PVOID ? ; 04Ch
ThreadListHead LIST_ENTRY <> ; KTHREAD.ThreadListEntry
ProcessLock PVOID ? ; 058h KSPIN_LOCK
Affinity KAFFINITY ? ; 05Ch
StackCount WORD ? ; 060h
BasePriority BYTE ? ; 062h
ThreadQuantum BYTE ? ; 063h
AutoAlignment BOOLEAN ? ; 064h
State BYTE ? ; 065h
ThreadSeed BYTE ? ; 066h
DisableBoost BOOLEAN ? ; 067h
PowerState BYTE ? ; 068h
DisableQuantum BOOLEAN ? ; 069h
IdealNode BYTE ? ; 06Ah
Spare BYTE ? ; 06Bh
KPROCESS ENDS
PKPROCESS typedef PTR KPROCESS

EPROCESS STRUCT ; sizeof = 258h
Pcb KPROCESS <> ; 0000h
ProcessLock EX_PUSH_LOCK <> ; 006ch
CreateTime LARGE_INTEGER <> ; 0070h
ExitTime LARGE_INTEGER <> ; 0078h
RundownProtect EX_RUNDOWN_REF <> ; 0080h
UniqueProcessId DWORD ? ; 0084h
ActiveProcessLinks LIST_ENTRY <> ; 0088h
QuotaUsage DWORD 3 dup(?) ; 0090h
QuotaPeak DWORD 3 dup(?) ; 009ch
CommitCharge DWORD ? ; 00a8h
PeakVirtualSize DWORD ? ; 00ach
VirtualSize DWORD ? ; 00b0h
SessionProcessLinks LIST_ENTRY <> ; 00b4h
DebugPort PVOID ? ; 00bch
ExceptionPort PVOID ? ; 00c0h
ObjectTable PVOID ? ; 00c4h PTR HANDLE_TABLE
Token EX_FAST_REF <> ; 00c8h
WorkingSetLock FAST_MUTEX <> ; 00cch
WorkingSetPage DWORD ? ; 00ech
AddressCreationLock FAST_MUTEX <> ; 00f0h
HyperSpaceLock DWORD ? ; 0110h
ForkInProgress PVOID ? ; 0114h PTR ETHREAD
HardwareTrigger DWORD ? ; 0118h
VadRoot PVOID ? ; 011ch
VadHint PVOID ? ; 0120h
CloneRoot PVOID ? ; 0124h
NumberOfPrivatePages DWORD ? ; 0128h
NumberOfLockedPages DWORD ? ; 012ch
Win32Process PVOID ? ; 0130h
Job PVOID ? ; 0134h PTR EJOB
SectionObject PVOID ? ; 0138h
SectionBaseAddress PVOID ? ; 013ch
QuotaBlock PVOID ? ; 0140h PTR EPROCESS_QUOTA_BLOCK
WorkingSetWatch PVOID ? ; 0144h PTR PAGEFAULT_HISTORY
Win32WindowStation PVOID ? ; 0148h
InheritedFromUniqueProcessId PVOID ? ; 014ch
LdtInformation PVOID ? ; 0150h
VadFreeHint PVOID ? ; 0154h
VdmObjects PVOID ? ; 0158h
DeviceMap PVOID ? ; 015ch
PhysicalVadList LIST_ENTRY <> ; 0160h
union
PageDirectoryPte HARDWARE_PTE_X86 <> ; 0168h
Filler QWORD ? ; 0168h
ends
Session PVOID ? ; 0170h
ImageFileName BYTE 16 dup(?) ; 0174h
JobLinks LIST_ENTRY <> ; 0184h
LockedPagesList PVOID ? ; 018ch
ThreadListHead LIST_ENTRY <> ; 0190h
SecurityPort PVOID ? ; 0198h
PaeTop PVOID ? ; 019ch
ActiveThreads DWORD ? ; 01a0h
GrantedAccess DWORD ? ; 01a4h
DefaultHardErrorProcessing DWORD ? ; 01a8h
LastThreadExitStatus SDWORD ? ; 01ach
Peb PVOID ? ; 01b0h PTR PEB
PrefetchTrace EX_FAST_REF <> ; 01b4h
ReadOperationCount LARGE_INTEGER <> ; 01b8h
WriteOperationCount LARGE_INTEGER <> ; 01c0h
OtherOperationCount LARGE_INTEGER <> ; 01c8h
ReadTransferCount LARGE_INTEGER <> ; 01d0h
WriteTransferCount LARGE_INTEGER <> ; 01d8h
OtherTransferCount LARGE_INTEGER <> ; 01e0h
CommitChargeLimit DWORD ? ; 01e8h
CommitChargePeak DWORD ? ; 01ech
AweInfo PVOID ? ; 01f0h
SeAuditProcessCreationInfo SE_AUDIT_PROCESS_CREATION_INFO <> ; 01f4h
Vm MMSUPPORT <> ; 01f8h
LastFaultCount DWORD ? ; 0238h
ModifiedPageCount DWORD ? ; 023ch
NumberOfVads DWORD ? ; 0240h
JobStatus DWORD ? ; 0244h
union
Flags DWORD ? ; 0248h
ends
ExitStatus SDWORD ? ; 024ch
NextPageColor WORD ? ; 0250h
SubSystemMinorVersion BYTE ? ; 0252h
SubSystemMajorVersion BYTE ? ; 0253h
SubSystemVersion WORD ? ; 0252h
PriorityClass BYTE ? ; 0254h
WorkingSetAcquiredUnsafe BYTE ? ; 0255h
EPROCESS ENDS
PEPROCESS typedef PTR EPROCESS


Насчет хендла:
У Гари Неббета есть "Example 6.2: Creating a Win32 Process"
Там подробно расписано как работает CreateProcess.
Этот код я проверял - работает, по крайней мере под 2000.

NT::ZwOpenFile(&hFile,...
NT::ZwCreateSection(&hSection,...

Вот hSection как раз и равен 4.


Дата: Мар 19, 2003 01:38:51 · Поправил: Asterix

;


Дата: Мар 19, 2003 13:06:24

Еще раз спасибо - будем разбираться.


Дата: Мар 30, 2003 18:37:10


Дата: Авг 24, 2003 04:46:23

Почитал тут на досуге Коберниченко, и подумал, а почему не сделать для самоудаления так, как работает RtlExitUserThread, описанный там. Т.е. код освобождения ресурсов и удаления положить в TEB ( он-то не удалится при UnmapViewOfFile - т.к. находится в другом месте ) и в результате мы сможем выполнять код , когда exe уже не будет спроецирован в память. Как вариант #2 можно положить код в PEB.EnvironmentStrings.

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.096