Вопрос Оффсет для паттерна

Начинающий
Статус
Оффлайн
Регистрация
17 Апр 2021
Сообщения
14
Реакции[?]
1
Поинты[?]
1K
hi all, у меня вопрос как найти в IDA64 оффсет к паттерну?

к примеру вот код с дампера, в нём есть оффсет (0x3), возможно ли его найти в IDA64 и как?))
объясните пожалуйста(
Код:
DumpPatternOffset( "WeaponTable", "m_dwWeaponTableIndex", "client.dll",
"66 8B 8E ? ? ? ? E8 ? ? ? ? 05 ? ? ? ? 50",
Remote::SignatureType_t::READ, 0x3, 0x0, ss );
Заранее спасибо!
Перенёс тему с раздела кс го (помощь новичкам)!
 
Начинающий
Статус
Оффлайн
Регистрация
17 Апр 2021
Сообщения
14
Реакции[?]
1
Поинты[?]
1K
Наверху есть меню, жмакаешь Search -> Sequence of bytes и вбиваешь туда твой паттерн.
Так для дампера не только паттерн нужен но его и оффсет, в данном случае 0x3, но я хочу научится узнавать его сам в IDA64
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Так для дампера не только паттерн
Ну смотри, сигнатура что ты описываешь 66 8B 8E ? ? ? ? E8 ? ? ? ? 05 ? ? ? ? 50, это сигнатура кода X86, если дизассемблировать в ней видна инструкция
66 8B 8E ?? ?? ?? ?? - mov cx, word ptr ds:[rsi+0x????????] ...
Как видно, +3 означает что сигнатура нужна чтобы узнать некое смещение относительно rsi, поэтому и 3.
Т.е. где-то в игре читается 2 байта относительно класса в регистре rsi со смещением в 4 байта, а сигнатура находит смещение по этому коду.
Попросту нельзя начать искать сразу с ?? ?? ?? ?? иначе это будет невероятно медленно, поэтому ищут начания с 3 известных байт до и затем смещаются.
 
Начинающий
Статус
Оффлайн
Регистрация
17 Апр 2021
Сообщения
14
Реакции[?]
1
Поинты[?]
1K
Ну смотри, сигнатура что ты описываешь 66 8B 8E ? ? ? ? E8 ? ? ? ? 05 ? ? ? ? 50, это сигнатура кода X86, если дизассемблировать в ней видна инструкция
66 8B 8E ?? ?? ?? ?? - mov cx, word ptr ds:[rsi+0x????????] ...
Как видно, +3 означает что сигнатура нужна чтобы узнать некое смещение относительно rsi, поэтому и 3.
Т.е. где-то в игре читается 2 байта относительно класса в регистре rsi со смещением в 4 байта, а сигнатура находит смещение по этому коду.
Попросту нельзя начать искать сразу с ?? ?? ?? ?? иначе это будет невероятно медленно, поэтому ищут начания с 3 известных байт до и затем смещаются.
А если к примеру на смещение паттерн и тут + 0x5
Код:
GetAbsoluteAddress(FindPattern(("57 48 83 EC 20 48 8B 05 ? ? ? ? 48 8B F9 41 8B F0 8B DA")) + 0x5);
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
А если к примеру
Ты и сам с легкостью это можешь узнать, просто находишь паттерн в иде, как описано выше и смотришь что там за код.
В этом пример будут инструкции:
57 - push rdi
48 83 Ec 20 - sub rsp, 0x20
48 8B 05 ?? ?? ?? ?? - mov rax, qword ptr ds:[0x????????] <--- +0x5 будет тут
 
Сверху Снизу