Японская еротика
»Синтетическая сага(комикс) VN комиксы сделал сам Визуальные новеллы фэндомы
Предыдущее: http://vn.reactor.cc/post/2234498
Cheat engine hook hcode Визуальные новеллы фэндомы
Делаем собственный hcode к новелле.
Собственно почему бы и нет. В русскоязычном сегменте гайдов никаких нет, в англоязычном все довольно-таки старенькие. Поэтому запилю свой гайд как делать хук код к новелле которую вы собирались почитать, а текст нихуя не вытаскивается.
Во первых нам нужен инструментарий.
1. Cheat Engine как дебагер, удобный, мало весит, имеет вполне себе юзерфрендли интерфейс. Скачать можно всегда с офф сайта https://www.cheatengine.org/
2. Textractor — собственно достойная замена ITH и ITHVNR, хотя если точнее продолжение. Скачать можно на странице релизов с гитхаба https://github.com/Artikash/Textractor/releases
3. Наша подопытная новелла. Я взял тупа первую новеллу к которой просили хук на хонге. Скачать эту новеллу можно отсюда https://sukebei.nyaa.si/view/2640189
Собственно поехали.
Я скачал данную новеллу и открыл текстрактор. Жмакаем аттач то гейм и выбираем процесс с нашей игрой. Автоматом подхватились нужные треды с обрывками текста.
В данном случае это GetGlyphOutlineA, как видно текст дают нам не полностью а только его часть. Данный косяк мы и будем исправлять.
Прежде всего следует поискать существует ли в памяти нужная строка в неизменном виде.
Жмакаем кнопку add hook и в открывшимся окне вводим S[впечатываем сюда нужную строку]
![Визуальные новеллы,фэндомы,Cheat engine,hook,hcode T- Add hook X Search for text S[codepage#]text OR Enter read code R{S | Q | V>[codepage#][*deref_offset]@addr OR Enter hook code H{A | B | W | S | Q | V}[N][codepage~ ]data_offset[*deref_offsetl][: split_offset[*deref_offset2]]@addr[: module[ :func]] All numbers except codepage in](http://img10.reactor.cc/pics/post/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BD%D0%BE%D0%B2%D0%B5%D0%BB%D0%BB%D1%8B-Cheat-engine-hook-hcode-5067015.png)
Жмем ок и чуточку ждем. В консоли должны появится записи, что добавились новые юзерхуки, проверяем их.
Жмакаем на окно нашей новеллы и прогоняем несколько строк, смотрим добавились ли они в окно с нашим юзерхуком. В данном случае вторая строка добавилась, но на третьей споткнулась, похоже, что меняется адрес куда записывается новая строка и этот вариант нам не подходит.
Переходим к самому интересному и веселому открываем cheat engine.
Подрубаемся деббагером к нашей новелле. Выбираем процесс и жмакаем Attach debugger to process.
![Визуальные новеллы,фэндомы,Cheat engine,hook,hcode ^ Process List X File Applications Processes Windows 00003590-Microsoft Store л 00003590-Входящие — Yandex ?- Почта 0000239С-Параметры 00002288-Почта ф 00002D90-qBittorrent v4.1.5 ^ 00002214-[M-KV2501] Wakfu 1x02 [BDRip] [108 gj 00002594-XP-PenWin(20190304J.zip (пробная » ООООЗВАС-Кино и ТВ](http://img10.reactor.cc/pics/post/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BD%D0%BE%D0%B2%D0%B5%D0%BB%D0%BB%D1%8B-Cheat-engine-hook-hcode-5067017.png)
После того как подключились к процессу необходимо перейти на нужный адресс в окне memory view.
В красной рамке собственно располагается окно с ассемблерными инструкциями. Жмем по нему правой кнопкой мышки и нажимаем Go to address.
Нужный нам адресс можно получить в окне textractora треда который не полностью захватывает текст.
Красным подчеркиванием выделил где находится данный адрес. Вводим его в окошко Goto Adress, первые две цифры не трогаем, мы должны поменять только последние 6.
![Визуальные новеллы,фэндомы,Cheat engine,hook,hcode 8:42D8:755EE24 GetGlyphOutlineA (HA8@E240:GDI32.dll),Визуальные новеллы,фэндомы,Cheat engine,hook,hcode](http://img10.reactor.cc/pics/post/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BD%D0%BE%D0%B2%D0%B5%D0%BB%D0%BB%D1%8B-Cheat-engine-hook-hcode-5067019.png)
![Визуальные новеллы,фэндомы,Cheat engine,hook,hcode Goto Address Fill in the address you want to go to X 1 0046F298I OK 1 Cancel ! : 755ЕЕ240 :¿6F298:0 : GetGlyphOutlineA (HA8@E2,Визуальные новеллы,фэндомы,Cheat engine,hook,hcode](http://img10.reactor.cc/pics/post/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BD%D0%BE%D0%B2%D0%B5%D0%BB%D0%BB%D1%8B-Cheat-engine-hook-hcode-5067020.png)
Собственно в окне memory view должна выделится нужная позиция.
Конкретно здесь выделение должно быть в инструкции адрес который я подчеркнул красным. Кстати в окне memory view адрес пишется с учетом оффсета от реального адреса, а не того который выделили в памяти. Поэтому реальный адрес инструкции 6F298 относительно начала файла экзешника нашей новеллы, в то время как в памяти нашего пк адрес 0046F298. Ну это так чисто техническая инфа, я хуй знает зачем это пишу.
Далее мы должны поставить breakpoint, выделяем нужный адрес и правой кнопкой мыши установить breakpoint либо же просто жмем ф5.
Итак мы выделили нужный адрес и поставили брикпоинт, когда он ставится, до инструкция выделяется зеленым цветом.
Ткнем в диалог новеллы и она должна зависнуть, а интерфейс memory viewera слегка изменится. Давайте пройдемся по нему поподробнее.
Собственно 1 это окно просмотра адреса памяти в хекс режиме. Полезно посмотреть что скрывается в различных адресах. Нихуя не буду углубляться в что такое поинтеры и с чем их едят. Я вообще когда начинал ебашил все методом научного тыка и нихуя не знал.
2. Окно с нашим стеком, что такое стек я тоже нихуя не буду писать, во всяком случае сейчас. Окно это дюже полезное и позже объясню почему.
3. Регистры, собственно в 32битных программах есть регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP подробнее про них вы можете прочитать не у меня, так-как по большему счету я тоже мало знаю об этом, короче считайте регистры что-то вроде переменных. Про флаги и сегменты регистров я тем более нихуя не знаю, так-как их не использую в принципе.
4. Окно с ассемблерными инструкциями.
Окей. С этим мы разобрались, хотя я почти на сто процентов уверен, что никто нихуя не понял. Неудивительно из меня хуевый учитель, но поехали дальше.
Собственно наше окно с регистрами горит красным и если мы пощелкаем ф9, то сможем увидеть как некоторые показатели в регистрах меняются. Мы знаем, что по адресу 6F292 вызывается инструкция GDI32.GetGlyphOutlineA собственно туда отправляются наши японские символы в количестве одной штуки. Я кстати не читал документацию но чисто на эмпирическом уровне думаю, что данное апи выводит на экран текст, хотя если бы было так, оно выводило не весь текст, хуй с ним, может люди умнее меня скажут нахуй она нужна. Опять я что-то отвлекся.
Конкретно в данном случае можно сразу запалить 2 байта
![Визуальные новеллы,фэндомы,Cheat engine,hook,hcode Registers: Flags EAX 005354A3 OF 0 EBX 045E2223 DF 0 ECX AC011A62 SF 0 EDX 0277D050 ZF 0 EDI 000001E0 PF 0 E3F ESP EIP 00000000 0015F110 0046F252 CF 0 Segment Registers CS 0023 SS 002B DS 002B ES 002B FS 0053 GS 002B,Визуальные новеллы,фэндомы,Cheat engine,hook,hcode](http://img10.reactor.cc/pics/post/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BD%D0%BE%D0%B2%D0%B5%D0%BB%D0%BB%D1%8B-Cheat-engine-hook-hcode-5067023.png)
В регистре ESI 82B1 я уже столько раз делал хук коды, что точно знаю, что все японские символы в SJIS кодировке состоят из двух байтов и первый байт у них начинается с 80. Есть очень полезный сайт который позволит хекс коды перевести в читабельный текст http://freaka.freehostia.com/charset.php
Благодаря этому сайту мы понимаем, что 82В1 = こ. Да так и есть, каждый раз при вызове ф9 мы продолжаем выполнение программы и каждый раз когда срабатывает брикпойнт регистр ESI меняется показывая нам новую букву. Хорошо с этим мы разобрались. Но как же выловить весь текст полностью? Ну в данном случае придется окунуться в наш стек, что бы найти истину.
В окошке со стеком, жмем правой кнопкой мышки и выбираем Not system modules only. Теперь мы увидим в окне адреса модулей. Наша задача выйти из этой подпрограммы в которой вызывается функция GDI32. Тут наверное стоит сделать лирическое отступление. Я сам нихуя не понимаю до конца как это работает, буду говорить с той позиции какой вижу это я.
![Визуальные новеллы,фэндомы,Cheat engine,hook,hcode Всякие инструкции Всякие инструкции Всякие инструкции Всякие инструкции Всякие инструкции call - вызов подпрограммы Всякие инструкции Всякие инструкции Всякие инструкции Всякие инструкции начало функции Всякие инструкции Всякие инструкции Всякие инструкции Всякие инструкции Всяки^инструкци^^^^^](http://img10.reactor.cc/pics/post/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BD%D0%BE%D0%B2%D0%B5%D0%BB%D0%BB%D1%8B-Cheat-engine-hook-hcode-5067025.png)
Зеленой рамочкой обведен наш брикпоинт, наша задача выйти из данной функции в место откуда её собирались вызывать жирная черная стрелочка. В начале каждой новой функции на вершину стека кладется адрес возврата выполнения программы. По мере заполнения стека он будет опускаться все дальше вниз в окне стеков. Поэтому мы ищем в окне стека именно этот адрес возврата. На рисунке выше он 00473CF0. На нашей схеме я его обвел красной рамочкой.
Итак в окне стеков первые три модуля отправляют нас в область защищенной памяти, это не ассемблерные инструкции поэтому они нам не интересны. 4 же возвращает адрес куда должно передаться управление программой после завершения этой функции то есть до оператора ret что в простонородье означает return ака возвращение.
Нам нужно поставить брикпоинт прямо перед выполнением функции в которой происходит вызов в GDI32.
В нашем случае это адрес 72CE9 чуть ниже мы можем увидеть функцию call и еще на один ниже наш адрес возврата из той функции 72CF0. Поставим брикпойнт и немного погоняем ф9, смотрим есть ли где-нибудь наш текст. Ах да, поставим full stack в окне стека. Если мы дважды щелкнем кнопкой мыши на первую позицию в стеке после того как нажмем ф9, то в окне хекс отображения сможем увидить два байта нашей буквы в sjis кодировке. Значит мы сделали все правильно и буква появляется еще выше по выполнению данной функции, если бы мы нигде не смогли отыскать нашу букву, то алгоритм работы слегка изменился и нам пришлось искать место где она появляется в функции где вызывается GDI32, но этого не произошло и продолжаем искать дальше.
В данный момент у нас должно быть активно два брикпоинта при нажатии Ctrl+b мы увидим их адреса, либо же можно нажать мышкой сверху view -> breakpointlist. Наша задача понять они выполняются каждый одинаково, то есть сначала первый потом второй и если да, то это место для хука не подходит, так-как мы знаем что у нас проебаны буквы.
![Визуальные новеллы,фэндомы,Cheat engine,hook,hcode Breakpoint list — □ X Address Size Trigger Type On Hit 0046F292 1 On Execute Hardware Breakpoint (0) Break 00472CE9 1 On Execute Hardware Breakpoint (1) Break,Визуальные новеллы,фэндомы,Cheat engine,hook,hcode](http://img10.reactor.cc/pics/post/%D0%92%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BD%D0%BE%D0%B2%D0%B5%D0%BB%D0%BB%D1%8B-Cheat-engine-hook-hcode-5067027.png)
Жмакаем ф9 и видим, что они выполняются последовательно, значит ищем дальше. Мне чуйка сразу подсказала, что текст формируется именно в этой функции и я решил пройтись по ней с самого начала. Брекпоинт по адресу 0046F292 можно нахрен удалять. Что бы попасть в начало функции жмакаем правой кнопкой мыши на окне с инструкциями выбираем select current function, наш отшвырнет на адрес 72A2D, поставим здесь брикпойнт и пощелкаем ф9.
Заодно не забываем проверять наш стек и регистры на наличие чего нибудь напоминающие буквы в хекс виде. Из проделанной работы мы узнаем, что начало функции вызывается куда чаще чем адрес 72CE9, а значит вот оно, больше никуда лезть не нужно, нам осталось отыскать место где появятся наши заветные два байта. Жмем ф8 и потихонечку спускаемся вниз все это время следя за регистрами и стеком.
Ага, вот тут после выполнение команды в адресе 72A88 в регистре EAX появилось кое-что интересное. А именно появляется первый байт нашей буквы, мы ведь помним, что первый байт всех японских символов начинаются с 80. Отлично идем дальше.
А вот наклюнулся и второй байт в регистре ECX, он появился после выполнения команды в адресе 72A92. За ним идут две операции and, где по сути избавляются от минуса, и мы применяем побайтовый сдвиг влево на 8 у регистра EAX. Вот оно, уже рядом.
Собственно вот и оно. После инструкции в адресе 72AA2 наши два байта объединились и стали единым целым. В адресе 72AA4 можно поставить брикпойнт и пожамкать ф9, что бы убедится, что все буквы появляются именно здесь. Как только мы в этом убедились. Жмем Ctrl+B и удаляем все брекпойнты, они нам больше не понадобятся. Самое время запилить наш хук.
Цепляться будем ка адресу 72AA4 который идет сразу после того как наши два байта объединяются.
Откроем textractor подрубимся к экзешнику с нашей игрой, если вы вдруг его закрыли, если не закрывали, то он должен быть уже заатачен к процессу игры. жмем добавить хук код add hook
Ну и собственно вбиваем наш хук. Если у вас экзешник из иероглифов, имя желательно полностью скопировать. Как составлять хуки тут есть целая памятка. /H собственно с этого начинается любой хук код. A - берет два байта в кодировке SJIS little endian, B следует использовать когда байты повернуты наоборот. То есть в данном примере у нас 8179 - это А, а если бы было 7981, то нужно было бы в писать в хук B. Префикс N, блядь, я знаю, что это значит но по умному хуй знает как описать. Короче, суть. Если не писать N, то будет дополнительно учитываться регистер ESI вроде бы, точно не помню и если он постоянный то все будет ок, но если вдруг каждый вызов он будет меняться, то вы получите кучу всяких потоков, поэтому использовать его нужно с умом. Собственно собака, потом адрес куда мы будем хукаться, напомню этот адрес идет сразу после того как мы получили наши цельные два байта. Двоеточие и имя экзешника полностью. Жмем окей и вуаля. Хук работает, а мы великолепны.
Ero VN VN Реклама VN Новости Phantom Of Inferno Requiem for the Phantom Anime Foreign VN Визуальные новеллы фэндомы
Phantom of Inferno - счастливые концовки.
Когда же стоит обсуждать игру, как не через 20 лет после её выхода и через 12 лет выхода аниме по ней, не так ли?Честно говоря, не думал что я когда-то буду писать подобный пост. Но три недели назад я в серьёз и не думал что буду проходить ВНку.
Абсолютно не знаю, почему я решил посмотреть аниме Requiem for the Phantom, с учётом того что его описание вообще не походили на то что я смотрел до этого.
Но тем не менее аниме хорошее. Не могу употребить слово "понравилось", поскольку в моём понимании "понравилось" не имеет в себе настолько много грусти и печали. А это аниме уж очень грустное. Ну и максимальное значение грусти постигло меня во время концовки мультика. Но я знал что аниме было «экранизацией» старой ВНки, и я решил почитать сюжет ВНки. Я дошёл до описания концовок. И здесь моя грусть полностью исчезла. И она заменилась лишь ЯРОСТЬЮ. Какого чёрта из всех возможных вариантов которые дали авторы игры, авторы аниме решили придумать свой с настолько плохой концовкой? Чтоб остыть, я решил что мне надо посмотреть концовку из игры. Я ввёл Phantom of Inferno endings на Ютубе, в Гугле и единственное что я нашёл, было на японском языке. На котором я ни слова не знаю. (лох, пидр)
Так что единственной возможностью получить хорошую концовку было самостоятельно поиграть в ВНку. Хотя я до этого никогда в них не играл в принципе.
Нынешняя HD версия игры имеет только японскую озвучку и субтитры (хотя степень разорванности моей жопы сделала так, что я скачал её и играл так, через Яндекс определитель слов пару часов).
Но потом я нашёл что в старой DVD версии были английские субтитры (с так себе переводом, могу сказать теперь).
В комментариях на всяких сайтах я видел у людей кучу проблем с тем чтобы найти старую версию игры (особенно для подданных западных королевств, которым уже давно не выдают каперские патенты). Но даже если её нашли, немногие смогли её запустить, игру запустить. 20 лет игре в конце-концов, требуется некий уровень танцевания с бубном.
Но я смог. Так что подумал, что теперь, я просто обязан, во имя всех кто грустил (а может и грустит сейчас) из-за концовки аниме и кто не смог по каким-то причинам запустить игру (или мог, но не захотел из-за одной лишь концовки проходить игру с, хоть и отличающуюся во многих мелких деталях, но в целом, с той же основой сюжета), выложить её счастливые концовки. Может кому-нибудь понадобится.
Помимо встроенных англ субтитров я сделал ещё на русском і на українській. Хотя местами они могут быть не точными. Во-первых из-за, как я уже говорил, плохого качества оригинальных англ субтитров. Ну и во-вторых перевод полуторачасового фрагмента диалогов таки выматывающее дело. Так что, можете смело пинать насчёт фикса каких-то предложений.
(осторожно, я на 2:40 имеется панцушот лоливидной особы, так что не рекомендуется включать видео, если есть подозрение что товарищ майор где-то рядом, ну и из-за этого поставил тег Ero vn, не уверен что он здесь уместен, если не надо, уберите).
Kimi to Kanojo to Kanojo no Koi VN Новости Foreign VN Sone Miyuki Визуальные новеллы фэндомы
перевела новеллу Kimi to Kanojo to Kanojo no Koi - она же YOU and ME and HER: A Love Story, она же Ты, я и она: История любви
Жизнь — словно лестница. Ты просто должен продолжать подниматься вверх. Иначе, если ты начнёшь задумываться, тебе будет трудно сделать следующий шаг.
Шиничи не хочет ничего, кроме спокойной жизни. Хотя когда-то он и был близким другом Миюки, самой популярной девушки в школе, его стремление к нормальной жизни не даёт им быть чем-то большим, чем одноклассниками.
Но всё меняется, когда, в один прекрасный день на крыше, чудачка из класса, Аой, внезапно пытается поцеловать его. Миюки появляется как раз вовремя, чтобы остановить её, но после этого Шиничи чувствует желание впустить свет в глаза этой одинокой девушки. Он обращается за помощью к Миюки, и, вскоре, рождается их трио.
Проходят дни, и Аой мало-помалу узнаёт о том, каково это, быть друзьями. Но в то же время, в сердце Миюки пробуждаются давно угасшие чувства. Как только расстояние между ней и Шиничи сужается, кровные узы трёх друзей начинают разрушаться.
Миюки или Аой — когда придёт пора, кого Шиничи выберет?
«Ты, я и она: История любви» — это многосторонняя визуальная новелла от известного разработчика Nitro+. Она включает в себя красивые художественные работы, музыку и японское озвучивание вкупе с полным русским переводом. Управляйте историей, принимая решения в ключевых точках повествования. Какой будет концовка — решать вам.
Ссылки:
Anivisual: https://anivisual.net/stuff/2-1-0-2758
Google Drive:
Сама ВН (DL версия): https://drive.google.com/file/d/1Ttb-7VrY4cn6wqXr2kN2..
Патч для DL-версии: https://drive.google.com/file/d/1gya65tpMUwxKBBmTSg-s..
Патч для Steam-версии: https://drive.google.com/file/d/1lGfBGS0PAUItWMqQd2ma..
Яндекс.Диск:
Сама ВН (DL версия): https://yadi.sk/d/hQxGoAJierolXw
Патч для DL-версии: https://yadi.sk/d/ZYl2VAMuOvLNxQ
Патч для Steam-версии: https://yadi.sk/d/hTvLcNZqWTE04Q
Оба патча кидаются в папку игры с заменой.