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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)  (Leído 3,298 veces)
chuky666

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)
« en: 22 Septiembre 2010, 18:01 pm »

Hola, saludos a todos y muchas gracias de antemano. Me estoy iniciando en este mundillo de la ingeniería inversa y después de leerme unos cuantos tutos y crackmes me decidí por intentar registrar este programa:

http://sp.financessoftware.com/downloads/PersonalFinancesPro.zip

Es un programa portable que no necesita instalación. No es el típico con nombre/número de serie. Sólo pide un número de serie. El problema es que no da mensaje de si es válido o no. Lo sabes al reiniciar el programa porque te vuelve a salir una ventana con el aviso de que no está registrado.

Hay otra cosa que lo diferencia de los típicos y es que si no está registrado no permite (en teoría) más de 200 transacciones. Digo en teoría porque a mí a veces me sale el límite a 270 a veces a 290 (es un poco confuso eso).

Bueno comienzo mirándolo con el PEid y veo que está compilado con Borland C++ 1999. Creo que no pinta mal la cosa.

Me voy al Olly y aqui empiezan los problemas:

1) Imposible localizar las cadenas de texto chico bueno chico malo, por lo menos en el módulo principal (dependen del idioma escogido y están almacenas en un fichero de texto en la carpeta LANG)

2) Lo intento a través de las funciones GetWindowTextA, MessageBoxA y GetDlgItemTextA pero tampoco hay suerte parece que utiliza APIs diferentes.

3) Intento tracear el programa e ir colocando BP a ver si consigo localizar la rutina "manualmente" pero se hace muy complejo (hay demasiados saltos y a la mínima me paso de la rutina de comprobación)

Alguien puede echarle un vistazo y ayudarme un poquito, o al menos orientarme sobre qué otras opciones tengo?

Saludos y gracias de nuevo


PD.:  4) He intentado otro camino: colocar un BP on WinProc para que pare al pulsar el botón del OK (202) pero tampoco ha habido suerte. Alguna idea?
« Última modificación: 22 Septiembre 2010, 18:31 pm por chuky666 » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)
« Respuesta #1 en: 22 Septiembre 2010, 19:54 pm »

Cuando los programas cargan las cadenas de archivos externos, normalmente usan identificadores para ubicarlas (a menos que lo hagan en forma binaria).

Puedes intentar ubicar esos ids con el fin de tratar de parar el proggie cuando carga cadenas "criticas" como unregistered, etc, etc y a partir de ahi, atacar la rutina de registracion.

Tambien puedes buscar el momento en que se inicializa la variable que lleva el conteo de las transacciones. Buscando, por ej.: MOV MEM32, 0C8 o PUSH 0C8 o algo por el estilo. Si el valor lo recupera en tiempo de ejecucion (no utilizando variables) puedes buscar algo asi como CMP R32, 0C8.

Puedes buscar el lugar donde guarda los seriales (registro, archivo, etc) y tratar de parar cuando lo comprueba (usando APIs: RegQueryValue, CreateFile, etc) asi puedes ver que variables cambian cuando el serial es bueno o malo.

En fin, hay miles de posibilidades, la cuestion es empezar a descartar...

Saludos!
En línea

MCKSys Argentina

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

chuky666

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)
« Respuesta #2 en: 24 Septiembre 2010, 21:04 pm »

Buenas de nuevo, he estado investigando un poco más el tema y esto es lo que he encontrado:

1) He encontrado una serie de cadenas de texto un poco curiosas (puede que no sean nada):

ASCII "CFxEbcO3L97KueEyods0xOO4j9x9knUtIc5SQl7NvroJxs8PD9tOhaP48FtKrNDHGAkIxnlY3R1OGGtAT0mA36dcOx1WnJMKh58KIbw2liNWLAyGOBtKzEPYq7OuJVjnK7qs1HnFCyLeCjT97HW9N24hXMBaMjkMgW3wt5DPX75mJySLxUYapIugXsw7l5HraJ0aAhGFZh5KnLr1ZXH7jNW4aai2ecGdvecvd3Im2n1gM"...

UNICODE "WERTYUPASDFGHKZXCVBNM23456789weryupasdfghkzxcvbnm"
UNICODE "GIVEAWAYOFTHEDAYXXXXPFH7K"
UNICODE "hmXsC8mWHsCc6eggh9h5PFH7K"
ASCII "-PFH8K"
ASCII "-PFH9K"
ASCII "c9adbf8d-9980-450c-8f92-e8320eb609f4"

2) los mensajes del fichero de texto se cargan en memoria a partir de la dirección 16e0000 y cuando se va a mostrar uno (estoy no estoy seguro de que sea siempre asi) se copia a la dirección 17c1dfc (por lo menos eso ocurre con el mensaje "parece una licencia de Personal Finances Home")

3) Lo de buscar la variable de conteo lo veo un poco complicado MCKSys. Además el número de transacciones es variable, a veces es a 273, a veces a 297... es un poco raro)

4) Buscando las APIs CreateFileW y CreateFileA (gracias MCKSys), colocando BP, teniendo como referencia la clave de prueba que introduzco (56814) y traceando un poco he localizado dos rutinas que creo que comprueban mi número. Una desde 5daf6f a 5db459 y otra desde 581b1e a 581cc3. La primera la hace si ya hemos introducido un serial previamente y se ha generado el fichero key.dat (supongo que es la comprobación inicial que hace el programa). La segunda la hace justo después de introducir el serial y antes de mostrar el mensaje "parece una licencia de Personal Finances Home". En ámbas la llamada CALL 8562e4 carga en el registro EDX nuestro serial.

