>Так, ок. Поставил JD-GUI. Это декомпилятор-вьювер (не редактор, насколько я понимаю). >Да нам и нужно посмотреть. >Что ж, там есть два файла формата .class, в которых есть java скрипт (его я не знаю). >Не представляю, что там можно найти. Упоминания " .dat" там только такие поиском находятся:
>>148498786 ну вот, молодец. можешь еще идею поставить, в нее fernflower встроили, он вроде тоже неплох товарищи прогуардом заобфусцировали все, понятное дело. это не жаваскрипт, это просто жава, но тебе от этого видимо не легче. смотри, ты можешь а) почитать этот код, понять как он использует содержимое файла, т.е. по сути его формат. тогда с некоторой вероятнстью ты можешь подменить один из файлов 1-4 на свой б) ты можешь поискать почему он думает чо левелпаков четыре. это вполне может оказаться хардкоднутым в нескольких местах свойством программы, которое авторы не планировали менять никогда.
>>148512386 Увы, не могу больше ждать, пока ты скинешь декомпиленные сорцы. Если что, скинь линк на скачивание игры на почту [email protected] Там и спишемся, в случае чего.
>>148513595 >>148513882 Я честно проскролил всё несколько раз своим дилетантским взгядом (я не программист)
Там вроде всё разбито по блокам. Один блок отвечает за обработку нажатия определённой клавиши, другой блок отвечает за графические настройки и так далее
Но блин слишком мало комментариев. Нужно найти механизм вывода главного меню на экран. Нужно, повторюсь, добавить новый левелпак, связанный с новым dat файлом
>>148514832 Я попробовал свернуть все блоки. Потом раскрываю каждый по одному и закрываю, так смотрибельнее. Просто понять надо, что именно искать и как искать
>>148515104 в общем, если коротко, у тебя проблема: я сейчас эту балалайку реверсинжинирить не буду, а ты, если без опыта, скорее всего это будет сложно и не интересно. в остальном удачи.
>>148518550 Вот в этом блоке встречается упоминание ".dat" и png файлов, в которых содержатся стрелочки пунктов меню и ярлычки, которые стоят напротив названий левелпаков
>>148518550 Далее идёт вызов функции на строке 5640, где таится огромный switch и строка 5812. Больше похоже, что "разработчик" не додумался создать отдельный каталог для уровней и той строкой отсеивает левые файлы. На понимание чужого кода итак уходит порой много времени, а тут ещё и обфускация. Овчинка стоит выделки?
>>148521657 во-первых в этом сорсе в куче мест это число заинлайнено, это же константа и явский байткод. во-вторых, тебе надо будет пересобрать джарник, или ты прямо класс-файл редактируешь?
Сразу ещё один момент. Я декомпилировал с помощью JD-GUI. Файл a.class (который мы тут и обсуждаем) я экспортировал с помощью этого же софта. На выходе у меня получился декомпилированный файл a.java. Я его через Notepad++ сейчас, допустим, отредактирую. С помощью какого софта мне его потом скомпилировать обратно в class файл?
>>148521873 >>>148521873 >в этом сорсе в куче мест это число заинлайнено, это же константа и явский байткод сюда идет вызов от функции которая загружает файлы с именем 0<int>.dat, совпадение? не думаю
a.java:6485: error: unclosed character literal case 'й': ^ a.java:6485: error: illegal character: '\u00a9' case 'й': ^ a.java:6485: error: unclosed character literal case 'й': ^ a.java:6491: error: unclosed character literal case 'А': ^ a.java:6491: error: unclosed character literal case 'А': ^ a.java:6491: error: not a statement case 'А': ^ a.java:6495: error: unclosed character literal case 'И': ^ a.java:6495: error: unclosed character literal case 'И': ^ a.java:6495: error: not a statement case 'И': ^ a.java:6499: error: unclosed character literal case 'М': ^ a.java:6499: error: unclosed character literal case 'М': ^ a.java:6499: error: not a statement case 'М': ^ a.java:6503: error: unclosed character literal case 'Т': ^ a.java:6503: error: illegal character: '\u2019' case 'Т': ^ a.java:6503: error: unclosed character literal case 'Т': ^ a.java:6507: error: unclosed character literal case 'Щ': ^ a.java:6507: error: illegal character: '\u2122' case 'Щ': ^ a.java:6507: error: unclosed character literal case 'Щ': ^ a.java:6511: error: unclosed character literal case 'В': ^ a.java:6511: error: illegal character: '\u201a' case 'В': ^ a.java:6511: error: unclosed character literal case 'В': ^ a.java:6515: error: unclosed character literal case 'К': ^ a.java:6515: error: unclosed character literal case 'К': ^ a.java:6515: error: not a statement case 'К': ^ a.java:6519: error: unclosed character literal case 'О': ^ a.java:6519: error: unclosed character literal case 'О': ^ a.java:6519: error: not a statement case 'О': ^ a.java:6523: error: unclosed character literal case 'Ф': ^ a.java:6523: error: illegal character: '\u201d' case 'Ф': ^ a.java:6523: error: unclosed character literal case 'Ф': ^ a.java:6527: error: unclosed character literal case 'Ы': ^ a.java:6527: error: illegal character: '\u203a' case 'Ы': ^ a.java:6527: error: unclosed character literal case 'Ы': ^ a.java:6531: error: unclosed character literal case 'Б': ^ a.java:6531: error: unclosed character literal case 'Б': ^ a.java:6531: error: not a statement case 'Б': ^ a.java:6535: error: unclosed character literal case 'Й': ^ a.java:6535: error: illegal character: '\u2030' case 'Й': ^ a.java:6535: error: unclosed character literal case 'Й': ^ a.java:6539: error: unclosed character literal case 'Н': ^ a.java:6539: error: unclosed character literal case 'Н': ^ a.java:6539: error: not a statement case 'Н': ^ a.java:6543: error: unclosed character literal case 'У': ^ a.java:6543: error: illegal character: '\u201c' case 'У': ^ a.java:6543: error: unclosed character literal case 'У': ^ a.java:6547: error: unclosed character literal case 'Ъ': ^ a.java:6547: error: unclosed character literal case 'Ъ': ^ a.java:6547: error: not a statement case 'Ъ': ^ a.java:6551: error: unclosed character literal case 'Д': ^ a.java:6551: error: illegal character: '\u201e' case 'Д': ^ a.java:6551: error: unclosed character literal case 'Д': ^ a.java:6555: error: unclosed character literal case 'Л': ^ a.java:6555: error: illegal character: '\u2039' case 'Л': ^ a.java:6555: error: unclosed character literal case 'Л': ^ a.java:6559: error: unclosed character literal case 'П': ^ a.java:6559: error: unclosed character literal case 'П': ^ a.java:6559: error: not a statement case 'П': ^ a.java:6563: error: unclosed character literal case 'Ц': ^ a.java:6563: error: illegal character: '\u2013' case 'Ц': ^ a.java:6563: error: unclosed character literal case 'Ц': ^ a.java:6567: error: unclosed character literal case 'Ь': ^ a.java:6567: error: unclosed character literal case 'Ь': ^ a.java:6567: error: not a statement case 'Ь': ^ a.java:6571: error: unclosed character literal case 'Г': ^ a.java:6571: error: unclosed character literal case 'Г': ^ a.java:6571: error: not a statement case 'Г': ^ a.java:6575: error: unclosed character literal case 'С': ^ a.java:6575: error: illegal character: '\u2018' case 'С': ^ a.java:6575: error: unclosed character literal case 'С': ^ a.java:6579: error: unclosed character literal case 'Х': ^ a.java:6579: error: illegal character: '\u2022' case 'Х': ^ a.java:6579: error: unclosed character literal case 'Х': ^ a.java:6583: error: unclosed character literal case 'З': ^ a.java:6583: error: illegal character: '\u2021' case 'З': ^ a.java:6583: error: unclosed character literal case 'З': ^ a.java:6973: error: integer number too large: FFFFFFFFFFFFFFFF this.K &= (1L << i1 ^ 0xFFFFFFFFFFFFFFFF); ^ 83 errors
>>148522990 Вступительная заставка проходит, потом пикрил
Файлы можно заливать на яндекс диск или рыгхост.
javac себе установил, повторюсь Пробую команду "javac.exe a.java", выкатывает простыню ошибок. Даже если я в этом a.java никаких изменений не делал. Почему так? Неправильно декомпилирую? Или просто в команде компиляции надор аргументы добавить7
>>148523770 это из-за unicode символов которые декомпилятор пережевал и выплюнул как обычные вместо \uFFFF, где FFFF это код символа в unicode (было 'странная буква', должно быть '\uFFFF')
>>148525412 Я тоже решил проверить другой декомпилер. Установил вот программу IntelliJ IDEA Так вот в ней тоже файл class с неправильными символами открывается. Но это ещё не всё.
Посмотрел интересующую нас строчку. Она вообще по-другому немного выглядит (пикрил) Это ничего страшного, да?
В общем, на данном этапе мы упёрлись в нормальный декомпилятор. Ну сейчас пойду искать Fernflower decompiler
В общем, я сам не прочь со всем этим компиированием/декомпилированием разобраться.
Но вот >>148525412 >проверил Fernflower decompiler, заменяет нормально
А у меня что-то всё равно ненормально. Компилятор javac всё равно потом ругается. В этой программе IntelliJ IDEA нет своего компилятора? А class файл напрямую редактировать тоже нельзя?
>>148535799 >А у меня что-то всё равно ненормально. Компилятор javac всё равно потом ругается. ну да, потому что нужно еще подсунуть зависимости для этого jar-ника: kemulator.jar от твоего эмулятора должен подойти + нужно дизассемблировать еще и Bobby.class (скорее всего) и подсовывать компилятору >В этой программе IntelliJ IDEA нет своего компилятора? Это среда разработки, тут его не должно быть. Другие компиляторы есть, но работают они точно так же (стандарты для них одни) >А class файл напрямую редактировать тоже нельзя? Можно, я тебе уже так два jar кидал на проверку. Но там тебе будут уже не java код, а asm-подобный код (вообще попробовать можешь, но это мальца сложнее: я юзал JBytedit)
>>148539761 >нужно еще подсунуть зависимости для этого jar-ника: kemulator.jar от твоего эмулятора должен подойти + нужно дизассемблировать еще и Bobby.class (скорее всего) и подсовывать компилятору Мда, без поллитра не разберёшься, что и в какой последовательности делать
>>148545979 >нужно еще подсунуть зависимости для этого jar-ника: kemulator.jar от твоего эмулятора должен подойти + нужно дизассемблировать еще и Bobby.class (скорее всего) и подсовывать компилятору Это вообще возможно непосвящённому человеку?
>>148552864 да, там еще в паре мест нужно подтянуть до пяти, но у меня не заработало >>148545979 да, но подтянуть потом все остальное уже сложнее, если с джавой или погромированием вообще не имел дела, врядли далеко уедешь
а ты настойчивый, действительно так сильно хочешь это сделать?
>>148593528 http://pastebin.com/dHeazw0U вот тут строки 202 и 203, редактировать так же как и в предыдущем случае (202 хранит названия левел паков, btw) эта штука будет в одном из конструкторов класса a, там по имени уже найдешь поле вообще имеет смысл попробовать сначала разобрать структуру самого бинарника с уровнями, в случае чего просто поменять потом уровень на свой. для этого могу посоветовать http://kaitai.io/ оч удобная штука для описания структуры бинарников + хороший визуализатор всего этого дела
>>148594592 Спасибо за помощь, доброанон! Буду разбираться. Бампать бесконечно этот тред я не могу, скинул сюда все полезные наработки из этого треда: https://2ch.hk/gd/res/387930.html
Есть игра Bobby Carrot, вот ссылка на неё:
http://files.seclub.org/game/d/b/f/dbf808084aa18ab1d8d8e56ca09cc44c/Bobby_Carrot_5_nok_N80_352_416.jar
Вот ссылка на эмулятор для запуска:
https://4pda.ru/forum/index.php?showtopic=99949
На 1 пике главное меню выбора левелпаков, на 2 и 3 пике содержимое jar файла
1.dat, 2.dat, 3.dat, 4.dat - видимо, файлы левелпаков.
Как мне добавить в игру новые левелпаки с новыми картами?
Пробовал копипастом файл 4.dat обозвать 5.dat. В меню нового левелпака не появилось.
Как вообще редактировать это? На 4 пике часть файла 4.dat в Notepad+ в HEX представлении.