Добро пожаловать, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
Apr 20 2025, 02:17 | Chemax | Причесал для линукса: linux x86_64 + src Благоданости: -=CHE@TER=- [codebox]#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> #include <errno.h> #include <inttypes.h> #define OUTPUT_NAME_MAX 260 static const uint8_t valid_char_mask[32] = { 0x00, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x04, 0x80, 0x7B, 0x40, 0xEB, 0xB9, 0x10, 0xF0, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF }; static const uint8_t decryption_keys[3][10] = { "qs3g#erty0", "a@g5eDu(*5", "qZ8&5N3eS0" }; const char *get_basename(const char *path) { const char *base = strrchr(path, '/'); return base ? base + 1 : path; } void replace_file_ext(char *out, size_t size, const char *filename, const char *new_ext) { const char *base = get_basename(filename); const char *dot = strrchr(base, '.'); size_t len = dot ? (size_t)(dot - base) : strlen(base); if (*new_ext != '.') snprintf(out, size, "%.*s.%s", (int)len, base, new_ext); else snprintf(out, size, "%.*s%s", (int)len, base, new_ext); } int decrypt_buffer(uint8_t *buffer, size_t buffer_size, uint32_t key_type) { if (!buffer || buffer_size == 0 || key_type >= 3) return 0; const uint8_t *key = decryption_keys[key_type]; size_t i = 0, k = 0; if (key_type == 0) { k = buffer_size - 1; while (k && !buffer[k]) k--; while (k && (buffer[k] == ';' || (buffer[k] >= '0' && buffer[k] <= '9'))) k--; if (k && !buffer[k]) { buffer[k] = ' '; k++; i = 0; while (k < buffer_size && (buffer[k] >= '0' && buffer[k] <= '9')) { i = i * 10 + (buffer[k++] - '0'); } for (; k < buffer_size; k++) { if (!buffer[k]) buffer[k] = ' '; } buffer_size = i; } } for (i = 0; i < buffer_size; i++) { k = i % 10; if (key_type == 0) { buffer[i] -= key[k]; } else { buffer[i] += ((buffer[i] > key[k]) ? 0 : 255) - key[k]; } } return 1; } uint32_t detect_key_type(const uint8_t *data, size_t size) { if (!data || size < 128) return 100; uint8_t temp[128]; for (uint32_t key_index = 0; key_index < 3; key_index++) { memcpy(temp, data, sizeof(temp)); decrypt_buffer(temp, sizeof(temp), key_index); int is_valid = 1; for (size_t j = 0; j < sizeof(temp); j++) { if (!(valid_char_mask[temp[j] / 8] & (0x80 >> (temp[j] % 8)))) { is_valid = 0; break; } } if (is_valid) return key_index; } return 100; } int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s <cheats.dat>\n", get_basename(argv[0])); return 1; } const char *input_filename = argv[1]; int input_fd = open(input_filename, O_RDONLY); if (input_fd < 0) { fprintf(stderr, "Error: could not open input file '%s': %s\n", input_filename, strerror(errno)); return 2; } struct stat file_stat; if (fstat(input_fd, &file_stat) != 0) { fprintf(stderr, "Error: could not get file info for '%s': %s\n", input_filename, strerror(errno)); close(input_fd); return 3; } size_t file_size = (size_t)file_stat.st_size; uint8_t *file_buffer = malloc(file_size); if (!file_buffer) { fprintf(stderr, "Error: failed to allocate memory (%zu bytes): %s\n", file_size, strerror(errno)); close(input_fd); return 4; } ssize_t bytes_read = read(input_fd, file_buffer, file_size); if (bytes_read != file_size) { fprintf(stderr, "Error: failed to read from '%s' (expected %" PRIuPTR " bytes, got %" PRIuPTR " bytes): %s\n", input_filename, (uintptr_t)file_size, (uintptr_t)bytes_read, strerror(errno)); free(file_buffer); close(input_fd); return 5; } close(input_fd); uint32_t key_type = detect_key_type(file_buffer, file_size); if (!decrypt_buffer(file_buffer, file_size, key_type)) { fprintf(stderr, "Error: input file is not a valid or supported format\n"); free(file_buffer); return 6; } char output_filename[OUTPUT_NAME_MAX]; replace_file_ext(output_filename, sizeof(output_filename), input_filename, ".txt"); int output_fd = open(output_filename, O_WRONLY | O_CREAT | O_TRUNC, 0644); if (output_fd < 0) { fprintf(stderr, "Error: could not create output file '%s': %s\n", output_filename, strerror(errno)); free(file_buffer); return 7; } ssize_t bytes_written = write(output_fd, file_buffer, file_size); if (bytes_written != file_size) { fprintf(stderr, "Error: failed to write to '%s' (expected %" PRIuPTR " bytes, got %" PRIuPTR " bytes): %s\n", output_filename, (uintptr_t)file_size, (uintptr_t)bytes_written, strerror(errno)); close(output_fd); free(file_buffer); return 8; } close(output_fd); free(file_buffer); printf("Success: '%s' decrypted and saved as '%s'\n", input_filename, output_filename); return 0; }[/codebox] |
-=CHE@TER=-, | ||
Apr 19 2017, 22:25 | Software patches | Захожу раз в год и как всегда всякие полезняшки узнаю ![]() Я остановился на версии 2.95 - мне наличие поддежки видео не мешает, я и так в нем только музыку слушаю, все плагины вроде есть, ну и на десерт - использование памяти в Windows 10 не превышает 10-12 Мб. С описаной проблемой в in_mp4.dll не стыкался, но пропатчился на всякий пожарный ![]() Могу только добавить что это действительно последняя версия что выходила - 2.1beta. Ну и байты из твоего патча (может кому пригодится): ссылка на pastebin [codebox]upx.exe -d in_mp4.dll 0002C375: 88 89 0002C378: 88 C2 0002C379: 48 04 0002C37A: 69 00 0002C37B: 88 E8 0002C37C: 48 EA 0002C37D: 6A 00 0002C37E: 88 00 0002C37F: 48 00 0002C380: 6B 8B 0002C381: C2 49 0002C383: 00 83 0002C384: 90 C0 0002C385: 90 35 0002C386: 90 8B 0002C387: 90 00 0002C388: 90 83 0002C389: 90 E8 0002C38A: 90 34 0002C38B: 90 E9 0002C38C: 90 A2 0002C38D: 90 02 0002C38E: 90 00 0002C38F: 90 00 0002C3AA: 8B EB 0002C3AB: F1 CF 0002C46A: 90 58 0002C46B: 90 8B 0002C46C: 90 F1 0002C46D: 90 50 0002C46E: 90 C3 0002C632: 90 85 0002C633: 90 C9 0002C634: 90 74 0002C635: 90 04 0002C636: 90 51 0002C637: 90 FF 0002C638: 90 10 0002C639: 90 58 0002C63A: 90 E9 0002C63B: 90 6D 0002C63C: 90 FD 0002C63D: 90 FF 0002C63E: 90 FF[/codebox] Еще никак не могу пропатчить на юникод. Так как винда стоит американская - кириллицы в плейлисте не видно. Не долго думая поизвращался со шрифтами. Вроде решил. Давай пробовать юникод. Ну никак - только вопросительные знаки . Помню пару дней возился - бросил. Так и сижу без юникода... |
-=CHE@TER=-, | ||
Dec 30 2014, 17:02 | С наступающим Новым годом! | -=CHE@TER=-, | |||
Feb 10 2014, 14:42 | Нужен нормальный C/C++ компилятор | QUOTE Кстати, а почему на "вы" Даже не знаю.. наверное из-за уважения. Сам я работу делаю в линуксе, а если что-то нужно для винды, то просто кросскомпилю тем-же mingw. Хотя от винды тоже не отказываюсь (даже сейчас). Считаю что код нужно писать так что-бы он собирался на любых платформах. Попробуй(те) ![]() |
-=CHE@TER=-, | ||
Jan 26 2014, 01:32 | Нужен нормальный C/C++ компилятор | > именно этой версии от DEV-CPP не понял. можно ссылку > эти флаги специфичные для платформ и под Windows не пашут ну это смотря в какой среде. прежде чем что-то советовать хотелось-бы ответ на первый вопрос Если речь о Dev-C++ (http://www.bloodshed.net/dev/), то там используется gcc c MinGW. Среда MinGW хоть и минималистична, но всегда страдала отсутствием некоторых непортируемых ф-й. Если вам критично использование gcc (а бегло прочитав тред я понял что нет), то качестве замены могу посоветовать Cygwin, но тогда прийдется таскать с собой чемодан в виде cygwin1.dll. То что вам требуется точно есть в MSVC. Ставьте Visual Studio и будет вам счастье ![]() |
-=CHE@TER=-, | ||
Jun 17 2010, 21:39 | .ISO | от себя могу посоветовать сменить привод ![]() ![]() ![]() |
-=CHE@TER=-, | ||
Jun 14 2010, 21:52 | .ISO | QUOTE ISO прекрасно хранит внутри себя несколько дорожек, только чтобы получить доступ к остальным кроме первой к ISO необходимо иметь CUE. готов спорить на бутылку пива что это не так.. а вы?) QUOTE ISO images do not support multi-track Источник: http://en.wikipedia.org/wiki/ISO_image зы: если википедия не авторитет, еще за одну бутылку расскажу в чем действительно разница между ISO и BIN/CUE ![]() ![]() |
-=CHE@TER=-, | ||
May 23 2010, 21:12 | Strippers | мож немножко оффтоп, но опять мои 5 коп. ![]() ISO действительно не поддерживает мультитрековость и CDDA само собой.. я лично предпочитаю BIN/CUE.. если стоит проблема в MDF, то монтирую через алкоголь и снимаю образ с виртуала.. так как тот-же UltraISO при конвертации дописывает свою инфу типа "Created by UltraISO бла-бла-бла".. а вот образы UltraISO (вроде-бы) снимает уже один к одному ![]() |
-=CHE@TER=-, | ||
May 23 2010, 20:55 | Топологии .MDS для Alcohol/DT?.. | >> У меня есть миниобраз на 8 гигов, где все файлы заполнены нулями сори что поднимаю старую тему, но хочется вставить своих 5 копеек ![]() я тоже когда-то такое делал когда не было инструментов под рукой, и такие образы легко обрезаются до тех-же 1.5-2 Мб.. реально там остается только "лицензия" старфорса и TOC (Table of Contents), чего для обхода защиты вполне достаточно.. ![]() |
-=CHE@TER=-, | ||
Упрощённая версия | Сейчас: 30th April 2025 - 14:29 |