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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?  (Leído 3,881 veces)
okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
« en: 10 Febrero 2015, 20:09 pm »

Hola

LLevo infinidad de tiempo intentando encontrar la manera de cambiar el nombre de clase un formulario creado en VB6 o VB.NET. Pero no he encontrado la forma.

ClassName en VB6:
ThunderRT6FormDC fuera del entorno de programación
ThunderFormDC dentro del entorno de programación

ClassName en VB.NET
WindowsForms10.Window.8.app...

Sé que es posible establecer tu propio ClassName si creas el form desde cero mediante CreateWindowEx. Pero los usuarios de VB estamos mal acostumbrados y eso de tener que crear las cosas de forma "imaginaria" y que solo sean visibles cuando se ejecuten.... es un rollo. No hay ganas.

Lo curioso es que jamás me he encontrado ninguna aplicación, ni grande, ni pequeña, que tubiese el nombre de clase (ClassName) como ThunderRT6FormDC. Luego, ¿Nadie que se dedique profesionalmente  ha utilizado VB para crear sus apliaciones? o bien, ¿sí que es posible cambiarlo.?

A ver si algún gurú de la programación me lo sabe explicar.



« Última modificación: 10 Febrero 2015, 20:11 pm por okik » En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
« Respuesta #1 en: 11 Febrero 2015, 19:02 pm »

Parece ser un tema complicado, no ví resultados en internet, pero hay que tener algo en cuenta, primero se registra una clase con "RegisterClassEx"

Código
  1. ATOM WINAPI RegisterClassEx(
  2.  _In_  const WNDCLASSEX *lpwcx
  3. );
  4.  

Así que si la querés cambiar tenés que ir pensando en crear una a donde apuntar, ya que las clases son importantes porque los botones, textboxes son de tales características debido a su clase.

Luego podrías ver que hace internamente CreateWindow o CreateWindowEx, debe apuntar a un string o un puntero de la estructura ésa.

Ahora estoy un tanto ocupado haciendo funcionar "ZwQueryVirtualMemory", pero luego me pongo a debuggear CreateWindow y tratar de cambiar la clase, te conviene hacerlo en C++ y cuando lo logres lo pasás a VB6.


En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
« Respuesta #2 en: 19 Marzo 2015, 11:38 am »

Lo he intentado #Miseryk# pero pasa que cuando se crea un form, no con el create windows, sino con el que proporciona VB6 por defecto, entonces éste ignora cualquier referencia al ClassName o cualquier intento de cambio, porque este form depende directamente del archivo msvbvm60.dll que se encuentra \system32.

El fomoso nombre de clase ThunderRT6FormDC que se establece en el viejo VB6, está establecido en el archivo msvbvm60.dll.

De modo que si se modifica el archivo con un editor hexadecimal, por ejemplo con Hex Editor al ejecutar cualquier apliación compilada con VB6, ésta tendrá el nombre de clase que se haya establecido en este archivo.

No se puede modificar el nombre  ThunderRT6FormDC en una sola línea, si no que se tiene que hacer por partes:

ThunderRT6 en:
73180  36 00 00 00 00 00 00 00 54 68 75 6e 64 65 72 52
73190  54 36 00 55 8b ec 56 8b 75 08 8b 46 28 f6 40 2a

Form en:
00fb10   46 6f 72 6d 00 00 00 00 4c 69 6e 65 00 00 00

DC en:   
28a90   DC  00 00 44 46 72 61 6d 65 00 00 00 00 00


Cuando la aplicación se ejecute en otro SO, con el archivo original msvbvm60.dll, entonces el nombre de clase de nuevo será  ThunderRT6FormDC.

Si el archivo ya modificado, está en la mísma carpeta del EXE creado con VB6 entonces, el nombre de clase será el establecido en el archivo que hemos modificado, independiéntemente que en \system32 esté el original. Porque el EXE recurre al archivo msvbvm60.dll inmediato del directorio y no lo busca en \system32.






 



En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
« Respuesta #3 en: 21 Marzo 2015, 02:20 am »

Lo he intentado #Miseryk# pero pasa que cuando se crea un form, no con el create windows, sino con el que proporciona VB6 por defecto, entonces éste ignora cualquier referencia al ClassName o cualquier intento de cambio, porque este form depende directamente del archivo msvbvm60.dll que se encuentra \system32.

