[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/] [/dev/] [/stat/] ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]

Файл: 1762182075196.jpg -(24 KB, 280x346, 1762182075196.jpg)
24 No.234766  

Хола!

Значится начал я полгода назад заниматься своим проектом в реверс-инженирование. За это время успел написать свой тулинг, научился пользоваться и решать проблемы со старыми версиями вижлы, разобрался во всех важных окошках айды и даже смог достичь некоторых результатов -- хотя наперед работы еще очень много!

Хочу поделиться тут всякой преинтересной (для меня) информацией, как-то так!

>> No.234767  
Файл: 1762182975003.png -(62 KB, 866x768, 1762182975003.png)
62

Так вот! Проект посвящен мертвой и не очень качественной игре Survarium, сервера которой закрылись где-то года три назад.

И ведь если сервера закрылись, то значит, что надо написать свои!

Входными данными у меня были старые билды игры с дебаг символами (и приватными ключами сервера в проде, пусть они нигде и не пригодились) и слитый исходный код движка для второго сталкера 2011-ого года на котором и базируется игра (пусть разработчики и хвалились, что делают все совершенно новое).

https://ap-pro.ru/forums/topic/2647-materials-stalker-2-2011-ii/
https://archive.org/search.php?query=creator%3A%22Vostok+Games%22

Первым делом стоило разобраться, вообще куда я влез и чего хочу добиться. Поэтому с айдой и дебаг символами наперевес пошел разбираться в протоколах со стороны клиента.

Айда конечно тула очень интересная, особенно потому что имеет встроенный дебаггер, так еще и умеет хорошо декомпилировать С++ код, тогда как Гидра задыхается на большом количестве виртуальных функций, наследования и темплейтов -- хотя и Гидрой в итоге я также пользуюсь, пусть и только для скриптов.

>> No.234768  
Файл: 1762184008071.png -(4404 KB, 2541x1439, 1762184008071.png)
4404

Не подумал я сильно, как это все оформить красиво, но уж что вышло, то вышло

Разобрался, что стандартные сервера в бинаре захардкожены, но с помощью комбинации айды, утилиты strings и слитого исходного кода получилось разобраться, что игра также позволяет через консоль передать свой собственный сервер.

Протокол там написан конечно дурацки, потому что вся информация передается по голому TCP и только для передачи пароля в середине соединения используется SSL. В любом случае! Написал я на расте подобие сервера, который соглашается на все комбинации имени пользователя и пароля (что забавно, в первых версиях игры игра крашилась при имени короче 20 символов, что предвещает дальнейшее). Там и пригодились приватные ключи, оставленные разработчикам в первых релизах игры, иначе бы мне пришлось патчить экзешник (что я в дальнейшем все равно делал), чтобы оставить свой собственный сертификат. И вуаля -- первый барьер пройден!

>> No.234769  
>Айда

Удивлён, что кто-то так говорит, привык, что люди произносят IDA как ИДА.

Что за скрипты для которых используешь гидру ?

>> No.234770  

Нахуя кастить нуль указатель?
Мимо

>> No.234771  
Файл: 1762187861923.png -(132 KB, 1465x394, 1762187861923.png)
132

>>234769

> ИДА

Я сначала также говорил, но со временем из-за англоязычного влияния, где больше всего я эту тему и обсуждаю, привык к официальному произношению.

> Что за скрипты для которых используешь гидру

Я через какое-то время расскажу, что я начал восстанавливать исходный код клиента, базируясь на слитом движке xray-2.0, и чтобы cматчить ассемблер оригинальной игры и мною измененного движка, я использую objdiff[1], который умеет сравнивать ассемблер между объектными файлами. И с помощью скриптовой гидры с delinker[2] расширением я эти объектные файлы и генерирую.

Скрипт получился очень простой: я включаю только необходимые мне анализаторы и для каждого класса движка с помощью того расширения генерирую объектные файлы по его методам. Про него автор неплохо на хакерньюсе[3] рассказал.

[1]: https://github.com/encounter/objdiff/
[2]: https://github.com/boricj/ghidra-delinker-extension/
[3]: https://news.ycombinator.com/item?id=44083467

>> No.234774  
Файл: 1762189489324.png -(32 KB, 1737x275, 1762189489324.png)
32

>>234770
Это декомпилированный код, сгенерированный гидрой из ассемблера. Он "похож" на сишку и плюсы, но таковым не является. И касты в декомпилированном коде все указываются явно, чтобы было понятно, что с чем сравнивается и куда передается.

При желании, их можно спрятать, что я часто и делаю, когда приходится разбираться в коде, использующим буст и темплейты, а то все начинает на сотни символов вправо убегать, как на примере ниже.




[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/] [/dev/] [/stat/] ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]