4) He analizado un poco las rutinas y creo que hacen la comprobación de la siguiente forma: (usan un bucle que se repite en función de la longitud del número introducido)

Mí serial: 56814
ronda 1- elimina la primera cifra para hacer unas operaciones (6814)
ronda 2 - elimina las 2 primeras cifras (814)
ronda 3 - elimina las 3 primeras cifras (14)
-------
ultima ronda

La rutina me parece un poco complicada de entender en detalle así que si alguien puede echarle un vistazo y orientarme un poco se lo agradecería.

Esta es la rutina:

CPU Disasm
Address   Hex dump          Command                                  Comments
Código
  1. 005DAF6F  |> /8BFE          /MOV EDI,ESI
  2. 005DAF71  |. |57            |PUSH EDI                                ; /Arg2
  3. 005DAF72  |. |8D45 CC       |LEA EAX,[LOCAL.13]                      ; |
  4. 005DAF75  |. |50            |PUSH EAX                                ; |Arg1 => OFFSET LOCAL.13
  5. 005DAF76  |. |E8 E9AF2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
  6. 005DAF7B  |. |83C4 08       |ADD ESP,8
  7. 005DAF7E  |. |8D45 CC       |LEA EAX,[LOCAL.13]
  8. 005DAF81  |. |E8 5EB32700   |CALL 008562E4
  9. 005DAF86  |. |03FF          |ADD EDI,EDI
  10. 005DAF88  |. |8D8D E6FEFFFF |LEA ECX,[LOCAL.71+2]
  11. 005DAF8E  |. |037D CC       |ADD EDI,DWORD PTR SS:[LOCAL.13]
  12. 005DAF91  |. |83C7 FE       |ADD EDI,-2
  13. 005DAF94  |. |66:8B17       |MOV DX,WORD PTR DS:[EDI]
  14. 005DAF97  |. |66:8995 E6FEF |MOV WORD PTR SS:[LOCAL.71+2],DX
  15. 005DAF9E  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],0C
  16. 005DAFA7  |. |51            |PUSH ECX                                ; /Arg2
  17. 005DAFA8  |. |8D4D D0       |LEA ECX,[LOCAL.12]                      ; |
  18. 005DAFAB  |. |51            |PUSH ECX                                ; |Arg1 => OFFSET LOCAL.12
  19. 005DAFAC  |. |E8 2B0D0000   |CALL 005DBCDC                           ; \PersonalFinances.005DBCDC
  20. 005DAFB1  |. |83C4 08       |ADD ESP,8
  21. 005DAFB4  |. |8985 E0FEFFFF |MOV DWORD PTR SS:[LOCAL.72],EAX
  22. 005DAFBA  |. |8B85 E0FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.72]
  23. 005DAFC0  |. |8985 38FEFFFF |MOV DWORD PTR SS:[LOCAL.114],EAX
  24. 005DAFC6  |. |8B55 F8       |MOV EDX,DWORD PTR SS:[LOCAL.2]
  25. 005DAFC9  |. |8995 DCFEFFFF |MOV DWORD PTR SS:[LOCAL.73],EDX
  26. 005DAFCF  |. |8B8D DCFEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.73]
  27. 005DAFD5  |. |898D 28FEFFFF |MOV DWORD PTR SS:[LOCAL.118],ECX
  28. 005DAFDB  |. |8B85 28FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.118]
  29. 005DAFE1  |. |3B85 38FEFFFF |CMP EAX,DWORD PTR SS:[LOCAL.114]
  30. 005DAFE7  |. |0F94C2        |SETE DL
  31. 005DAFEA  |. |83E2 01       |AND EDX,00000001
  32. 005DAFED  |. |84D2          |TEST DL,DL
  33. 005DAFEF  |. |75 27         |JNE SHORT 005DB018
  34. 005DAFF1  |. |8B8D 38FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.114]
  35. 005DAFF7  |. |898D D8FEFFFF |MOV DWORD PTR SS:[LOCAL.74],ECX
  36. 005DAFFD  |. |8B85 D8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.74]
  37. 005DB003  |. |66:8B50 0C    |MOV DX,WORD PTR DS:[EAX+0C]
  38. 005DB007  |. |66:3B95 E6FEF |CMP DX,WORD PTR SS:[LOCAL.71+2]
  39. 005DB00E  |. |0F97C1        |SETA CL
  40. 005DB011  |. |83E1 01       |AND ECX,00000001
  41. 005DB014  |. |84C9          |TEST CL,CL
  42. 005DB016  |. |74 1D         |JE SHORT 005DB035
  43. 005DB018  |> |8B45 F8       |MOV EAX,DWORD PTR SS:[LOCAL.2]
  44. 005DB01B  |. |8DBD 10FEFFFF |LEA EDI,[LOCAL.124]
  45. 005DB021  |. |8985 D4FEFFFF |MOV DWORD PTR SS:[LOCAL.75],EAX
  46. 005DB027  |. |8B95 D4FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.75]
  47. 005DB02D  |. |8995 18FEFFFF |MOV DWORD PTR SS:[LOCAL.122],EDX
  48. 005DB033  |. |EB 06         |JMP SHORT 005DB03B
  49. 005DB035  |> |8DBD 30FEFFFF |LEA EDI,[LOCAL.116]
  50. 005DB03B  |> |8B07          |MOV EAX,DWORD PTR DS:[EDI]
  51. 005DB03D  |. |8985 00FEFFFF |MOV DWORD PTR SS:[LOCAL.128],EAX
  52. 005DB043  |. |8B47 04       |MOV EAX,DWORD PTR DS:[EDI+4]
  53. 005DB046  |. |8985 04FEFFFF |MOV DWORD PTR SS:[LOCAL.127],EAX
  54. 005DB04C  |. |8B57 08       |MOV EDX,DWORD PTR DS:[EDI+8]
  55. 005DB04F  |. |8995 08FEFFFF |MOV DWORD PTR SS:[LOCAL.126],EDX
  56. 005DB055  |. |8B4D F8       |MOV ECX,DWORD PTR SS:[LOCAL.2]
  57. 005DB058  |. |898D D0FEFFFF |MOV DWORD PTR SS:[LOCAL.76],ECX
  58. 005DB05E  |. |8B8D D0FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.76]
  59. 005DB064  |. |898D F8FDFFFF |MOV DWORD PTR SS:[LOCAL.130],ECX
  60. 005DB06A  |. |8B85 08FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.126]
  61. 005DB070  |. |3B85 F8FDFFFF |CMP EAX,DWORD PTR SS:[LOCAL.130]
  62. 005DB076  |. |0F94C2        |SETE DL
  63. 005DB079  |. |83E2 01       |AND EDX,00000001
  64. 005DB07C  |. |84D2          |TEST DL,DL
  65. 005DB07E  |. |74 3D         |JE SHORT 005DB0BD
  66. 005DB080  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],0F0
  67. 005DB089  |. |BA 42179200   |MOV EDX,OFFSET 00921742
  68. 005DB08E  |. |8D45 90       |LEA EAX,[LOCAL.28]
  69. 005DB091  |. |E8 6EB02700   |CALL 00856104
  70. 005DB096  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
  71. 005DB09C  |. |8D55 90       |LEA EDX,[LOCAL.28]
  72. 005DB09F  |. |8D83 84000000 |LEA EAX,[EBX+84]
  73. 005DB0A5  |. |E8 E6B02700   |CALL 00856190                           ; [PersonalFinances.00856190
  74. 005DB0AA  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
  75. 005DB0B0  |. |8D45 90       |LEA EAX,[LOCAL.28]
  76. 005DB0B3  |. |BA 02000000   |MOV EDX,2
  77. 005DB0B8  |. |E8 ABB02700   |CALL 00856168
  78. 005DB0BD  |> |0FB78D E6FEFF |MOVZX ECX,WORD PTR SS:[LOCAL.71+2]
  79. 005DB0C4  |. |018D E8FEFFFF |ADD DWORD PTR SS:[LOCAL.70],ECX
  80. 005DB0CA  |. |8B4B 78       |MOV ECX,DWORD PTR DS:[EBX+78]
  81. 005DB0CD  |. |83F9 04       |CMP ECX,4                               ; Switch (cases 0..4, 6 exits)
  82. 005DB0D0  |. |0F87 F2020000 |JA 005DB3C8
  83. 005DB0D6  |. |FF248D DDB05D |JMP DWORD PTR DS:[ECX*4+5DB0DD]
  84. 005DB0DD  |. |F1B05D00      |DD 005DB0F1
  85. 005DB0E1  |. |80B15D00      |DD 005DB180
  86. 005DB0E5  |. |18B25D00      |DD 005DB218
  87. 005DB0E9  |. |ACB25D00      |DD 005DB2AC
  88. 005DB0ED  |. |32B35D00      |DD 005DB332
  89. 005DB0F1  |> |83FE 08       |CMP ESI,8                               ; Case 0 of switch PersonalFinances.5DB0CD
  90. 005DB0F4  |. |0F8F CE020000 |JG 005DB3C8
  91. 005DB0FA  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],0FC
  92. 005DB103  |. |66:8B85 E6FEF |MOV AX,WORD PTR SS:[LOCAL.71+2]
  93. 005DB10A  |. |66:8985 CEFEF |MOV WORD PTR SS:[LOCAL.77+2],AX
  94. 005DB111  |. |33D2          |XOR EDX,EDX
  95. 005DB113  |. |8955 8C       |MOV DWORD PTR SS:[LOCAL.29],EDX
  96. 005DB116  |. |8D45 8C       |LEA EAX,[LOCAL.29]
  97. 005DB119  |. |BA 01000000   |MOV EDX,1
  98. 005DB11E  |. |E8 29B22700   |CALL 0085634C
  99. 005DB123  |. |8985 C8FEFFFF |MOV DWORD PTR SS:[LOCAL.78],EAX
  100. 005DB129  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
  101. 005DB12B  |. |8B8D C8FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.78]         ; |
  102. 005DB131  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.78]
  103. 005DB132  |. |E8 2DAE2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
  104. 005DB137  |. |83C4 08       |ADD ESP,8
  105. 005DB13A  |. |8B85 C8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.78]
  106. 005DB140  |. |E8 9FB12700   |CALL 008562E4
  107. 005DB145  |. |8B95 C8FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.78]
  108. 005DB14B  |. |8D45 C8       |LEA EAX,[LOCAL.14]
  109. 005DB14E  |. |66:8BBD CEFEF |MOV DI,WORD PTR SS:[LOCAL.77+2]
  110. 005DB155  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
  111. 005DB157  |. |8D55 8C       |LEA EDX,[LOCAL.29]
  112. 005DB15A  |. |66:8939       |MOV WORD PTR DS:[ECX],DI
  113. 005DB15D  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
  114. 005DB163  |. |E8 3CB02700   |CALL 008561A4                           ; [PersonalFinances.008561A4
  115. 005DB168  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
  116. 005DB16E  |. |8D45 8C       |LEA EAX,[LOCAL.29]
  117. 005DB171  |. |BA 02000000   |MOV EDX,2
  118. 005DB176  |. |E8 EDAF2700   |CALL 00856168
  119. 005DB17B  |. |E9 48020000   |JMP 005DB3C8
  120. 005DB180  |> |83FE 05       |CMP ESI,5                               ; Case 1 of switch PersonalFinances.5DB0CD
  121. 005DB183  |. |0F8E 3F020000 |JLE 005DB3C8
  122. 005DB189  |. |83FE 0F       |CMP ESI,0F
  123. 005DB18C  |. |0F8F 36020000 |JG 005DB3C8
  124. 005DB192  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],108
  125. 005DB19B  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
  126. 005DB1A2  |. |66:898D C6FEF |MOV WORD PTR SS:[LOCAL.79+2],CX
  127. 005DB1A9  |. |33C9          |XOR ECX,ECX
  128. 005DB1AB  |. |894D 88       |MOV DWORD PTR SS:[LOCAL.30],ECX
  129. 005DB1AE  |. |8D45 88       |LEA EAX,[LOCAL.30]
  130. 005DB1B1  |. |BA 01000000   |MOV EDX,1
  131. 005DB1B6  |. |E8 91B12700   |CALL 0085634C
  132. 005DB1BB  |. |8985 C0FEFFFF |MOV DWORD PTR SS:[LOCAL.80],EAX
  133. 005DB1C1  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
  134. 005DB1C3  |. |8B8D C0FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.80]         ; |
  135. 005DB1C9  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.80]
  136. 005DB1CA  |. |E8 95AD2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
  137. 005DB1CF  |. |83C4 08       |ADD ESP,8
  138. 005DB1D2  |. |8B85 C0FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.80]
  139. 005DB1D8  |. |E8 07B12700   |CALL 008562E4
  140. 005DB1DD  |. |8B95 C0FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.80]
  141. 005DB1E3  |. |66:8B85 C6FEF |MOV AX,WORD PTR SS:[LOCAL.79+2]
  142. 005DB1EA  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
  143. 005DB1EC  |. |8D55 88       |LEA EDX,[LOCAL.30]
  144. 005DB1EF  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
  145. 005DB1F2  |. |8D45 C8       |LEA EAX,[LOCAL.14]
  146. 005DB1F5  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
  147. 005DB1FB  |. |E8 A4AF2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
  148. 005DB200  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
  149. 005DB206  |. |8D45 88       |LEA EAX,[LOCAL.30]
  150. 005DB209  |. |BA 02000000   |MOV EDX,2
  151. 005DB20E  |. |E8 55AF2700   |CALL 00856168
  152. 005DB213  |. |E9 B0010000   |JMP 005DB3C8
  153. 005DB218  |> |83FE 05       |CMP ESI,5                               ; Case 2 of switch PersonalFinances.5DB0CD
  154. 005DB21B  |. |7E 09         |JLE SHORT 005DB226
  155. 005DB21D  |. |83FE 0F       |CMP ESI,0F
  156. 005DB220  |. |0F8E A2010000 |JLE 005DB3C8
  157. 005DB226  |> |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],114
  158. 005DB22F  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
  159. 005DB236  |. |66:898D BEFEF |MOV WORD PTR SS:[LOCAL.81+2],CX
  160. 005DB23D  |. |33C9          |XOR ECX,ECX
  161. 005DB23F  |. |894D 84       |MOV DWORD PTR SS:[LOCAL.31],ECX
  162. 005DB242  |. |8D45 84       |LEA EAX,[LOCAL.31]
  163. 005DB245  |. |BA 01000000   |MOV EDX,1
  164. 005DB24A  |. |E8 FDB02700   |CALL 0085634C
  165. 005DB24F  |. |8985 B8FEFFFF |MOV DWORD PTR SS:[LOCAL.82],EAX
  166. 005DB255  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
  167. 005DB257  |. |8B8D B8FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.82]         ; |
  168. 005DB25D  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.82]
  169. 005DB25E  |. |E8 01AD2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
  170. 005DB263  |. |83C4 08       |ADD ESP,8
  171. 005DB266  |. |8B85 B8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.82]
  172. 005DB26C  |. |E8 73B02700   |CALL 008562E4
  173. 005DB271  |. |8B95 B8FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.82]
  174. 005DB277  |. |66:8B85 BEFEF |MOV AX,WORD PTR SS:[LOCAL.81+2]
  175. 005DB27E  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
  176. 005DB280  |. |8D55 84       |LEA EDX,[LOCAL.31]
  177. 005DB283  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
  178. 005DB286  |. |8D45 C8       |LEA EAX,[LOCAL.14]
  179. 005DB289  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
  180. 005DB28F  |. |E8 10AF2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
  181. 005DB294  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
  182. 005DB29A  |. |8D45 84       |LEA EAX,[LOCAL.31]
  183. 005DB29D  |. |BA 02000000   |MOV EDX,2
  184. 005DB2A2  |. |E8 C1AE2700   |CALL 00856168
  185. 005DB2A7  |. |E9 1C010000   |JMP 005DB3C8
  186. 005DB2AC  |> |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],120          ; Case 3 of switch PersonalFinances.5DB0CD
  187. 005DB2B5  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
  188. 005DB2BC  |. |66:898D B6FEF |MOV WORD PTR SS:[LOCAL.83+2],CX
  189. 005DB2C3  |. |33C9          |XOR ECX,ECX
  190. 005DB2C5  |. |894D 80       |MOV DWORD PTR SS:[LOCAL.32],ECX
  191. 005DB2C8  |. |8D45 80       |LEA EAX,[LOCAL.32]
  192. 005DB2CB  |. |BA 01000000   |MOV EDX,1
  193. 005DB2D0  |. |E8 77B02700   |CALL 0085634C
  194. 005DB2D5  |. |8985 B0FEFFFF |MOV DWORD PTR SS:[LOCAL.84],EAX
  195. 005DB2DB  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
  196. 005DB2DD  |. |8B8D B0FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.84]         ; |
  197. 005DB2E3  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.84]
  198. 005DB2E4  |. |E8 7BAC2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
  199. 005DB2E9  |. |83C4 08       |ADD ESP,8
  200. 005DB2EC  |. |8B85 B0FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.84]
  201. 005DB2F2  |. |E8 EDAF2700   |CALL 008562E4
  202. 005DB2F7  |. |8B95 B0FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.84]
  203. 005DB2FD  |. |66:8B85 B6FEF |MOV AX,WORD PTR SS:[LOCAL.83+2]
  204. 005DB304  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
  205. 005DB306  |. |8D55 80       |LEA EDX,[LOCAL.32]
  206. 005DB309  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
  207. 005DB30C  |. |8D45 C8       |LEA EAX,[LOCAL.14]
  208. 005DB30F  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
  209. 005DB315  |. |E8 8AAE2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
  210. 005DB31A  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
  211. 005DB320  |. |8D45 80       |LEA EAX,[LOCAL.32]
  212. 005DB323  |. |BA 02000000   |MOV EDX,2
  213. 005DB328  |. |E8 3BAE2700   |CALL 00856168
  214. 005DB32D  |. |E9 96000000   |JMP 005DB3C8
  215. 005DB332  |> |83FE 0A       |CMP ESI,0A                              ; Case 4 of switch PersonalFinances.5DB0CD
  216. 005DB335  |. |0F8E 8D000000 |JLE 005DB3C8
  217. 005DB33B  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],12C
  218. 005DB344  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
  219. 005DB34B  |. |66:898D AEFEF |MOV WORD PTR SS:[LOCAL.85+2],CX
  220. 005DB352  |. |33C9          |XOR ECX,ECX
  221. 005DB354  |. |898D 7CFFFFFF |MOV DWORD PTR SS:[LOCAL.33],ECX
  222. 005DB35A  |. |8D85 7CFFFFFF |LEA EAX,[LOCAL.33]
  223. 005DB360  |. |BA 01000000   |MOV EDX,1
  224. 005DB365  |. |E8 E2AF2700   |CALL 0085634C
  225. 005DB36A  |. |8985 A8FEFFFF |MOV DWORD PTR SS:[LOCAL.86],EAX
  226. 005DB370  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
  227. 005DB372  |. |8B8D A8FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.86]         ; |
  228. 005DB378  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.86]
  229. 005DB379  |. |E8 E6AB2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
  230. 005DB37E  |. |83C4 08       |ADD ESP,8
  231. 005DB381  |. |8B85 A8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.86]
  232. 005DB387  |. |E8 58AF2700   |CALL 008562E4
  233. 005DB38C  |. |8B95 A8FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.86]
  234. 005DB392  |. |66:8B85 AEFEF |MOV AX,WORD PTR SS:[LOCAL.85+2]
  235. 005DB399  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
  236. 005DB39B  |. |8D95 7CFFFFFF |LEA EDX,[LOCAL.33]
  237. 005DB3A1  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
  238. 005DB3A4  |. |8D45 C8       |LEA EAX,[LOCAL.14]
  239. 005DB3A7  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
  240. 005DB3AD  |. |E8 F2AD2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
  241. 005DB3B2  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
  242. 005DB3B8  |. |8D85 7CFFFFFF |LEA EAX,[LOCAL.33]
  243. 005DB3BE  |. |BA 02000000   |MOV EDX,2
  244. 005DB3C3  |. |E8 A0AD2700   |CALL 00856168
  245. 005DB3C8  |> |83FE 06       |CMP ESI,6                               ; Default case of switch PersonalFinances.5DB0CD
  246. 005DB3CB  |. |7D 79         |JGE SHORT 005DB446
  247. 005DB3CD  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],138
  248. 005DB3D6  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
  249. 005DB3DD  |. |66:898D A6FEF |MOV WORD PTR SS:[LOCAL.87+2],CX
  250. 005DB3E4  |. |33C9          |XOR ECX,ECX
  251. 005DB3E6  |. |898D 78FFFFFF |MOV DWORD PTR SS:[LOCAL.34],ECX
  252. 005DB3EC  |. |8D85 78FFFFFF |LEA EAX,[LOCAL.34]
  253. 005DB3F2  |. |BA 01000000   |MOV EDX,1
  254. 005DB3F7  |. |E8 50AF2700   |CALL 0085634C
  255. 005DB3FC  |. |8BF8          |MOV EDI,EAX
  256. 005DB3FE  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
  257. 005DB400  |. |57            |PUSH EDI                                ; |Arg1
  258. 005DB401  |. |E8 5EAB2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
  259. 005DB406  |. |83C4 08       |ADD ESP,8
  260. 005DB409  |. |8BC7          |MOV EAX,EDI
  261. 005DB40B  |. |E8 D4AE2700   |CALL 008562E4
  262. 005DB410  |. |66:8B8D A6FEF |MOV CX,WORD PTR SS:[LOCAL.87+2]
  263. 005DB417  |. |8B17          |MOV EDX,DWORD PTR DS:[EDI]
  264. 005DB419  |. |8D45 C4       |LEA EAX,[LOCAL.15]
  265. 005DB41C  |. |66:890A       |MOV WORD PTR DS:[EDX],CX
  266. 005DB41F  |. |8D95 78FFFFFF |LEA EDX,[LOCAL.34]
  267. 005DB425  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
  268. 005DB42B  |. |E8 74AD2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
  269. 005DB430  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
  270. 005DB436  |. |8D85 78FFFFFF |LEA EAX,[LOCAL.34]
  271. 005DB43C  |. |BA 02000000   |MOV EDX,2
  272. 005DB441  |. |E8 22AD2700   |CALL 00856168
  273. 005DB446  |> |46            |INC ESI
  274. 005DB447  |> |837D CC 00    |CMP DWORD PTR SS:[LOCAL.13],0
  275. 005DB44B  |. |74 08         |JE SHORT 005DB455
  276. 005DB44D  |. |8B4D CC       |MOV ECX,DWORD PTR SS:[LOCAL.13]
  277. 005DB450  |. |8B49 FC       |MOV ECX,DWORD PTR DS:[ECX-4]
  278. 005DB453  |. |EB 02         |JMP SHORT 005DB457
  279. 005DB455  |> |33C9          |XOR ECX,ECX
  280. 005DB457  |> |3BF1          |CMP ESI,ECX
  281. 005DB459  |.^\0F8E 10FBFFFF \JLE 005DAF6F
