IPB

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

2 Страниц V < 1 2  
Reply to this topicStart new topic
> CheMax, База данных
useretail
Apr 26 2025, 00:31
Сообщение #21


Member
**

Группа: Authorized
Сообщений: 23
Регистрация: 3-May 08
Пользователь №: 6,696
Спасибо сказали: 9 раз(а)



todo: выковырять списки смещений и имена игр для FC
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Apr 26 2025, 00:50
Сообщение #22


Walter Sullivan
***

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



Так они там не зашифрованы - просто в конце находятся. Сначала список игр, потом, через запятую, смещения (байтовые) в десятичном виде. Я как раз в программе это обрабатывал, чтобы расшифровывалось всё, кроме этого списка в хвосте.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Shadeov
Вчера, 17:14
Сообщение #23


Newbie
*

Группа: Authorized
Сообщений: 3
Регистрация: Вчера, 16:56
Пользователь №: 18,036
Спасибо сказали: 2 раз(а)



Привет всем!

Подскажите, пожалуйста, как достать ключи смещений в CheMax? Нужна пошаговая инструкция для "новичка".

Хочу сохранить это наследие, адаптировать под современные системы и при этом обеспечить обратную совместимость с базой данных.

Всё никак не дадим спокойно помереть ЧеМаксу laugh.gif


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Вчера, 17:32
Сообщение #24


Walter Sullivan
***

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



QUOTE(Shadeov @ Jul 8 2025, 17:14) *
Привет всем!
Добро пожаловать на форум!

QUOTE(Shadeov @ Jul 8 2025, 17:14) *
Подскажите, пожалуйста, как достать ключи смещений в CheMax? Нужна пошаговая инструкция для "новичка".

Хочу сохранить это наследие, адаптировать под современные системы и при этом обеспечить обратную совместимость с базой данных.

Всё никак не дадим спокойно помереть ЧеМаксу laugh.gif
Готовые смещения есть в архиве к программе database decrypter (ссылку ранее в этой теме давал) к последним версиям CheMax: 20.8 для английской версии (файл "eng_20_8.txt") и 21.4 для русской (файл "rus_21_4.txt"). Вроде бы, это должны быть последнии версии программы.
Если нужны для каких-то старых версий, то тут придётся попотеть. Я так делал:
1. Смещения для описаний находятся внутри CheMax.exe, но файл защищён ASPack.
2. Я снимал ASPack программой Dr.WEB.FLY-CODE.Unpacker.0.1.
3. Далее нужно вытащить строки (названия игр) и смещения - они отдельно находятся.
4. Чтобы вытащить имена игр, засовываем распакованный файл "STEP1_ASPACK.exe" в программу по работе с ресурсами (я для этого Resource Hacker использовал) и сохраняем куда-нибудь .DFM файл с главной формой программы. Затем в Delphi (у меня он стоит) создаём пустой проект, затем сохраняем и закрываем его. Заменяем файл формы сохранённой формой от CheMax. После этого открываем проект снова в Delphi, на форме выбираем список с именами игр, выбираем редактировать, затем сохраняем в буфер обмена Ctrl+C всё содержимое и вставляем Ctrl+V в какой-нибудь пустой текстовый файл.
5. Теперь нужно достать смещения. Здесь сложнее, потому что они в бинарном виде и как их найти я не могу написать - я тупо вручную отсматривал файл в HEX-редаторе. У меня осталась вот такая черновая рабочая программа, которой я смещения доставал - надеюсь пригодится как отправная точка для работы. Обращаю внимание, что смещений, вроде бы, на 1 больше, чем названий игр (последнее смещение равно размеру файла с описаниями) - это для того, чтобы размер описания к игре можно было получить как разницу между следующим и текущим смещением.
6. Ну и потом нужно просто объединить смещения и названия игр - можно написать для этого программу или скрипт, например, на том же PHP или на чём удобнее.

Программу ниже нужно скомпилировать и перенаправить вывод в файл при запуске:
offsdump.exe > offs.txt
Исходный код "offsdump.c":
CODE
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <stdint.h>

/* eng 19.2 */
/*
static uint32_t offslist[] = {
0xD7C14,
0xDBA94,
0xDE974
};
*/

/* eng 20.8 */
static uint32_t offslist[] = {
0xD8614,
0xDC494,
0xDF374
};

/* rus 21.4 */
/*static uint32_t offslist[] = {
0xDBA14,
0xDF894,
0xE2774,
0xE5654,
0xE8534,
0xEB414,
0xEE2F4
};*/

