Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Гость
|
Добавлено: Пт Май 09, 2008 2:15 pm Заголовок сообщения: |
|
|
Я понял про криптацию. Я подставлял коды по адресу первой найденой буквы первой фразы
Поинтеры я пока не искал. Кстати буква 'M' может кодироваться как $2D и как $AD, как собственно и другие символы.
Это адреса первых букв текста заставки:
$3009B7
$3009D2
$300A0B
$300A50
$300A7A
$300AE1
4,5 и 6 фразы начинаются одинаково ("The").
Другие адреса еще не искал. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Май 09, 2008 2:26 pm Заголовок сообщения: |
|
|
Цитата: | Кстати буква 'M' может кодироваться как $2D и как $AD, как собственно и другие символы. |
На самом деле это один и тот же код. Просто старший бит не участвует в определении символа, а для чего он нужен - пока не знаю. $2D=$AD AND $7F. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Май 09, 2008 3:45 pm Заголовок сообщения: |
|
|
Теперь процедура вполне успешно декриптует 'He co'... Вечером постараюсь докопать - вроде напал на след, но дебаггер повис, сказав тем самым, что мне пора идти. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Май 09, 2008 6:51 pm Заголовок сообщения: |
|
|
Похоже в этом роме можно изменять длинну строк в пределах определенного блока... |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Май 09, 2008 7:10 pm Заголовок сообщения: |
|
|
Да всё тут можно, если юзать дебаггер Не обещаю, но постараюсь всё расхакать. Можно было бы вообще криптацию убрать и не париться, но лично мне так не интересно _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Май 09, 2008 7:56 pm Заголовок сообщения: |
|
|
Да....мы легких путей не ищем... |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Сб Май 10, 2008 4:23 pm Заголовок сообщения: |
|
|
Код: | cconst KAdr = $F780; SAdr = $F8B0;
Function DecodeString(ROM: Pointer; Pos: DWord): String;
var B,SB,KB: ^Byte; Key,Key2,OldKey,C: DWord; DW: ^DWord;
begin
B:=Pointer(DWord(Rom)+Pos); Key2:=0;
Key:=0; Result:=''; C:=0;
While True do
begin
DW:=Addr(B^); If (DW^ and $FFFFFF)=$FCFDFD Then Break;
If B^ in [$FE..$FF] Then
begin
Key:=0;
Key2:=0;
C:=0;
Case B^ of
$FF: Result:=Result+#13#10;
$FE: Result:=Result+'{E}'#13#10;
end;
end else
begin
OldKey:=Key;
Key:=(Key SHR 3) AND $1F;
SB:=Pointer(DWord(ROM)+SAdr+(C and $FFE0)+((C and $FFE0) SHL 1)+(B^ - Key));
Result:=Result+Char((SB^ and $7F)+$20);
KB:=Pointer(DWord(ROM)+KAdr+(SB^ and $7F)+$20);
If (Key2 and $F0)=0 Then Inc(Key2,KB^ and $F);
If C=0 Then C:=1;
If (Key2 and $FFF0)<>0 Then
begin
If C=1 Then C:=0;
Inc(C,$20);
end;
Key2:=Key2 and $F;
If C>1 Then C:=C and $FFFE;
Key:=(SB^ and $7F)+$20+B^+OldKey+(Key2 and $F);
Key2:=Key2 and $F;
end;
Inc(B);
end;
end; |
_________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Сб Май 10, 2008 5:18 pm Заголовок сообщения: |
|
|
Проверил процедуру. Все прекрасно работает. Большое спасибо за помощь.
Вообще странное дело с этим ромом. Вроде два шрифта. Я перерисовал оба, но изменился только текст диалогов, а меню так и осталось нетронутым. Может там еще один запакованный шрифт есть. Пытаюсь розобраться.... |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Сб Май 10, 2008 5:38 pm Заголовок сообщения: |
|
|
Кто-то очень не хотел, чтобы игру поломали) А не сделал ли это переводчик на английский?)
По адресу $50A00 - абсолютные поинтеры на диалоги (отнимаешь $C00000 и получаешь адрес в РОМе). Перед текстом три байта, их назначение не знаю. Первый блок текста - $3009B4. О конце блока индицирует FDFCFC. А может и просто FD, не проверял... _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Сб Май 10, 2008 5:58 pm Заголовок сообщения: |
|
|
Спасибо за информацию. Может еще поковыряю ром и найду шрифты. Вообще, создалось впечатление, что в роме какое-то послание лежит. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вс Май 11, 2008 1:12 pm Заголовок сообщения: |
|
|
Новый вариант функции? Тоже прекрасно пошел. Все прекрасно, осталось только написать запаковщик........ |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вс Май 11, 2008 1:54 pm Заголовок сообщения: |
|
|
Сперва проверь все строки на правильность расшифровки. А строк там немало, приличный массив поинтеров. И перед строкой идет n-ное количество байт, 0, а затем сама строка. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вс Май 11, 2008 6:53 pm Заголовок сообщения: |
|
|
Проверяю поинтеры. Не все указывают на начало фразы (Я не имею в виду заголовок в 3 байта). Кроме того всплывают некоторые служебные символы, например (f9 +1 байт). А так вроде все нормально.......... |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вс Май 11, 2008 6:57 pm Заголовок сообщения: |
|
|
Цитата: | Проверяю поинтеры. Не все указывают на начало фразы (Я не имею в виду заголовок в 3 байта). |
Не может быть. Я проверял - абсолютно все. И я же сказал - заголовок не три байта, а байты до нулевого байта.
Я даже плаг написал для Круптара (пока что только читает текст). Если хочешь - дом сорцы и составленный проектик.
Цитата: | Кроме того всплывают некоторые служебные символы, например (f9 +1 байт). А так вроде все нормально.......... |
В смысле? _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вс Май 11, 2008 7:03 pm Заголовок сообщения: |
|
|
Цитата: | Цитата:
Кроме того всплывают некоторые служебные символы, например (f9 +1 байт). А так вроде все нормально..........
В смысле? |
Адрес: 30440B
Код: | This room should be marked
#No Entry".
{E}
Who or what are you!
{E}
4Ao:HYw#|e*Bbn8cwT=
{E}
I'm gonna get you
troublesome Sailor Senshi!
{E} |
По идее в игре происходит некоторые действия. Возможно, они кодируются в диалоге......
Если третью фразу сдвинуть на несколько байт, то и она спокойно декодируется. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вс Май 11, 2008 7:23 pm Заголовок сообщения: |
|
|
адрес 30F2DD указывает на середину первой фразы в блоке (поинтер по адресу 50AFA). Это не единственный пример..... |
|
Вернуться к началу |
|
|
GrekRus
Зарегистрирован: 12.05.2008 Сообщения: 7 Откуда: Санкт-Петербург
|
Добавлено: Пн Май 12, 2008 7:50 pm Заголовок сообщения: |
|
|
HoRRoR, а ты, случайно, не собираешься писать запаковщик? |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Май 12, 2008 9:12 pm Заголовок сообщения: |
|
|
В таких случаях обычно запаковщик = слегка модифицированный распаковщик. На днях подумаю, когда свободное время будет. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
GrekRus
Зарегистрирован: 12.05.2008 Сообщения: 7 Откуда: Санкт-Петербург
|
Добавлено: Пн Май 12, 2008 9:25 pm Заголовок сообщения: |
|
|
Я кажись понял. Это не очень сложно. Там необходимо составить уравнение из формулы вычисления переменной SB, где неизвестной будет B^. А значения SB можно подобрать из таблицы. |
|
Вернуться к началу |
|
|
GrekRus
Зарегистрирован: 12.05.2008 Сообщения: 7 Откуда: Санкт-Петербург
|
Добавлено: Пн Май 19, 2008 8:00 pm Заголовок сообщения: |
|
|
Чего-то никак не могу понять этот алгоритм. Декодирует нормально, но при кодировке на его основе в игре происходит сбой в середине фразы. Причем дешифровщик обратно текст востанавливает, а игра - нет. Видимо какой-то нюанс не учтен. |
|
Вернуться к началу |
|
|
GrekRus
Зарегистрирован: 12.05.2008 Сообщения: 7 Откуда: Санкт-Петербург
|
Добавлено: Пн Май 19, 2008 11:12 pm Заголовок сообщения: |
|
|
Я поставил нижнее ограничение для значения в закодированном тексте в $20 и у меня пока все идет. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Май 19, 2008 11:20 pm Заголовок сообщения: |
|
|
Ну вообще-то алгоритм не работает со значениями ниже $20, ибо любое значение при декриптации инкрементируется на $20. На то это и криптовка текста... _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
GrekRus
Зарегистрирован: 12.05.2008 Сообщения: 7 Откуда: Санкт-Петербург
|
Добавлено: Вт Май 20, 2008 12:28 am Заголовок сообщения: |
|
|
Все. До меня дошло. Теперь надо нормальный декодер написать, а то программа напоминает кашу из кнопок, текстовых полей и всевозможных переключателей. |
|
Вернуться к началу |
|
|
devi409
Зарегистрирован: 04.08.2009 Сообщения: 1
|
Добавлено: Вт Авг 04, 2009 5:21 pm Заголовок сообщения: |
|
|
Хм... интересно и чем же закончился данный проект?
Есть готовая версия? |
|
Вернуться к началу |
|
|
|