Crasheando un Proceso.

Iniciado por APOKLIPTICO, 8 Diciembre 2009, 00:42 AM

0 Miembros y 3 Visitantes están viendo este tema.

APOKLIPTICO

Hola gente, tengo un problemon, estoy haciendo un pequeño programita q cada tanto crashea un programa editando partes aleatorias de la memoria con datos aleatorios tengo dos preguntas:

1) Que parte de la memoria me conviene editar para tener mayor probabilidad de crashear el proceso? Cual es la direccion de esa memoria?

2) Por qué este codigo no anda?:
Código (vb) [Seleccionar]
Private Sub Timer2_Timer()
'appcrash
Dim i As Integer
For i = 0 To 1
DoEvents
Call WriteAInt(APP_MEM_START, Rnd * 255, 796)
Next i
Timer2.Enabled = False
If DEBUGON = False Then
Timer1.Enabled = True
End If
End Sub

Function WriteAInt(ByVal Address As Long, ByVal Value As Long, ByVal PID As Long)
Dim Handle As Long
Handle = OpenProcess(PROCESS_ALL_ACCESS, False, PID)
Dim ret As Variant
ret = WriteProcessMemory(Handle, Address, Value, 4, 0&)
Call CloseHandle(Handle)
End Function


Me abre el proceso, xq el handle me devuelve un valor non-zero, pero el writeprocessmemory me devuelve "0" siempre, sin importar que valor en la memoria le ponga...
Y si uso el getlasterror, esta tambien me devuelve "0", osea q no se cual es el error q estoy teniendo, tengo privilegios de admin.

Cual puede ser el problema???
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

APOKLIPTICO

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Karcrack

Tal vez no haya ningun problema :huh:
No tiene porque crashear porque escribas en memoria...

Que proceso pretendes Crashear? Tal vez hay una forma mas sencilla...

Si es una APP de VB existe una forma muy simple ;D

MCKSys Argentina

Hola!

Si te abre el proceso con el máximo acceso, porqué no usas TerminateProcess ??

Con esa lo terminas. Ahora, si quieres "tocar" el proceso a mano, puedes intentar obtener el PEB y luego modificar las instrucciones a las que apuntará EIP. Con eso lo crasheas también (ó cambiando EIP).

Sinó también, si tienes acceso al EXE (o DLL) que se ejecuta, puedes ver que instrucción modificar, para que crashee. (eso si, asegúrate que esa parte no tenga control de excepciones, y que si lo tiene, salga de todas formas).

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


APOKLIPTICO

No quiero terminar el proceso, xq eso puede ser un poco sospechoso. Habia pensado lo de modificar el EIP para causar un access violation. Como hago para encontrar esa address??
Y otro problema, no te olvides q todavia sigue sin andar el codigo q postee, osea q aunque quiera modificar la EIP y tenga la direccion de memoria, no podría hacerlo xq no anda ¬¬ jejej...
Tenes idea q puede estar mal en el codigo?
Gracias!
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

cobein

Fijate en este source, tiene casi todo lo que necesitas. http://www.advancevb.com.ar/?p=159
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

APOKLIPTICO

