Добро пожаловать, гость ( Вход | Регистрация )
| PavelDAS |
Jun 23 2026, 08:02
Сообщение
#1
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 50 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 15 раз(а) |
Файлы для авторана собраны в контейнер, контейнер сжат, сжатый контейнер пошифрован.
Необходимо расшифровать (справился) --> разжать (провал... а ИИ мучать устал) --> распаковать (почти справился*) все алгоритмы брал в IDA, распакованный файл сдампил из IDA. https://wdfiles.ru/Pb8l * у картинок идёт дублирование файлов, и некоторые с каким-то префиксом) -------------------- |__--__|
***|*** ___|___ |
![]() ![]() |
| -=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. Спасибо сказали:
|
PavelDAS Fantastic Media Autorun v2 (*.DAT) Jun 23 2026, 08:02
PavelDAS Скачал aPLib v0.36 и там сигнатура AP32. Вот чем п... Jun 23 2026, 12:44
-=CHE@TER=- Скачал aPLib v0.36 и там сигнатура AP32. Вот чем п... Jun 23 2026, 12:55
PavelDAS
Предположу, что 4 байта - это размер первого файл... Jun 23 2026, 14:11![]() ![]() |
| Упрощённая версия | Сейчас: 18th July 2026 - 01:19 |