[?] Ayuda con armadillo peleón

Iniciado por erGato, 25 Julio 2013, 12:25 PM

0 Miembros y 2 Visitantes están viendo este tema.

erGato

 Hola a todos.

Quería saber si alguien me podía echar una mano con un ejecutable protegido con Armadillo con el que llevo un par de semanas liado. Llevo semanas probando herramientas y siguiendo tutoriales de la web de Ricardo Navaja (de hecho,creo que me los he leído y repasado todos) pero no consigo hacerlo funcionar.

Voy a intentar facilitar toda la información que sea posible:

El ArmaFP hasta hace poco me detectó que la versión era la 3.30e, pero desde que reseteé la info del trial no me detecta la versión (creo que es por eso). Este es el log que me da:

Protected Armadillo
File Size 2150400
Load file
<-Find Protect
Protection system(Digital River)
<Protection Options>
Standard protection or Minimum protection
<Backup Key Options>
Fixed Backup Keys
<Compression Options>
Better/Slower Compression
<Other Options>
Use Digital River Edition Keys
<-Find Version
?-Error (299) Version not found
?-Error (183) EXCEPTION_BREAKPOINT

El R.D.G Packer sólo indica "Armadillo detección heurística" y con el advanced scan del exeinfope me dice que si es una versión 4.x o una versión 1.71. En fin, un lio. Por los tutos que he visto, me fio más del criterio del ArmaFP.

De momento creo haber encontrado el OEP:

005A1CAC   55               PUSH EBP
005A1CAD   8BEC             MOV EBP,ESP
005A1CAF   83C4 F4          ADD ESP,-0C
005A1CB2   53               PUSH EBX
005A1CB3   56               PUSH ESI
005A1CB4   57               PUSH EDI
005A1CB5   8B75 08          MOV ESI,DWORD PTR SS:[EBP+8]
005A1CB8   8B46 10          MOV EAX,DWORD PTR DS:[ESI+10]
005A1CBB   83E0 01          AND EAX,1
005A1CBE   A3 B8CA5E00      MOV DWORD PTR DS:[5ECAB8],EAX
005A1CC3   E8 90CDFFFF      CALL xxxxxx.0059EA58
005A1CC8   8B56 20          MOV EDX,DWORD PTR DS:[ESI+20]
005A1CCB   52               PUSH EDX
005A1CCC   8B4E 1C          MOV ECX,DWORD PTR DS:[ESI+1C]
005A1CCF   51               PUSH ECX
005A1CD0   E8 5BD1FFFF      CALL xxxxxx.0059EE30
005A1CD5   83C4 08          ADD ESP,8
005A1CD8   8B46 28          MOV EAX,DWORD PTR DS:[ESI+28]
005A1CDB   50               PUSH EAX
005A1CDC   E8 C778FFFF      CALL xxxxxx.005995A8
005A1CE1   59               POP ECX
005A1CE2   8B56 44          MOV EDX,DWORD PTR DS:[ESI+44]
005A1CE5   52               PUSH EDX
005A1CE6   E8 CD78FFFF      CALL xxxxxx.005995B8
005A1CEB   59               POP ECX
005A1CEC   C705 84936000 01>MOV DWORD PTR DS:[609384],1
005A1CF6   8935 88936000    MOV DWORD PTR DS:[609388],ESI

Y la zona de la IAT:

0060F15C  100017F0  JPEGENHD.AttachImage
0060F160  100017C0  JPEGENHD.CreateUnJPEGImage
0060F164  10001850  JPEGENHD.CreateUnJPEGIns
0060F168  10001810  JPEGENHD.DetachImage
0060F16C  10001A10  JPEGENHD.GetProgressSteps
0060F170  10001980  JPEGENHD.GetResult
0060F174  100018A0  JPEGENHD.ProcessImage
0060F178  10001820  JPEGENHD.SetControlData
0060F17C  10001940  JPEGENHD.SetImage
0060F180  100018E0  JPEGENHD.SetParameters
0060F184  100018C0  JPEGENHD.SetProgressBar
0060F188  00FC78C9
...
0060F194  00000000
0060F198  01831050  HOOKDLL.InstallKBHook
0060F19C  018310F0  HOOKDLL.UnInstallKBHook
0060F1A0  00FC78EF
...
0060F1C8  00FCAC9B
0060F1CC  77DB4280  ADVAPI32.RegDeleteKeyA
0060F1D0  77DC4CB0  ADVAPI32.RegFlushKey
0060F1D4  77DA7842  ADVAPI32.RegOpenKeyExA
0060F1D8  77DA7AAB  ADVAPI32.RegQueryValueExA
0060F1DC  77DAEAD7  ADVAPI32.RegSetValueExA
0060F1E0  00FC7946
...