El fomoso nombre de clase ThunderRT6FormDC que se establece en el viejo VB6, está establecido en el archivo msvbvm60.dll.

De modo que si se modifica el archivo con un editor hexadecimal, por ejemplo con Hex Editor al ejecutar cualquier apliación compilada con VB6, ésta tendrá el nombre de clase que se haya establecido en este archivo.

No se puede modificar el nombre  ThunderRT6FormDC en una sola línea, si no que se tiene que hacer por partes:

ThunderRT6 en:
73180  36 00 00 00 00 00 00 00 54 68 75 6e 64 65 72 52
73190  54 36 00 55 8b ec 56 8b 75 08 8b 46 28 f6 40 2a

Form en:
00fb10   46 6f 72 6d 00 00 00 00 4c 69 6e 65 00 00 00

DC en:   
28a90   DC  00 00 44 46 72 61 6d 65 00 00 00 00 00


Cuando la aplicación se ejecute en otro SO, con el archivo original msvbvm60.dll, entonces el nombre de clase de nuevo será  ThunderRT6FormDC.

Si el archivo ya modificado, está en la mísma carpeta del EXE creado con VB6 entonces, el nombre de clase será el establecido en el archivo que hemos modificado, independiéntemente que en \system32 esté el original. Porque el EXE recurre al archivo msvbvm60.dll inmediato del directorio y no lo busca en \system32.






 





Yo empezaría con un breakpoint en CreateWindow/CreateWindowEx y RegisterClass/RegisterClassEx, sí o sí tiene que caer por algunas de esas funciones.
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
« Respuesta #4 en: 21 Marzo 2015, 02:47 am »

Lo ví así nomás, no me metí a debuguear mucho, el fin de semana me fijo mejor:

Código
  1. (ole32.CoGetObjectContext+174)
  2.  
  3. 7609649F   8BFF             MOV EDI,EDI
  4. 760964A1   55               PUSH EBP
  5. 760964A2   8BEC             MOV EBP,ESP
  6. 760964A4   83EC 2C          SUB ESP,2C
  7. 760964A7   A1 64641976      MOV EAX,DWORD PTR DS:[76196464]
  8. 760964AC   53               PUSH EBX
  9. 760964AD   56               PUSH ESI
  10. 760964AE   8B35 F8160576    MOV ESI,DWORD PTR DS:[<&USER32.RegisterClassW>]           ; USER32.RegisterClassW
  11. 760964B4   33DB             XOR EBX,EBX
  12. 760964B6   57               PUSH EDI
  13. 760964B7   8945 E4          MOV DWORD PTR SS:[EBP-1C],EAX
  14. 760964BA   8D45 D4          LEA EAX,DWORD PTR SS:[EBP-2C]
  15. 760964BD   BF B4630976      MOV EDI,ole32.760963B4                                    ; UNICODE "OleMainThreadWndClass"
  16. 760964C2   50               PUSH EAX
  17. 760964C3   895D FC          MOV DWORD PTR SS:[EBP-4],EBX
  18. 760964C6   895D D4          MOV DWORD PTR SS:[EBP-2C],EBX
  19. 760964C9   C745 D8 E5630976 MOV DWORD PTR SS:[EBP-28],ole32.760963E5
  20. 760964D0   895D DC          MOV DWORD PTR SS:[EBP-24],EBX
  21. 760964D3   C745 E0 0C000000 MOV DWORD PTR SS:[EBP-20],0C
  22. 760964DA   895D E8          MOV DWORD PTR SS:[EBP-18],EBX
  23. 760964DD   895D EC          MOV DWORD PTR SS:[EBP-14],EBX
  24. 760964E0   C745 F0 02000000 MOV DWORD PTR SS:[EBP-10],2
  25. 760964E7   895D F4          MOV DWORD PTR SS:[EBP-C],EBX
  26. 760964EA   897D F8          MOV DWORD PTR SS:[EBP-8],EDI
  27. 760964ED   FFD6             CALL ESI
  28. 760964EF   0FB7C0           MOVZX EAX,AX
  29. 760964F2   A3 CC641976      MOV DWORD PTR DS:[761964CC],EAX
  30. 760964F7   3BC3             CMP EAX,EBX
  31. 760964F9   0F84 9A1E0600    JE ole32.760F8399
  32. 760964FF   8B45 FC          MOV EAX,DWORD PTR SS:[EBP-4]
  33. 76096502   5F               POP EDI
  34. 76096503   5E               POP ESI
  35. 76096504   5B               POP EBX
  36. 76096505   C9               LEAVE
  37. 76096506   C3               RETN
  38.  
  39.  
  40. (ole32.CoGetObjectContext+EA)
  41. 76096415   8BFF             MOV EDI,EDI
  42. 76096417   56               PUSH ESI
  43. 76096418   33F6             XOR ESI,ESI
  44. 7609641A   46               INC ESI
  45. 7609641B   E8 0C370000      CALL ole32.76099B2C
  46. 76096420   85C0             TEST EAX,EAX
  47. 76096422   75 45            JNZ SHORT ole32.76096469
  48. 76096424   50               PUSH EAX
  49. 76096425   FF35 64641976    PUSH DWORD PTR DS:[76196464]                                                       ; ole32.76050000
  50. 7609642B   50               PUSH EAX
  51. 7609642C   6A FD            PUSH -3
  52. 7609642E   B8 00000080      MOV EAX,80000000
  53. 76096433   50               PUSH EAX
  54. 76096434   50               PUSH EAX
  55. 76096435   50               PUSH EAX
  56. 76096436   50               PUSH EAX
  57. 76096437   68 00000088      PUSH 88000000
  58. 7609643C   68 70640976      PUSH ole32.76096470                                                                ; UNICODE "OleMainThreadWndName"
  59. 76096441   FF35 CC641976    PUSH DWORD PTR DS:[761964CC]
  60. 76096447   6A 00            PUSH 0
  61. 76096449   FF15 1C170576    CALL DWORD PTR DS:[<&USER32.CreateWindowExW>]                                      ; USER32.CreateWindowExW
  62. 7609644F   A3 74651976      MOV DWORD PTR DS:[76196574],EAX
  63. 76096454   85C0             TEST EAX,EAX
  64. 76096456   0F84 E71E0600    JE ole32.760F8343
  65. 7609645C   FF15 98140576    CALL DWORD PTR DS:[<&API-MS-Win-Core-ProcessThreads-L1-1-0.GetCurrentThreadId>]    ; kernel32.GetCurrentThreadId
  66. 76096462   A3 E0641976      MOV DWORD PTR DS:[761964E0],EAX
  67. 76096467   33F6             XOR ESI,ESI
  68. 76096469   8BC6             MOV EAX,ESI
  69. 7609646B   5E               POP ESI
  70. 7609646C   C3               RETN
  71.  
  72.  
  73. (MSVBVM60.ThunRTMain+125E)
  74. 72944802   8B45 1C          MOV EAX,DWORD PTR SS:[EBP+1C]
  75. 72944805   8365 E0 00       AND DWORD PTR SS:[EBP-20],0
  76. 72944809   8945 D8          MOV DWORD PTR SS:[EBP-28],EAX
  77. 7294480C   8B45 0C          MOV EAX,DWORD PTR SS:[EBP+C]
  78. 7294480F   8945 DC          MOV DWORD PTR SS:[EBP-24],EAX
  79. 72944812   8B45 20          MOV EAX,DWORD PTR SS:[EBP+20]
  80. 72944815   8945 E4          MOV DWORD PTR SS:[EBP-1C],EAX
  81. 72944818   A1 D4E7A472      MOV EAX,DWORD PTR DS:[72A4E7D4]
  82. 7294481D   8945 E8          MOV DWORD PTR SS:[EBP-18],EAX
  83. 72944820   8B45 10          MOV EAX,DWORD PTR SS:[EBP+10]
  84. 72944823   8945 EC          MOV DWORD PTR SS:[EBP-14],EAX
  85. 72944826   8B45 14          MOV EAX,DWORD PTR SS:[EBP+14]
  86. 72944829   8365 F8 00       AND DWORD PTR SS:[EBP-8],0
  87. 7294482D   8945 F0          MOV DWORD PTR SS:[EBP-10],EAX
  88. 72944830   8B45 18          MOV EAX,DWORD PTR SS:[EBP+18]
  89. 72944833   8975 FC          MOV DWORD PTR SS:[EBP-4],ESI
  90. 72944836   8945 F4          MOV DWORD PTR SS:[EBP-C],EAX
  91. 72944839   8D45 D8          LEA EAX,DWORD PTR SS:[EBP-28]
  92. 7294483C   50               PUSH EAX
  93. 7294483D   FF15 A4139472    CALL DWORD PTR DS:[<&USER32.RegisterClassA>]                                       ; USER32.RegisterClassA
  94. 72944843   66:F7D8          NEG AX
  95.  
  96.  
  97. (MSVBVM60.ThunRTMain+74B)
  98. 72943CEF   53               PUSH EBX
  99. 72943CF0   53               PUSH EBX
  100. 72943CF1   53               PUSH EBX
  101. 72943CF2   53               PUSH EBX
  102. 72943CF3   53               PUSH EBX
  103. 72943CF4   68 D3789472      PUSH MSVBVM60.729478D3
  104. 72943CF9   68 F0989572      PUSH MSVBVM60.729598F0                                                             ; ASCII "VBFocusRT6"
  105. 72943CFE   E8 DC0A0000      CALL MSVBVM60.729447DF
  106. 72943D03   85C0             TEST EAX,EAX
  107. 72943D05   0F84 468F0100    JE MSVBVM60.7295CC51
  108. 72943D0B   391D E8E7A472    CMP DWORD PTR DS:[72A4E7E8],EBX
  109. 72943D11   0F84 2A8F0100    JE MSVBVM60.7295CC41
  110. 72943D17   6A 19            PUSH 19
  111. 72943D19   58               POP EAX
  112. 72943D1A   53               PUSH EBX
  113. 72943D1B   68 00080000      PUSH 800
  114. 72943D20   50               PUSH EAX
  115. 72943D21   53               PUSH EBX
  116. 72943D22   53               PUSH EBX
  117. 72943D23   68 29109772      PUSH MSVBVM60.72971029
  118. 72943D28   68 E0989572      PUSH MSVBVM60.729598E0                                                             ; ASCII "VBBubbleRT6"
  119. 72943D2D   E8 AD0A0000      CALL MSVBVM60.729447DF
  120. 72943D32   85C0             TEST EAX,EAX
  121. 72943D34   0F84 178F0100    JE MSVBVM60.7295CC51
  122. 72943D3A   A1 A8E8A472      MOV EAX,DWORD PTR DS:[72A4E8A8]
  123. 72943D3F   8B0D D8E7A472    MOV ECX,DWORD PTR DS:[72A4E7D8]                                                    ; LEN.00400000
  124.  
  125.  
  126. (MSVBVM60.ThunRTMain+2947)
  127. 72945EEB   55               PUSH EBP
  128. 72945EEC   8BEC             MOV EBP,ESP
  129. 72945EEE   83EC 34          SUB ESP,34
  130. 72945EF1   53               PUSH EBX
  131. 72945EF2   56               PUSH ESI
  132. 72945EF3   57               PUSH EDI
  133. 72945EF4   68 98E4A472      PUSH MSVBVM60.72A4E498
  134. 72945EF9   8D4D FC          LEA ECX,DWORD PTR SS:[EBP-4]
  135. 72945EFC   E8 53D6FFFF      CALL MSVBVM60.72943554
  136. 72945F01   8D45 CC          LEA EAX,DWORD PTR SS:[EBP-34]
  137. 72945F04   BB 08A29572      MOV EBX,MSVBVM60.7295A208                                                          ; ASCII "ThunderRT6Main"
  138. 72945F09   50               PUSH EAX
  139. 72945F0A   53               PUSH EBX
  140. 72945F0B   FF35 D4E7A472    PUSH DWORD PTR DS:[72A4E7D4]                                                       ; MSVBVM60.#1374
  141. 72945F11   FF15 F8129472    CALL DWORD PTR DS:[<&USER32.GetClassInfoExA>]                                      ; USER32.GetClassInfoExA
  142. 72945F17   33F6             XOR ESI,ESI
  143. 72945F19   85C0             TEST EAX,EAX
  144. 72945F1B   75 71            JNZ SHORT MSVBVM60.72945F8E
  145. 72945F1D   6A 0C            PUSH 0C
  146. 72945F1F   8D7D CC          LEA EDI,DWORD PTR SS:[EBP-34]
  147. 72945F22   59               POP ECX
  148. 72945F23   6A 01            PUSH 1
  149. 72945F25   FF35 D8E7A472    PUSH DWORD PTR DS:[72A4E7D8]                                                       ; LEN.00400000
  150. 72945F2B   F3:AB            REP STOS DWORD PTR ES:[EDI]
  151. 72945F2D   A1 D4E7A472      MOV EAX,DWORD PTR DS:[72A4E7D4]
  152. 72945F32   C745 D4 25619472 MOV DWORD PTR SS:[EBP-2C],MSVBVM60.72946125
  153. 72945F39   8945 E0          MOV DWORD PTR SS:[EBP-20],EAX
  154. 72945F3C   895D F4          MOV DWORD PTR SS:[EBP-C],EBX
  155. 72945F3F   FF15 FC129472    CALL DWORD PTR DS:[<&USER32.LoadIconA>]                                            ; USER32.LoadIconA
  156. 72945F45   3935 E8E7A472    CMP DWORD PTR DS:[72A4E7E8],ESI
  157. 72945F4B   8945 E4          MOV DWORD PTR SS:[EBP-1C],EAX
  158. 72945F4E   74 24            JE SHORT MSVBVM60.72945F74
  159. 72945F50   56               PUSH ESI
  160. 72945F51   6A 32            PUSH 32
  161. 72945F53   E8 C4000000      CALL MSVBVM60.7294601C
  162. 72945F58   50               PUSH EAX
  163. 72945F59   6A 31            PUSH 31
  164. 72945F5B   E8 BC000000      CALL MSVBVM60.7294601C
  165. 72945F60   50               PUSH EAX
  166. 72945F61   6A 01            PUSH 1
  167. 72945F63   6A 01            PUSH 1
  168. 72945F65   FF35 D8E7A472    PUSH DWORD PTR DS:[72A4E7D8]                                                       ; LEN.00400000
  169. 72945F6B   FF15 00139472    CALL DWORD PTR DS:[<&USER32.LoadImageA>]                                           ; USER32.LoadImageA
  170. 72945F71   8945 F8          MOV DWORD PTR SS:[EBP-8],EAX
  171. 72945F74   8D45 CC          LEA EAX,DWORD PTR SS:[EBP-34]
  172. 72945F77   C745 CC 30000000 MOV DWORD PTR SS:[EBP-34],30
  173. 72945F7E   50               PUSH EAX
  174. 72945F7F   FF15 04139472    CALL DWORD PTR DS:[<&USER32.RegisterClassExA>]                                     ; USER32.RegisterClassExA
  175. 72945F85   66:85C0          TEST AX,AX
  176.  
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
« Respuesta #5 en: 21 Marzo 2015, 15:06 pm »