« Última modificación: 25 Septiembre 2010, 12:47 pm por chuky666 » En línea

chuky666

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)
« Respuesta #3 en: 25 Septiembre 2010, 12:55 pm »

Dentro de esta rutina después de cargar en EDX nuestro serial (mediante el CALL 8562E4) hace una llamada a otra rutina más sencilla que también hace una serie de operaciones similares (en las que está involucrado nuestro serial), es ésta:

Código
  1. 005DBCDC  /$  55            PUSH EBP                                 ; PersonalFinances.005DBCDC(guessed Arg1,Arg2)
  2. 005DBCDD  |.  8BEC          MOV EBP,ESP
  3. 005DBCDF  |.  53            PUSH EBX
  4. 005DBCE0  |.  56            PUSH ESI
  5. 005DBCE1  |.  8B75 0C       MOV ESI,DWORD PTR SS:[ARG.2]
  6. 005DBCE4  |.  8B55 08       MOV EDX,DWORD PTR SS:[ARG.1]
  7. 005DBCE7  |.  8B4A 28       MOV ECX,DWORD PTR DS:[EDX+28]
  8. 005DBCEA  |.  8B41 04       MOV EAX,DWORD PTR DS:[ECX+4]
  9. 005DBCED  |.  EB 1C         JMP SHORT 005DBD0B
  10. 005DBCEF  |>  8BD0          /MOV EDX,EAX
  11. 005DBCF1  |.  66:8B1E       |MOV BX,WORD PTR DS:[ESI]
  12. 005DBCF4  |.  66:3B5A 0C    |CMP BX,WORD PTR DS:[EDX+0C]
  13. 005DBCF8  |.  0F97C2        |SETA DL
  14. 005DBCFB  |.  83E2 01       |AND EDX,00000001
  15. 005DBCFE  |.  84D2          |TEST DL,DL
  16. 005DBD00  |.  74 05         |JE SHORT 005DBD07
  17. 005DBD02  |.  8B40 08       |MOV EAX,DWORD PTR DS:[EAX+8]
  18. 005DBD05  |.  EB 04         |JMP SHORT 005DBD0B
  19. 005DBD07  |>  8BC8          |MOV ECX,EAX
  20. 005DBD09  |.  8B00          |MOV EAX,DWORD PTR DS:[EAX]
  21. 005DBD0B  |>  8078 0F 00    |CMP BYTE PTR DS:[EAX+0F],0
  22. 005DBD0F  |.^ 74 DE         \JE SHORT 005DBCEF
  23. 005DBD11  |.  8BC1          MOV EAX,ECX
  24. 005DBD13  |.  5E            POP ESI
  25. 005DBD14  |.  5B            POP EBX
  26. 005DBD15  |.  5D            POP EBP
  27. 005DBD16  \.  C3            RETN

