IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Fantastic Media Autorun v2 (*.DAT)
PavelDAS
Jun 23 2026, 08:02
Сообщение #1


Advanced Member
***

Группа: Authorized
Сообщений: 50
Регистрация: 21-September 25
Из: Minsk
Пользователь №: 18,037
Спасибо сказали: 15 раз(а)



Файлы для авторана собраны в контейнер, контейнер сжат, сжатый контейнер пошифрован.
Необходимо расшифровать (справился) --> разжать (провал... а ИИ мучать устал) --> распаковать (почти справился*)
все алгоритмы брал в IDA, распакованный файл сдампил из IDA.

https://wdfiles.ru/Pb8l

* у картинок идёт дублирование файлов, и некоторые с каким-то префиксом)


--------------------
|__--__|
***|***
___|___
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
Jun 23 2026, 10:46
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,448
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 332 раз(а)



Google AI смог с 7-го раза свернуть ассемблерный код. Ему просто нужно указывать на ошибки.
Алгоритм такой:
1. Выдираешь в отдельный файл весь код на ассемблере.
2. Убеждаешься, что он компилируется (т.е. ты его корректно выдернул).
3. Отдаёшь гуглу, просишь переписать на сях.
4. Если есть ошибки, то просишь поправить.
5. Дорабатываешь результат ручками, по необходимости (кое-какие вещи гугл, пока что, сворачивать не умеет).
Для очень замороченных и сложных алгоритмов гугл, увы, пока что, справиться не может (особенно, где всякая низкоуровневая оптимизация).

P.S. С кода расшифровки, где "*p ^= i ^ i ^...;" проорал. Уже которая программа, где погром-мист не понимает как битовая логика работает (key xor key (i ^ i) всегда ноль - это всё равно, что это выражение выкинуть).

unfmadat.c:
CODE

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

#pragma pack(push, 1)
typedef struct {
uint32_t magic; /* "AP32" */
uint32_t hdlen; /* this header length */
uint32_t pklen; /* packed data length */
uint32_t pcsum; /* packed data CRC32 */
uint32_t unlen; /* unpacked data length */
uint32_t ucsum; /* unpacked data CRC32 */
} dat_head;

typedef struct {
uint32_t offs; /* relative */
uint32_t size;
char name[1]; /* ASCIIZ */
} dat_item;
#pragma pack(pop)

void dumpdata(char *name, void *data, uint32_t size) {
FILE *f;
if (name) {
f = fopen(name, "wb");
if (f) {
if (data && size) {
fwrite(data, size, 1, f);
}
fclose(f);
}
}
}

void readdata(FILE *fl, void *data, uint32_t size) {
if (data && size) {
memset(data, 0, size);
if (fl) {
fread(data, size, 1, fl);
}
}
}

void autorun_decrypt(uint8_t *p, uint32_t sz) {
uint32_t i;
if (p) {
i = sz;
while (i) {
*p ^= sz ^ ((sz >> 8) & 0xFF) ^ 0x88;
sz += i;
p++;
i--;
}
}
}

/*
two files below from "aPLib-1.1.1.zip"
https://ibsensoftware.com/download.html
*/
#include "depacks.h"
#include "depacks.c"

int main(int argc, char *argv[]) {
uint32_t i, n, sz;
dat_head *head;
dat_item *item;
uint8_t *p, *u;
char s[260];
FILE *fl;
printf(
"Fantastic Media Autorun v2 .DAT decrypter v1.0\n"
"© CTPAX-X Team 2026\n"
"http://www.CTPAX-X.org/\n\n"
);
if (argc != 2) {
printf("Usage: unfmadat <filename.ext>\n\n");
return(1);
}
fl = fopen(argv[1], "rb");
if (!fl) {
printf("Error: can't open input file.\n\n");
return(2);
}
fseek(fl, 0, SEEK_END);
sz = ftell(fl);
if (sz <= sizeof(head[0])) {
fclose(fl);
printf("Error: invalid input file format.\n\n");
return(3);
}
p = (uint8_t *) malloc(sz);
if (!p) {
fclose(fl);
printf("Error: not enough memory for contents table.\n\n");
return(4);
}
fseek(fl, 0, SEEK_SET);
readdata(fl, p, sz);
fclose(fl);
/* decrypt file */
autorun_decrypt(p, sz);
head = (dat_head *) p;
if (
(head->magic != 0x32335041) ||
(head->hdlen < sizeof(head[0])) ||
((head->pklen + head->hdlen) != sz)
) {
free(p);
printf("Error: unknown/unsupported input file format.\n\n");
return(5);
}
u = (uint8_t *) malloc(head->unlen);
if (!u) {
free(p);
printf("Error: not enough memory for unpacked buffer.\n\n");
return(6);
}
memset(u, 0, head->unlen);
if (aP_depack_safe(&p[head->hdlen], head->pklen, u, head->unlen) != head->unlen) {
free(u);
free(p);
printf("Error: unpacking error.\n\n");
return(7);
}
free(p);
sz = *((uint32_t *) u);
i = 4;
n = 0;
while (i < sz) {
item = (dat_item *) &u[i];
i += sizeof(item[0]) + strlen(item->name);
printf("%s\n", item->name);
/* number required since there are file name duplicates */
n++;
sprintf(s, "%03u_%s", n, item->name);
dumpdata(s, &u[sz + item->offs], item->size);
}
free(u);
printf("\ndone\n\n");
return(0);
}


Обновлено:
Код распаковки заменён на стандартную библиотеку APLib.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 18th July 2026 - 01:19