Ребята, я в тупике. Сидел, 3 вечера ковырялся в лончере и ничего интересного не нашел. А хотелось бы сделать менеджер окон полноценный :)
Тут наверняка есть более опытные в плане дебага и Themida люди, подскажите чего-нибудь, плз?
Что расковырял:
- Лончер отлично запускается дебаггером (OllyDbg) и дебажится прям вместе с запуском игры
- Лончеру достаточно кукисов для того, чтобы залогинить перса. Печеньки хранятся в открытую в папке с лончером. На этом можно простенький авто-запускатель окон сделать, кстати, мб замусь.
- Лончер делает CreateProcessW с набором параметров:
- lpApplicationName = 0
- lpCommandLine = &<строка запуска, с адресом и параметром про локаль, юникодная>
- lpProcessAttributes = 0
- LPSECURITY_ATTRIBUTES = 0
- bInheritHandles = False
- dwCreationFlags = 0x24 (CREATE_SUSPENDED | 0x20)
- lpEnvironment = 0
- lpCurrentDirectory = 0
- lpStartupInfo = <структура, с указанным размером (0x44). Остальное нули>
- lpProcessInformation = <указатель на нули>
- После этого он разблокирует окно, которое вернулось в lpProcessInformation.hThread (никаких полезных операций между этими событиями нет)
- Если остановиться тут, то игра запускается, но не логинится
- Если заморозить все треды лончера кроме того, что запускает процесс - игра запускается
- Затем крутит GetMessage-TranslateMessage-DispatchMessage
- Если сделать ровно ту же последовательность действий из своего процесса - игра говорит, что хочет лончер :)
- Лончер ничего не меняет в памяти процесса игры ни до разморозки треда, ни после.
- Размораживает именно тот тред, который вернулся из CreateProcessW
- Задачу залогиниться пока даже не ставил - открыть бы окно игры вообще =//
Собственно, какие у меня вопросы по этому счастью:
- Как узнать, не лезет ли игра в память родительского процесса?
- Что я пропустил в своих исследованиях, но на что стоит обратить внимание?