NoX World - форум об игре NoX

Привет фанатам NoX !!! => Картостроение, скриптинг и моддинг => Моддинг => Тема начата: 2530 от 25/12/2014 13:57:38

Название: Помощь с IDA
Отправлено: 2530 от 25/12/2014 13:57:38
Всем привет.
Каждый день я вижу как всплывает тонна новой информации касательно памяти в Nox. Казалось бы, это не может не радовать. Но в какой-то момент я понимаю что именно те, кто занимаются разбором памяти Nox, самые полезные люди в любом Nox комьюнити. Ибо скрипты-обёртки на lua может налепить любой худо-бедно выучивший синтаксис и умеющий копипастить. Это меня лично расстроило. И твёрдо решил заняться вопросом изучения памяти.
Как-то раз мне доводилось беседовать с Dio и он сказал, что все роют данные при помощи IDA. Спустя некоторое время я получил эту программу и даже несколько раз открывал её. И через 10 минут бессилия закрывал. Я никак не понимаю как можно с помощью этого отследить данные, так как там сплошной ассемблер и фиг его знает когда что вызывается. Я долгое время бился с этим, но так и ничего не понял. Видимо программист из меня хреновый и это не исправить.
Может быть поможете постичь тайны дизассембла? С чего мне следует начать? Какой ассемблер нужно учить? Каким образом нужно искать данные? Google не даст ответы на эти вопросы точно, так как гайда "Как дизассемблить Nox" там нет.
Начальные данные:
1. Знание C\C++ на уровне "учим в институте(МАИ факультет 8) + изучал WINAPI для проекта и чем больше я узнаю, тем больше кажется, что нихрена не знаю".
2. Знание Lua на уровне "Круто для Unimod.". Не трогал сабрутины, коллектор мусора, стандартные lua библиотеки (require'ы) и программирование оконных приложений. Знаком с интеграцией C# в lua.
3. Знание утилит для распаковки\обработки Nox данных на уровне: "Знал бы метод кодирования, написал бы свою утилиту" и "Добавить новый объект могу, но с оговорками".
4. Нулевое знание assembler. Известен только тот факт, что "У разных семейств процессоров свой ассемблер".
5. Знание IDA менее 1%. Описать можно так: "Открыть базу могу и прочитать некоторую информацию. Открыть exe с нуля не могу.". На этом конец.
6. Желание освоить что-то новое. Процентов 70%. Остальные 30% на "готов развить старое".
7. Знание Unimod реакций и команд на уровне: "Всё наизусть не помню, но ума хватает чтоб открыть исходники и глянуть как всё работает. Пишу плагины."
P.S>Всё на что меня хватило - это управление уровнем Nox Quest и состоянием-анимацией игрока и сделано это было не через IDA, а через наблюдение за переменной по смещению или перебором разных значений в WinHack. Хотелось бы надыбать больше информации.
Название: Помощь с IDA
Отправлено: Evengard от 25/12/2014 14:31:00
Ух ё, это такая обширная тема, к тому же которую на этом форуме знают только я, Дио, Сим да мобыть ещё КирКонджурер с Ларбоссом (хм, если так подумать, не так уж мало народу).

Ассемблер используется x86. Так и пишешь в гугле x86 assembler. На самом деле он достаточно простой, там элементарные команды вроде "записать то-то в память по такому то адресу, проверить это равно ли тому, прыгнуть туда-то, вызвать то-то" и тд. Конечно тонкости есть... Но в общем и целом ассемблер простой язык. Проблема в том, что он настолько простой, что сложную логику на нём писать приходится с самых основ ^^ в этом и есть сложность.

Насчёт Иды... Ну, скажем так - я ещё не видел такой интуитивно непонятной программы, да. Они все сочетания клавиш свои сделали, причём абсолютно неочевидным образом, мдя... На самом деле там достаточно знать несколько сочетаний клавиш чтоб нормально в ней ориентироваться. Типа нажатия кнопки X на названии функции, то что поиск там по ALT+T ну и прочие такие мелочи.

В общем тема очень обширная, и лучшим способом было бы одновременный разбор чего-то вместе, дабы как это делается было видно наглядно - другой вопрос у кого на это время найдётся. И да, перед этим вспомни теорию указателей в С/С++, тебе в ассемблере это ОЧЕНЬ понадобится, если хочешь понять как там в память писать.
Название: Помощь с IDA
Отправлено: 2530 от 25/12/2014 15:54:57
...
В общем тема очень обширная, и лучшим способом было бы одновременный разбор чего-то вместе, дабы как это делается было видно наглядно - другой вопрос у кого на это время найдётся. И да, перед этим вспомни теорию указателей в С/С++, тебе в ассемблере это ОЧЕНЬ понадобится, если хочешь понять как там в память писать.
1. Теорию указателей в C\C++ активно использую на практике, а значит проблем с этим не будет.
2. Если же у кого-нибудь найдётся, буду рад. В скайпе бываю практически каждый день.

За информацию об ассемблере огромное человеческое спасибо ^_^. Погуглим. Одной непоняткой меньше.

А что за отладчик в IDA? Кто-нибудь может рассказать?
Название: Помощь с IDA
Отправлено: Evengard от 25/12/2014 17:42:33
Отладчик либо свой какой-то, либо майкрософтовский (не помню уже как зовётся), либо эмуль BOCHS. Я пользуюсь его своим Win32 debugger так и называется.
Название: Помощь с IDA
Отправлено: TheSim от 26/12/2014 11:24:56
Ну тогда вообще проблем не будет.
Главное что нужно сделать/понять

Ну и прочитать статью например на MSDN про Calling Convention
Название: Помощь с IDA
Отправлено: Evengard от 26/12/2014 11:32:12
Ну хз, мне режим графа как раз оч нравится.
Название: Помощь с IDA
Отправлено: 2530 от 26/12/2014 11:33:34
Sim, для чего нужно переименование адреса? Я могу править exe через IDA?
Название: Помощь с IDA
Отправлено: Evengard от 26/12/2014 12:16:01
Переименование - это чтоб для себя понять что есть что. Ида потом эти имена подставит везде где этот адрес упоминается. И нет, из Иды править экзешники нельзя, для этого я использую хекс редактор HxD. В Иде есть вкладка hex - находишь участок который хочешь подправить в нём (ида сама подсвечивает), ищешь это в хекс редакторе, и вручную заменяешь опкоды на нужные.
Название: Помощь с IDA
Отправлено: 2530 от 26/12/2014 12:38:50
Хорошо. Прикрепление ассоциаций полезная штука.
А как строится structures и enums вкладки? Я сам определяю их или IDA должна сама найти?
Название: Помощь с IDA
Отправлено: Evengard от 26/12/2014 13:39:31
Сам. Что-то конечно Ида постарается найти, какие нить стандартные сигнатуры, но в основном всё сам.
Название: Помощь с IDA
Отправлено: TheSim от 30/12/2014 16:26:52
А как строится structures и enums вкладки? Я сам определяю их или IDA должна сама найти?
Енумы объявляются буквой M, поля структур  Ctrl+T
Позволяет написать не
mov eax, [ebx+0x48] а например
mov eax, [ebx+BigUnitStruct.updateData]
Название: Помощь с IDA
Отправлено: Lаrboss от 31/12/2014 23:27:19
Ну хз, мне режим графа как раз оч нравится.
Кстати, да, мне тоже им удобней пользоваться, как - то наглядней.

Видимо программист из меня хреновый и это не исправить.
Да дело не в этом. У тебя просто нет знаний и опыта как работать с этим, новым для тебя, инструментом. В гугле все есть... ты, конечно, не найдешь инструкцию вида делай 1, делай 2, делай 3 и получи результат для конкретной программы/игры. Каждая программа - свой пазл. Нужен индивидуальный подход, особенно в играх.

Есть специальные тренировочные проги, CrackMe всякие, на них тренируйся. Главное пойми общий принцип + команды ассемблера выучи + научись работать в конкретном дисассембреле (IDA в данном случае).

Из дебагерров Olly вроде не плох, точно не скажу.
Название: Помощь с IDA
Отправлено: Evengard от 01/01/2015 07:09:40
Олька такой же дизассемблер + дебаггер как и Ида. И тут уже скорее вопрос личных предпочтений. Мне, честно, Олька как-то не пошла.
Название: Помощь с IDA
Отправлено: TheSim от 01/01/2015 14:21:18
Сила IDA в том, что он ползает туда и сюда по функциям и строит базу ссылок (которые по X видны), Olly так не очень умеет.