static uint32_t offs[4000];

int main(int argc, char *argv[]) {
uint32_t i, j;
FILE *fl;
fl = fopen("STEP1_ASPACK.exe", "rb");
if (!fl) { return(1); }
for (i = 0; i < (sizeof(offslist) / sizeof(offslist[0])); i++) {
fseek(fl, offslist[i], SEEK_SET);
fread(offs, sizeof(offs), 1, fl);
for (j = 0; j < 4000; j++) {
if (!offs[j]) { break; }
printf("%08X\n", offs[j]);
}
}
fclose(fl);
return(0);
}


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Shadeov
Сегодня, 00:58
Сообщение #25


Newbie
*

Группа: Authorized
Сообщений: 3
Регистрация: Вчера, 16:56
Пользователь №: 18,036
Спасибо сказали: 2 раз(а)



QUOTE
Добро пожаловать на форум!

Спасибо!

QUOTE
Если нужны для каких-то старых версий, то тут придётся попотеть.

Правильно ли я понимаю, что ни у "Dr.WEB.FLY-CODE.Unpacker", ни у "STEP1_ASPACK.exe" нет ни исходников, ни даже внятного описания принципа работы?

Мне нужно будет воспроизвести их логику на клиентском JavaScript, а позже — и на других платформах. Использование готовых exe-файлов убивает кроссплатформенность.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Сегодня, 06:28
Сообщение #26


Walter Sullivan
***

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



QUOTE(Shadeov @ Jul 9 2025, 00:58) *
Правильно ли я понимаю, что ни у "Dr.WEB.FLY-CODE.Unpacker", ни у "STEP1_ASPACK.exe" нет ни исходников, ни даже внятного описания принципа работы?
"Dr.WEB.FLY-CODE.Unpacker" точно исходных кодов нет, а "STEP1_ASPACK.exe" - это имя, под которым первая программа сохраняет распакованный "CheMax.exe" файл (со снятой защитой). К CheMax тоже никто исходных кодов не выкладывал.

QUOTE(Shadeov @ Jul 9 2025, 00:58) *
Мне нужно будет воспроизвести их логику на клиентском JavaScript, а позже — и на других платформах. Использование готовых exe-файлов убивает кроссплатформенность.
А какая конечная цель проекта? Что сделать нужно в итоге?
Возможно есть какое-то более простое решение, чем писать распаковщик для ASPack и что-то откуда-то выковыривать.
Я почему спрашиваю именно про конечную цель, потому что промежуточные задачи могут быть сильно не о том. Не помню, вроде бы, где-то уже рассказывал, но меня как-то попросили написать распаковщик ресурсов к игре, потом переделать чтобы он сохранённые игры распаковывал (там формат схожий), но в итоге выяснилось, что человек просто хотел найти где у него в игре деньги хранятся и дать их себе побольше. Однако это легко делалось программой ArtMoney (о которой человек просто не знал) и распаковывать ничего не нужно было. К слову сказать, человек потом извинился, что ввёл в заблуждение и сразу не рассказал что именно он в итоге получить хотел, и даже на копилку сам закинул.
Поэтому я про итоговую цель и спрашиваю - возможно, есть решение гораздо проще того, что мы сейчас обсуждаем.
Если там какой-то секрет большой, то можно мне личное сообщение написать на e-mail.
А если нет, то давайте здесь обсуждать - возможно, техническое решение будут ещё кому-то интересно для похожего или другого проекта. Или кто-то ещё из прочитавших идей подбросит.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Shadeov
Сегодня, 08:56
Сообщение #27


Newbie
*

Группа: Authorized
Сообщений: 3
Регистрация: Вчера, 16:56
Пользователь №: 18,036
Спасибо сказали: 2 раз(а)



QUOTE
А какая конечная цель проекта?

Цель — альтернативный клиент для CheMax с обратной совместимостью. Планирую сайт + кроссплатформенные клиенты (Mac, Windows, iOS, Android и т.д.).

Идея в том, чтобы просто загружать CheMax.exe и cheats.dat, после чего база открывается в современном интерфейсе — прямо в браузере, без установки.

Если безболезненной распаковки не получится, то, скорее всего, просто вытащу смещения вручную и буду сопоставлять по хешу .dat‑файлов.
В крайнем случае — использовать только уже готовые ваши смещения от последних версий.

Пока набросал небольшой сайт на основе вашей DeCheMax — https://dechemax.vercel.app/
Открывает последние версии CheMax и CheMax FC. Old пока не проверял. Всё на клиенте: база сохраняется в кэше браузера и там же распаковывается.

