- Crackme Renascense por Skapunky -
-----------------------------------
Bueno, primeramente que Dios te bendiga, protega y acompañe. He decidido hacer
este tutorial acerca de cómo resolver el programita (crackme) de skapunky que
según la dificultad que le puso Shaddy o Karmany, es fácil, pero en realidad puede
resultar un poco complejo o difícil para algunos, como lo es en mi caso.
También quiero darle TODA LA GLORIA a Dios porque sin él yo no hubiera podido hacer nada.
Filipenses 4:13 dice:"Todo lo puedo en Cristo que me fortalece".
Proverbios 1:7 dice:"El principio de la sabiduría es el temor de Jehová o a Jehová...".
Nota: En este tutorial solo vamos hacer uso de nuestro depurador viejito y favorito llamado Ollydbg en su versión 1.10 final. También
haciendo uso de algunos plugins (extensiones) que serían solo Phant0m en su última versión ya que tiene protección para las breakpoints de olly y otras cositas más.
Enlaces de descarga de las herramientas necesarias:
Ollydbg 1.10 -> http://ollydbg.de/odbg110.zip
Phant0m 1.85 -> https://tuts4you.com/download.php?view.1276
http://www.woodmann.com/collaborative/tools/index.php/PhantOm
Command Bar -> http://www.openrce.org/downloads/details/105/commandbar
https://tuts4you.com/download.php?view.40
Nota: En este tutorial aprenderemos dos maneras para poder resolver o en palabras viejitas crackear este programita llamado crackme de skapunky.
La primera se supone que es la más fácil, que sería parchear el programa. Y la seguinda, sería la más difícil o compleja que sería encontrar o conseguir
el "id" y "contraseña" válidos para poder registrar el programa correctamente y como se debe.
Primer manera de resolver el crackme:
Lo primero que se debe hacer es abrir nuestro depurador, que supongo que ya lo tenéis en vuestro pc, llamado Ollydbg.
(https://i.imgur.com/0Y7wRfw.png)
Nota: Mi Ollydbg está así porque lo he personalizado un poco, pero vosotros también tenéis la posiblidad de hacerlo así o a vuestro gusto.
Ya cuando tengamos abierto nuestro depurador o ollydbg vamos a cargar nuestro programita o como diría ricardo narvaja nuestra víctima en ollydbg.
Vamos a Archivo->Abrir en inglés sería File->Open y cargamos nuestro programita.
(https://i.imgur.com/aqmxpD0.png)
Nota: Antés de cargar el programa, se me olvidada, tendréis que tener vuestro depurador o olly configurado con los plugins (extensiones) que ya os mencioné anteriormente.
Tendreís que configurar el directorio de los archivos o ficheros "basura" y el directorio de los plugins (extensiones), y ahí mismo pondréis los plugins que ya os dije con anterioridad.
(https://i.imgur.com/zKUYDna.png)
Ahora, procederemos a configurar nuestro plugin (extensión) llamada Phat0m.
La configuraremos como se muestra en la siguiente imágen o captura de pantalla:
(https://i.imgur.com/4SgB8qk.png)
Bueno, ahora vamos a proceder a realizar la primera manera de resolver este crackme de skapunky.
Vamos a ver las referencias de texto del programa (crackme), y buscaremos las siguientes:
Producto registrado con exito, felicidades
Lo siento, password incorrecto"
(https://i.imgur.com/gEJxWCu.png)
(https://i.imgur.com/282paB0.png)
Como se puede ver en las anteriores imágenes o capturas de pantalla, se puede ver algo que llama mucho la atención como
una API y una comparación y un salto. Lo que nos interesa, en este caso, si Dios lo permite es el salto para poder parchear el programa.
Lo único que se debe hacer es invertir el salto, de la siguiente manera:
(https://i.imgur.com/0i8lLdZ.png)
Ahora, para poder obtener el programita parcheado se debe hacer lo siguiente como muestra las siguientes imágenes o capturas de pantalla:
(https://i.imgur.com/4v8emNu.png)
(https://i.imgur.com/eQk0dCS.png)
(https://i.imgur.com/RJTTBFL.png)
Ahora, se debe proceder a probar que el programita este parcheado correctamente.
(https://i.imgur.com/eyiUhZv.png)
Ahora, con la ayuda de Dios se debe proceder a realizar la segunda manera de resolver este crackme; ésta es la más compleja o más difícil. Vamos a por ella.
Primero vamos a ver las APIS del programita (crackme) dándo CTRL + N en nuestro depurador o olly.
(https://i.imgur.com/ZjcH2EA.png)
La que llama la atención es la API "vbaStrCmp" la cual hace una comparación entre dos cadenas de texto (Strings) o entre dos valores númericos (integers).
Se debe poner un BreakPoint en esa API haciendo uso del plugin (extensión) command bar, de la siguiente manera:
(https://i.imgur.com/WAOHPiW.png)
Ahora, ejecutamos el programa con F9, y se debe proceder a poner los datos necesarios que exige el programita (crackme).
En mi caso, puse como "id" el 7 y como contraseña "ska".
Vamos al stack (pila) para ver los dos strings comparados:
(https://i.imgur.com/q483OOc.png)
Como se puede ver se está comparando nuestra contraseña con la contraseña verdadera para poder registrar el programa, pero hace falta algo que es la "id" del programa.
Búsquemola un poco.
(https://i.imgur.com/DNe3Q5N.png)
La "id" correspondiente a la contraseña serìa "165".
"id" sería 165.
"Pass" sería ska551650.
"id" sería 147.
"Pass" sería ska1561470.
ska
ska55165
ska551650
55
165
ska1561470
147
156
MOD: Imagenes adaptadas a lo permitido.
Hola, muy buen tutorial ;-) lo que sí no entendí la última parte en donde explicas los serial, podrías detallar eso un poco más por favor? Saludos
este es un programa hecho en vb, diriamos que para encontrar el serial dificultad 0 o 1 en ollydbg o x64dbg haciendo uso de la api __vbastrcmp o usando vbastrcmp tool
pero si es para analizar el algoritmo no creo que sea tan facil del todo:
bueno lo acabo de revisar, se ve así
tiene 3 pequeños algoritmos
el serial válido se forma de concatenaciones de 4 partes (parte0+parte1+parte2+parte3)
considera cada caracter como ascii
parte 0 =siendo "ska" algo constante
la parte 1, es la suma de cada carácter en ascii (decimal)
la parte 2 , es el primer dígito ingresado x 3 (multiplicado por 3)
la parte 3 , el último carácter (en ascii) x5 (pero es influenciado por un valor anterior , Asc(edx+ecx*4)) como raise excepcion, entonces si el largo del serial es 8 o mayor será multiplicado por 5, de lo contrario es 0. en el caso de 8 carácteres o más se cumple que es caracter ascii x 5 sin problema.
por ejemplo el id 165
largo del serial ingresado = 3
el 1 = en ascii (el numero decimal es 49)
el 6 = en ascii (el nnumero decimal es 54)
el 5 = en ascii (el nnumero decimal es 53)
la suma de los 3 es 156
llevamos
ska156+parte2+parte3
para la siguiente parte el primer número ingresado es el 1 es multiplicado por 3
asi que :
el 1 = en ascii (el numero decimal es 49) x 3 = 147
llevamos ska156147+parte3
Citar
y la tercera parte
es el ultimo por 5 ,con largo pequeño es 0 queda el valor 00530000 comparado con otro integer que es menor, no pasará al ciclo necesario , asi que el resultado será 0
llevamos ska1470
algunos seriales son
id:165
Serial: ska1561470
Id:apuromafo
ska859291510
ID:ApuromafoCLS
ska827195510
Saludos Cordiales
Apuromafo CLS
pd: el codigo de la porcion de codigo en vbdecompiler del action click
Citar
Private Sub Command1_Click() '4096F0
Dim var_15C As TextBox
loc_00409757: Dim var_40(7) As String
loc_00409768: Dim var_70(7) As Variant
loc_004097AE: var_90 = Text1.Text
loc_004097B6: var_160 = var_90
loc_0040982D: var_8C = var_90
loc_00409839: var_eax = %fobj
loc_0040987F: var_90 = Text2.Text
loc_00409887: var_160 = var_90
loc_004098E5: var_7C = var_90
loc_004098F1: var_eax = %fobj
loc_00409900: On Error Resume Next
loc_00409938: var_C0 = Mid(var_8C, 1, 1)
loc_0040994F: If var_15C >= 8 Then GoTo loc_0040995D
loc_0040995B: GoTo loc_00409969
loc_0040995D: 'Referenced from: 0040994F
loc_0040995D: var_eax = Err.Raise
loc_00409963: var_1A0 = Err.Raise
loc_00409969: 'Referenced from: 0040995B
loc_00409992: ecx = var_C0
loc_004099EF: var_C0 = Mid(var_8C, 2, 1)
loc_00409A06: If var_15C >= 8 Then GoTo loc_00409A14
loc_00409A12: GoTo loc_00409A20
loc_00409A14: 'Referenced from: 00409A06
loc_00409A14: var_eax = Err.Raise
loc_00409A1A: var_1A4 = Err.Raise
loc_00409A20: 'Referenced from: 00409A12
loc_00409A49: ecx = var_C0
loc_00409AA6: var_C0 = Mid(var_8C, 3, 1)
loc_00409ABD: If var_15C >= 8 Then GoTo loc_00409ACB
loc_00409AC9: GoTo loc_00409AD7
loc_00409ACB: 'Referenced from: 00409ABD
loc_00409ACB: var_eax = Err.Raise
loc_00409AD1: var_1A8 = Err.Raise
loc_00409AD7: 'Referenced from: 00409AC9
loc_00409B00: ecx = var_C0
loc_00409B5D: var_C0 = Mid(var_8C, 4, 1)
loc_00409B74: If var_15C >= 8 Then GoTo loc_00409B82
loc_00409B80: GoTo loc_00409B8E
loc_00409B82: 'Referenced from: 00409B74
loc_00409B82: var_eax = Err.Raise
loc_00409B88: var_1AC = Err.Raise
loc_00409B8E: 'Referenced from: 00409B80
loc_00409BB7: ecx = var_C0
loc_00409C14: var_C0 = Mid(var_8C, 5, 1)
loc_00409C2B: If var_15C >= 8 Then GoTo loc_00409C39
loc_00409C37: GoTo loc_00409C45
loc_00409C39: 'Referenced from: 00409C2B
loc_00409C39: var_eax = Err.Raise
loc_00409C3F: var_1B0 = Err.Raise
loc_00409C45: 'Referenced from: 00409C37
loc_00409C6E: ecx = var_C0
loc_00409CCB: var_C0 = Mid(var_8C, 6, 1)
loc_00409CE2: If var_15C >= 8 Then GoTo loc_00409CF0
loc_00409CEE: GoTo loc_00409CFC
loc_00409CF0: 'Referenced from: 00409CE2
loc_00409CF0: var_eax = Err.Raise
loc_00409CF6: var_1B4 = Err.Raise
loc_00409CFC: 'Referenced from: 00409CEE
loc_00409D25: ecx = var_C0
loc_00409D82: var_C0 = Mid(var_8C, 7, 1)
loc_00409D99: If var_15C >= 8 Then GoTo loc_00409DA7
loc_00409DA5: GoTo loc_00409DB3
loc_00409DA7: 'Referenced from: 00409D99
loc_00409DA7: var_eax = Err.Raise
loc_00409DAD: var_1B8 = Err.Raise
loc_00409DB3: 'Referenced from: 00409DA5
loc_00409DDC: ecx = var_C0
loc_00409E39: var_C0 = Mid(var_8C, 8, 1)
loc_00409E50: If var_15C >= 8 Then GoTo loc_00409E5E
loc_00409E5C: GoTo loc_00409E6A
loc_00409E5E: 'Referenced from: 00409E50
loc_00409E5E: var_eax = Err.Raise
loc_00409E64: var_1BC = Err.Raise
loc_00409E6A: 'Referenced from: 00409E5C
loc_00409E93: ecx = var_C0
loc_00409ED6: If var_160 >= 8 Then GoTo loc_00409EE4
loc_00409EE2: GoTo loc_00409EF0
loc_00409EE4: 'Referenced from: 00409ED6
loc_00409EE4: var_eax = Err.Raise
loc_00409EEA: var_1C0 = Err.Raise
loc_00409EF0: 'Referenced from: 00409EE2
loc_00409F03: var_118 = Asc(ecx+eax*4)
loc_00409F25: If var_15C >= 8 Then GoTo loc_00409F33
loc_00409F31: GoTo loc_00409F3F
loc_00409F33: 'Referenced from: 00409F25
loc_00409F33: var_eax = Err.Raise
loc_00409F39: var_1C4 = Err.Raise
loc_00409F3F: 'Referenced from: 00409F31
loc_00409F51: var_64 = var_64 + var_15C
loc_00409F53: var_64 = Asc(ecx+eax*4)
loc_00409F71: If var_160 >= 8 Then GoTo loc_00409F7F
loc_00409F7D: GoTo loc_00409F8B
loc_00409F7F: 'Referenced from: 00409F71
loc_00409F7F: var_eax = Err.Raise
loc_00409F85: var_1C8 = Err.Raise
loc_00409F8B: 'Referenced from: 00409F7D
loc_00409F9E: var_118 = Asc(edx+ecx*4)
loc_00409FC0: If var_15C >= 8 Then GoTo loc_00409FCE
loc_00409FCC: GoTo loc_00409FDA
loc_00409FCE: 'Referenced from: 00409FC0
loc_00409FCE: var_eax = Err.Raise
loc_00409FD4: var_1CC = Err.Raise
loc_00409FDA: 'Referenced from: 00409FCC
loc_00409FEC: var_15C = var_15C + var_64
loc_00409FEE: var_15C = Asc(edx+ecx*4)
loc_0040A00C: If var_160 >= 8 Then GoTo loc_0040A01A
loc_0040A018: GoTo loc_0040A026
loc_0040A01A: 'Referenced from: 0040A00C
loc_0040A01A: var_eax = Err.Raise
loc_0040A020: var_1D0 = Err.Raise
loc_0040A026: 'Referenced from: 0040A018
loc_0040A039: var_118 = Asc(edx+ecx*4)
loc_0040A05B: If var_15C >= 8 Then GoTo loc_0040A069
loc_0040A067: GoTo loc_0040A075
loc_0040A069: 'Referenced from: 0040A05B
loc_0040A069: var_eax = Err.Raise
loc_0040A06F: var_1D4 = Err.Raise
loc_0040A075: 'Referenced from: 0040A067
loc_0040A087: var_15C = var_15C + var_64
loc_0040A089: var_15C = Asc(edx+ecx*4)
loc_0040A0A7: If var_160 >= 8 Then GoTo loc_0040A0B5
loc_0040A0B3: GoTo loc_0040A0C1
loc_0040A0B5: 'Referenced from: 0040A0A7
loc_0040A0B5: var_eax = Err.Raise
loc_0040A0BB: var_1D8 = Err.Raise
loc_0040A0C1: 'Referenced from: 0040A0B3
loc_0040A0D4: var_118 = Asc(edx+ecx*4)
loc_0040A0F6: If var_15C >= 8 Then GoTo loc_0040A104
loc_0040A102: GoTo loc_0040A110
loc_0040A104: 'Referenced from: 0040A0F6
loc_0040A104: var_eax = Err.Raise
loc_0040A10A: var_1DC = Err.Raise
loc_0040A110: 'Referenced from: 0040A102
loc_0040A122: var_15C = var_15C + var_64
loc_0040A124: var_15C = Asc(edx+ecx*4)
loc_0040A142: If var_160 >= 8 Then GoTo loc_0040A150
loc_0040A14E: GoTo loc_0040A15C
loc_0040A150: 'Referenced from: 0040A142
loc_0040A150: var_eax = Err.Raise
loc_0040A156: var_1E0 = Err.Raise
loc_0040A15C: 'Referenced from: 0040A14E
loc_0040A16F: var_118 = Asc(edx+ecx*4)
loc_0040A191: If var_15C >= 8 Then GoTo loc_0040A19F
loc_0040A19D: GoTo loc_0040A1AB
loc_0040A19F: 'Referenced from: 0040A191
loc_0040A19F: var_eax = Err.Raise
loc_0040A1A5: var_1E4 = Err.Raise
loc_0040A1AB: 'Referenced from: 0040A19D
loc_0040A1BD: var_15C = var_15C + var_64
loc_0040A1BF: var_15C = Asc(edx+ecx*4)
loc_0040A1DD: If var_160 >= 8 Then GoTo loc_0040A1EB
loc_0040A1E9: GoTo loc_0040A1F7
loc_0040A1EB: 'Referenced from: 0040A1DD
loc_0040A1EB: var_eax = Err.Raise
loc_0040A1F1: var_1E8 = Err.Raise
loc_0040A1F7: 'Referenced from: 0040A1E9
loc_0040A20A: var_118 = Asc(edx+ecx*4)
loc_0040A22C: If var_15C >= 8 Then GoTo loc_0040A23A
loc_0040A238: GoTo loc_0040A246
loc_0040A23A: 'Referenced from: 0040A22C
loc_0040A23A: var_eax = Err.Raise
loc_0040A240: var_1EC = Err.Raise
loc_0040A246: 'Referenced from: 0040A238
loc_0040A258: var_15C = var_15C + var_64
loc_0040A25A: var_15C = Asc(edx+ecx*4)
loc_0040A278: If var_160 >= 8 Then GoTo loc_0040A286
loc_0040A284: GoTo loc_0040A292
loc_0040A286: 'Referenced from: 0040A278
loc_0040A286: var_eax = Err.Raise
loc_0040A28C: var_1F0 = Err.Raise
loc_0040A292: 'Referenced from: 0040A284
loc_0040A2A5: var_118 = Asc(edx+ecx*4)
loc_0040A2C7: If var_15C >= 8 Then GoTo loc_0040A2D5
loc_0040A2D3: GoTo loc_0040A2E1
loc_0040A2D5: 'Referenced from: 0040A2C7
loc_0040A2D5: var_eax = Err.Raise
loc_0040A2DB: var_1F4 = Err.Raise
loc_0040A2E1: 'Referenced from: 0040A2D3
loc_0040A2F3: var_15C = var_15C + var_64
loc_0040A2F5: var_15C = Asc(edx+ecx*4)
loc_0040A313: If var_160 >= 8 Then GoTo loc_0040A321
loc_0040A31F: GoTo loc_0040A32D
loc_0040A321: 'Referenced from: 0040A313
loc_0040A321: var_eax = Err.Raise
loc_0040A327: var_1F8 = Err.Raise
loc_0040A32D: 'Referenced from: 0040A31F
loc_0040A340: var_118 = Asc(edx+ecx*4)
loc_0040A362: If var_15C >= 8 Then GoTo loc_0040A370
loc_0040A36E: GoTo loc_0040A37C
loc_0040A370: 'Referenced from: 0040A362
loc_0040A370: var_eax = Err.Raise
loc_0040A376: var_1FC = Err.Raise
loc_0040A37C: 'Referenced from: 0040A36E
loc_0040A38E: var_15C = var_15C + var_64
loc_0040A390: var_15C = Asc(edx+ecx*4)
loc_0040A3AE: If var_15C >= 8 Then GoTo loc_0040A3BC
loc_0040A3BA: GoTo loc_0040A3C8
loc_0040A3BC: 'Referenced from: 0040A3AE
loc_0040A3BC: var_eax = Err.Raise
loc_0040A3C2: var_200 = Err.Raise
loc_0040A3C8: 'Referenced from: 0040A3BA
loc_0040A3D9: If var_160 >= 8 Then GoTo loc_0040A3E7
loc_0040A3E5: GoTo loc_0040A3F3
loc_0040A3E7: 'Referenced from: 0040A3D9
loc_0040A3E7: var_eax = Err.Raise
loc_0040A3ED: var_204 = Err.Raise
loc_0040A3F3: 'Referenced from: 0040A3E5
loc_0040A404: If var_164 >= 8 Then GoTo loc_0040A412
loc_0040A410: GoTo loc_0040A41E
loc_0040A412: 'Referenced from: 0040A404
loc_0040A412: var_eax = Err.Raise
loc_0040A418: var_208 = Err.Raise
loc_0040A41E: 'Referenced from: 0040A410
loc_0040A42F: If var_168 >= 8 Then GoTo loc_0040A43D
loc_0040A43B: GoTo loc_0040A449
loc_0040A43D: 'Referenced from: 0040A42F
loc_0040A43D: var_eax = Err.Raise
loc_0040A443: var_20C = Err.Raise
loc_0040A449: 'Referenced from: 0040A43B
loc_0040A45A: If var_16C >= 8 Then GoTo loc_0040A468
loc_0040A466: GoTo loc_0040A474
loc_0040A468: 'Referenced from: 0040A45A
loc_0040A468: var_eax = Err.Raise
loc_0040A46E: var_210 = Err.Raise
loc_0040A474: 'Referenced from: 0040A466
loc_0040A485: If var_170 >= 8 Then GoTo loc_0040A493
loc_0040A491: GoTo loc_0040A49F
loc_0040A493: 'Referenced from: 0040A485
loc_0040A493: var_eax = Err.Raise
loc_0040A499: var_214 = Err.Raise
loc_0040A49F: 'Referenced from: 0040A491
loc_0040A4B0: If var_174 >= 8 Then GoTo loc_0040A4BE
loc_0040A4BC: GoTo loc_0040A4CA
loc_0040A4BE: 'Referenced from: 0040A4B0
loc_0040A4BE: var_eax = Err.Raise
loc_0040A4C4: var_218 = Err.Raise
loc_0040A4CA: 'Referenced from: 0040A4BC
loc_0040A4DB: If var_178 >= 8 Then GoTo loc_0040A4E9
loc_0040A4E7: GoTo loc_0040A4F5
loc_0040A4E9: 'Referenced from: 0040A4DB
loc_0040A4E9: var_eax = Err.Raise
loc_0040A4EF: var_21C = Err.Raise
loc_0040A4F5: 'Referenced from: 0040A4E7
loc_0040A501: var_64 = var_64 + var_15C
loc_0040A510: var_64 = var_64 + var_160
loc_0040A52D: var_64 = var_64 + var_164
loc_0040A54A: var_64 = var_64 + var_168
loc_0040A567: var_64 = var_64 + var_16C
loc_0040A584: var_64 = var_64 + var_170
loc_0040A5A1: var_64 = var_64 + var_174
loc_0040A5BE: var_64 = var_64 + var_178
loc_0040A5DA: var_24 = var_64 + var_64 + var_64 + var_64 + var_64 + var_64 + var_64 + var_64
loc_0040A634: If var_15C >= 8 Then GoTo loc_0040A642
loc_0040A640: GoTo loc_0040A64E
loc_0040A642: 'Referenced from: 0040A634
loc_0040A642: var_eax = Err.Raise
loc_0040A648: var_220 = Err.Raise
loc_0040A64E: 'Referenced from: 0040A640
loc_0040A66E: var_64 = var_64 + var_15C
loc_0040A68A: var_58 = var_64 * 3
loc_0040A6A8: If var_15C >= 8 Then GoTo loc_0040A6B6
loc_0040A6B4: GoTo loc_0040A6C2
loc_0040A6B6: 'Referenced from: 0040A6A8
loc_0040A6B6: var_eax = Err.Raise
loc_0040A6BC: var_224 = Err.Raise
loc_0040A6C2: 'Referenced from: 0040A6B4
loc_0040A6F3: var_ret_2 = var_64 + var_15C * 5
loc_0040A77C: var_28 = "ska" & var_24 & CStr(var_58) & CStr(CInt(-1))
loc_0040A7C0: If (var_28 <> var_7C) <> 0 Then GoTo loc_0040A8A3
loc_0040A815: var_C0 = "CrackMe"
loc_0040A83B: var_B0 = "Good, this version is registrered !"
loc_0040A85F: MsgBox(var_B0, 1, var_C0, var_D0, var_E0)
loc_0040A871: var_48 = CStr(MsgBox(var_B0, 1, var_C0, var_D0, var_E0))
loc_0040A89E: GoTo loc_0040A97B
loc_0040A8A3: 'Referenced from: 0040A7C0
loc_0040A8F2: var_C0 = "CrackMe"
loc_0040A918: var_B0 = "Sorry, password Incorrect"
loc_0040A93C: MsgBox(var_B0, 1, var_C0, var_D0, var_E0)
loc_0040A94E: var_48 = CStr(MsgBox(var_B0, 1, var_C0, var_D0, var_E0))
loc_0040A97B: 'Referenced from: 0040A89E
loc_0040A987: GoTo loc_0040A9F9
loc_0040A9B6: var_eax = %fobj
loc_0040A9F8: Exit Sub
loc_0040A9F9: 'Referenced from: 0040A987
loc_0040AA0E: var_154 = var_40
loc_0040AA38: var_158 = var_70
End Sub
@UND3R
@Apuromafo
Gracias por vuestros comentarios, y espero en Dios que os haya sido útil este pequeñito tutorial.
Nota: @UND3R No te entendí un poco.
Que Dios los bendiga, protega y acompañe.