#6
MMh, muy interesante, muchas gracias x el aporte, ya lo incorporé a mi programa, está sobreescribiendo bien, la funcion writeaddress me está devolviendo nonzero. Okay, estuve googleando un poco, y encontre esto: +0x000 InheritedAddressSpace : 0 ''
   +0x001 ReadImageFileExecOptions : 0 ''
   +0x002 BeingDebugged    : 0x1 ''
   +0x003 SpareBool        : 0 ''
   +0x004 Mutant           : 0xffffffff
   +0x008 ImageBaseAddress : 0x00400000
   +0x00c Ldr              : 0x00241ea0 _PEB_LDR_DATA
   +0x010 ProcessParameters : 0x00020000 _RTL_USER_PROCESS_PARAMETERS
   +0x014 SubSystemData    : (null)
   +0x018 ProcessHeap      : 0x00140000
   +0x01c FastPebLock      : 0x77fc49e0 _RTL_CRITICAL_SECTION
   +0x020 FastPebLockRoutine : 0x77f5b2a0
   +0x024 FastPebUnlockRoutine : 0x77f5b380
   +0x028 EnvironmentUpdateCount : 1
   +0x02c KernelCallbackTable : (null)
   +0x030 SystemReserved   : [1] 0
   +0x034 ExecuteOptions   : 0y00
   +0x034 SpareBits        : 0y000000000000000000000000000000 (0)
   +0x038 FreeList         : (null)
   +0x03c TlsExpansionCounter : 0
   +0x040 TlsBitmap        : 0x77fc4680
   +0x044 TlsBitmapBits    : [2] 0
   +0x04c ReadOnlySharedMemoryBase : 0x7f6f0000
   +0x050 ReadOnlySharedMemoryHeap : 0x7f6f0000
   +0x054 ReadOnlyStaticServerData : 0x7f6f0688  -> (null)
   +0x058 AnsiCodePageData : 0x7ffb0000
   +0x05c OemCodePageData  : 0x7ffc1000
   +0x060 UnicodeCaseTableData : 0x7ffd2000
   +0x064 NumberOfProcessors : 1
   +0x068 NtGlobalFlag     : 0x70
   +0x070 CriticalSectionTimeout : _LARGE_INTEGER 0xffffe86d`079b8000
   +0x078 HeapSegmentReserve : 0x100000
   +0x07c HeapSegmentCommit : 0x2000
   +0x080 HeapDeCommitTotalFreeThreshold : 0x10000
   +0x084 HeapDeCommitFreeBlockThreshold : 0x1000
   +0x088 NumberOfHeaps    : 3
   +0x08c MaximumNumberOfHeaps : 0x10
   +0x090 ProcessHeaps     : 0x77fc5a80  -> 0x00140000
   +0x094 GdiSharedHandleTable : (null)
   +0x098 ProcessStarterHelper : (null)
   +0x09c GdiDCAttributeList : 0
   +0x0a0 LoaderLock       : 0x77fc1774
   +0x0a4 OSMajorVersion   : 5
   +0x0a8 OSMinorVersion   : 1
   +0x0ac OSBuildNumber    : 0xa28
   +0x0ae OSCSDVersion     : 0x100
   +0x0b0 OSPlatformId     : 2
   +0x0b4 ImageSubsystem   : 3
   +0x0b8 ImageSubsystemMajorVersion : 4
   +0x0bc ImageSubsystemMinorVersion : 0
   +0x0c0 ImageProcessAffinityMask : 0
   +0x0c4 GdiHandleBuffer  : [34] 0
   +0x14c PostProcessInitRoutine : (null)
   +0x150 TlsExpansionBitmap : 0x77fc4660
   +0x154 TlsExpansionBitmapBits : [32] 0
   +0x1d4 SessionId        : 0
   +0x1d8 AppCompatFlags   : _ULARGE_INTEGER 0x0
   +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER 0x0
   +0x1e8 pShimData        : (null)
   +0x1ec AppCompatInfo    : (null)
   +0x1f0 CSDVersion       : _UNICODE_STRING "Service Pack 1"
   +0x1f8 ActivationContextData : (null)
   +0x1fc ProcessAssemblyStorageMap : (null)
   +0x200 SystemDefaultActivationContextData : 0x00130000
   +0x204 SystemAssemblyStorageMap : (null)
   +0x208 MinimumStackCommit : 0


Que parte debería sobreescribir para crashear el programa con un heap/stack overflow???
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Karcrack

Si el programa no esta realizando ninguna acción en ese momento no lo crashearas tan facilmente...

Porque no simplemente le inyectas un pequeño codigo en ASM?
Código (asm) [Seleccionar]
xor eax, eax
mov [eax], eax

:D

APOKLIPTICO

Igual el proceso va a estar haciendo, de eso estoy seguro, es un programa q utiliza internet, osea q siempre tiene q mandar o recibir algo (keep-alives, requests, etc).
Como hago para sobreescribir la EIP teniendo la direccion del EPB???
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

MCKSys Argentina

Si usa alguna API que conozcas, puedes parchearla para que genere una excepcion.

Asi, si no la controla, queda frito...

Saludos!

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."