Autor
|
Tema: Ayuda: ¿Programa que se debuggea a si mismo? (Leído 5,116 veces)
|
Aborashux
Desconectado
Mensajes: 4
|
Buenas: La verdad es que llevo unos cuantos años sin tocar ni ensamblador ni ninguna herramienta de cracking, asi que ando un poco perdido en cuanto a las novedades, de momento para coger el ritmo, he empezado con el tuto de Ollydbg de Narvaja. El caso es que estoy tratando de sacar un serial valido/registrar este programa: http://www.mtgstudio.com/El caso, es que el propio programa, una vez que se inicia, ejecuta 2 instancias de si mismo, De manera que si queremos hacer "attach" con el Ollydbg, al principal (el que esta marcado con la flecha roja), nos devuelve un codigo de error: Creo, (y esto es mi opinion, no tiene ningun fundamento que lo pruebe) que la primera instancia, es una especie de "autodebug", es decir, que ya esta haciendo debug a la segunda instancia, que es el programa en si mismo, y el que contiene el codigo de validacion de registros, de manera que no es posible hacer el "attach" con el ollydbg ya que ya se esta debuggeando. Como hace años, me gustaba bastante y me resultaba bastante sencillo, el sistema de codigo muerto, con el W32dsam, probe a desemsamblar el codigo para probar, pero no me arroja absolutamente nada, asi que tiene tambien algun tipo de proteccion anti-desensamblado. Le he pasado el PeId (que no le controlo mucho) y parece que no encuentra nada He intentado entonces otro metodo, abrirle directamente con el OllyDbg, y trato de ejecutarle con F9, y entonces automaticamente se cierra con un error, y encima me devuelve el codigo de error en el OllyDbg de "exit code 1" Entonces me he parado a pensar un poco y he ido a "Search for -> Name (label) in current module" y he encontrado esto Entonces, he probado a capturarlo mediante un Bp IsDebuggerPresent, y en cuanto salta, me pongo encima de EBX y le doy a "Follow in Dump" y veo que entre los 4 primeros bytes hay un "1" es decir, que detecta que el OllyDbg esta ejecutandose, entonces le doy a "Binary->edit" y le pongo a "0" para engañarle, pero tras hacerme el amago de arrancar, me vuelve a dar error, y me cierra el OllyDbg, esta vez sin codigo de error. Asi que estoy un poco perdido, y no se por donde tirar, si alguien fuese tan amable de indicarme por donde podria atacarle, o algun tutorial que podria darme alguna idea, le estaria terriblemente agradecido. Ah, se me olvidaba, esto es la informacion que me da windows, no se si podra ser de ayuda: Saludos y gracias por adelantado
|
|
|
En línea
|
|
|
|
apuromafo CLS
|
para mi por la sección PDATA seria armadillo, dejame bajarlo y checkear si no es mentira info sobre armadillo unpacking en http://ricardonarvaja.info/WEB/buscador.phpsugiero leas si o si este: http://ricardonarvaja.info/WEB/CONCURSOS%20VIEJOS/CONCURSOS%202007/CONCURSO%204/Armadillo%204.62%20%2B%20Debug%20Blocker%20%2B%20CopyMem%20II%20%2B%20Import%20Table%20Elimination%20%2B%20Code%20Splicing%20%2B%20Nanomites%20%C3%82%C2%96%20PARA%20PRINCIPIANTES%20%C3%82%C2%96%20USANDO%20TOOLS%20%C3%82%C2%96%20Por%20Solid.rarhttp://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1201-1300/1289-1__Armadillo%20v8%20%2Bv7%20by%20Apuromafo.pdf@update es armadillo 8.2 si es para que dure mas tiempo basta con trial reset y listo, pero si es por desempacar aun falta mucho: info: File: mtgstudio.exe Path: C:\archivos de programa\PalmROOT\MTG Studio 1.8.4
-> Locate compression options. -> Locating pointer to application matrix. -> Get dword from Armadillo code. -> Get dword from Armadillo code. -> Skipping pdata pre-security.dll portion. -> Skipping tail portion(s). -> Extract security.dll. -> Save security.dll to disk. -> Locate Armadillo version.
* Scan Results *
Detected version: 8.20
* Compression Option *
Compression level: Best/Slowest
* Protection Options *
CopyMem-II & Debug Blocker Enable Import Table Elimination Enable Strategic Code Splicing Enable Nanomite Processing
Armadillo sections: 5
-> Name: .text1 -> Raw offset: 0x00004000 -> Raw size: 0x000A4000 -> Virtual address: 0x00E00000 -> Virtual size: 0x000B0000 -> Characteristics: 0xE0000020
-> Name: .adata -> Raw offset: 0x000A8000 -> Raw size: 0x0000D000 -> Virtual address: 0x00EB0000 -> Virtual size: 0x00010000 -> Characteristics: 0xE0000020
-> Name: .data1 -> Raw offset: 0x000B5000 -> Raw size: 0x0001D000 -> Virtual address: 0x00EC0000 -> Virtual size: 0x00020000 -> Characteristics: 0xC0000040
-> Name: .reloc1 -> Raw offset: 0x000D2000 -> Raw size: 0x00009000 -> Virtual address: 0x00EE0000 -> Virtual size: 0x00010000 -> Characteristics: 0x42000040
-> Name: .pdata -> Raw offset: 0x000DB000 -> Raw size: 0x00835000 -> Virtual address: 0x00EF0000 -> Virtual size: 0x00840000 -> Characteristics: 0xC0000040
Text section encrypted: No
Dword shuffling used: Yes Number of dwords: 9 Hash resources: Yes Real size of pdata: 0x00834F70 Compression type: 0x2
Raw options value: 0x21E38A76 Call exe OEP: 0x0161F149 Call dll OEP: 0x0161DA60 Offset to Security.dll: 0x00000012 Security.dll size: 0x00134000 Security.dll base: 0x10000000 CopyMem-II decrypt: 0x100680E0
-> Free file buffer. -> Free .text buffer. -> Free pdata buffer. -> Free security.dll buffer.
el tema no es el desempacar, sino el analizar las nanomites en el 8.2 es un poco diferente a los demas --------------------------- Unsupported Nanomites Detected --------------------------- Unsupported version of Nanomites detected. Continuing to patch your file may cause some problem because of undetected Nanomites. So i recommend you to use another program to fix Nanomites. Please send target's name to my email to fix this problem:NeVaDa@unreal-rce.net
Do you want to continue? --------------------------- Sí No ---------------------------
pero si envias el mail dice: Delivery to the following recipient failed permanently: NeVaDa@unreal-rce.netTechnical details of permanent failure: DNS Error: Domain name not found asi que queda el tema de como resolver las nanomites en armadillo 8.x datos: oep es delphi: 0146F4C4 55 PUSH EBP 0146F4C5 8BEC MOV EBP,ESP 0146F4C7 83C4 F0 ADD ESP,-10 0146F4CA B8 94AF4301 MOV EAX,Copia_de.0143AF94 0146F4CF E8 D8D239FF CALL Copia_de.0080C7AC 0146F4D4 E8 2F54FCFF CALL Copia_de.01434908 0146F4D9 33C0 XOR EAX,EAX 0146F4DB 55 PUSH EBP 0146F4DC 68 16F54601 PUSH Copia_de.0146F516 0146F4E1 64:FF30 PUSH DWORD PTR FS:[EAX] 0146F4E4 64:8920 MOV DWORD PTR FS:[EAX],ESP 0146F4E7 A1 F8324D01 MOV EAX,DWORD PTR DS:[14D32F8] 0146F4EC 8B00 MOV EAX,DWORD PTR DS:[EAX] 0146F4EE 80B8 A4000000 00 CMP BYTE PTR DS:[EAX+A4],0 0146F4F5 75 0C JNZ SHORT Copia_de.0146F503 0146F4F7 A1 F8324D01 MOV EAX,DWORD PTR DS:[14D32F8] 0146F4FC 8B00 MOV EAX,DWORD PTR DS:[EAX] 0146F4FE E8 85D352FF CALL Copia_de.0099C888 0146F503 33C0 XOR EAX,EAX 0146F505 5A POP EDX 0146F506 59 POP ECX 0146F507 59 POP ECX 0146F508 64:8910 MOV DWORD PTR FS:[EAX],EDX 0146F50B 68 1DF54601 PUSH Copia_de.0146F51D 0146F510 E8 7370FCFF CALL Copia_de.01436588 0146F515 C3 RETN 0146F516 -E9 057C39FF JMP Copia_de.00807120 0146F51B ^EB F3 JMP SHORT Copia_de.0146F510 0146F51D E8 AE8339FF CALL Copia_de.008078D0 0146F522 8BC0 MOV EAX,EAX 0146F524 0000 ADD BYTE PTR DS:[EAX],AL 0146F526 0000 ADD BYTE PTR DS:[EAX],AL 0146F528 0000 ADD BYTE PTR DS:[EAX],AL 0146F52A 0000 ADD BYTE PTR DS:[EAX],AL
0080C7AC 53 PUSH EBX 0080C7AD 8BD8 MOV EBX,EAX 0080C7AF 33C0 XOR EAX,EAX 0080C7B1 A3 280A4701 MOV DWORD PTR DS:[1470A28],EAX 0080C7B6 6A 00 PUSH 0 0080C7B8 E8 2BFFFFFF CALL mtgstudi.0080C6E8 ; JMP to kernel32.GetModuleHandleW 0080C7BD A3 387C4D01 MOV DWORD PTR DS:[14D7C38],EAX 0080C7C2 A1 387C4D01 MOV EAX,DWORD PTR DS:[14D7C38] 0080C7C7 A3 340A4701 MOV DWORD PTR DS:[1470A34],EAX 0080C7CC 33C0 XOR EAX,EAX 0080C7CE A3 380A4701 MOV DWORD PTR DS:[1470A38],EAX 0080C7D3 33C0 XOR EAX,EAX 0080C7D5 A3 3C0A4701 MOV DWORD PTR DS:[1470A3C],EAX 0080C7DA 8D43 08 LEA EAX,DWORD PTR DS:[EBX+8] 0080C7DD A3 440A4701 MOV DWORD PTR DS:[1470A44],EAX 0080C7E2 E8 B9FFFFFF CALL mtgstudi.0080C7A0 0080C7E7 BA 300A4701 MOV EDX,mtgstudi.01470A30 0080C7EC 8BC3 MOV EAX,EBX 0080C7EE E8 39AEFFFF CALL mtgstudi.0080762C 0080C7F3 5B POP EBX 0080C7F4 C3 RETN
un script si alguien quiere apoyar con el codesplicies a mano, el nanomite a mano el script permite desatachar el armadillo 8.x del padre al hijo parchando el crypto lugar, cuando se parchea, ira al segundo lugar (vease que comento cual es el oep y el lugar donde uno llega es el 2do (el call en un delphi como init) el tema es que falta ahi 1) Codesplicit 2)nanomites 3)import destruction/scramle aqui el script que automatiza el tema de los 2 procesos a 1 para desempacar y dumpear, no es facil pues es una de las ultimas 3 versiones de armadillo, la ultima es la 8.4 y la 8.4beta saludos Apuromafo /*
Detach Parent from Child+Patch Crypto Process+CopyMemII
*/
//Variable Declarations
var WaitForDebugEvent var WriteProcessMemory var DebugActiveProcessStop var OutputDebugStringA var OutputDebugStringW var PEHeaderBase var ImageBase var CodeBegin var DataBegin var ProcessDebugEvent var ProcessBuffer var ChildProcessID var ChildOEP var OEPBytes var OEPOffset1 var OEPOffset2 var OEPOffset3 var CryptoProcess var Address var Buffer var Patch1 var Patch2 var temp1
//Setup
dbh
bphwc // Clear any hardware breakpoints bpmc // Clear any memory breakpoint bc // Clear any saved breakpoints lc // Clear the log window
msg "Set Ollydbg to pass all exceptions, and add custom exceptions C0000005, C000001D, C000001E, C0000096 and E06D7363 \r\n\r\npress OK to continue."
gpa "WaitForDebugEvent", "kernel32.dll" mov WaitForDebugEvent, $RESULT gpa "WriteProcessMemory", "kernel32.dll" mov WriteProcessMemory, $RESULT gpa "DebugActiveProcessStop", "kernel32.dll" mov DebugActiveProcessStop, $RESULT add WriteProcessMemory, 05 gpa "OutputDebugStringA", "kernel32.dll" mov OutputDebugStringA, $RESULT gpa "OutputDebugStringW", "kernel32.dll" mov OutputDebugStringW, $RESULT
//Get Section Bases
gmi eip, MODULEBASE mov ImageBase, $RESULT mov PEHeaderBase, ImageBase add PEHeaderBase, 3C // Offset to PE signature mov PEHeaderBase, [PEHeaderBase] add PEHeaderBase, ImageBase
mov CodeBegin, PEHeaderBase add CodeBegin, 104 // Offset to 1st Section Virtual Address mov CodeBegin, [CodeBegin] add CodeBegin, ImageBase
mov DataBegin, PEHeaderBase // Offset to 2nd Section Virtual Address add DataBegin, 12C mov DataBegin, [DataBegin] add DataBegin, ImageBase
log CodeBegin log DataBegin
// Begin Unpacking
bp WriteProcessMemory erun
bc WriteProcessMemory sub WriteProcessMemory, 05 bp WaitForDebugEvent erun
// Get Information at WaitForDebugEvent
bc WaitForDebugEvent mov ProcessDebugEvent, esp add ProcessDebugEvent, 04 mov ProcessDebugEvent, [ProcessDebugEvent] mov OEPOffset1, ProcessDebugEvent add OEPOffset1, 18 mov OEPOffset2, ProcessDebugEvent add OEPOffset2, 24 mov OEPOffset3, ProcessDebugEvent add OEPOffset3, 28 log ProcessDebugEvent log OEPOffset1 log OEPOffset2 log OEPOffset3
// Get Child Process ID and Child OEP
bp OutputDebugStringA bp OutputDebugStringW erun
bc OutputDebugStringA bc OutputDebugStringW
find eip, #C20400# mov eip, $RESULT
sti
bp OutputDebugStringA bp OutputDebugStringW erun
bc OutputDebugStringA bc OutputDebugStringW
find eip, #C20400# mov eip, $RESULT
sti
bp WriteProcessMemory erun
bc WriteProcessMemory mov ChildProcessID, ProcessDebugEvent add ChildProcessID, 04 mov ChildProcessID, [ChildProcessID] mov ChildOEP, [OEPOffset1]
// Get Stack Info
mov Address, esp add Address, 08 mov Address, [Address] log Address
mov Buffer, esp add Buffer, 0C mov Buffer, [Buffer] log Buffer
// Patch OEP of Child
mov temp1, ChildOEP sub temp1, Address add temp1, Buffer mov OEPBytes, [temp1] rev OEPBytes mov OEPBytes, $RESULT log "OEP of Child Process was patched to EBFE" log ChildOEP log ChildProcessID mov [temp1], #EBFE#
// Find and patch Crypto Proc
rtr sti gmemi eip, MEMORYBASE mov CryptoProcess, $RESULT find CryptoProcess, #8B048A50E8????????83C40C# // "mov eax, dword ptr ds:[edx+ecx*4]" "push eax" "call XXXXXXXX" "add esp,0c" cmp $RESULT, 0 je Error1 mov CryptoProcess, $RESULT add CryptoProcess, 04 mov [CryptoProcess], #9090909090# log CryptoProcess log "Crypto Process was nopped."
eval "Successfully Patched OEP = {ChildOEP} of Child Process (PID= {ChildProcessID}) from {OEPBytes} to EBFE.\r\n\r\nCheck log for more info. Press OK to continue." log $RESULT msg $RESULT
// Patch CopyMemII and WaitForDebugEvent
bp WaitForDebugEvent erun
bc WaitForDebugEvent
mov Patch1, [esp] sub Patch1, 12 log Patch1 mov [Patch1], #909090909090909090909090909090909090# add Patch1, 14 eval "jmp {CodeBegin}" asm Patch1, $RESULT add Patch1, 05 eval "nop" asm Patch1, $RESULT
mov Patch2, CodeBegin eval "add dword [{OEPOffset1}],1000" asm Patch2, $RESULT add Patch2, 0A eval "add dword [{OEPOffset2}],1000" asm Patch2, $RESULT add Patch2, 0A eval "add dword [{OEPOffset3}],1000" asm Patch2, $RESULT add Patch2, 0A eval "cmp dword [{OEPOffset3}],{DataBegin}" asm Patch2, $RESULT add Patch2, 0A eval "jnz {Patch1}" asm Patch2, $RESULT add Patch2, 06 eval "push {ChildProcessID}" asm Patch2, $RESULT add Patch2, 05 eval "call {DebugActiveProcessStop}" asm Patch2, $RESULT add Patch2, 05 eval "nop" asm Patch2, $RESULT
sub CodeBegin, 1000 mov [OEPOffset1], CodeBegin mov [OEPOffset2], CodeBegin mov [OEPOffset3], CodeBegin
//go [esp]
mov eip, [esp] bp Patch2 erun
bc Patch2 msg "Script Completed Successfully! More Info in Log. Have fun!" jmp End
Error1: msg "Can't find Crypto Process call!"
End: ret en el proceso: --------------------------- MSG ODbgScript --------------------------- Successfully Patched OEP = 80C7AC of Child Process (PID= E24) from 538BD833 to EBFE.
Check log for more info. Press OK to continue. --------------------------- Aceptar Cancelar --------------------------- Log data Address Message CodeBegin: 00801000 DataBegin: 01450000 77B10000 Module C:\MFO\system32\apphelp.dll 7C802214 Breakpoint at kernel32.7C802214 7C85A610 Breakpoint at kernel32.WaitForDebugEvent ProcessDebugEvent: 0013F388 OEPOffset1: 0013F3A0 OEPOffset2: 0013F3AC OEPOffset3: 0013F3B0 7C810669 New thread with ID 000009DC created 7C80220F Breakpoint at kernel32.WriteProcessMemory Address: 0080C000 Buffer: 00711410 OEP of Child Process was patched to EBFE ChildOEP: 0080C7AC ChildProcessID: 00000E24 CryptoProcess: 0160AC49 Crypto Process was nopped. $RESULT: Successfully Patched OEP = 80C7AC of Child Process (PID= E24) from 538BD833 to EBFE.
Check log for more info. Press OK to continue. 7C85A610 Breakpoint at kernel32.WaitForDebugEvent Patch1: 0160922F 00801038 Breakpoint at mtgstudi.00801038
Patched OEP = 80C7AC of Child Process (PID= E24) from 538BD833 to EBFE.
splicies: --------------------------- ArmInline --------------------------- Non-contiguous code generated. --------------------------- Aceptar ---------------------------
|
|
« Última modificación: 2 Abril 2011, 22:30 pm por apuromafo »
|
En línea
|
Apuromafo
|
|
|
Aborashux
Desconectado
Mensajes: 4
|
Ufff!!
Muchisimas gracias!!!
El caso es que veo que el proyecto me viene muy grande, para el nivel de conocimientos que tengo en este momento.
De momento voy a empaparme bien de los tutos que has puesto, para proceder a intentar entender correctamente los codigos que has puesto.
Logicamente, el tema del trial reset no me interesa, ya que para eso creo que con instalar y desinstalar me valdria, a parte de que siempre me ha gustado ir a por el "premio gordo".
Lo que de momento se me ocurre hasta que adquiera los conocimientos necesarios, es tratar de buscar en la web del autor, alguna version anterior (igual se ha dejado versiones antiguas alojadas) y si usa alguna version mas antigua de armadillo, mas facil y vulnerable, y suponiendo que el algoritmo de registro no ha variado, tratar de sacar un serial valido.
No obstante, agradecidisisisisisisisisimo por tu ayuda, una vez mas, gracias por tu ayuda y por tu tiempo.
|
|
|
En línea
|
|
|
|
apuromafo CLS
|
pues que bueno leer eso, usa el buscador, si olvidaste todo, comienza denuevo con el curso de ricardo y cuando vayas en la 58, comienzas con las teorias numeradas que son 1300, armadillo es vulnerable sobre todo bajo la version4, pero ya comenzando del 4 al 6 comienza el tema, no tanto porque no ha variado, ha aumentado los niveles de estructura y ha minimizado algunas cosas, pero en si armadillo 6 al 8, desempaque eso y la forma de cifrar y descifrar ya es mas elaborada, en el 8.2 al 8.4 es el tema, hay inclusive mas opciones pero no ha variado mucho, estan perdiendo la integracion en todos los s.o de windows por uso de variables y checkeos de int con handles y otras, pero si te sirve, los 2 compartidos son obligatorio leer,
yo estoy pensando como optimizar el tema de las nanomites, pues obviamente dejabamos en manos de las tools, ahora sera tiempo de analizar como funcionaban las nanomites, y quizas programar algun script, ahora falta ver, si el cc es verdadero o no porque puede ser un apuntacion a un call o otra
saludos Apuromafo
|
|
|
En línea
|
Apuromafo
|
|
|
Aborashux
Desconectado
Mensajes: 4
|
He tomado nota de lo que has comentado sobre la "vulnerabilidad" de las versiones 4xx, y pienso aprovecharlo, ya que he realizado una busqueda, y he logrado encontrar la version 1.7 del programa, y le he pasado el RDG, y me dice que lleva Armadillo 4, asi que durante esta semana voy a ver si logro terminar el curso completo del OllyDBG, y empiezo a mirar las teorias numeradas que hagan mencion a Armadillo (que ya he visto que hay unas cuantas) y tratare de conseguir acceso al algoritmo de validacion de serial, a ver si logro hacer un keygen, o obtener uno valido que me permita registrar el programa.
Muchas gracias por tu ayuda.
|
|
|
En línea
|
|
|
|
apuromafo CLS
|
intenta como objetivo o inlinear o bien desempacar,
yo todavia sigo estudiando a ver si aprendo a resolver RSA, para luegosubir de mas niveles criptogr{aficos, aun leyendo ejemplos en crackmes.de
pero: algoritmo de validacion de serial, a ver si logro hacer un keygen,
sacarle la clave aun es complicado porque es una cryptografia asimetrica busca keygen.c y otros temas de como resolver DLP, y otros temas asociados, son pocos los keygenners de armadillo por lo mismo, bruteforce al md5 pueden ser de segundos a meses, y luego de tener la estructura ordenarla y buscar el crc correcto, buscar donde usarlo y parcharlo para que lo acepte, no es nada comentado en la web aun, porque no existe tecnica aun.
algunos dicen que es posible cambiar el certificado completo, pero aun no explican como.
|
|
|
En línea
|
Apuromafo
|
|
|
Aborashux
Desconectado
Mensajes: 4
|
Osea, que me voy olvidando de tratar de sacar el keygen, ¿no?
Pues nada, a ver si lo logro desempacar.
Saludos
|
|
|
En línea
|
|
|
|
apuromafo CLS
|
ya tienes el oep, que es un delphi, y que esta con armadillo,ademas de un script que automatiza la primera parte..falta solo aprender mas como lograr integrar todo.
|
|
|
En línea
|
Apuromafo
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ejecutar el mismo programa varia veces al mismo tiempo
Dudas Generales
|
narizota
|
3
|
9,910
|
8 Enero 2011, 17:25 pm
por simorg
|
|
|
(ayuda)como hago programa q se borre a si mismo??
Programación Visual Basic
|
Psyke1
|
8
|
4,921
|
22 Marzo 2010, 21:27 pm
por Karcrack
|
|
|
Ayuda: programa que se lee asi mismo (SOLUCIONADO)
.NET (C#, VB.NET, ASP)
|
Maurice_Lupin
|
1
|
2,668
|
26 Enero 2012, 02:35 am
por Maurice_Lupin
|
|
|
programa que se cierra a si mismo ayuda
Programación C/C++
|
Borito30
|
2
|
2,071
|
15 Febrero 2017, 16:50 pm
por Borito30
|
|
|
Realizar dos operaciones al mismo tiempo en un mismo programa ayuda...
Programación C/C++
|
SilentBolt
|
5
|
3,592
|
9 Agosto 2017, 22:28 pm
por ivancea96
|
|