Ayuda para desempacar/descifrar confuser 1.9 + CryptoObfuscator

Iniciado por aguml, 27 Diciembre 2017, 17:37 PM

0 Miembros y 1 Visitante están viendo este tema.

aguml

Hola amigos, llevo varios días intentando desempacar/descifrar un C#.NET C# pero son todo problemas cuando lo intento.
He probado lo siguiente: https://forum.tuts4you.com/topic/36776-unpackcryptoconfuser-19/
Pero:

1- Tengo problemas en el paso 3: de4dot.exe "path" -p un --strtyp delegate --strtok 0600002f". (En mi caso es 0600002f). Si uso el parámetro strtok da error y no da ninguna pista de que falla.
2- No tengo "CryptoObfuscator constant fixer".
3- No tengo "ResourceManager".

También probé con este: https://bbs.cracker.in.th/thread-6462-1-1.html
Con los mismos problemas.

También probé con este: https://es.scribd.com/document/255653902/NET-Decrypt-Constants-Manually-Using-PowerShell

Code:
$MetadataToken = 0x0600002f
$path = 'C:\...\file.DumpedMethods-cleaned.exe'
$asm = [System.Reflection.Assembly]::LoadFrom($path)
$module = $asm.GetModules()[0]
$decryptionMethod = $module.ResolveMethod($MetadataToken)
$result = $decryptionMethod.Invoke($null,80)
Write-Host $result

Con este resultado:
Excepción al llamar a "LoadFrom" con los argumentos "1": "No se puede cargar el archivo o ensamblado 'file:///C:\...file.DumpedMethods-cleaned.exe' ni una de sus dependencias. Se esperaba que el módulo tuviera un manifiesto de ensamblado."
En línea: 3 Carácter: 46
+ $asm = [System.Reflection.Assembly]::LoadFrom <<<< ($path)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

No se puede llamar a un método en una expresión con valor NULL.
En línea: 4 Carácter: 26
+ $module = $asm.GetModules <<<< ()[0]
    + CategoryInfo          : InvalidOperation: (GetModules:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

No se puede llamar a un método en una expresión con valor NULL.
En línea: 5 Carácter: 42
+ $decryptionMethod = $module.ResolveMethod <<<< ($MetadataToken)
    + CategoryInfo          : InvalidOperation: (ResolveMethod:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

No se puede llamar a un método en una expresión con valor NULL.
En línea: 6 Carácter: 35
+ $result = $decryptionMethod.Invoke <<<< ($null,80)
    + CategoryInfo          : InvalidOperation: (Invoke:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

¿Alguien puede ayudarme? please.
Ya no sé qué más probar y estoy muy perdido en .NET.


apuromafo CLS

si es de ayudar, aqui va sin confuser :) , eso tengo varios recuerdos, asi que deberia estar listo.

del cryptoobfuscator no tengo experiencia  pero igual te dejo uno como referencia a como deberia verse mas menos
https://megaup.net/1pAD/explorar.rar

Saludos Apuromafo

aguml

#3
Pues estamos atascados mas o menos en el mismo sitio amigo.
Tenemos un codigo imposible de entender porque usa constantes para obtener las strings y esa parte sigue sin solucionar y ademas usa una serie de funciones que dudo mucho que lo haya creado asi el creador del programa. Un ejemplo:
Código (csharp) [Seleccionar]
byte[] array = Class41.smethod_0((int)Class37.smethod_0(eData));
En realidad si voy viendo lo que hace cada metodo de cada clase quedaria algo como:
Código (csharp) [Seleccionar]
byte[] array = new byte[(int)eData.Length];
Mucho mas comprensible que lo anterior y lo que está es asignando memoria a un array de bytes y el tamaño es el del largo del eData.
Otro ejemplo:
Código (csharp) [Seleccionar]
fixed (byte* ptr = &eData[Class4.smethod_0(276)])
queda como:
Código (csharp) [Seleccionar]
fixed (byte* ptr = &eData[BitConverter.ToInt32(Class4.byte_0, 276)])
Es mas comprensible pero sigue siendo una maraña de clases que no hay quien la entienda porque ¿donde se declara byte_0?
Código (csharp) [Seleccionar]
static Class4()
{
if (Class4.byte_0 == null)
{
string text = Class46.smethod_1<string>(439275159u, 16521681396958907343uL);
byte[] array = Convert.FromBase64String(text);
text = Encoding.UTF8.GetString(array, 0, array.Length);
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(text);
Class4.byte_0 = Class6.smethod_1(97L, manifestResourceStream);
}
}

Lo que hace es rellenar byte_0 con datos de un archivo de recursos cuyo nombre no puedo saber ya que Class46.smethod_1 es una funcion con muchas operaciones matematicas para obtener la cadena y que sin la ayuda de un matematico nivel dios no podré entender jajaja.
Pero usando tools llegué a algo más y así quedo esa función:
Código (csharp) [Seleccionar]
if (Class4.byte_0 == null)
{
string text = "UmVzaWRlbnQgRXZpbCBSZXZlbGF0aW9ucyAyIERlY3J5cHRlciU=";
byte[] array = Convert.FromBase64String(text);
text = Encoding.UTF8.GetString(array, 0, array.Length);
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(text);
Class4.byte_0 = Class6.smethod_1(97L, manifestResourceStream);
}

En realidad la cadena es "Resident Evil Revelations 2 Decrypter%" con lo que esa funcion podria quedar como:
Código (csharp) [Seleccionar]
if (Class4.byte_0 == null)
{
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Resident Evil Revelations 2 Decrypter%");
Class4.byte_0 = Class6.smethod_1(97L, manifestResourceStream);
}

Class6.smethod_1 si no me equivoco es parte de cryptoofuscator ya que realmente viendo sus tripas creo que descifra el archivo de recurso para meter los bytes en Class4.byte_0. Realmente no creo que el programador sea el responsable  :xD

apuromafo CLS

ojo hay recursos en dll... no solo en el exe..no lo subi porque los puedes dumpear facil con megadumper

aguml

Vi que salian 3 dll con MegaDumper pero no se que hacer con ellas  :P

aguml

He conseguido desofuscar las cadenas  ;D
Esto pone:
this.byte_0 = Encoding.ASCII.GetBytes("zW$2eWaHNdT~6j86T_&j");
Esa se supone que es una Key que usa el programa para descifrar/cifrar archivos y lo que tengo que saber ahora es como la usa porque creo que podria ser TEA pero no es nada seguro.

aguml

#7
Adjunto lo que llevo hasta ahora: https://mega.nz/#!p4MDHYoK!8iJCvwdKIqYDzkfpQoKvdJEagIZbU0gReBpqRpEP-Jk
Por ahora quitados los delegates, descifrado, resueltas las strings, y vaciado el constructor de <Module>.cctor.
Me falta reparar los recursos que los tengo dumpeados con megadump, reparar las constantes que la verdad no se ni que son pero supongo que tendrá que ver con las funciones extrañas y clases que no vienen mucho a cuento y que tienen pinta de ser cosa de uno de los ofuscadores, y tambien me falta limpiar las clases y delegates que ya no sirvan. La verdad es que aunque lo resuelva no voy a poder depurarlo en mi pc porque desde que instalé visual studio ya no me deja y me da un error que por lo que he leido es porque el ejecutable fue creado en una maquina con framework 4.5 y yo tengo 4.0 y tengo xp y en xp no se puede instalar el 4.5. Lo que no entiendo es porque funcionaba bien hasta que instalé Visual Studio si seguia sin tener el framework 4.5  :¬¬