Всем привет, соображающим респект!Есть игра 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 представлении.
>>148467533 (OP)Ты ебанат даже гуглом воспользоваться не можешь? Ладно, помогу.http://g.zeos.in/?q=Bobby%20Carrot%20%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA
>>148468532Гуглил уже, нет ничего полезного
>>148468888Ну, тогда кто тебе виноват, что гугл пихает тебе в табло охуетительный редактор, но ты его по тупости или пиздоглазию не видишь
>>148469423Падажжи, квадрипл врать не может
>>148469474https://rpgmaker.net/games/2412/Если ты про это, то это кусок нерабочего говна.
Бамп
>>148470714blya, vse fotochki horoshi no eta ohuenna, i glazki i gubki
>>148467533 (OP)декомпилить за тебя кто будет, пушкин?
>>148497117>Так, ок. Поставил JD-GUI. Это декомпилятор-вьювер (не редактор, насколько я понимаю).>Да нам и нужно посмотреть.>Что ж, там есть два файла формата .class, в которых есть java скрипт (его я не знаю).>Не представляю, что там можно найти. Упоминания " .dat" там только такие поиском находятся:> public a(Bobby paramBobby)> {> this.t = paramBobby;> a(this.y + ".dat");> this.z = new Random(System.currentTimeMillis());> this.c = 1;> this.u = getWidth();> this.v = getHeight();> this.w = (this.v - 2 - 16 - 6);> b(this.u, this.v, true);> this.cf = a(this.cf, "/font.png");> this.dH = a(this.dH, "/logo.png");> this.bZ = 0;> this.cb = -1;> a(true, 0);> this.x = 10;> }
>>148498727И это никак нас не приближает к методу редактирования самих файлов .dat
>>148498786ну вот, молодец. можешь еще идею поставить, в нее fernflower встроили, он вроде тоже неплохтоварищи прогуардом заобфусцировали все, понятное дело. это не жаваскрипт, это просто жава, но тебе от этого видимо не легче.смотри, ты можешь а) почитать этот код, понять как он использует содержимое файла, т.е. по сути его формат. тогда с некоторой вероятнстью ты можешь подменить один из файлов 1-4 на свой б) ты можешь поискать почему он думает чо левелпаков четыре. это вполне может оказаться хардкоднутым в нескольких местах свойством программы, которое авторы не планировали менять никогда.
>>148499221Слушай, чот сложна
>>148501206ну извините.
>>148501300На самом деле я читаю сижу.Но без знания языка... Я не погромист так-то
>>148467533 (OP)ОП, попробуй просто поменять местами номера паков. Поменяются ли в меню выбора пункты местами?
>>148467533 (OP)Охуеть, seclub до сих пор жив?
>>148501647Да, вот 3 с 4 местами поменялись
>>148501756на третьем оппике >supplied by D@nilYcH
ё
бамп
http://www.javadecompilers.com/Декомпилишь джарник, хуё-моё, пытаешься разобраться каким образом там подгружаются уровни
>>148510856Уже. Ни хуя пока не разберусь.Ща скину сюда код, может, кто поможет.
>>148511427Мудрый Анон всегда скидывает свой код на pastebin
>>148511968Ок, на пастебин
>>148512386Вотhttp://pastebin.com/dHeazw0U
>>148512386Увы, не могу больше ждать, пока ты скинешь декомпиленные сорцы.Если что, скинь линк на скачивание игры на почту anon_anon_2010@bk.ruТам и спишемся, в случае чего.
>>148513547ну ё-моё
>>148513547какая красота.
>>148513595>>148513882Я честно проскролил всё несколько раз своим дилетантским взгядом (я не программист)Там вроде всё разбито по блокам.Один блок отвечает за обработку нажатия определённой клавиши, другой блок отвечает за графические настройки и так далееНо блин слишком мало комментариев. Нужно найти механизм вывода главного меню на экран. Нужно, повторюсь, добавить новый левелпак, связанный с новым dat файлом
>>148514555у тебя на 7к строк кода 300 глобальных переменных, поэтому все может несколько усложниться. и к тому же нет Bobby.
>>148514832Я попробовал свернуть все блоки.Потом раскрываю каждый по одному и закрываю, так смотрибельнее.Просто понять надо, что именно искать и как искать
>>148515104вот кстати результат от другого декомпилятораhttp://pastebin.com/Cpt3kqFiхотя не думаю что тебе станет сильно проще.
>>148515627ах ты ж фак, то же самое скопировал.
>>148515104попытка номер дваhttp://pastebin.com/uBLRjwj8
>>148515104в общем, если коротко, у тебя проблема: я сейчас эту балалайку реверсинжинирить не буду, а ты, если без опыта, скорее всего это будет сложно и не интересно. в остальном удачи.
плохо
для такой простой задачи требуется такой труд затратить пиздец
private final void d() { this.dZ = ((byte)((this.w - 26) / 31)); this.C = false; e(); String str = this.y; f(); if (str.compareTo(this.y) != 0) { a(this.y + ".dat"); } aa(); i(); this.cg = a(this.cg, "/numbers.png"); this.ch = a(this.ch, "/arrows.png"); this.cj = a(this.cj, "/misc.png"); this.ck = a(this.ck, "/ts.png"); this.cl = a(this.cl, "/mow.png"); ac(); if (!this.f) { d((byte)2); } else { this.S = (this.T = this.R = 0); this.x = 11; c((byte)2, (byte)-1); } }
>>148518550Вот в этом блоке встречается упоминание ".dat" и png файлов, в которых содержатся стрелочки пунктов меню и ярлычки, которые стоят напротив названий левелпаков
>>148518550Далее идёт вызов функции на строке 5640, где таится огромный switch и строка 5812. Больше похоже, что "разработчик" не додумался создать отдельный каталог для уровней и той строкой отсеивает левые файлы.На понимание чужого кода итак уходит порой много времени, а тут ещё и обфускация. Овчинка стоит выделки?
>>148519035Конечно!Могу денег дать, в пределах разумного.
>>148501647>>148502085Когда я переименовал 3.dat в 4.dat и наоборот, в меню уровней 3 и 4 левелпак поменялись местами. Это нам что-нибудь даёт?
Лень открывать идеюtry { InputStream localInputStream = getClass().getResourceAsStream((paramInt < 10 ? "0" : "") + paramInt + ".dat"); DataInputStream localDataInputStream = new DataInputStream(localInputStream); localDataInputStream.readShort(); this.cu = localDataInputStream.readByte(); for (int i2 = 0; i2 <= i1; i2++) { this.cs = localDataInputStream.readUTF(); this.ct = localDataInputStream.readUTF(); } localDataInputStream.close(); localDataInputStream = null; } catch (Exception localException) { c(); } }тут читается файл уровня, судя по всему их может быть 99(5111 строка в http://pastebin.com/dHeazw0U)
бинго, вот твои списки уровней private final void aa() { int i2 = 0; for (int i1 = 1; i1 <= 4; i1++) { d(i1); this.cv[i2] = this.cs; this.cw[i2] = this.cu; i2++; } }(5083 строка)
>>148520662>>148520900тааак
>>148520900>i1 <= 4Вот тут я меняю четвёрку на требуемое мне количество левелпаков?
>>148521657да, и закинь уровень новый в жарку
>>148521657во-первых в этом сорсе в куче мест это число заинлайнено, это же константа и явский байткод. во-вторых, тебе надо будет пересобрать джарник, или ты прямо класс-файл редактируешь?
Сразу ещё один момент.Я декомпилировал с помощью JD-GUI.Файл a.class (который мы тут и обсуждаем) я экспортировал с помощью этого же софта. На выходе у меня получился декомпилированный файл a.java.Я его через Notepad++ сейчас, допустим, отредактирую. С помощью какого софта мне его потом скомпилировать обратно в class файл?
>>148521873Пересобрать жарник - это просто. Обычный архив же
>>148521889Сорри за терминологию сразу
>>148521889>С помощью какого софтаjavacтолько тебе нужен java me, бобби, и какой-то нокии кусок.
>>148521873>>>148521873>в этом сорсе в куче мест это число заинлайнено, это же константа и явский байткодсюда идет вызов от функции которая загружает файлы с именем 0<int>.dat, совпадение? не думаю
>>148522063>javacуже изучаюдля остального есть эмулятор
>>148522362анонасик, я вроде пропатчилпроверь этот jar, должен иметь 5 уровнейhttp://dropmefiles.com/3vTg7(есть куда заливать файлы нормально?)
>>148522990Спасибо, ща проверю.Пока что сам установил java.Попробовал "в лоб" скомпилировать, не вышло покаC:\Users\Irina\Desktop\Новая папка>"C:\Program Files\Java\jdk1." a.javaa.java:2761: error: unclosed character literal this.cr[this.ap][this.ao] = ((byte)(this.cQ ? 'К' ^a.java:2761: error: unclosed character literal this.cr[this.ap][this.ao] = ((byte)(this.cQ ? 'К' ^a.java:2761: error: ';' expected this.cr[this.ap][this.ao] = ((byte)(this.cQ ? 'К'a.java:2761: error: unclosed character literal this.cr[this.ap][this.ao] = ((byte)(this.cQ ? 'К'a.java:2761: error: illegal character: '\u2039' this.cr[this.ap][this.ao] = ((byte)(this.cQ ? 'К'a.java:2761: error: unclosed character literal this.cr[this.ap][this.ao] = ((byte)(this.cQ ? 'К'a.java:2761: error: ';' expected this.cr[this.ap][this.ao] = ((byte)(this.cQ ? 'К'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
>>148523280>C:\Users\Irina\Desktop>IrinaПошёл нахуй, зелёный!
>>148522990Вступительная заставка проходит, потом пикрилФайлы можно заливать на яндекс диск или рыгхост.javac себе установил, повторюсьПробую команду "javac.exe a.java", выкатывает простыню ошибок.Даже если я в этом a.java никаких изменений не делал. Почему так? Неправильно декомпилирую?Или просто в команде компиляции надор аргументы добавить7
>>148523625Да не кипятись, за компом жены сижу
>>148523770это из-за unicode символов которые декомпилятор пережевал и выплюнул как обычные вместо \uFFFF, где FFFF это код символа в unicode(было 'странная буква', должно быть '\uFFFF')
>>148523979Вот это нажать надо ?
>>148524297Блядь, не обвёл.
>>148524337еп
>>148524522Ни хера. Всё равно в декомпиляторе "неправильные" символы
>>148524845хехмдапроверил Fernflower decompiler, заменяет нормально
>>148525412Я тоже решил проверить другой декомпилер.Установил вот программу IntelliJ IDEAТак вот в ней тоже файл class с неправильными символами открывается.Но это ещё не всё.Посмотрел интересующую нас строчку. Она вообще по-другому немного выглядит (пикрил)Это ничего страшного, да?В общем, на данном этапе мы упёрлись в нормальный декомпилятор.Ну сейчас пойду искать Fernflower decompiler
>>148525678это нормаискать не надо, он уже вшит в идею, ты им сейчас и пользуешься
>>148525871ОК, спасибо.Пойду спать, завтра тогда продолжение
>>148525678попробуй плес еще вот этотhttp://dropmefiles.com/Gv4pg
>>148526155>http://dropmefiles.com/Gv4pgЭтот запускается, но левелпаков всё равно 4
>>148526250>велпаков всё равно 4нуу почти :)во сколько завтра создавать будешь?
Надеюсь, до утра не утонет
>>148526358Прям с утра. Может, этот тред ещё жив будет
В общем, я сам не прочь со всем этим компиированием/декомпилированием разобраться.Но вот >>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 (скорее всего) и подсовывать компиляторуМда, без поллитра не разберёшься, что и в какой последовательности делать>JByteditПопробую глянуть, что за зверь
>>148545979Через JBytedit попробовал в известном месте 4 на 5 поменять.В итоге при запуске такая же ошибка выскакивет, мда>>148523770
>>148545979>нужно еще подсунуть зависимости для этого jar-ника: kemulator.jar от твоего эмулятора должен подойти + нужно дизассемблировать еще и Bobby.class (скорее всего) и подсовывать компиляторуЭто вообще возможно непосвящённому человеку?
>>148552864да, там еще в паре мест нужно подтянуть до пяти, но у меня не заработало>>148545979да, но подтянуть потом все остальное уже сложнее, если с джавой или погромированием вообще не имел дела, врядли далеко уедешьа ты настойчивый, действительно так сильно хочешь это сделать?
>>148590948Да, очень нужно.А где ещё подтянуть нужно до пяти?Там четвёрка 815 раз встречается
>>148593528http://pastebin.com/dHeazw0U вот тут строки 202 и 203, редактировать так же как и в предыдущем случае (202 хранит названия левел паков, btw)эта штука будет в одном из конструкторов класса a, там по имени уже найдешь полевообще имеет смысл попробовать сначала разобрать структуру самого бинарника с уровнями, в случае чего просто поменять потом уровень на свой.для этого могу посоветовать http://kaitai.io/ оч удобная штука для описания структуры бинарников + хороший визуализатор всего этого дела
>>148594592Спасибо за помощь, доброанон!Буду разбираться. Бампать бесконечно этот тред я не могу, скинул сюда все полезные наработки из этого треда:https://2ch.hk/gd/res/387930.htmlЕсли будет возможность, загляни туда как-нибудь
>>1485197801) Игра обращает внимания только на четыре пака2) Название пака забито в самом паке