Pero no consigo encontrar el salto mágico ni nada por el estilo; por mucho que he investigado la diferencia entre una entrada buena y una mala lo único que he encontrado es esto:

00FDE1D3   6A 01                     PUSH 1
00FDE1D5   58                        POP EAX
00FDE1D6   85C0                      TEST EAX,EAX
00FDE1D8   0F84 79030000             JE 00FDE557 --> tanto bien como mal, no salta
00FDE1DE   66:83A5 88E7FFFF 00       AND WORD PTR SS:[EBP-1878],0
00FDE1E6   83A5 80E7FFFF 00          AND DWORD PTR SS:[EBP-1880],0
00FDE1ED   83A5 84E7FFFF 00          AND DWORD PTR SS:[EBP-187C],0
00FDE1F4   8B85 94ECFFFF             MOV EAX,DWORD PTR SS:[EBP-136C]
00FDE1FA   0FBE00                    MOVSX EAX,BYTE PTR DS:[EAX]
00FDE1FD   85C0                      TEST EAX,EAX
00FDE1FF   0F85 0C010000             JNZ 00FDE311 --> salta para la buena
00FDE205   C785 30E7FFFF 7178FC00    MOV DWORD PTR SS:[EBP-18D0],0FC7871
00FDE20F   C785 34E7FFFF 9778FC00    MOV DWORD PTR SS:[EBP-18CC],0FC7897
00FDE219   C785 38E7FFFF F678FC00    MOV DWORD PTR SS:[EBP-18C8],0FC78F6
00FDE223   C785 3CE7FFFF 0979FC00    MOV DWORD PTR SS:[EBP-18C4],0FC7909
00FDE22D   C785 40E7FFFF BA78FC00    MOV DWORD PTR SS:[EBP-18C0],0FC78BA
00FDE237   C785 44E7FFFF BF78FC00    MOV DWORD PTR SS:[EBP-18BC],0FC78BF
00FDE241   C785 48E7FFFF C478FC00    MOV DWORD PTR SS:[EBP-18B8],0FC78C4
00FDE24B   C785 4CE7FFFF C978FC00    MOV DWORD PTR SS:[EBP-18B4],0FC78C9
00FDE255   C785 50E7FFFF 5579FC00    MOV DWORD PTR SS:[EBP-18B0],0FC7955
00FDE25F   C785 54E7FFFF EF78FC00    MOV DWORD PTR SS:[EBP-18AC],0FC78EF
00FDE269   C785 58E7FFFF 7178FC00    MOV DWORD PTR SS:[EBP-18A8],0FC7871
00FDE273   C785 5CE7FFFF 9778FC00    MOV DWORD PTR SS:[EBP-18A4],0FC7897
00FDE27D   C785 60E7FFFF F678FC00    MOV DWORD PTR SS:[EBP-18A0],0FC78F6
00FDE287   C785 64E7FFFF 0979FC00    MOV DWORD PTR SS:[EBP-189C],0FC7909
00FDE291   C785 68E7FFFF 4679FC00    MOV DWORD PTR SS:[EBP-1898],0FC7946
00FDE29B   C785 6CE7FFFF 4B79FC00    MOV DWORD PTR SS:[EBP-1894],0FC794B
00FDE2A5   C785 70E7FFFF 5079FC00    MOV DWORD PTR SS:[EBP-1890],0FC7950
00FDE2AF   C785 74E7FFFF C978FC00    MOV DWORD PTR SS:[EBP-188C],0FC78C9
00FDE2B9   C785 78E7FFFF 5579FC00    MOV DWORD PTR SS:[EBP-1888],0FC7955
00FDE2C3   C785 7CE7FFFF 7B79FC00    MOV DWORD PTR SS:[EBP-1884],0FC797B
00FDE2CD   8D8D 68ECFFFF             LEA ECX,DWORD PTR SS:[EBP-1398]
00FDE2D3   E8 682DFEFF               CALL 00FC1040
...

