Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Гость
|
Добавлено: Пн Май 05, 2008 7:36 pm Заголовок сообщения: |
|
|
Игра Sailor Moon Another Story под Super Nitrendo |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пн Май 05, 2008 8:08 pm Заголовок сообщения: |
|
|
Спасибо. Буду проверять. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Май 05, 2008 8:18 pm Заголовок сообщения: |
|
|
Хм... Странноватый хаффман Хоть осваивай дебаггер да копай
--
В общем, осваивая дебаг на SNES, удалось выяснить, что в райное $F8B5 (у тебя надо прибавить $200 или удалить хидер) находится что-то похожее на само дерево. Думаю, дебажить дальше или нет... Вот лог:
Код: |
$80/B839 A7 C0 LDA [$C0] [$F0:09B7] A:0000 X:0002 Y:00FC P:envmxdIZc
$80/B83B 29 FF 00 AND #$00FF A:9205 X:0002 Y:00FC P:eNvmxdIzc
$80/B83E C9 F4 00 CMP #$00F4 A:0005 X:0002 Y:00FC P:envmxdIzc
$80/B841 10 14 BPL $14 [$B857] A:0005 X:0002 Y:00FC P:eNvmxdIzc
$80/B843 20 7A B8 JSR $B87A [$80:B87A] A:0005 X:0002 Y:00FC P:eNvmxdIzc
$80/B87A 85 00 STA $00 [$00:0000] A:0005 X:0002 Y:00FC P:eNvmxdIzc
$80/B87C 29 F8 00 AND #$00F8 A:0005 X:0002 Y:00FC P:eNvmxdIzc
$80/B87F 4A LSR A A:0000 X:0002 Y:00FC P:envmxdIZc
$80/B880 4A LSR A A:0000 X:0002 Y:00FC P:envmxdIZc
$80/B881 AA TAX A:0000 X:0002 Y:00FC P:envmxdIZc
$80/B882 20 20 F3 JSR $F320 [$80:F320] A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F320 AD CC 0F LDA $0FCC [$80:0FCC] A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F323 C9 00 00 CMP #$0000 A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F326 D0 03 BNE $03 [$F32B] A:0000 X:0000 Y:00FC P:envmxdIZC
$80/F328 9C 4C 01 STZ $014C [$80:014C] A:0000 X:0000 Y:00FC P:envmxdIZC
$80/F32B 29 E0 FF AND #$FFE0 A:0000 X:0000 Y:00FC P:envmxdIZC
$80/F32E 85 F4 STA $F4 [$00:00F4] A:0000 X:0000 Y:00FC P:envmxdIZC
$80/F330 0A ASL A A:0000 X:0000 Y:00FC P:envmxdIZC
$80/F331 18 CLC A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F332 65 F4 ADC $F4 [$00:00F4] A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F334 18 CLC A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F335 69 B0 F8 ADC #$F8B0 A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F338 85 F4 STA $F4 [$00:00F4] A:F8B0 X:0000 Y:00FC P:eNvmxdIzc
$80/F33A A9 C0 00 LDA #$00C0 A:F8B0 X:0000 Y:00FC P:eNvmxdIzc
$80/F33D 85 F6 STA $F6 [$00:00F6] A:00C0 X:0000 Y:00FC P:envmxdIzc
$80/F33F AF 4C 01 00 LDA $00014C[$00:014C] A:00C0 X:0000 Y:00FC P:envmxdIzc
$80/F343 4A LSR A A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F344 4A LSR A A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F345 4A LSR A A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F346 29 1F 00 AND #$001F A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F349 85 02 STA $02 [$00:0002] A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F34B A5 00 LDA $00 [$00:0000] A:0000 X:0000 Y:00FC P:envmxdIZc
$80/F34D 38 SEC A:0005 X:0000 Y:00FC P:envmxdIzc
$80/F34E E5 02 SBC $02 [$00:0002] A:0005 X:0000 Y:00FC P:envmxdIzC
$80/F350 A8 TAY A:0005 X:0000 Y:00FC P:envmxdIzC
$80/F351 A5 00 LDA $00 [$00:0000] A:0005 X:0000 Y:0005 P:envmxdIzC
$80/F353 18 CLC A:0005 X:0000 Y:0005 P:envmxdIzC
$80/F354 6F 4C 01 00 ADC $00014C[$00:014C] A:0005 X:0000 Y:0005 P:envmxdIzc
$80/F358 8D 4C 01 STA $014C [$80:014C] A:0005 X:0000 Y:0005 P:envmxdIzc
$80/F35B B7 F4 LDA [$F4],y[$C0:F8B5] A:0005 X:0000 Y:0005 P:envmxdIzc
$80/F35D 29 7F 00 AND #$007F A:8A28 X:0000 Y:0005 P:eNvmxdIzc
$80/F360 18 CLC A:0028 X:0000 Y:0005 P:envmxdIzc
$80/F361 69 20 00 ADC #$0020 A:0028 X:0000 Y:0005 P:envmxdIzc
$80/F364 85 00 STA $00 [$00:0000] A:0048 X:0000 Y:0005 P:envmxdIzc
$80/F366 18 CLC A:0048 X:0000 Y:0005 P:envmxdIzc
$80/F367 6F 4C 01 00 ADC $00014C[$00:014C] A:0048 X:0000 Y:0005 P:envmxdIzc
$80/F36B 8D 4C 01 STA $014C [$80:014C] A:004D X:0000 Y:0005 P:envmxdIzc
$80/F36E A5 00 LDA $00 [$00:0000] A:004D X:0000 Y:0005 P:envmxdIzc
$80/F370 29 F8 00 AND #$00F8 A:0048 X:0000 Y:0005 P:envmxdIzc
$80/F373 4A LSR A A:0048 X:0000 Y:0005 P:envmxdIzc
$80/F373 4A LSR A A:0048 X:0000 Y:0005 P:envmxdIzc
...
|
_________________ Работаю за деньги
KILL ALL HUMANS!!!!!111
Последний раз редактировалось: HoRRoR (Пн Май 05, 2008 8:49 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пн Май 05, 2008 8:47 pm Заголовок сообщения: |
|
|
Помучаю еще этот ром. Может чего и найду. Хотя можно перевести наполовину... . Там только сюжетная линия так закодирована. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Май 05, 2008 8:50 pm Заголовок сообщения: |
|
|
Если раскопать формат (вроде не такой уж и зверский) - можно без проблем написать плагин для Круптара 7 и цивильнинько состваить проектик
--
А к коду всё-же присмотрись. Первые строки - загрузка байта $05 (вроде в нём вшита первая буква - "H") по адресу $3009B7 (у тебя, видимо, $300BB7 - советовал бы удалить первые $200 байт РОМа). Адресное пространство РОМа начинается с $C00000, оперативки - с $7E0000. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пн Май 05, 2008 9:36 pm Заголовок сообщения: |
|
|
Попробовал. Пока никаких видимых изменений. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Май 05, 2008 9:40 pm Заголовок сообщения: |
|
|
Ладно, будет время - покопаю, может и плаг напишу. Но ничего не обещаю. Мне просто самому интересно стало, с Хаффманом до этого я всего один раз сталкивался. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пн Май 05, 2008 9:49 pm Заголовок сообщения: |
|
|
А эта тема и начала обсуждаться с этой игры (если посмотреть на первую страницу). |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вт Май 06, 2008 5:07 pm Заголовок сообщения: |
|
|
Там два шрифта.
Эта таблица годится только для перевода всяких названий, имен, может еще чего-то.
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
9C=- |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вт Май 06, 2008 5:14 pm Заголовок сообщения: |
|
|
Вообще в поиске текста мне помог патч для перевода на английский. Я им нулевой файл пропачил и уже там стал искать. По адресу 0000F9A0 если поизменять некоторые байты местами меняется текст. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вт Май 06, 2008 11:45 pm Заголовок сообщения: |
|
|
В общем, в диапазоне $F7A0-$FD8F находится либо дерево, либо какая-то таблица криптовки. Например, по адресу $F8B5 байт $28 - это буква 'H' (к значениям прибавляется $20), по адресу $F938 - 'e'. Продолжаю копать...
--
Короче это обычная криптация, позже гляну... _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Ср Май 07, 2008 9:56 am Заголовок сообщения: |
|
|
Аллилуйя, что-то раскопал. Обычная криптация.
В общем, есть переменная, обзовём её Key. В самом начале декриптации строки она равна нулю. Итак:
1. Читаем байт; // [$3009B7]=05
2. OldKey:=Key;
3. Key:=(Key SHR 3) AND $1F; //(0 SHR 3) AND $1F = 0
4. Читаем байт по адресу $F8B0+(Байт - Key); // [$F8B0+($5 - 0)]=[$F8B5]=28
5. Прибавляем к нему $20 - получаем символ; // $48 = 'H'
6. Читаем байт по адресу $F780+символ, and'им с $F; // [$F780+48]=[$F7C8]=$07, байт=$07 and $F=$07
5. Key:=Символ + первый считанный байт + OldKey + последний считанный байт; // Key=$48+$05+$0+$07=$54
6. GoTo 1
--
Не факт, что прям всё именно так, но уже хоть что-то, да известно При проверке я успешно декриптовал первые два байта строки, когда буду дома мб напишу декриптор.
И ещё, при чтении знаков переноса строки скрорей всего не происходит никаких операций... Хотя не факт. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Ср Май 07, 2008 4:42 pm Заголовок сообщения: |
|
|
При переносе строки кодирование наверное начинается заново. Я вводил одинаковые строки подряд, не трогая служебные символы. Результат был одинаковый. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Ср Май 07, 2008 6:30 pm Заголовок сообщения: |
|
|
У меня получилось найти первую букву и даже для эксперемента поменять. Только у меня она по адресу $FAB5. Таблица предположительно находиться в диапазоне $F9A0 - $FF8F. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Ср Май 07, 2008 6:36 pm Заголовок сообщения: |
|
|
А у меня получилось декриптовать первые четыре символа. Дальше надо учесть кое-какие моменты, но сперва их надо найти.
З.Ы. Удали ты наконец первые $200 байт РОМа - при хакинге они только создают проблему и по сути не несут какой-либо нужной для игры/хакинга информации. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Ср Май 07, 2008 6:48 pm Заголовок сообщения: |
|
|
Понял. Уже удалил. Все совпало. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Ср Май 07, 2008 9:13 pm Заголовок сообщения: |
|
|
Чего-то не особо выходит, НО где-то рядом...
Подставил алгоритм в Delphi. Первый символ считает, а потом сбивается... |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Ср Май 07, 2008 9:15 pm Заголовок сообщения: |
|
|
Алгоритм неполный и немного неточный. Вот, что у меня пока получилось:
Код: |
const SAdr = $F8B0; KAdr = $F780;
Function DecodeString(ROM: Pointer; Pos: DWord): String;
var B,SB,KB: ^Byte; Key,Key2,OldKey,C: DWord;
begin
B:=Pointer(DWord(Rom)+Pos); Key2:=0;
Key:=0; Finalize(Result); C:=0;
While B^<>$FF do
begin
If B^=$FE Then Key:=0 else
begin
OldKey:=Key;
Key:=(Key SHR 3) AND $1F;
SB:=Pointer(DWord(ROM)+SAdr+(B^ - Key));
SetLength(Result,Length(Result)+1);
Result[Length(Result)]:=Char(C+(SB^ and $7F)+$20);
KB:=Pointer(DWord(ROM)+KAdr+(SB^ and $7F)+$20);
If (Key2 and $F0)=0 Then Inc(Key2,KB^ and $F)
else Key2:=Key2 and $F;//(KB^ and $F);
//Key2:=Key2 and $1F;
Key:=(SB^ and $7F)+$20+C+B^+OldKey+(Key2 and $F);
If C>0 Then Dec(Key);
If {Key2 and $F0>0} Boolean(SB^ and $80) Then C:=$30 else C:=0;
Key2:=Key2 and $F;
end;
Inc(B);
end;
end;
|
_________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Чт Май 08, 2008 8:04 pm Заголовок сообщения: |
|
|
Не идет... Только первые четыре символа первой строки и первые символы других строк, к сожалению. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Май 09, 2008 1:40 pm Заголовок сообщения: |
|
|
Я пытаюсь составить полную таблицу символов, подставляя в первый байт исходного текста те или иные символы. Там на определенных диапазонах значений ($3b-$43) на втором месте постоянно всплывает символ 'С'. Далее начинает всплывать символ 'Z'. Кстати четвертый символ по алгоритму раскодировать не удалось (наверное простое совпадение). |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Май 09, 2008 1:52 pm Заголовок сообщения: |
|
|
Эй-эй! Какая таблица? Я же сказал - криптация. Будет время - докопаю алгоритм, будет тебе полное декодирование. Тем более подобную таблицу можно составить без подставления - она уже есть в РОМе (две константы в моей процедуре - адреса двух таблиц). Ты лучше скажи мне - поинтеры не находил? Если нет - попытаюсь найти (постепенно дружусь с архитектурой SNES). И дай адреса остального текста и поинтеров - составлю проектик для Круптара. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
|