¿Alguién le ve algún sentido?

En la rutina anterior después de hacer varias operaciones hace una comparación (005DB0CD) y hay varios casos posibles, ¿que situaciones representan?

Saludos y gracias de nuevo
En línea

LSL

Desconectado Desconectado

Mensajes: 239

Cls


Ver Perfil
Re: Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)
« Respuesta #4 en: 30 Septiembre 2010, 23:23 pm »

partiendo del lugar donde coge una de las cadenas que calificastes como curiosas

00581734  |> \BA A0078D00   MOV EDX,008D07A0                  ;  ASCII "hmXsC8mWHsCc6eggh9h5PFH7K"; Default case of switch 00581538

subimos en el código para ver si con un poco de suerte nos encontramos algo interesante

y vemos lo siguiente:

0058152D  |.  84C9                TEST CL,CL
0058152F  |.  74 07               JE SHORT 00581538
00581531  |.  C683 D2030000 00    MOV BYTE PTR [EBX+3D2],0
00581538  |>  83EF 01             SUB EDI,1                         ;  Switch (cases 0..2)
0058153B      72 0E               JB SHORT 0058154B
0058153D  |.  74 2E               JE SHORT 0058156D
0058153F  |.  4F                  DEC EDI
00581540  |.  0F84 CB000000       JE 00581611
00581546  |.  E9 E9010000         JMP 00581734
0058154B  |>  807D 97 00          CMP BYTE PTR [EBP-69],0           ;  Case 0 of switch 00581538
0058154F  |.  75 10               JNZ SHORT 00581561
00581551  |.  B0 01               MOV AL,1
00581553  |.  8B16                MOV EDX,DWORD PTR [ESI]
00581555  |.  64:8915 00000000    MOV DWORD PTR FS:[0],EDX
0058155C  |.  E9 73030000         JMP 005818D4
00581561  |>  C683 D3030000 01    MOV BYTE PTR [EBX+3D3],1
00581568  |.  E9 C7010000         JMP 00581734
0058156D  |>  B2 01               MOV DL,1                          ;  Case 1 of switch 00581538
0058156F  |.  8B83 A8030000       MOV EAX,DWORD PTR [EBX+3A8]
00581575  |.  8B08                MOV ECX,DWORD PTR [EAX]
00581577  |.  FF51 74             CALL DWORD PTR [ECX+74]
0058157A  |.  66:C746 10 2400     MOV WORD PTR [ESI+10],24
00581580  |.  BA 85078D00         MOV EDX,008D0785                  ;  ASCII "LaunchCount"
00581585  |.  8D45 EC             LEA EAX,DWORD PTR [EBP-14]
00581588  |.  E8 5B4A2D00         CALL 00855FE8
0058158D  |.  FF46 1C             INC DWORD PTR [ESI+1C]
00581590  |.  E8 0347FFFF         CALL 00575C98
00581595  |.  8BF8                MOV EDI,EAX
00581597  |.  6A 00               PUSH 0
00581599  |.  8D4D EC             LEA ECX,DWORD PTR [EBP-14]
0058159C  |.  51                  PUSH ECX
0058159D  |.  BA 92078D00         MOV EDX,008D0792                  ;  UNICODE "Main"