Как доделаю — обязательно выложу исходники.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Сегодня, 10:04
Сообщение #28


Walter Sullivan
***

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



Во! Спасибо за развёрнутый ответ.
Теперь по пунктам.
QUOTE(Shadeov @ Jul 9 2025, 08:56) *
Цель — альтернативный клиент для CheMax с обратной совместимостью. Планирую сайт + кроссплатформенные клиенты (Mac, Windows, iOS, Android и т.д.).

Идея в том, чтобы просто загружать CheMax.exe и cheats.dat, после чего база открывается в современном интерфейсе — прямо в браузере, без установки.
Идея классная, только вот с точки зрения конечного пользователя сложновата в использовании. Проще будет, наверное, БД последней версии CheMax конвертировать в одностраничный HTML файл и выложить в Интернет. Кому надо скачают к себе на диск для просмотра в offline, кому не надо - смогут через Интернет обозреватель с любого устройства смотреть. Если из БД выкинуть все игры, где написано только "для этой игры есть трейнер на сайте CheMax" (сайт закрылся и трейнеры вместе с ним пропали) и больше ничего (как это ни странно, таких игр много, причём этот текст тупо дублируется), то итоговая HTML страничка ещё и занимать мало будет. Ещё можно сделать список с играми как плавающий блок слева или справа, чтобы всегда на экране был и якорями-ссылками для быстрого перехода к нужной игре.
Можно, как уже писал ранее, сделать сайт-вики с кодами для CheMax, где люди смогут их обновлять, исправлять, добавлять.
Я не вижу смысла именно заморачиваться поддержкой всех версий (разве что, кроме как хобби) в силу следующих причин:
1. Неудобно использовать. Пользователю чтобы посмотреть какие-то коды, которые он когда-то в этой программе видел, нужно где-то найти дистрибутив программы, установить или как-то его распаковать, затем достать оттуда нужные файлы, затем залить их на сайт - я ставлю на то, что такое количество телодвижений очень многих людей отпугнёт, а кому-то просто всё желание заморачиваться отобьёт. Да, можно добавить поддержку InnoSetup установщика и .ZIP архива, чтобы можно было дистрибутив программы заливать на сайт без установки, но дистрибутив всё равно нужно будет где-то найти.
2. Сайт CheMax закрылся, похоже, автор не планирует продолжать проект. Сами по себе коды к играм не могут быть защищены авторским правом (если, вдруг, беспокоит этот вопрос). К тому же, скорее всего, коды для БД просто собирались из всяких сборников и сайтов в Интернете. Программа была полезна для экономии трафика в 2000-ых годах, когда Интернет дорого стоил и не был безлимитным, то иметь под рукой энциклопедию было удобно. А сейчас с общедоступным Интернетом такая программа не особо актуальна в виде отдельного приложения.

QUOTE(Shadeov @ Jul 9 2025, 08:56) *
Если безболезненной распаковки не получится, то, скорее всего, просто вытащу смещения вручную и буду сопоставлять по хешу .dat‑файлов.
В крайнем случае — использовать только уже готовые ваши смещения от последних версий.
Да, кстати, именно такое решение и хотел предложить - заготовить смещения + имена игр от всех существующих версий и по размеру/хешу от .dat файла использовать нужные. Процесс, правда, будет долгий и трудоёмкий - непонятно сколько там версий было, что-то можно из WebArchive достать, что-то с того же Old-Dos, но все ли там версии - неизвестно.

QUOTE(Shadeov @ Jul 9 2025, 08:56) *
Пока набросал небольшой сайт на основе вашей DeCheMax — https://dechemax.vercel.app/
Открывает последние версии CheMax и CheMax FC. Old пока не проверял. Всё на клиенте: база сохраняется в кэше браузера и там же распаковывается.

Как доделаю — обязательно выложу исходники.
Глянул - круто!

Я в любом случае отговаривать не буду - если есть желание, силы и время - то почему бы и нет?
Хобби проекты тем интересны и приятны, что люди делают просто то что им хочется и нравится.
А ещё иногда такие штуки делаются просто чтобы освоить какие-то новые технологии и на чём-то потренироваться - просто так писать что-то абстрактное неинтересно, а вот работать над конкретной задачей уже гораздо увлекательнее.
В общем, я за любой кипишь, кроме голодовки. (*улыбается*)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

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

 



Упрощённая версия Сейчас: 9th July 2025 - 21:16