Это Косплей
»Саманта(БЛ) Саманта-мод Моды для Бесконечного лета Бесконечное лето Ru VN Art VN Визуальные новеллы фэндомы
- Сэм, я устала. Давай отдохнём немного, я не могу больше идти.
- И я хочу пить. У тебя есть вода?- Да, Сэмми. Вот.- Какие странные у вас бутылки. "Пепси" совсем по другому выглядит.
- Надеюсь, ты позаботишься обо мне?... А?.. Сэм?.. Лю-ю-би-имы...
P.S. Текст - полная отсебятина.
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.
Подрубаемся деббагером к нашей новелле. Выбираем процесс и жмакаем Attach debugger to process.
После того как подключились к процессу необходимо перейти на нужный адресс в окне memory view.
В красной рамке собственно располагается окно с ассемблерными инструкциями. Жмем по нему правой кнопкой мышки и нажимаем Go to address.
Нужный нам адресс можно получить в окне textractora треда который не полностью захватывает текст.
Красным подчеркиванием выделил где находится данный адрес. Вводим его в окошко Goto Adress, первые две цифры не трогаем, мы должны поменять только последние 6.
Собственно в окне 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 байта
В регистре ESI 82B1 я уже столько раз делал хук коды, что точно знаю, что все японские символы в SJIS кодировке состоят из двух байтов и первый байт у них начинается с 80. Есть очень полезный сайт который позволит хекс коды перевести в читабельный текст http://freaka.freehostia.com/charset.php
Благодаря этому сайту мы понимаем, что 82В1 = こ. Да так и есть, каждый раз при вызове ф9 мы продолжаем выполнение программы и каждый раз когда срабатывает брикпойнт регистр ESI меняется показывая нам новую букву. Хорошо с этим мы разобрались. Но как же выловить весь текст полностью? Ну в данном случае придется окунуться в наш стек, что бы найти истину.
В окошке со стеком, жмем правой кнопкой мышки и выбираем Not system modules only. Теперь мы увидим в окне адреса модулей. Наша задача выйти из этой подпрограммы в которой вызывается функция GDI32. Тут наверное стоит сделать лирическое отступление. Я сам нихуя не понимаю до конца как это работает, буду говорить с той позиции какой вижу это я.
Зеленой рамочкой обведен наш брикпоинт, наша задача выйти из данной функции в место откуда её собирались вызывать жирная черная стрелочка. В начале каждой новой функции на вершину стека кладется адрес возврата выполнения программы. По мере заполнения стека он будет опускаться все дальше вниз в окне стеков. Поэтому мы ищем в окне стека именно этот адрес возврата. На рисунке выше он 00473CF0. На нашей схеме я его обвел красной рамочкой.
Итак в окне стеков первые три модуля отправляют нас в область защищенной памяти, это не ассемблерные инструкции поэтому они нам не интересны. 4 же возвращает адрес куда должно передаться управление программой после завершения этой функции то есть до оператора ret что в простонородье означает return ака возвращение.
Нам нужно поставить брикпоинт прямо перед выполнением функции в которой происходит вызов в GDI32.
В нашем случае это адрес 72CE9 чуть ниже мы можем увидеть функцию call и еще на один ниже наш адрес возврата из той функции 72CF0. Поставим брикпойнт и немного погоняем ф9, смотрим есть ли где-нибудь наш текст. Ах да, поставим full stack в окне стека. Если мы дважды щелкнем кнопкой мыши на первую позицию в стеке после того как нажмем ф9, то в окне хекс отображения сможем увидить два байта нашей буквы в sjis кодировке. Значит мы сделали все правильно и буква появляется еще выше по выполнению данной функции, если бы мы нигде не смогли отыскать нашу букву, то алгоритм работы слегка изменился и нам пришлось искать место где она появляется в функции где вызывается GDI32, но этого не произошло и продолжаем искать дальше.
В данный момент у нас должно быть активно два брикпоинта при нажатии Ctrl+b мы увидим их адреса, либо же можно нажать мышкой сверху view -> breakpointlist. Наша задача понять они выполняются каждый одинаково, то есть сначала первый потом второй и если да, то это место для хука не подходит, так-как мы знаем что у нас проебаны буквы.
Жмакаем ф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 вроде бы, точно не помню и если он постоянный то все будет ок, но если вдруг каждый вызов он будет меняться, то вы получите кучу всяких потоков, поэтому использовать его нужно с умом. Собственно собака, потом адрес куда мы будем хукаться, напомню этот адрес идет сразу после того как мы получили наши цельные два байта. Двоеточие и имя экзешника полностью. Жмем окей и вуаля. Хук работает, а мы великолепны.
Бесконечное лето Soviet Games Ru VN Лена(БЛ) Gif VN Art VN Визуальные новеллы фэндомы
Как выжить в обществе яндере
В тот момент, когда любовь переходит в одержимость, и девушка начинает буквально тебя преследовать, знай – теперь ты на крючке у яндере. Это такая девушка, которая вломится к тебе домой, когда тебя там нет, спрячется под твоей кроватью, когда ты придешь, пошликает когда ты уснешь, вылезет оттуда, когда ты опять уйдешь – и начнет мастурбировать лежа на твоей кровати. При этом она оближет и обнюхает твою подушку, а потом кинется проверять твои сообщения, если заподозрит тебя в отношениях с другой девушкой. Как правило, у нее нет высоких идеалов или моральных тормозов. Она может даже не считать себя личностью, все ее существо составляет желание быть с ее любимым. То есть с тобой. Примечательна яндере тем, что невозможно распознать в ней безумие, у нее хватает самоконтроля для поддержания внешнего фасада нормальности… но помоги Аллах тем, кто окажется поблизости, когда этот фасад рухнет! Так что если не хочешь расхлебывать всю ту кровавую кашу, которую запросто может заварить твоя миленькая яндере – ниже есть несколько важных моментов.
А. Выжить.
Б. Ее психическое здоровье надо поддерживать на приемлемом уровне.
В. Она по-прежнему должна безоговорочно любить тебя.
2. Постоянно напоминай ей, как ты ее любишь, особенно в присутствии других женщин. Осторожнее с критикой, потому что есть риск, что она зациклится на это проблеме, и если не сможет ее исправить, то попытается исправить ТЕБЯ. Почаще повторяй, что ненавидишь этих уродин и грязных шлюх. В конце концов, унижать людей – это весело, не так ли?
3. Если она начала говорить странные вещи, значит у нее стресс. Он происходит из убеждения, что ты становишься ненадежным или собираешься бросить ее. Лечится постоянным вниманием и хорошим сексом. Помни, что лучшее в яндере – это ее абсолютная преданность, так почему бы не извлечь из этого профит? Все неудачи можно свести к одной фразе: «Было бы прекрасно, если бы он был хорошим и смотрел только на меня. Да, только на меня… Он не может смотреть ни на одну другую девушку. Я смотрю только на него, и он должен смотреть только на меня. Ведь это справедливо?»
4. Контакты с противоположным полом следует свести к минимуму – за этим она БУДЕТ следить. Когда ты будешь разговаривать с другой женщиной – она начнет отвлекать тебя или постарается побыстрее прекратить беседу. В любом случае, надо подыгрывать ей, постоянно демонстрируя свою бессмертную любовь. Периодически надо обрывать контакты, если она этого требует. Если женщина – твоя родственница, яндере может ее теоретически принять, но внешне в любом случае будет игнорировать.
5. Яндере сбрасывает свои оковы только тогда, когда ты переходишь определенные рамки, элегантно – и жутко – сохраняя свою маску до нужного момента, но даже тогда она очень снисходительна и подает множество предупредительных знаков. Если, конечно, ты в состоянии их заметить. Если заметил, что она внезапно стала «странной», попробуй ее чем-нибудь занять. Яндере нравится делать что-то специально для тебя, поскольку она считает, что таким образом укрепляет отношения. Это лучшее, что есть я яндере, к примеру, она с радостью будет кормить тебя с ложечки, и не сочтет это сколько-нибудь странным, так что все, что требуется – это нагрузить ее делами. Если в двух словах, яндере имеет -20 к рассудку, но зато +20 к домоводству.
6. Яндере не против безопасного секса, но люто ненавидит презервативы. Поскольку она получает от секса куда больше удовольствия, нежели другие девушки, он является для нее своего рода мистическим ритуалом, который сближает ее с любимым, а потому она будет требовать секса при любой возможности. Впрочем, противозачаточные таблетки она вполне приемлет, в отличие от презервативов, которые считает препятствием на пути к становлению «одной душой, одним телом».
7. Яндере ни за что не согласится делить тебя с кем-то, и всех прочих девушек воспринимает не иначе как врагов. При этом она не чувствует изоляции, и не считает, что чем-то отличается от них. Она уверена, что все остальные девушки поголовно спят и видят, как бы увести у нее парня, а потому люто, бешено их ненавидит. Ну а если две яндере влюбляются в одного парня – это знаменует начало смертельной битвы, в которой останется только одна. Кровь богу крови!
8. Насиловать тебя яндере не станет, по крайней мере, пока ваши отношения не устоялись. Привлечь тебя она будет пытаться стандартными средствами, поскольку воспитание утвердило ее во мнении, что это единственно верный способ. Но, разумеется, если бы она знала об эффективности угроз огнестрельным оружием – то [Die Zensur]а бы тебя незамедлительно.
9. Если яндере все-таки кого-то укокошила, единственное, что можно спрашивать: «Чем ты собираешься отмывать кровь?» Да, блин, она психопатка. Да, она, ДЕЙСТВИТЕЛЬНО это сделала. Но какого хрена ты ноешь? В смысле, этого следовало ожидать, сам же знаешь, с кем связался. Так что если не осталось улик, способных привести к тебе или к твоей яндере – беспокоиться вообще не о чем.
10. Полагаю, что влюбившись в яндере, ты по-детски наивно надеешься, что сможешь излечить ее своей любовь. Хрень это полная, мил друг, да и опасная. «Вылечить» ее? А нафиг надо? Она навязчивая и потенциально невменяемая, вот в чем суть. А отношения этот психоз усугубляют еще больше. Короче, яндере сумасшедшая, с этим ничего не поделать, а если ты думаешь иначе – флаг тебе в руки и венок на могилку.
11. Есть поговорка такая: «Из грязи в князи». Таки да, большинство яндере хотят как можно больше тепла от своего любимого, и пойдут ради этого на все, проявляя порой впечатляющую покорность. Напоминаю, что яндере ТРЕБУЕТ, что бы ты пользовался ее телом, что является в ее глазах физическим доказательством ее безграничной любви. С другой стороны, есть такие яндере, которые окрутят тебя безо всякой причины, просто поймает в свои сети и будет держать при себе. Так что не стоит рассматривать яндере как коврик для ног, поскольку этот коврик вполне может начать ходить по тебе.
12. Помни, не всякая яндере полностью понимает твою преданность, и может предположить, что ты оставил ее ради другой. С ней ни в коем случае нельзя беспечно относиться к заповеди «не обмани». Она избегает любых контактов с противоположным полом, и делает все для того, что бы быть идеальной женой для тебя. И если ты не сделаешь тоже самое, ОНА ПРОСТО ПРИРЕЖЕТ ТЕБЯ НАХРЕН!
И так, мы выяснили, какие у этих безумных женщин есть наклонности. Но ведь интересно, что мы вообще с этого выиграли, верно? Что же…
ВЕРНОСТЬ: Она никогда – НИ-КОГ-ДА – не предаст тебя. Пока ты не умрешь.
НЕЖНОСТЬ: Она знает, что такое настоящая любовь лучше, чем кто-либо на свете. В том числе ты.
ЗАБОТА: Весь свой запас заботы она расходует на тебя. Все прочие существа в пролете.
ЗАЩИТА: Будь то злая судьба, недоброжелатели или просто дешевые шлюхи – все это она снесет с твоего пути. Может, даже не фигурально выражаясь.
НЕНАВИСТЬ: Ко всем остальным девушкам, в смысле. Столь же чистая и холодная, как ночное небо.
УПОРСТВО: Она никогда – НИ-КОГ-ДА – не сдастся. Даже если знает, что ты возненавидишь ее за это. И никогда тебя не подведет.
НАСТОЙЧИВОСТЬ: Нет чего-то настолько трудного, унизительного или отвратительного, на что она не пойдет ради твоего внимания. Помни, что из постели яндере возврат возможен только в пластиковом мешке.
БРУТАЛЬНОСТЬ: Почему она должна спокойно смотреть, как кто-то пытается похитить тебя у нее? Эту тонкую дилемму надо решить, желательно – колюще-режущими предметами.
ПРЕДУСМОТРИТЕЛЬНОСТЬ: Семья? Друзья? Зачем?! Они лишь отнимают то время, которые ты мог бы провести с ней, поэтому надо избавиться от них сразу.
ВРАЖДЕБНОСТЬ: Ко всему более-менее живому, исключая тебя самого.
Кроме того, используя ее некоторые личностные черты, можно словить массу лулзов. Вот допустим, какая-то девушка тебя любит, и ты это знаешь. Даешь ей свой номер телефона и просишь позвонить тебе. Только представь – звонит она тебе, а трубку берет твоя яндере. С этого момента можно начинать считать дни, когда нежелательная пассия исчезнет или прекратит любые контакты с тобой. А если она решит прикончить «конкурентку» прямо у тебя на глаза – рекомендую жениться на ней немедля.
Что до моих личных методов борьбы, то тут есть хитрая тактика – если я вижу в девушке признаки яндере, то сам становлюсь яндере для нее. Совершенно верно, это хреново безумие. Не смотри на других людей, не уходи никуда более чем на 3 часа, и т.д. Я буду следить за моей драгоценной яндере сутками напролет, что бы никто не смог к ней подобраться. По крайней мере, это так выглядит со стороны.
Проблема тут в том, что ни к чему хорошему это не приведет, только расшатает и без того хрупкую психику яндере. Сам посуди, ты следишь за ней каждый день. Она понимает, что ты ходишь за ней в магазин, осматриваешь ее машину, расспрашиваешь о ней соседей. Она начинает задаваться вопросом: «Он считает меня неверной?! Но это невозможно, я забочусь о нем, только о нем!»
С этого момента начинаются попытки убедить тебя в обратном. Как пример – болезненные и извращенные сексуальные игры, которыми она говорит: «это тело – только для тебя». Вне зависимости от того, насколько они грязны и унизительны, она предается им с деланной улыбкой. Она хуже питается, предпочитая заказывать пищу на дом, и вообще предельно сокращает свои внешние контакты, что бы продемонстрировать, что может обойтись без кого угодно кроме тебя.
Переломный момент наступит тогда, когда она поймет, что, не смотря на все ее усилия, ты все еще не доверяешь ей. И тогда однажды ты, придя домой, найдешь ее мертвой с громадным мясницким ножом в вагине, а рядом будет лежать записка примерно такого содержания: «Милый, ты был абсолютно прав, мои мысли были нечисты, поэтому я наказала себя и теперь все в порядке. А еще я наказала плохих людей, которые подтолкнули меня к этой слабости…»
Если ты не подготовил заранее пути к бегству, полиция возьмет тебя за шкирку максимум на следующий день, когда найдет у тебя в подвале пару десятков расчлененных трупов.