que parece interesante "LaunchCount", umm parece una referencia del programador para contar los lanzamientos demos del programa, mas abajo tambien el texto "Main", que hace referencia al formulario principal del programa, y que hay un "Switch" con tres opciones que dependen del valor existente en el registro EDI,

Hasta aquí en version trial llego con el valor 1 en EDI, y salta a la opcion 1 del Swich con el LauncCount gracioso, pero como yo tambien soy gracioso le cambio el valor de EDI a 0 y continuo por el Swuich case 0, y no me sale la ventana de registrar, pero me sigue saliendo en el menu la opción "Buy now.." para comprar.

Asi que tenemos que profundizar un poco mas, para encontrar donde se le da al registro EDI, el valor 1 de versión trial, para cambiarlo por el de valor 0 que ya suponemos que es el de registrado, porque no nos sale la nag de compra.

Subiendo más en el código hasta donde comienza dicho proceso, vemos (y vamos comprobando parando en las call reiniciando varias veces por si toma el valor de los procesos de las call intermedias), que a EDI le pasa el valor 1 el registro EDX, al comienzo del procedimiento

00581428  |.  8BFA                MOV EDI,EDX

por lo que ahora tenemos que buscar donde coge EDX el valor 1 antes de entrar en el procedimiento de marras. Para esto, al principio del procedimiento
0058141C  /$  55                  PUSH EBP