El problema es que incluso yendo paso a paso con el Olly, llega un momento en que se llenan del tirón unas cuantas y me pierdo en el código. Los pocos dumps que he intentado realizar me acaba mostrando el error "This program has been damaged, possibly bla bla bla"; vamos, que el armadillo sigue ahí, lógicamente.

Como info adicional diré que el programa es funcional por 30 días y genera imágenes con una marca de agua; así que supongo que tendrá algún truco más para protegerse.

En fin, espero que alguien me pueda echar una mano; adelanto que soy novato en esto del cracking y me he tirado a un hueso duro de roer nada más empezar, tontaco de mi XD. Si hay alguna cosa más que deba facilitar para que puedan ayudarme, estaré atento.

Muchas gracias de antemano.

MCKSys Argentina

Bueno, Armadillo no es mi especialidad, pero conozco alguien que lo des-ARMA (XD): Apuromafo.

Espera a ver si el ve este mensaje o bien, intenta enviandole un PM.

Aunque, debo advertirte que ha dicho que está retirado...

Saludos!
MCKSys Argentina

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


.:UND3R:.

APURODILLO podría ayudarte (apuromafo), 100% concuerdo. Saludos.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

erGato

Gracias por responder, gente.

A ver si me puede echar un cable.

Saludos.

apuromafo CLS

Hola, un saludo, que no te aparezca la version a ya es algo extraño, puedo orientarte,pero es dificil que vuelva a depurar algo por acá

necesitaré algunos datos extras como tu sistema operativo

Respecto a el salto mágico , pasa que armadillo es un poco trickiñuelo, existen a lo menos 3 formas de reparar la iat
1) sin salto mágico, reparar uno a uno, esto es por experiencia bien recomendable, latoso pero util igual
2) cambiar cierta zona de un push 100 a retn  (método inglés)
3) encontrar el salto mágico y luego haceer con script el orden de la tabla
(método de ricardo, en versiones variadas)

pero siempre hay cosas que nunca se hablan
Tendrá code splicies?
tendrá realmente nanomites
tendrá environmentvariables?

entre más alta la versión de armadillo más cosas te puedes encontrar
Veo que ya encontraste el oep, eso es un gran paso a favor.
Bueno

Existen varias herramientas para amadillo, de lo cual lo que más usé fue script de fungus, fue ujn proyecto interesante implementar que detectara el overlay y otros detalles que ayudaran a los Secured section esto utiliza script



la forma más rapida es que intentes usar armaggedon(cuando este obviamente sea una version soportada)

en http://www.ricardonarvaja.info/WEB/buscador.php
puedes encontrar material de "Armadillo"

en no mucho tiempo  estuve inclusive keygeneando armadillos pero es recomendable en super-computadoras y versiones menores a cierto número...


aver comenzemos con lo más básico Ejecuta este script desde el oep
/*

Get Armadillo Version 3.xx / some 4.xx / 5.xx / 6.xx / 7.xx

*/

var aver
var temp
var scall
var outbuf
var membase
var len
var Armadillo_Version

bphwc                                      // Clear any hardware breakpoints
bpmc                                       // Clear any memory breakpoint
bc                                         // Clear any saved breakpoints
lc                                         // Clear the log window

gmi eip, MODULEBASE
mov ceip2, $RESULT
mov tmp1, ceip2
gmi eip, MODULESIZE
mov tmp2, $RESULT
add tmp1, tmp2
mov ceip1, tmp1

gpa "VirtualProtect", "kernel32.dll"
mov vpt, $RESULT
find vpt, #C21000#
mov vpt, $RESULT
gpa "OpenMutexA", "kernel32.dll"
mov oma, $RESULT
find oma, #C20C00#                         // find "retn 0C"
mov oma, $RESULT
gpa "IsDebuggerPresent", "kernel32.dll"
mov idp, $RESULT
gpa "OutputDebugStringA", "kernel32.dll"
mov odsa, $RESULT
gpa "OutputDebugStringW", "kernel32.dll"
mov odsw, $RESULT
mov [idp], #33C0C3#                        // assemble "xor eax,eax" "retn"
mov [odsa], #C20400#                       // assemble "retn 4"
mov [odsw], #C20400#                       // assemble "retn 4"
log "IsDebuggerPresent patched"
log "OutputDebugString patched"

