Título: Tutorial acerca del crackme de SkaPunky Publicado por: jJPHyES en 10 Mayo 2018, 19:46 pm - 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. Título: Re: Tutorial acerca del crackme de SkaPunky Publicado por: .:UND3R:. en 11 Mayo 2018, 05:56 am 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
Título: Re: Tutorial acerca del crackme de SkaPunky Publicado por: apuromafo CLS en 11 Mayo 2018, 15:23 pm 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 Título: Re: Tutorial acerca del crackme de SkaPunky Publicado por: jJPHyES en 11 Mayo 2018, 15:57 pm @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. |