la hacemos un Control+R, y obtenemos todas la call donde se llama al procedimiento, para saber en cual de ellas tenemos que fijarnos, le ponemos un BP (F2) a cada una, reiniciamos y ya caemos en la call que se encarga del proceso.

Estando parado en esa Call de llamada en 005904D2, tenemos que subir para encontrar donde coge EDX el valor 1,

005904BE  |.  52                  PUSH EDX
005904BF  |.  8B0A                MOV ECX,DWORD PTR [EDX]
005904C1  |.  FF91 D4000000       CALL DWORD PTR [ECX+D4]
005904C7  |.  59                  POP ECX
005904C8  |.  8BD0                MOV EDX,EAX
005904CA  |.  33C9                XOR ECX,ECX
005904CC  |.  8B85 ECFDFFFF       MOV EAX,DWORD PTR [EBP-214]
005904D2  |.  E8 450FFFFF         CALL 0058141C


vemos que a EDX se le mueve el valor de  EAX, ya tenemos un nuevo objetivo, buscar donde se mueve a EAX el valor 1, para esto vemos que un poco antes hay una CALL a otro procedimiento, ¿será la llave?. Vamos a ponerle a esta call un BP con F2 porque no podemos entrar directamente, y vamos a reiniciar de nuevo el programa, ahora paramos en la call, y con F7 entramos en ella y vemos lo siguiente:

005D992C  /.  55                  PUSH EBP
005D992D  |.  8BEC                MOV EBP,ESP
005D992F   |. B8 01000000         MOV EAX,1
005D9934  |.  5D                  POP EBP
005D9935  \.  C3                  RETN


Ya tenemos donde coge EAX el valor 1, ¿y si lo cambiamos por un cero de los que nos calificaban cuando estabamos en el colegio?, ya corremos el programa sin mas paradas y no aparece la nag de compra ni la misma opción en el menú, por lo que es de suponer que el resultado es definitivo.

Pero podemos y debemos profundizar un poco más ya que si estuviesemos registrado seguramente no pasariamos por dicho lugar, así que vamos a ver porqué se llega a este código de la version TRIAL,

y mirando de donde procede el que se llame a dicho lugar, vemos que llegamos dependiendo de que se produzca el salto JE de 005DB5CA.

 
005DB56A  |.  8985 9CFEFFFF       MOV DWORD PTR [EBP-164],EAX
005DB570  |.  8B8D 9CFEFFFF       MOV ECX,DWORD PTR [EBP-164]
005DB576  |.  898D E8FDFFFF       MOV DWORD PTR [EBP-218],ECX
005DB57C  |.  8B4B 28             MOV ECX,DWORD PTR [EBX+28]
005DB57F  |.  898D 98FEFFFF       MOV DWORD PTR [EBP-168],ECX
005DB585  |.  8B85 98FEFFFF       MOV EAX,DWORD PTR [EBP-168]
005DB58B  |.  8985 D8FDFFFF       MOV DWORD PTR [EBP-228],EAX
005DB591      8B95 D8FDFFFF       MOV EDX,DWORD PTR [EBP-228]
005DB597  |.  3B95 E8FDFFFF       CMP EDX,DWORD PTR [EBP-218]
005DB59D  |.  0F94C1              SETE CL
005DB5A0  |.  83E1 01             AND ECX,1
005DB5A3  |.  84C9                TEST CL,CL
005DB5A5  |.  75 29               JNZ SHORT 005DB5D0
005DB5A7  |.  8B85 E8FDFFFF       MOV EAX,DWORD PTR [EBP-218]
005DB5AD  |.  8985 94FEFFFF       MOV DWORD PTR [EBP-16C],EAX
005DB5B3  |.  8B95 94FEFFFF       MOV EDX,DWORD PTR [EBP-16C]
005DB5B9  |.  8B4A 0C             MOV ECX,DWORD PTR [EDX+C]
005DB5BC  |.  3B8D A0FEFFFF       CMP ECX,DWORD PTR [EBP-160]
005DB5C2  |.  0F97C0              SETA AL
005DB5C5  |.  83E0 01             AND EAX,1
005DB5C8      84C0                TEST AL,AL
005DB5CA  |.  0F84 BE000000       JE 005DB68E


