Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Gameserver X-Team Original Season 14 Decompiled  (Visto 2595 veces)

0 Miembros and 1 Guest are viewing this topic.

Offline Daniel@ #20 on: July 05, 2019, 10:47:39 AM

  • 0 puntos por ventas
  • *
  • Rank: Avanzado
  • Posts: 137
  • Gracias recibida: 679
  • ve
Parece que hablara con un crío, pretender decirme "si no sabes calla", te ayudará en algo? o decirme, hazlo mejor que yo?, yo no se mucho de ingeniería inversa, no puedo decir que lo haré mejor o no, pero creo que aquí el que sea consciente de lo que ve en tus files, como lo vieron en RZ, te dirán a simple vista, que tu "decompliación" no sirve, creo que ya te lo dijeron muchos programadores en rz, tambien soy programador y a simple vista, sin conocimientos de ingeniería inversa, diré ciertamente que esto no sirve, decompilar un packed, proteced and licensed, es lo mismo que tenerlo compilado, y llamarle decompilación a un gs, de este tipo, bueno, se tomaran meses, tal vez 1 o 2 años para volverlo si quiera un 90% a su forma original, aun quieres seguir diciendo que "lo haga yo, demuestra que eres mejor que yo y me retiro?" con esa actitud deberias estar leyendo un libro XD en la escuela.

 volando una pregunta, en donde puedo seguir viendo el chisme, ya estaba preparando las palomitas cuando deje de ver mas comentarios, se estaba poniendo bueno.v volando   lol

Offline screamofheartless #21 on: July 05, 2019, 12:47:00 PM

  • Colaborador
  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 115
  • Gracias recibida: 2314
  • br
Parece que hablara con un crío, pretender decirme "si no sabes calla", te ayudará en algo? o decirme, hazlo mejor que yo?, yo no se mucho de ingeniería inversa, no puedo decir que lo haré mejor o no, pero creo que aquí el que sea consciente de lo que ve en tus files, como lo vieron en RZ, te dirán a simple vista, que tu "decompliación" no sirve, creo que ya te lo dijeron muchos programadores en rz, tambien soy programador y a simple vista, sin conocimientos de ingeniería inversa, diré ciertamente que esto no sirve, decompilar un packed, proteced and licensed, es lo mismo que tenerlo compilado, y llamarle decompilación a un gs, de este tipo, bueno, se tomaran meses, tal vez 1 o 2 años para volverlo si quiera un 90% a su forma original, aun quieres seguir diciendo que "lo haga yo, demuestra que eres mejor que yo y me retiro?" con esa actitud deberias estar leyendo un libro XD en la escuela.

si quieres te lo enseno como hacer ahi entonces vas a creerme.

https://imgur.com/a/aMVIYEM

Haziel, el dueño de ACTeam, tambien no me creia, hasta que descompile sus files, en frente de el.
ahi entonces me dejo esta mensage en el foro brasileño.

Offline iramondias #22 on: July 05, 2019, 02:53:01 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 55
  • Gracias recibida: 31
  • br
Puedes hacer con el main s6 muemu ?

Offline screamofheartless #23 on: July 05, 2019, 03:43:24 PM

  • Colaborador
  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 115
  • Gracias recibida: 2314
  • br

Offline GX_KYO #24 on: July 05, 2019, 04:38:04 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 224
  • Gracias recibida: 541
  • pe
si quieres te lo enseno como hacer ahi entonces vas a creerme.

https://imgur.com/a/aMVIYEM

Haziel, el dueño de ACTeam, tambien no me creia, hasta que descompile sus files, en frente de el.
ahi entonces me dejo esta mensage en el foro brasileño.

A ver, primero que nada, mi intención no es decir que soy mejor que tu, ni que soy más inteligente ni nada por el estilo, porque no creo serlo, ok?, ahora bien asumamos que tu de-compilación si sirve, entonces debemos asumir que sabes de ingeniería inversa, sabes de programación a un nivel alto y puedes darle utilidad al código que posteaste (código que viéndolo y con los pocos conocimientos de programación en asm que tengo, puedo decir, esta todo ofuscado y la verdad no le encuentro utilidad), entonces, ¿podrías darme un ejemplo de programación de como utilizar el código que posteaste?

Entiendo de que hiciste el mismo procedimiento con otro GS de otro team, que también estaban protegidos con themida y funciono, pero el hecho es que eso no significa que si funciono en ese GS también va a funcionar en los demás.
Killing me one breath at a time... Cutting you with my pair of lives... So go on and lay me down to rest, You make it painless, painless!
I can't... I can't... I can't...
I can't feel ANY PAIN!

Offline iramondias #25 on: July 06, 2019, 07:28:05 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 55
  • Gracias recibida: 31
  • br

Gracias:


Offline screamofheartless #26 on: July 06, 2019, 10:28:46 PM

  • Colaborador
  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 115
  • Gracias recibida: 2314
  • br

Offline YolaxD #27 on: July 07, 2019, 12:52:18 AM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 211
  • Gracias recibida: 1823
  • ar
hola, viendo que nadie dice nada decente me descargue el archivo para analizarlo y aquí va mi respuesta de su utilidad como tal entre otras acotaciones; esto es una auto-decompilacion con  Hex-Rays decompiler bien, osea que lo que tan bien decompiles no viene al caso porque no has trabajado lo que posteaste osea que hasta este punto el único merito es el unpack del exe que si buscan bien hay guías en internet de como hacerlo, ahora supongamos que yo quiero utilizar tu por así decirlo decompilacion para extraer algún dato que me pueda servir en mis archivos.

 lo voy a hacer con la función ServerQueueThread para que se den una idea esta es la función original

Code: [Select]

DWORD WINAPI CSocketManager::ServerQueueThread(CSocketManager* lpSocketManager) // OK
{
while(true)
{
if(WaitForSingleObject(lpSocketManager->m_ServerQueueSemaphore,INFINITE) == WAIT_FAILED)
{
gLog.Output(LOG_CONNECT,"[SocketManager] WaitForSingleObject() failed with error: %d",GetLastError());
break;
}

static QUEUE_INFO QueueInfo;

if(lpSocketManager->m_ServerQueue.GetFromQueue(&QueueInfo) != 0)
{
if(OBJECT_RANGE(QueueInfo.index) != 0 && gObj[QueueInfo.index].Connected != OBJECT_OFFLINE)
{
ProtocolCore(QueueInfo.head,QueueInfo.buff,QueueInfo.size,QueueInfo.index,QueueInfo.encrypt,QueueInfo.serial);
}
}
}

return 0;
}


esta otra es la que tiene la auto-decompilacion

Code: [Select]

__int64 __usercall sub_13F278020@<rax>(__int64 a1@<rcx>, __m256i *a2@<ymm2>)
{
  __int64 v2; // rbx
  int v4; // [rsp+30h] [rbp-2038h]
  unsigned __int8 v5; // [rsp+34h] [rbp-2034h]
  char v6; // [rsp+35h] [rbp-2033h]
  unsigned int v7; // [rsp+2038h] [rbp-30h]

  v2 = a1;
  while ( (unsigned int)MEMORY[0x77712B20](*(_QWORD *)(v2 + 184), 0xFFFFFFFFi64) != -1 )
  {
    if ( (unsigned __int8)sub_13F278150(v2 + 112, (__int64)&v4)
      && v4 >= 0
      && v4 < 14000
      && *(_DWORD *)(qword_1411D9E38[v4] + 4) )
    {
      sub_13F20CFE0(v5, &v6, v7);
    }
  }
  ((void (*)(void))loc_14149CF07)();
  sub_13F1A41D0(5u, (__int64)&off_13F83E440, (__int64)"[SocketManager] WaitForSingleObject() failed with error: %d", a2);
  return 0i64;
}


bastante diferente el código no?, ahora bien lo que se debería hacer es ir metiendo información a la interpretacon que le doy a la función para dejarla mas entendible y yo poder incorporarla a mi proyecto así que empiezo.. y ya me topo con el primer problema, oh valla no tiene los segmentos completos
 
Code: [Select]
  

while ( (unsigned int)MEMORY[0x77712B20](*(_QWORD *)(v2 + 184), 0xFFFFFFFFi64) != -1 )


como vemos en este caso tenemos un MEMORY[0x77712B20] que hace referencia a una función que se aloja en (0x77712B20) que no existe en el exe que auto decompilo hex por lo que no podría seguir la decompilacion al no poder llegar y leer esa parte del código.

ahora sacando este pequeño detalle supongamos que por una de esas casualidades de la vida deducimos o sabemos que la función es WaitForSingleObject, esto nos dice también los dos parametros que tiene que serian primero que nada una estructura que acede a algo en una posición de dicha estructura, como tenemos la original sabemos que son
Code: [Select]
(lpSocketManager->m_ServerQueueSemaphore,INFINITE)
los parametros pero si no la tuviéramos tendríamos que reconstruir dicha estructura ya que si bien sabríamos que pasaría 
Code: [Select]
(HANDLE hHandle y DWORD dwMilliseconds)
porque reconoceriamos la función y podríamos deducir fácilmente por la documentación de dicha función, ahora viene lo lindo.. como hago yo para reconstruir la estructura (CSocketManager) desde tu .c , tendria
 que ir analizado las 1330739 lineas manualmente para poder ir reconstruyendo y deduciendo todo, por lo que se haria un poquito tedioso por no decir imposible ubicar todo manualmente un pequeño inconveniente de trabajar con el .c .

ahora el ultimo inconveniente que voy a explicar porque se hizo demacrado extensa la cosa y ya me canse es la autodecompilacion, si se fijan bien casi ningún dato es el correcto.. esto se debe a que hex no hace magia y no puede deducir por si mismo todo, cada función requerirá un análisis de la persona que lo este analizado y supongamos que yo requiero ver la pila porque una función en ves de pasarme un buffer me pasa un puntero porque hex lo interpreto mal entonces yo requeriría ver la pila para poder deducir que no es un puntero y es un buffer el parametro que se le pasa ya que si fuera un buffer tendría que reservarle su espacio en memoria y cuando yo utilice esa decompilacion me va a funcionar mal por no decir crachear la aplicación, obviamente esto cuando ya se tiene demaciada información analizada se va haciendo practicamente intuitivo pero igual tendríamos este problema con este .c , no podríamos analizar función x función a detalle y están a la suerte de que hex analizo y interpreto bien todo, que como estamos viendo en esta función no lo hizo.

asi que en resumidas cuentas de que sirve esto.. y digamos que si queres ver un par de logs o lecturas de boludeces chicas te sirve pero si quieres ir decompilado para añadir a tu proyecto como se plantea no te sirve de nada, ahora bien si se aportaría el .exe unpackeado les serviria de un poco mas, ya que no tendrían que hacer tantas cosas manuales pero como vimos arriba tampoco esta bien echo el unpack por lo que en ciertos casos nos toparemos con ese drama de no poder reconocer datos porque los segmentos no están completos.

pd: no hago esto con mala intención, la idea es que se hable claro y sin burlas (si se que mi explicacion tiene un poco de sarcasmo pero va dirigido al código y los metodos no a la persona)

Gracias:


Online xdjoa #28 on: July 07, 2019, 03:03:14 AM

  • 0 puntos por ventas
  • *
  • Rank: Experto
  • Posts: 152
  • Gracias recibida: 30
  • pe
hola, viendo que nadie dice nada decente me descargue el archivo para analizarlo y aquí va mi respuesta de su utilidad como tal entre otras acotaciones; esto es una auto-decompilacion con  Hex-Rays decompiler bien, osea que lo que tan bien decompiles no viene al caso porque no has trabajado lo que posteaste osea que hasta este punto el único merito es el unpack del exe que si buscan bien hay guías en internet de como hacerlo, ahora supongamos que yo quiero utilizar tu por así decirlo decompilacion para extraer algún dato que me pueda servir en mis archivos.

 lo voy a hacer con la función ServerQueueThread para que se den una idea esta es la función original

Code: [Select]

DWORD WINAPI CSocketManager::ServerQueueThread(CSocketManager* lpSocketManager) // OK
{
while(true)
{
if(WaitForSingleObject(lpSocketManager->m_ServerQueueSemaphore,INFINITE) == WAIT_FAILED)
{
gLog.Output(LOG_CONNECT,"[SocketManager] WaitForSingleObject() failed with error: %d",GetLastError());
break;
}

static QUEUE_INFO QueueInfo;

if(lpSocketManager->m_ServerQueue.GetFromQueue(&QueueInfo) != 0)
{
if(OBJECT_RANGE(QueueInfo.index) != 0 && gObj[QueueInfo.index].Connected != OBJECT_OFFLINE)
{
ProtocolCore(QueueInfo.head,QueueInfo.buff,QueueInfo.size,QueueInfo.index,QueueInfo.encrypt,QueueInfo.serial);
}
}
}

return 0;
}


esta otra es la que tiene la auto-decompilacion

Code: [Select]

__int64 __usercall sub_13F278020@<rax>(__int64 a1@<rcx>, __m256i *a2@<ymm2>)
{
  __int64 v2; // rbx
  int v4; // [rsp+30h] [rbp-2038h]
  unsigned __int8 v5; // [rsp+34h] [rbp-2034h]
  char v6; // [rsp+35h] [rbp-2033h]
  unsigned int v7; // [rsp+2038h] [rbp-30h]

  v2 = a1;
  while ( (unsigned int)MEMORY[0x77712B20](*(_QWORD *)(v2 + 184), 0xFFFFFFFFi64) != -1 )
  {
    if ( (unsigned __int8)sub_13F278150(v2 + 112, (__int64)&v4)
      && v4 >= 0
      && v4 < 14000
      && *(_DWORD *)(qword_1411D9E38[v4] + 4) )
    {
      sub_13F20CFE0(v5, &v6, v7);
    }
  }
  ((void (*)(void))loc_14149CF07)();
  sub_13F1A41D0(5u, (__int64)&off_13F83E440, (__int64)"[SocketManager] WaitForSingleObject() failed with error: %d", a2);
  return 0i64;
}


bastante diferente el código no?, ahora bien lo que se debería hacer es ir metiendo información a la interpretacon que le doy a la función para dejarla mas entendible y yo poder incorporarla a mi proyecto así que empiezo.. y ya me topo con el primer problema, oh valla no tiene los segmentos completos
 
Code: [Select]
  

while ( (unsigned int)MEMORY[0x77712B20](*(_QWORD *)(v2 + 184), 0xFFFFFFFFi64) != -1 )


como vemos en este caso tenemos un MEMORY[0x77712B20] que hace referencia a una función que se aloja en (0x77712B20) que no existe en el exe que auto decompilo hex por lo que no podría seguir la decompilacion al no poder llegar y leer esa parte del código.

ahora sacando este pequeño detalle supongamos que por una de esas casualidades de la vida deducimos o sabemos que la función es WaitForSingleObject, esto nos dice también los dos parametros que tiene que serian primero que nada una estructura que acede a algo en una posición de dicha estructura, como tenemos la original sabemos que son
Code: [Select]
(lpSocketManager->m_ServerQueueSemaphore,INFINITE)
los parametros pero si no la tuviéramos tendríamos que reconstruir dicha estructura ya que si bien sabríamos que pasaría 
Code: [Select]
(HANDLE hHandle y DWORD dwMilliseconds)
porque reconoceriamos la función y podríamos deducir fácilmente por la documentación de dicha función, ahora viene lo lindo.. como hago yo para reconstruir la estructura (CSocketManager) desde tu .c , tendria
 que ir analizado las 1330739 lineas manualmente para poder ir reconstruyendo y deduciendo todo, por lo que se haria un poquito tedioso por no decir imposible ubicar todo manualmente un pequeño inconveniente de trabajar con el .c .

ahora el ultimo inconveniente que voy a explicar porque se hizo demacrado extensa la cosa y ya me canse es la autodecompilacion, si se fijan bien casi ningún dato es el correcto.. esto se debe a que hex no hace magia y no puede deducir por si mismo todo, cada función requerirá un análisis de la persona que lo este analizado y supongamos que yo requiero ver la pila porque una función en ves de pasarme un buffer me pasa un puntero porque hex lo interpreto mal entonces yo requeriría ver la pila para poder deducir que no es un puntero y es un buffer el parametro que se le pasa ya que si fuera un buffer tendría que reservarle su espacio en memoria y cuando yo utilice esa decompilacion me va a funcionar mal por no decir crachear la aplicación, obviamente esto cuando ya se tiene demaciada información analizada se va haciendo practicamente intuitivo pero igual tendríamos este problema con este .c , no podríamos analizar función x función a detalle y están a la suerte de que hex analizo y interpreto bien todo, que como estamos viendo en esta función no lo hizo.

asi que en resumidas cuentas de que sirve esto.. y digamos que si queres ver un par de logs o lecturas de boludeces chicas te sirve pero si quieres ir decompilado para añadir a tu proyecto como se plantea no te sirve de nada, ahora bien si se aportaría el .exe unpackeado les serviria de un poco mas, ya que no tendrían que hacer tantas cosas manuales pero como vimos arriba tampoco esta bien echo el unpack por lo que en ciertos casos nos toparemos con ese drama de no poder reconocer datos porque los segmentos no están completos.

pd: no hago esto con mala intención, la idea es que se hable claro y sin burlas (si se que mi explicacion tiene un poco de sarcasmo pero va dirigido al código y los metodos no a la persona)
Gracias yolaxd por la info por tanto es mejor borrar estos post

Gracias:


Offline kamesenin #29 on: July 24, 2019, 07:35:10 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 9
  • Gracias recibida: 3
  • ar
Che tanta peleea por ver si si sirve o no si ya casi tiene lista la s14 que la comparta y punto con src y todo y despues lo coronamos esto .giancarlo tiene razon

Gracias:


Offline screamofheartless #30 on: July 25, 2019, 03:09:43 PM

  • Colaborador
  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 115
  • Gracias recibida: 2314
  • br
No es pelea.
Yo hice lo mejor que yo pude con lo que tengo.
todos ustedes quieren una descompilacion perfecta con pdb y map.
yo no tengo a esos archivos (pdb y map) para que le de nombre a las funciones.
to que yo hice fue salta al proceso del packer, y generar a la descompilacion.
yo hice eso, para los que le gusten puedan trabajar en eso.

Sin pdb y map, es imposible hacer una descompilacion perfecta.
pero, yo hice como pude, y la comparti.
a los que creen que no sirve. ok.
no me voy mas extresar por eso.
« Ultima edicion: July 25, 2019, 03:12:01 PM by screamofheartless »

Offline InFamous #31 on: August 12, 2019, 04:43:55 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 33
  • Gracias recibida: 493
  • br
Llegar a ser una broma una descompilación de este !!!!
matarte loco

Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

 

Related Topics

  Subject / Started by Replies Last post
1 Replies
398 Views
Last post March 10, 2018, 06:26:23 PM
by cristof pavez
4 Replies
1832 Views
Last post August 14, 2018, 11:00:30 AM
by caron22
3 Replies
407 Views
Last post March 26, 2018, 12:55:16 PM
by Peluuca
4 Replies
612 Views
Last post July 12, 2019, 11:11:00 AM
by screamofheartless
0 Replies
315 Views
Last post July 04, 2019, 11:26:21 AM
by screamofheartless