eXeL@B —› Вопросы новичков —› Смещение в DLL |
Посл.ответ | Сообщение |
|
Создано: 22 сентября 2016 19:48 · Поправил: udman · Личное сообщение · #1 Всем привет. Хочу понять как работает смещение в длл, но пока безуспешно, возможно вопрос нубовской, но раздел все же для новичков вот на скрине в Оли Address Hex dump Command Comments 0FAB767B BA ACFD2111 MOV EDX,OFFSET chrome.1121FDAC ; ASCII "[BLOCKED]" вроде как понятно что по смещению 1121FDAC находится ASCII "[BLOCKED]" соответственно зная адрес 1121FDAC с помощью любого хекс редактора можно найти все что ссылается на этот адрес 1121FDAC что мне и надо но, когда открываешь хекс редактор и по слову [BLOCKED] находишь адрес то видишь что этот адрес не совпадает с тем который в Оли ну то такое, решил я посмотреть что ссылается на этот адрес, но увы ничего не нашел, потом я решил тем же хекс редактором с помощью хекс кодов в Оли найти то самое место где идет ссылка на [BLOCKED] и вот что получилось, в Оли хекс код один, а в хекс редакторе другой BA ACFD2111 BA ACFDED11 ну да й ладно подумал я, начал искать это смещение которое 11 ED FD AC в хекс редакторе, но в итоге не нашел ничего, пробовал минусовать 400 000 и точку входа 0F340000 но у меня никак не получается выйти на адрес 1E DE 3A 0C который в хекс редакторе и на котором есть этот самый [BLOCKED] собственно вопрос в том, как найти в хекс редакторе ссылки на этот [BLOCKED]? |
|
Создано: 22 сентября 2016 19:54 · Личное сообщение · #2 |
|
Создано: 22 сентября 2016 19:56 · Личное сообщение · #3 |
|
Создано: 22 сентября 2016 20:08 · Поправил: dosprog · Личное сообщение · #4 udman пишет: с помощью любого хекс редактора можно найти все С помощью любого нельзя. Кстати, есть такая прикольная тулза, называется |
|
Создано: 22 сентября 2016 20:22 · Личное сообщение · #5 |
|
Создано: 22 сентября 2016 20:32 · Личное сообщение · #6 |
|
Создано: 22 сентября 2016 20:50 · Личное сообщение · #7 udman вычтете из него ImageBase, его можно в olly увидеть в memory map, и вводите в строку в RVA ----- [nice coder and reverser] | Сообщение посчитали полезным: udman |
|
Создано: 22 сентября 2016 20:51 · Личное сообщение · #8 udman пишет: ввел виртуал адрес, получил файл офсет, но все равно это никак не адрес на [BLOCKED] потому что введенный адрес основан на релоцированной базе, а калькулятор считает на основе оригинальной базы 0x10000000 udman пишет: 0FAB767B BA ACFD2111 MOV EDX,OFFSET chrome.1121FDAC ; ASCII "[BLOCKED]" выделенный адрес ЯВНО меньше 0x10000000, значит база ДЛЛ в памяти изменена. в олли на вкладке с буквой Е (список модулей) найди свою длл и её базу. потом ручками в калькуляторе рассчитай 0х1121FDAC - (та_самая_база), получишь RVA - относительный виртуальный адрес. дальше я думаю и так станет понятно | Сообщение посчитали полезным: udman |
|
Создано: 22 сентября 2016 21:12 · Личное сообщение · #9 |
|
Создано: 22 сентября 2016 21:28 · Личное сообщение · #10 -=AkaBOSS=- пишет: в олли на вкладке с буквой Е (список модулей) найди свою длл и её базу. потом ручками в калькуляторе рассчитай 0х1121FDAC - (та_самая_база), получишь RVA - относительный виртуальный адрес. дальше я думаю и так станет понятно да, тут разобрался, теперь появился другой вопрос, возможно ли через хекс редактор узнать (та_самая_база)? то есть цель такая, найти в хекс коде [BLOCKED] его текущий файл офсет 01EDE3AC, потом перевести его в РВА и потом уже с новым этим адресом посмотреть в хекс коде что на него ссылается? Добавлено спустя 1 минуту script_kidis пишет: на счёт смещения и разности хорошо,а для чего смотреть правильный адрес из олли в хексе там же опкоды патч хотите создать? да, хочу написать патч под хром, но проблема ровно в том что в каждой новой версии длл-ка и её адреса отличаются, конечно как вариант можно взять все версии хрома и каждую дллку обработать, но это нереальный геморой |
|
Создано: 22 сентября 2016 21:56 · Личное сообщение · #11 udman пишет: возможно ли через хекс редактор узнать (та_самая_база)? в данном случае та_самая_база - это адрес, по которому была загружена длл. а загружается она туда, если её оригинальная база уже кем-то занята. соответственно, статично определить это нельзя. да и нет нужды, ведь есть RVA. udman пишет: то есть цель такая, найти в хекс коде [BLOCKED] его текущий файл офсет 01EDE3AC, потом перевести его в РВА и потом уже с новым этим адресом посмотреть в хекс коде что на него ссылается? если это делается статично (тоесть работа с файлом а не с образом в памяти) - тогда используй ImageBase из хидера. если это делается на лету (тоесть патчится память запущенного приложения) - тогда нужно сначала выяснить базовый адрес нужного модуля между прочим, а на что конкретно нужно пропатчить? мож есть смысл строку менять, а не код? |
|
Создано: 22 сентября 2016 22:07 · Поправил: udman · Личное сообщение · #12 -=AkaBOSS=- пишет: между прочим, а на что конкретно нужно пропатчить? мож есть смысл строку менять, а не код? надо пропатчить на возможность устанавливать расширения с ПК, с 33й версии они запретили это дело, но если перед ссылкой [BLOCKED] поменять всего лишь 1 байт и вместо JNE поставить JMP, то появляется снова возможность ставить расширения с компьютера, но для того чтобы найти этот JNE надо найти то самое место которое ссылется на [BLOCKED], отмотать пару десятков байт обратно и соответственно изменить его -=AkaBOSS=- пишет: если это делается статично (тоесть работа с файлом а не с образом в памяти) - тогда используй ImageBase из хидера. я посмотрел через ХИЕВ ImageBase = 10000000, но увы это никак не помогает) |
|
Создано: 22 сентября 2016 22:19 · Личное сообщение · #13 udman пишет: я посмотрел через ХИЕВ ImageBase = 10000000, но увы это никак не помогает) значит не той стороной пихаете алгоритм примерно такой: 1. ищем строку в файле 2. полученное смещение пересчитываем в RVA 3. к нему плюсуем ImageBase - получился вполне себе искабельный виртуальный адрес 4. ищем этот адрес в файле (не забываем про little-endianess) 5. при нахождении референса, проверяем цепочку байт перед ним на наличие опкода jne 6. патчим, сохраняем и радуемся а не вариант патчить ту самую функцию, результат которой проверяется перед jne? |
|
Создано: 22 сентября 2016 22:51 · Личное сообщение · #14 -=AkaBOSS=- пишет: алгоритм примерно такой: 1. ищем строку в файле 2. полученное смещение пересчитываем в RVA 3. к нему плюсуем ImageBase - получился вполне себе искабельный виртуальный адрес 4. ищем этот адрес в файле (не забываем про little-endianess) 5. при нахождении референса, проверяем цепочку байт перед ним на наличие опкода jne такс, вроде как все понятно, но, как мне пересчитать в РВА не используя CFF Explorer? на счет патчить функцию, то она в разных вариантах браузера разная, по этому тут только опираясь на [BLOCKED] |
|
Создано: 22 сентября 2016 23:00 · Поправил: -=AkaBOSS=- · Личное сообщение · #15 udman пишет: как мне пересчитать в РВА /к следующему посту SReg пишет: без дизасма никак а зачем тут дизасм? к константам обращение идёт напрямую по вирт адресу, найти его не такая большая проблема остаётся конечно вероятность словить вместо своей константы какие-то инструкции, но это вполне решаемо. можно сделать проверку возможных байт перед найденной цепочкой байт. можно подсчитать реальное количество референсов, и если патчер найдёт больше чем нужно, сообщить пользователю о необходимости что-то менять |
|
Создано: 22 сентября 2016 23:37 · Личное сообщение · #16 udman пишет: собственно вопрос в том, как найти в хекс редакторе ссылки на этот [BLOCKED]? в хекс редакторе? думаю без дизасма никак.. Добавлено спустя 37 минут -=AkaBOSS=- да я согласен что решаемо, но не по феншую а в данном конкретном случае и нормального патерна для dUP'a достаточно, зачем этот поиск ссылок. |
|
Создано: 23 сентября 2016 00:16 · Личное сообщение · #17 |
|
Создано: 23 сентября 2016 00:16 · Личное сообщение · #18 |
|
Создано: 23 сентября 2016 00:50 · Поправил: -=AkaBOSS=- · Личное сообщение · #19 udman пишет: перечитал несколько раз но так и не понял да, за один раз всё вкурить может быть непросто. ладно, разжую малость чтобы из физического смещения получить RVA - потребуется прокурить PE-формат, хотя бы основные заголовки. продравшись через него (e_lfanew+0x18+SizeOfOptionalHeader) до таблицы секций, можно начинать работать 1. ищем секцию у которой PointerToRawData <= нужное_нам_смещение < (PointerToRawData+SizeOfRawData) 2. вычитаем из нужного_нам_смещения PointerToRawData найденной секции (получается смещение относительно начала секции) 3. и прибавляем VirtualAddress этой же секции (получается, собственно, RVA) 4. фсё фактически, есть еще кой-какие тонкости, связанные с механизмом маппинга секций в память, однако я не думаю что для чистой непротекченной длл нужно их учитывать |
|
Создано: 23 сентября 2016 20:03 · Поправил: udman · Личное сообщение · #20 -=AkaBOSS=- пишет: чтобы из физического смещения получить RVA - потребуется прокурить PE-формат, хотя бы основные заголовки. продравшись через него (e_lfanew+0x18+SizeOfOptionalHeader) до таблицы секций, можно начинать работать 1. ищем секцию у которой PointerToRawData <= нужное_нам_смещение < (PointerToRawData+SizeOfRawData) 2. вычитаем из нужного_нам_смещения PointerToRawData найденной секции (получается смещение относительно начала секции) 3. и прибавляем VirtualAddress этой же секции (получается, собственно, RVA) 4. фсё вроде как разобрался с одной версией, решил открыть другую версию и все посчитать по новой, итого нашел вот файл офсет 1C2A7E0 где БЛОКЕД дальше, считаю это дело в РВА и плюсую ImageBase итого получаю виртуальный адрес 03 85 B3 E0 перевожу в little-endianess E0 B3 85 03 дальше захожу в хекс редактор, успешно нахожу значение и потом решаю перепроверить все в Оли, открываю и вижу это то есть хекс код найденный мной E0 B3 85 03 а в Оли E0 B3 02 05 почему так? что я не так сделал? при этом всем код который в Оли, я не могу найти в хекс редакторе |
|
Создано: 23 сентября 2016 20:17 · Личное сообщение · #21 |
|
Создано: 24 сентября 2016 01:35 · Личное сообщение · #22 |
|
Создано: 27 сентября 2016 14:42 · Личное сообщение · #23 |
|
Создано: 27 сентября 2016 15:37 · Поправил: unknownproject · Личное сообщение · #24 |
|
Создано: 27 сентября 2016 19:57 · Личное сообщение · #25 unknownproject пишет: Работа с бинарными файлами в любой нормальной книге описана.При желании можно допереть то, как читаются, перезаписываются и извлекаются блоки нужных данных.Этого никто разжевывать не будет. мне выше уже разжевали и я все уже сделал, хорошо что все таки есть нормальные люди которые могут разжевать, даже если ты прочел книгу и все равно не понял |
|
Создано: 03 октября 2016 15:29 · Личное сообщение · #26 |
eXeL@B —› Вопросы новичков —› Смещение в DLL |