
Como no es difícil de adivinar, la tetera soy yo.
El otro día quise analizar la fuente de una utilidad, obviamente hecha con herramientas AMS (archivo .cdd junto a .exe y un par de lua * .dll). Hace un par de años analicé en detalle un programa hecho por medios similares y está disponible la idea de empaquetar .cdd, que es un archivo zip regular con una contraseña. Bueno, sin dudarlo,
presioné AMSUnpacker y recibí un error de desempaque. Bueno, desde este momento comenzó la diversión ...
El primer pensamiento que se me ocurrió fue que el archivo estaba empaquetado con algo diferente a UPX (que naturalmente desempaqué). Bueno, simplemente no lo verifiqué (DIE, Exeinfo PE, Nauz File Detector) y todos me convencen de que no, no está empaquetado. Bueno, creo que compararé el .exe banal usando Total Commander con el programa previamente desempaquetado y este, y resultó que .exe es muy diferente (solía comparar otros programas en AMS y la diferencia era solo en bytes individuales, de hecho, en una contraseña escrita en texto plano solo en .exe en sí mismo y en la parte de recursos). Quedó claro que esto es algún tipo de modificación y solo una nueva versión de AMS. Creí en esto último con dificultad, sabiendo (bueno, al principio pensé que sabía) que los desarrolladores habían superado el programa durante mucho tiempo, pero no comenzaron a comprobar si era esto o no, y difícilmente habría dado nada.
Comencé a profundizar en más detalles, de alguna manera en x64dbg, con el que yo en "Usted", encontré en la versión anterior del programa un lugar donde la contraseña es "leída". Habiendo hurgado en el mismo x64dbg en la "nueva" versión, resultó que no son tan diferentes, pero simplemente tiene más funciones que en la anterior. Encontré un lugar similar donde, en lugar del codiciado
push <dirección donde se almacena la contraseña> hubo algún tipo de
mov <algo allí> y varias llamadas a otras funciones, y unas pocas líneas debajo del código son similares a las de la versión anterior.
(a la izquierda está la versión anterior, a la derecha está la nueva)Y aquí estaba triste, porque mi conocimiento de depurador claramente no es suficiente para entender todo esto.
Hubo un pensamiento: encontrar otro programa similar desempacable y comparar su .exe. Tal programa fue encontrado por el mismo autor que el que intenté descomprimir. Y la comparación de archivos dio su resultado. Además de pequeñas diferencias, se encontró un bloque completo de varios datos:

Y la alegría que encontré en ese lugar único donde aparentemente estaba contenida la contraseña, y la decepción de que claramente no era una contraseña, en la forma en que estaba en versiones anteriores.
No había más remedio que entender al depurador. Todo el "problema" es que conozco al ensamblador en el nivel de varios comandos, con una representación muy superficial de lo que están haciendo, y el depurador en sí está en el nivel de varios videos vistos en YouTube y con poca experiencia en su uso, principalmente por el "método de empuje".
Después de una hora de ejecutar el depurador y una innumerable cantidad de reinicios, de alguna manera encontré un lugar donde se leen los codiciados bytes y un poco más tarde encontré un código que manipula estos bytes:

Me llevó mucho tiempo entender lo que se estaba haciendo allí.
De alguna manera, descubrí que se trata de algún tipo de teclado cifrado, donde hay dos tablas, una es una contraseña cifrada, donde el carácter correspondiente simplemente indica la posición en el segundo bloc de notas.

En general, reemplazando los valores de la tabla inferior con los valores correspondientes de la tabla superior, obtenemos una matriz de bytes:
7B 10 DD 5A 4D 26 72 EE B2 2A 04 2B 6E F7 14 E2 F9 14 F8 9E 8A 99 28 AE B8 4B C0 D7 42 DA AD .
En cuanto a qué otras matrices únicas de bytes, antes y después de la contraseña necesaria para descifrar, no lo entendí, pero en realidad no fui demasiado. Sospecho que hay algunas sumas de verificación ...
Y luego depende de usted convertirlo en una cadena y descomprimir el archivo .cdd con esta contraseña. Un pequeño problema fue que la línea resultante no se pudo insertar en el archivador a través de Ctrl + C -> Ctrl-V, porque los caracteres "se rompen" en el portapapeles (especialmente no profundizaron en la esencia). El desempaquetado solo es posible mediante programación. Afortunadamente, hay cierto conocimiento de C # (cuyo nivel en general no es muy diferente del nivel de conocimiento del depurador) y poca experiencia en el estudio del principio de funcionamiento del AMSUnpacker mencionado anteriormente, que también está escrito en C # y no es difícil ver qué hay allí y cómo.
Casi de rodillas apiló una utilidad para verificar la operabilidad del algoritmo previamente estudiado, y listo, funciona.
Puedes descargarlo
aquí .

El programa, similar al AMSUnpacker mencionado anteriormente, crea la carpeta extract_cdd junto al .exe con el contenido del archivo .cdd.
Después de desempacar con éxito el codiciado archivo .cdd, aprendí que esta es la versión "nueva" (desde finales de 2018) AMS 8.5.3.0. Y en el sitio web leyeron sobre la nueva versión:
Característica: Se mejoró la seguridad del archivo de datos de la versión comercial. . Bueno, aparentemente no funcionó muy bien ...
Tengo una pregunta para los que saben, un algoritmo de este tipo para ocultar una contraseña, ¿es parte de algún algoritmo de cifrado estándar (quiero decir que ahora es aplicable en programas y no históricamente), o es muy probable que los desarrolladores lo hayan pensado?
PD: Sé que es más fácil obtener el código fuente de los programas lua (que usa AMS) a través del parche lua * .dll, que navega por Internet y / o el enlace externo de la función lua_load () en el mismo lua * .dll. Esto es todo lo que hice una vez. En esta situación, era un interés puramente deportivo descubrir cómo obtener una contraseña para .cdd. Y también entiendo perfectamente que es poco probable que alguien lo necesite y que no tenga ningún valor práctico.
Probablemente exageré con respecto a la "tetera", porque hay poca experiencia en programación y reversa, pero esto es solo un pequeño pasatiempo "para mí" y no hay mucho tiempo o ganas de profundizar en esto.
PPS Este es mi primer artículo sobre Habré, como, probablemente, generalmente el primero de este tipo.