y para que el salto JE se produzca depende que en 005DB5C2 el SETA AL de un resultado verdadero "true", por lo que deducimos que si la comparación diese un resultado falso no se produciria el salto que nos lleva al bit indicativo de versión trial (así que lo cambio SETA por un SETBE que es lo opuesto, y además el salto que hay un poco antes que evitaria el pasar por ahí, lo NOPeo, vaya ser que en un futuro se produzca el salto por vaya usted a saber porqué, y ya nos mete la gamba).


005DB56A      8985 9CFEFFFF       MOV DWORD PTR [EBP-164],EAX
005DB570      8B8D 9CFEFFFF       MOV ECX,DWORD PTR [EBP-164]
005DB576      898D E8FDFFFF       MOV DWORD PTR [EBP-218],ECX
005DB57C  |.  8B4B 28             MOV ECX,DWORD PTR [EBX+28]
005DB57F      898D 98FEFFFF       MOV DWORD PTR [EBP-168],ECX
005DB585  |.  8B85 98FEFFFF       MOV EAX,DWORD PTR [EBP-168]
005DB58B  |.  8985 D8FDFFFF       MOV DWORD PTR [EBP-228],EAX
005DB591      8B95 D8FDFFFF       MOV EDX,DWORD PTR [EBP-228]
005DB597  |.  3B95 E8FDFFFF       CMP EDX,DWORD PTR [EBP-218]
005DB59D  |.  0F94C1              SETE CL
005DB5A0  |.  83E1 01             AND ECX,1
005DB5A3  |.  84C9                TEST CL,CL
005DB5A5      90                  NOP
005DB5A6      90                  NOP
005DB5A7      8B85 E8FDFFFF       MOV EAX,DWORD PTR [EBP-218]
005DB5AD  |.  8985 94FEFFFF       MOV DWORD PTR [EBP-16C],EAX
005DB5B3  |.  8B95 94FEFFFF       MOV EDX,DWORD PTR [EBP-16C]
005DB5B9  |.  8B4A 0C             MOV ECX,DWORD PTR [EDX+C]
005DB5BC  |.  3B8D A0FEFFFF       CMP ECX,DWORD PTR [EBP-160]
005DB5C2      0F96C0              SETBE AL                          ;  false
005DB5C5  |.  83E0 01             AND EAX,1
005DB5C8      84C0                TEST AL,AL
005DB5CA  |.  0F84 BE000000       JE 005DB68E                       ;  saltar


llegado aqui tambien pueden decir que lo mas seguro es poner un JMP, pero no me gusta machacar :D

P.d. tambien se puede estudiar los valores que se mueven y comparan en dicho procedimiento, que quizas sean interesantes ????.

probar si funciona, que a mi me da la F1ACA meter 200 transaciones ...
« Última modificación: 30 Septiembre 2010, 23:56 pm por LSL » En línea

Saludos.

LSL.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
licenciar o registrar un programa.
Programación General
andres_5 0 2,447 Último mensaje 22 Abril 2011, 03:51 am
por andres_5
Registrar un programa ejecutable en mi pc
Ingeniería Inversa
Joluchuz 2 2,731 Último mensaje 14 Abril 2016, 22:19 pm
por Joluchuz
Qué debes saber (y comprar) para dar tus primeros pasos en el mundo de los ...
Noticias
wolfbcn 0 1,834 Último mensaje 8 Agosto 2016, 02:51 am
por wolfbcn
Primeros pasos en Kodi: qué es, cómo usarlo y para qué sirve
Noticias
wolfbcn 0 5,558 Último mensaje 4 Febrero 2019, 01:22 am
por wolfbcn
Ayuda con mis primeros pasos pentester
Seguridad
Panic0 4 4,302 Último mensaje 22 Abril 2021, 20:53 pm
por Panic0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines