IPB

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

История благодарностей участнику useretail ::: Спасибо сказали: 9 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
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
Захожу раз в год и как всегда всякие полезняшки узнаю smile.gif
Я остановился на версии 2.95 - мне наличие поддежки видео не мешает, я и так в нем только музыку слушаю, все плагины вроде есть, ну и на десерт - использование памяти в Windows 10 не превышает 10-12 Мб.

С описаной проблемой в in_mp4.dll не стыкался, но пропатчился на всякий пожарный smile.gif
Могу только добавить что это действительно последняя версия что выходила - 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. Хотя от винды тоже не отказываюсь (даже сейчас). Считаю что код нужно писать так что-бы он собирался на любых платформах.

Попробуй(те) smile.gif обновить gcc на более свежий 4.8.1-4, так как в Dev-C++ 5.0 beta 9.2 используется устаревшая версия 3.4.2.
-=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 и будет вам счастье smile.gif
-=CHE@TER=-,
Jun 17 2010, 21:39 .ISO
от себя могу посоветовать сменить привод smile.gif т.е. не выбрасывать диск, а проверить читаемость на другом сд-драйве.. иногда такие опыты давали положительный эффект smile.gif зы.. проверить это можно через Nero CD Speed - функция ScanDisc (вроде так называется).. чем меньше красного - тем лучше wink.gif
-=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 biggrin.gif но не вдаваясь в тех. подробности скажу, что снимая образ с любимой старой игрушки, диск с которой уже физически подустал, я-бы дважды подумал в каком формате это сделать.. и сделал-бы BIN/CUE! все.. пора спать smile.gif
-=CHE@TER=-,
May 23 2010, 21:12 Strippers
мож немножко оффтоп, но опять мои 5 коп. smile.gif
ISO действительно не поддерживает мультитрековость и CDDA само собой.. я лично предпочитаю BIN/CUE.. если стоит проблема в MDF, то монтирую через алкоголь и снимаю образ с виртуала.. так как тот-же UltraISO при конвертации дописывает свою инфу типа "Created by UltraISO бла-бла-бла".. а вот образы UltraISO (вроде-бы) снимает уже один к одному smile.gif
-=CHE@TER=-,
May 23 2010, 20:55 Топологии .MDS для Alcohol/DT?..
>> У меня есть миниобраз на 8 гигов, где все файлы заполнены нулями

сори что поднимаю старую тему, но хочется вставить своих 5 копеек smile.gif
я тоже когда-то такое делал когда не было инструментов под рукой, и такие образы легко обрезаются до тех-же 1.5-2 Мб.. реально там остается только "лицензия" старфорса и TOC (Table of Contents), чего для обхода защиты вполне достаточно.. smile.gif
-=CHE@TER=-,

Упрощённая версия Сейчас: 30th April 2025 - 14:29