Решения
http://tasteless.se/2014/01/gits-2014-ad-substract-pwn-adventure-75/ (ccmndhd и nsr) | Назад к списку заданий |
Задание (Pwn Adventure 2)
Question 22 - Ad Subtract
Points: 75
Challenge available from within PwnAdventure2.
Подробное описание
Задание выдает персонаж Old McDonald на карте Town of Adventure.
Нам надо избавиться от рекламы отображаемой внизу меню игры (выделено красным). Меню игры отображается всякий раз, когда игрок, находясь в игре, нажимает Esc. Поискав внутри клиента игры "\pwnadventure2_Data\Managed\GameLogic.dll" (для просмотра .NET-файлов я использовал Simple Assembly Explorer), обнаружим класс AdDownload. Самая интересная функция в нем - MoveNext. public bool MoveNext() { uint num = (uint)this.$PC; this.$PC = -1; switch (num) { case 0u: { this.<ad>__0 = Random.Range(0, this.$this.adCount); this.<url>__1 = this.$this.baseUrl + this.<ad>__0.ToString() + ".png"; this.<www>__2 = new WWW(this.<url>__1); this.$current = this.<www>__2; if (!this.$disposing) { this.$PC = 1; } return true; } case 1u: { this.$this.texture = this.<www>__2.texture; this.$PC = -1; break; } } return false; } Что делает функция? Видимо, она вызывается два раза.
Второй проход (переменная this.$PC = 1):
Выяснить адрес сайта, куда обращается клиент игры за картинкой-рекламой просто. Запускаем перехватчик пакетов Wireshark (ставим фильтр на HTTP-протокол), заходим в игру, попадаем в меню. И в этот момент Wireshark ловит нужный нам GET-пакет. Итак, адрес узнали. Это dontpanicsoftware.com. Очевидный алгоритм складывается такой: Подготовительные шаги:
#!/usr/bin/env python import SimpleHTTPServer import SocketServer PORT = 80 class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): def do_GET(self): key = open("black.png", "rb").read() self.request.send(key) httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever()
Результат:
Флаг: |