Добро пожаловать, гость ( Вход | Регистрация )
![]() ![]() |
| PavelDAS |
Jun 24 2026, 06:54
Сообщение
#1
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 50 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 15 раз(а) |
Какой-то кастомный инсталлер на Visual C++ 6.0 или что-то стандартное?
https://wdfiles.ru/Pbmh (273Мб) Смог найти только имена файлов в конце, тип (?) папка / файл имя сжатый размер (?) размер ссылку на содержимое файлов не нашёл. И сжатие, скорее всего, есть. -------------------- |__--__|
***|*** ___|___ |
| -=CHE@TER=- |
Jun 24 2026, 13:42
Сообщение
#2
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,448 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 332 раз(а) |
Каталог "[-AZZA-]" искусственный - туда сохраняются файлы установщика (отдельные блоки).
Файл "[-AZZA-]/testr43.dll" это файл логики установщика (некоторые ресурсы и строки в него зашиты). То есть, после запуска установщика, извлекается файл "testr43.dll", оттуда запускается единственная экспортируемая функция a1() и вот в ней уже и идёт работа установщика, распаковка архива и всё прочее. Сжатие такое же как и в прошлом установщике aPLib, поэтому я код распаковщика не прикладываю - можно взять исходные коды из официального дистрибутива. unpkazza.c: CODE #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <sys/stat.h> /*#define DEBUG 1*/ #define MAGIC_1 0xFFAAFFAA #define MAGIC_2 0xFFAAFFAB #pragma pack(push, 1) typedef struct { uint32_t unlen; uint32_t pklen; uint32_t magic; /* MAGIC_1 */ } arc_tail; typedef struct { uint32_t unlen; uint32_t pklen; } arc_item; typedef struct { uint32_t magic; /* MAGIC_2 */ uint32_t count; } arc_head; typedef struct { char name[256]; uint32_t pklen; uint32_t unlen; uint32_t flags; } arc_file; #pragma pack(pop) /* two files below from "aPLib-1.1.1.zip" https://ibsensoftware.com/download.html */ #include "depacks.h" #include "depacks.c" char *basename(char *s) { char *r; if (s) { for (r = s; *r; r++) { if ((*r == ':') || (*r == '/') || (*r == '\\')) { s = &r[1]; } } } return(s); } void newext(char *name, char *ext) { char *p; if (name && ext) { for (; (*name == '.'); name++); for (p = NULL; *name; name++) { if (*name == '.') { p = name; } } strcpy(p ? p : name, ext); } } void makedirs(char *path) { char *s; if (path) { for (s = path; *s; s++) { if ((*s == '\\') || (*s == '/')) { *s = 0; mkdir(path, 0755); *s = '/'; } } } } 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 parse_block(FILE *fl, char *root) { uint32_t i, sz, offs; char s[260], *x; arc_file *list; uint8_t b, *p, *u; arc_head head; if (fl) { offs = ftell(fl); list = NULL; strcpy(s, root); do { readdata(fl, &head, sizeof(head)); if ((head.magic != MAGIC_2) || (!head.count)) { break; } i = head.count * sizeof(list[0]); list = (arc_file *) malloc(i); if (!list) { break; } memset(list, 0, i); /* read file table */ sz = 0; for (i = 0; i < head.count; i++) { list[4].flags = 0; readdata(fl, &list[i].flags, 1); /* 0x0A - create folder, go inside */ if (list[i].flags == 0x0A) { readdata(fl, &b, 1); readdata(fl, list[i].name, b); } /* 0x0B - create file in current folder */ if (list[i].flags == 0x0B) { readdata(fl, &b, 1); readdata(fl, list[i].name, b); readdata(fl, &list[i].pklen, 4); readdata(fl, &list[i].unlen, 4); sz += list[i].pklen; } /* 0x0C - go up folder one level */ } if (offs < sz) { break; } fseek(fl, offs - sz, SEEK_SET); /* unpack files */ for (i = 0; i < head.count; i++) { /* 0x0A - create folder */ if (list[i].flags == 0x0A) { strcat(s, "/"); strcat(s, list[i].name); } /* 0x0B - create file in current folder */ if (list[i].flags == 0x0B) { strcat(s, "/"); strcat(s, list[i].name); printf("%s\n", s); sz = list[i].pklen; p = (uint8_t *) malloc(sz + ((sz != list[i].unlen) ? list[i].unlen : 0)); if (p) { u = p; readdata(fl, p, sz); /* packed file */ if (sz != list[i].unlen) { u = &p[sz]; memset(u, 0, list[i].unlen); aP_depack_safe(p, sz, u, list[i].unlen); sz = list[i].unlen; } #ifndef DEBUG makedirs(s); dumpdata(s, u, sz); #endif free(p); } else { printf("Warning: not enough memory for file.\n"); fseek(fl, ftell(fl) + sz, SEEK_SET); } x = basename(s); x[-1] = 0; } /* 0x0C - go back up one folder */ if (list[i].flags == 0x0C) { x = basename(s); if (x != s) { x[-1] = 0; } } } } while (0); fseek(fl, offs, SEEK_SET); if (list) { free(list); } } } int main(int argc, char *argv[]) { arc_tail tail; arc_item item; char s[260]; uint32_t sz; uint8_t *p; FILE *fl; printf( "AZZA Games Installer unpacker v1.0\n" "© CTPAX-X Team 2026\n" "http://www.CTPAX-X.org/\n\n" ); if (argc != 2) { printf("Usage: unpkazza <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); fseek(fl, sz - sizeof(tail), SEEK_SET); readdata(fl, &tail, sizeof(tail)); if ((tail.magic != MAGIC_1) || (!tail.pklen) || (!tail.unlen)) { fclose(fl); printf("Error: invalid input file format.\n\n"); return(3); } p = (uint8_t *) malloc(tail.pklen + tail.unlen); if (!p) { fclose(fl); printf("Error: not enough memory for contents table.\n\n"); return(4); } /* === 01 === */ memset(p, 0, tail.pklen + tail.unlen); fseek(fl, sz - sizeof(tail) - tail.pklen, SEEK_SET); readdata(fl, p, tail.pklen); aP_depack_safe(p, tail.pklen, &p[tail.pklen], tail.unlen); strcpy(s, "[-AZZA-]/"); makedirs(s); strcpy(s, "[-AZZA-]/testr43.dll"); dumpdata(s, &p[tail.pklen], tail.unlen); free(p); /* === 02 === */ fseek(fl, sz - tail.pklen - sizeof(tail) - sizeof(item), SEEK_SET); readdata(fl, &item, sizeof(item)); /* printf("%08X %08X %08X\n", ftell(fl) - sizeof(item), item.unlen, item.pklen);*/ fseek(fl, ftell(fl) - item.pklen - sizeof(item), SEEK_SET); p = (uint8_t *) malloc(item.pklen + item.unlen); if (p) { memset(p, 0, item.pklen + item.unlen); readdata(fl, p, item.pklen); aP_depack_safe(p, item.pklen, &p[item.pklen], item.unlen); strcpy(s, "[-AZZA-]/license.txt"); dumpdata(s, &p[item.pklen], item.unlen); free(p); fseek(fl, ftell(fl) - item.pklen - sizeof(item), SEEK_SET); } else { fseek(fl, ftell(fl) - sizeof(item), SEEK_SET); } /* === 03 === */ readdata(fl, &item, sizeof(item)); /* printf("%08X %08X %08X\n", ftell(fl) - sizeof(item), item.unlen, item.pklen);*/ sz = ftell(fl) - item.pklen - sizeof(item); fseek(fl, ftell(fl) - item.unlen - sizeof(item), SEEK_SET); /* printf("%08X\n", ftell(fl));*/ parse_block(fl, "[-AZZA-]"); /* === 04 === */ fseek(fl, sz, SEEK_SET); readdata(fl, &sz, 4); /* printf("%08X %08X\n", ftell(fl) - 4, sz);*/ fseek(fl, ftell(fl) - 4 - sz, SEEK_SET); parse_block(fl, "."); fclose(fl); printf("\ndone\n\n"); return(0); } Спасибо сказали:
|
| PavelDAS |
Jun 24 2026, 14:39
Сообщение
#3
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 50 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 15 раз(а) |
Отлично.
Ради оригинальных файлов и нужны распаковщики. В install.log есть упоминание protect.dll, но в данном релизе его нет. Переводчики собирали сетап из своей же установленной версии. Такое иногда встречается. Тут три варианта: 1) Это второй релиз, и StarForce убрали 2) StarForce убрали после тестов 3) StarForce был в иностранном релизе и его убрали. пришлось немного поправить код: CODE #ifdef __linux__ mkdir(path, 0755); #else mkdir(path); #endif -------------------- |__--__|
***|*** ___|___ |
| -=CHE@TER=- |
Jun 24 2026, 16:02
Сообщение
#4
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,448 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 332 раз(а) |
пришлось немного поправить код: Чем комиплировал? У меня GCC 3.2:gcc -Os -s -Wall -ansi -pedantic unpkazza.c -o unpkazza.exe C:\Dev-Cpp\lib\CRT_noglob.o Предупреждение выкидывает по поводу mkdir(), но собирается и работает без проблем. Я просто так задолбался с этими каталогами - в Windows они так создаются, в Linux эдак. Кто-то выкладывает мой код в Интернете и переписывает под Linux это место, кто-то под Windows. Я, как бы, и не против, но сделайте уже одним каким-нибудь способом, который везде пашет, и работайте с ним. Я проверял - текущий способ должен работать под Linux и он у меня собирается и работает под Windows. Возможно, ключ "-ansi" важен для компиляции и работы. |
| PavelDAS |
Jun 25 2026, 06:48
Сообщение
#5
|
|
Advanced Member ![]() ![]() ![]() Группа: Authorized Сообщений: 50 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 15 раз(а) |
Чем комиплировал? У меня GCC 3.2: gcc -Os -s -Wall -ansi -pedantic unpkazza.c -o unpkazza.exe C:\Dev-Cpp\lib\CRT_noglob.o Предупреждение выкидывает по поводу mkdir(), но собирается и работает без проблем. Я просто так задолбался с этими каталогами - в Windows они так создаются, в Linux эдак. Кто-то выкладывает мой код в Интернете и переписывает под Linux это место, кто-то под Windows. Я, как бы, и не против, но сделайте уже одним каким-нибудь способом, который везде пашет, и работайте с ним. Я проверял - текущий способ должен работать под Linux и он у меня собирается и работает под Windows. Возможно, ключ "-ansi" важен для компиляции и работы. CODE -------------- Build: Release in AZZA Games Installer unpacker (compiler: GNU GCC MinGW Compiler)--------------- gcc.exe -Os -fno-exceptions -nostdlib -fno-builtin -IC:\mingw\include -c "D:\WorkCPP\AZZA Games Installer unpacker\depacks.c" -o obj\Release\depacks.o gcc.exe -Os -fno-exceptions -nostdlib -fno-builtin -IC:\mingw\include -c "D:\WorkCPP\AZZA Games Installer unpacker\main.c" -o obj\Release\main.o gcc.exe -LC:\mingw\lib -o "bin\Release\AZZA Games Installer unpacker.exe" obj\Release\depacks.o obj\Release\main.o -s D:\WorkCPP\AZZA Games Installer unpacker\main.c: In function 'makedirs': D:\WorkCPP\AZZA Games Installer unpacker\main.c:78:9: error: too many arguments to function 'mkdir' 78 | mkdir(path, 0755); | ^~~~~ In file included from C:/MinGW/x86_64-w64-mingw32/include/sys/stat.h:14, from D:\WorkCPP\AZZA Games Installer unpacker\main.c:6: C:/MinGW/x86_64-w64-mingw32/include/io.h:282:15: note: declared here 282 | int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005; | ^~~~~ Stack Overflow подсказал решение. Более-менее рабочую среду удалось реализовать через Code::Blocks В exe добавляются строки: GCC: (GNU) 13.2.0 -------------------- |__--__|
***|*** ___|___ Спасибо сказали:
|
![]() ![]() |
| Упрощённая версия | Сейчас: 16th July 2026 - 21:53 |