msgyn "Is target using Debug Blocker/CopyMemII?"
mov idb, $RESULT
cmp idb, 0
je check1
                                           // Bypass Debug Blocker
bp oma
erun

mov eax, 01
erun

mov eax, 01
bc oma

check1:
bp vpt
bp odsa
bp odsw
erun

bc vpt
bc odsa
bc odsw
cmp eip, odsa
je  newversion
cmp eip, odsw
je  newversion

sti
gmi eip, NAME                              // check if eip is in unowned section
cmp $RESULT, 0
jne check1
cmp ceip2,eip                              // check if eip is below PE image
ja oldversion
cmp ceip1,eip                              // check if eip is above PE image
jb oldversion
jmp check1

newversion:

sto
gmemi eip, MEMORYBASE
mov membase, $RESULT

mov temp, eip
sub temp, 10
find temp, #E8#
mov scall, $RESULT
cmp scall, 0
je error1

mov eip, scall

find membase, #41666649443D3C3E00000000#
mov temp, $RESULT
add temp, 0C
mov aver, temp

alloc 1000
mov outbuf, $RESULT

push 100
push outbuf
push aver

sto

find outbuf, #00#
mov len, $RESULT
sub len, outbuf
cmp len, 0
je  error2
readstr [outbuf], len
mov Armadillo_Version, $RESULT
log Armadillo_Version
eval "Armadillo Version = {Armadillo_Version} "
msg $RESULT

jmp end

oldversion:

gmemi eip, MEMORYBASE
mov membase, $RESULT

find membase, #61726D56657273696F6E3E#
mov outbuf, $RESULT
add outbuf, 0F
find outbuf, #00#
mov len, $RESULT
sub len, outbuf
cmp len, 0
je  error2
readstr [outbuf], len
mov Armadillo_Version, $RESULT
log Armadillo_Version
eval "Armadillo Version = {Armadillo_Version} "
msg $RESULT

jmp end

error1:
msg "Can't find decryption routine!"
jmp end

error2:
msg "Sorry Armadillo version is removed, it is somewhere between 4.00 and 4.66"

end:
ret

apuromafo CLS

respecto a amaggedon, si bien existe la 2.0 (privada) hay una estable y pública
Funciona bien en sistemas operativos de xp ^^
http://www.accessroot.com/arteam/site/download.php?view.262
saludos Apuromafo

erGato

Mi sistema operativo es Windows XP SP3.

Si lo que leí en su momento lo entendí bien, para que haya nanomites tiene que haber un proceso padre y uno hijo. Yo lo descarté en su momento porque sólo había un proceso, ¿me precipité en mi conclusión?

El armageddon en su momento no me sirvió porque el programa no se detenía después de la ventana de registro ni me ponía otra cosa que el PID del proceso. Nunca he entendido bien como funciona esa herramienta, pero creo que es que con este ejecutable no ha habido manera por tratarse de una versión anterior a la 3.78.

Voy a intentar ejecutar el script y a ver que pasa.

Gracias por tu respuesta, apuromafo.

erGato

Acabo de ejecutar el script y la versión que indica es la 3.30d.

Saludos.

apuromafo CLS

Hay una manera de contribuir a la protección de la humanidad, y es no resignarse. Ernesto Sábato (1911); escritor argentino

enviamelo al privado, por ultimo veo que opciones tiene ;)

saludos

apuromafo CLS

es un 3.3d , el oep no es el que tienes, es 401000  es un borland a primera impresión, no he terminado de encontrar donde hace el import destruction, pero no es como el común, este tiene menos(mas pequeño los lugares), encontré el chk del exe(base para keygenearlo), pero no así el valor Y como para resolver DLP y terminar y testear realmente si asimila las keys en digital river editions...por otro lado hay destruccion de datos del PE (modifico el cambio donde esta el PE, por otro random) por ende lo ideal es sólo luego de modificar aquello , dumpear, reparar con Arminline, luego import fixer 1.2 y luego resolver de forma manual las otras entradas, encontré algunos lugares llamando a los environment variable pero mas no quise checkear, quien más cercano a unpack está es la version 2.0 de armaggedon(privada)  pero igual desde script o con buenos bp llegas igual a las partes importantes

Un saludo Apuromafo