« Última modificación: 21 Marzo 2015, 15:08 pm por Miseryk » En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010?
« Respuesta #6 en: 24 Marzo 2015, 20:19 pm »

Lo que pasa es que CreateWindow/CreateWindowEx y RegisterClass/RegisterClassEx crean un formulario desde 0 y no tiene dependencia con msvbvm60.dll y en cualquier caso con User32.dll, que siempre está disponible en windows.

Por ahora, voy ha dejar el tema y la programación durante un tiempo para centrarme en otras cosas. Pero gracias de todos modos.  :D

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cambiar el pass de un form con ficheros
Programación Visual Basic
juanjoxx 3 1,699 Último mensaje 8 Abril 2006, 06:30 am
por juanjoxx
Problema VB.NET2010
.NET (C#, VB.NET, ASP)
Chuxxx 3 2,685 Último mensaje 26 Septiembre 2010, 14:29 pm
por ABDERRAMAH
[Duda] Mostrar nueva pantalla sin cambiar de Form
.NET (C#, VB.NET, ASP)
z3nth10n 7 4,374 Último mensaje 29 Mayo 2013, 11:24 am
por Eleкtro
¿Es posible crear un paquete de instalación en VB.Net2010 sin archivo msi?
Programación Visual Basic
okik 0 1,348 Último mensaje 9 Febrero 2015, 18:39 pm
por okik
Cambiar el ClassName de un formulario
.NET (C#, VB.NET, ASP)
Lekim 4 3,670 Último mensaje 3 Marzo 2016, 18:59 pm
por Lekim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines