Сохранен 44
https://2ch.hk/pr/res/2395295.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Reverse Engineering

 Аноним 03/07/22 Вск 18:25:15 #1 №2395295 
image.png
image.png
Сап аноны, в тред призываются люди с опытом реверсинга. Суть в чем, есть игра, у неё есть вывод текста, текст переносится на новую строку не по словам, а по буквам. Смотри скрин. У меня от этой хуйни болят глаза, думаю бля, а че я лох что ли, давай найду функцию формирования текста и поправлю эту хуйню. Благо опыт с этим уже был в Rewrite. Но тут движок ебал я его в рот. Я просто текст в памяти не могу найти. Его нихуя нет. Так тут еще и никаких импортов GDI, текстовых метрик, нихуя. Я просто в тупике.
Можно конечно ебануть по хардкору и проследить весь путь от открытия файла со скриптами, его распаковки и декодированием последних, но мне даже страшно сколько времени я на все это могу потратить. Вообще как я понимаю тут вывод текста идет через d3d9, но в импорте только создание контекста, а с vftable я работать нихуя не умею, да и вообще мой уровень знания С - ебал я в рот этот синтаксис.
Так вот, может кто пнет в нужном направлении?
Аноним 03/07/22 Вск 23:02:26 #2 №2395605 
>мне даже страшно сколько времени я на все это могу потратить
А что в этом страшного? Весь рендер там кастомный, ты никак не разберешься без восстановления структуры программы. Можешь проследить, как загружается файл и каждое обращение к строке через брейкпоинты на доступ к данным. Ну неделю потратишь, если никогда в дебагере не сидел до этого. Месяц если не видел ассемблера до этого. Пару лет если нулевой в кодинге.
Аноним 03/07/22 Вск 23:22:39 #3 №2395629 
>>2395605
Хотелось бы побыстрее просто, я же ленивый пиздец. Хотя у меня появилось парочка идей как можно ускорить процесс и выползти на рендер текста. Надо будет проверить как домой вернусь.
Аноним 04/07/22 Пнд 04:03:00 #4 №2395723 
(Это мои предположения, я не знаю как на самом деле)
1. ID3DXFont::DrawText - наверно этой ф-ей выводится (если d3d9)
2. В таком случае, у неё есть параметр Format, к нему добавить DT_WORDBREAK, который и должен переносить по словам.
3. В x64dbg можно открыть игру, затем modules - найти d3d9, найти ф-ю DrawText, поставить брейкпойнт и проверить, что она вызывается для рендера, отсюда найдётся место вызова. Итак, если там не хватает флага DT_WORDBREAK (см п.2), то можно теперь добавить его тем или иным способом.

4. Теперь по поводу vftable(vtable). Где-то в игре есть указатель на d3d9 device (pDevice). В самом начале объекта, на который указывает pDevice записан указатель на vtable. Т.е. vtable == pDevice. vtable это массив с вирт ф-ями C++ класса. (vtable + 0) - это адрес первой ф-ции d3d9 device, (vtable + n 4) - адрес n-ной ф-ции для 32 бит; (vtable + n 8) для 64-битного кода.
В хедере (d3d9.h) есть перечень этих вирт ф-ций, и в инете или на гитхабе можно найти, например вот: https://raw.githubusercontent.com/Rebzzel/kiero/master/METHODSTABLE.txt
Хотя не уверен, что для этой задачи нужна эта инфа.
Аноним 04/07/22 Пнд 04:05:36 #5 №2395724 
Звёздочки пропали из текста выше, поэтому не совсем правильно получилось.
Аноним 04/07/22 Пнд 08:22:59 #6 №2395747 
image.png
>>2395723
> ID3DXFont::DrawText
Точно не она, ибо это самое очевидное. Плюс как сказал анон выше там кастомный рендер текста. Буквы выводятся с анимацией. В том же Rewrite тоже был кастомный рандер, но там всё было куда проще, так-как глифы брались из GDI, а затем переводились в текстуры которые уже потом отрисовывались.
Здесь же меня больше напрягает, что я вообще не могу найти отображающийся текст в памяти. Он либо в зашифрованном виде, что странно. Либо я хуй знает куда копать.
По поводу вывода текста есть еще небольшая подсказка в строках, но там никаких кросс референсов к этим строкам нет.
Аноним 04/07/22 Пнд 09:02:07 #7 №2395762 
>>2395747
> Здесь же меня больше напрягает, что я вообще не могу найти отображающийся текст в памяти. Он либо в зашифрованном виде, что странно. Либо я хуй знает куда копать.

я много раз встречал текст разбитый по символам и разделённый какими-то символами (иногда нуллбайтами, иногда хуй знает чем ещё), типа когда "джигурда" в памяти становится "д\0ж\0\и\0г\0у\0р\0д\0а"

мимо-не-реверсер
Аноним 04/07/22 Пнд 10:31:08 #8 №2395813 
>>2395762
Это станджартный виндовый юникод 16 бит, вот и получается восбмибитные символы через нули.
Аноним 04/07/22 Пнд 10:50:37 #9 №2395822 
>>2395295 (OP)
В этой консольной залупе всё своё, своя кодировка, свой рендер. Реверси программу, быдло.
Аноним 04/07/22 Пнд 11:45:01 #10 №2395866 
>>2395822
На счет своей кодировки инфа 100%?
Аноним 04/07/22 Пнд 14:23:32 #11 №2395946 
>>2395747
Я погуглил, подумал и пришёл к выводу, что у тебя ничего не получится. В стиме писали про эту проблему с переносом, разраб не захотел делать, а у него есть и исходники и мотивация (игра платная).
Эта задача потребует ковыряния кроссплатформенного движка, без исходников. Чтобы разобраться, а затем и доработать его. Задача, конечно, решаема, но нужно мотивацию + время.
Я видел много патчей с исправлениями старых игр от сторонних людей, без исходного кода. И пользовался ими. Думаю, что было потрачено немало времени и усилий, чтобы их сделать.
Аноним 04/07/22 Пнд 15:21:46 #12 №2395978 
>>2395946
> Эта задача потребует ковыряния кроссплатформенного движка, без исходников. Чтобы разобраться, а затем и доработать его. Задача, конечно, решаема, но нужно мотивацию + время.
Блядь, да я уже это делал для Rewrite+. Из стима. На данный момент все заключается в том, чтобы отыскать место где форматируется строка.
Аноним 04/07/22 Пнд 17:08:05 #13 №2396080 
image.png
image.png
Ахахахаха сука выкусила. Нашел текст. Действительно своя кодировка используется. Плюс всякие контрольные байты. 01 80 - начало имени 02 80 - конец. 03 80 - конец текста. Ну все, всем спасибо за помощь, буду поддерживать тред и писать чего сделал, дабы потом всё схоронить и не забыть в следующий раз как и что предпринимал.
По поводу того как нашел текст. Открыл чит инджин и по количеству символов в строке сканил. Нашел нужную переменную благо у неё адрес статический и смотрел какие функции к ней обращаются. Судя по всему вышел сразу на функцию формата текста. Дело за малым, захуячить перенос строки по словам.
А ну еще быстро скрипт захуячить для перевода кодировки в человеческий utf-8.
Аноним 04/07/22 Пнд 17:59:31 #14 №2396125 
Пиздец, анон, ты умный

Мимо фронтендер-макака, который умеет только джейсоны гонять
Аноним 04/07/22 Пнд 23:02:56 #15 №2396362 
>>2396125
Какой в пизду умный, матана не знаю, в нейронки не могу. Могу только байтоебством заниматься.
Аноним 05/07/22 Втр 10:41:22 #16 №2396613 
>>2396362
а в линуксы можешь?
Аноним 05/07/22 Втр 10:47:28 #17 №2396628 
>>2396613
Что подразумевается под линуксами? Если умение пользоваться им в качестве ОС то могу, если сисадминить, то нет, но мне это нахуй не нужно было. А так на винде с WLS по сути можно делать всё то же самое, что и на линуксах.
Аноним 05/07/22 Втр 11:06:46 #18 №2396652 
>>2396628
мне нужно отреверсить и внести изменения в прошивку девайсов, работающих под линуксом.
то есть для этого нужно хорошо знать устройство линукса, линуксовое байтоёбство типа формата ELF файлов и SO, вот это вот всё.
Аноним 05/07/22 Втр 11:28:46 #19 №2396670 
>>2396652
А, не. Я один раз реверсил программу под арм и андроид и то, чтобы вырезать проверку лицензии, даже получилось. С линуксами не ебался в этом плане.
Аноним 05/07/22 Втр 11:45:57 #20 №2396686 
>>2396670
ну мне примерно это и надо, архитектура как раз арм, но вместо андроида нормальный линукс.
Аноним 05/07/22 Втр 11:49:42 #21 №2396691 
>>2396686
Ну в любом случае если копаться в прошивках, то нужен физический доступ к девайсу, чтобы дебажить эту хуйню. В противном случае вряд ли будет какой толк.
Аноним 05/07/22 Втр 12:16:13 #22 №2396722 
>>2396080
>Открыл чит инджин и по количеству символов в строке сканил.
Как именно? А то мне бы тоже в эмуляторе найти текст, но не нашел.
Аноним 05/07/22 Втр 12:22:24 #23 №2396728 
>>2396722
Ну как берешь чит инджин. Подрубаешься к процессу. Я искал просто число 4 байта, отсчитываешь количество символов в строке. Сканишь. Выводишь следующую строку текста, отсчитываешь количество символов, отфильтровываешь результаты и так пока не найдешь нужную секцию в памяти.
Правда с эмуляторами возможно дела будут обстоять сложнее. Всё опять таки зависит от игры и эмулятора.
Аноним 05/07/22 Втр 12:36:59 #24 №2396756 
>>2396728
А, то есть искал числовую переменную с количеством символов. Спасибо.
Эмулятор не должен быть замороченным по идее, ведь по сути эмулятор компьютера с DOS (PC-98) http://nenecchi.kirara.st/ Текст выглядит как стандартный системными средствами, а не сами игры свой текст рисуют.
Аноним 05/07/22 Втр 12:38:19 #25 №2396758 
>>2396691
> нужен физический доступ к девайсу, чтобы дебажить эту хуйню.
это же для заливания прошивки обратно, а только для реверса сам девайс не нужен, прошивку с сайта производителя скачать можно.

реверсил когда-нибудь прошивку роутера или других железок? тулзами типа binwalk, например.
Аноним 05/07/22 Втр 12:42:20 #26 №2396761 
>>2396756
А тебе зачем это? Если хук для текстрактора\agth сделать, то есть спец версия Neko Project
для этой цели. Просто подрубаешься и оно автоматом находит.
>>2396758
Ну как бы да, только если вносить какие-либо изменения то девайс уже нужен.
> реверсил когда-нибудь прошивку роутера или других железок? тулзами типа binwalk, например.
Нет, но это опять так необходимости такой не было.
Аноним 05/07/22 Втр 13:26:07 #27 №2396813 
>>2396761
вот пример того, что мне нужно (только не для Supermicro):
https://peterkleissner.com/2018/05/27/reverse-engineering-supermicro-ipmi/
https://michael.stapelberg.ch/posts/2014-01-27-supermicro_ipmi_openvpn/

- челы написали кейген для лицензии, расковыряв прошивку (и попутно обнаружив, что бэкап конфигурации шифруется захардкоденным ключём)

сможешь сделать так же?
Аноним 05/07/22 Втр 13:40:43 #28 №2396831 
>>2396828
> Для этого есть люди, которые специализируются на такой хуйне и просят много денег.
где их найти?
Аноним 05/07/22 Втр 13:42:14 #29 №2396832 
>>2396813
> только не для Supermicro
Ну на другом вендоре реализация проверки лицензии может быть совсем другой. И вообще не факт, что будет всё так просто как в этом случае.
По поводу того смогу или нет, то вся проблема в мотивации. Во первых. Я нихуя не знаю ассемблерных команд для asm, то есть уйдет достаточно большое количество времени на чтение документации. То есть если бы это было мне нужно, да прям позарез, то потыкался бы. И если в дело вступают всякие шифрования, то я вообще не уверен в себе. Слишком мало опыта в данном направлении. Я не из тех людей которые на глаз могут понять что используется lz сжатие или даже обычный xor.
Ну в общем да, как чел сказал выше, я всего лишь балуюсь, мне по кайфу реверсить всякие игры и править в них баги. Просто хобби.
Аноним 05/07/22 Втр 13:45:47 #30 №2396839 
>>2396835
я таких не знаю.
точнее, знаю, но они все умерли рип васм&длаб&рдот, или специализируются на виндовой малвари, а не на линуксовых прошивках
Аноним 05/07/22 Втр 13:50:05 #31 №2396842 
>>2396832
естественно там проверка лицензии совершенно другая, потому и нужен кто-то, умеющий в ассемблер и тому подобное байтоёбство, способный на глаз отличить NOR от XOR.
но несмотря на отсутствие опыта в данном конкретном направлении, у тебя уже квалификация выше всех анонов, которых я встречал.
кароч если хочешь попробовать - оставь фейкоасечку
Аноним 05/07/22 Втр 14:04:15 #32 №2396862 
>>2396842
> кароч если хочешь попробовать - оставь фейкоасечку
Хотелось бы конечно попробовать, но спасибо, откажусь. А то и свое и твое время потрачу напрасно. Плюс из-за жары пока голова совсем не варит, взял перерыв.
Аноним 05/07/22 Втр 14:15:26 #33 №2396870 
>>2396761
>А тебе зачем это? Если хук для текстрактора\agth сделать, то есть спец версия Neko Project
>для этой цели. Просто подрубаешься и оно автоматом находит.
Ну да, текст нужен в словарик смотреть.
Спасибо огромное, если бы ты не сказал, не нашел бы, как и раньше не находил. Кое как наткнулся в каком-то твиттере (!) что нужен Neko Project 21/W, именно с W, да еще в его ini надо прописать секретный параметр USETHOOK=true , а так в гугле полная глухота, никаких упоминаний, кроме самого японца с его чейнджлогом, попробуй найди.
Аноним 05/07/22 Втр 16:11:44 #34 №2397017 
>>2396862
штош, если будет нечего делать - пиши.
Аноним 05/07/22 Втр 18:20:21 #35 №2397154 
>>2396831
На руборде есть среди местных реверсеры и приближенные к сцене.
Аноним 05/07/22 Втр 20:02:58 #36 №2397215 
>>2397154
спс, напишу
Аноним 22/07/22 Птн 17:06:28 #37 №2413048 
image.png
image.png
image.png
image.png
Что же, дело сделано. Правда немного костыльно. По хорошему нужно бы учитывать ширину символов, но благо игра сама подстраивает ширину строки если та не влазит.
Аноним 22/07/22 Птн 17:09:36 #38 №2413056 
image.png
image.png
Вот так конечно не очень красиво, но похуй.
Аноним 23/07/22 Суб 10:39:23 #39 №2413831 
>>2413048
>>2413056
ШГ
Аноним 24/07/22 Вск 12:50:56 #40 №2414650 
image.png
Бля, в глоссарии такой пиздец со шрифтами. Вывод по словам сделал, только толку не особо много. Кернинг у шрифта пляшет, глифы некоторые отсутствуют. Судя по всему они заменяли глифы английских букв на русский в шрифте. И сделали какой-то лютый винегрет. Надо распаковывать игровые архивы и смотреть, но мне так лень.
Аноним 24/07/22 Вск 20:06:22 #41 №2415276 
моеувожение.jpg
Нефега себя, ОП. По ОПпосту я думал, очередной заблудший ребенок хочет пофиксить любимую игру. А ты - херак - и правда пофиксил все, да еще и царским методом нашел нужное место, без лишнего копания в кишках. Респект таким пацанам.
Аноним 24/07/22 Вск 20:43:19 #42 №2415345 
>>2415276
> А ты - херак - и правда пофиксил все
Далеко не все. Там по хорошему надо шрифты фиксить. Так-как их делал криворукий уебан. И смотреть че там по скриптам игровым, так-как в некоторых местах баги с выводом текста. В теории все проблемы, разве что кроме отсутствующих глифов я могу решить программно. Но это я крышей поеду тогда. придется менять вообще нахуй всю подпрограмму вывода текста.
Похуй так более менее читается и норм.
Аноним 25/07/22 Пнд 15:16:43 #43 №2415901 
>>2415345
Божественным делом занимаешься, анон. Может все же доделаешь и патч выложишь в /vn?
Аноним 25/07/22 Пнд 17:30:51 #44 №2416099 
>>2415901
Если только внешку. Там еще дохуя багов и опечаток в самих скриптах, но туда я точно не полезу.
comments powered by Disqus

Отзывы и предложения