Сейчас на форуме: cppasm, tyns777, dutyfree, asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Смещение в DLL
Посл.ответ Сообщение

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 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]?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 22 сентября 2016 19:54
· Личное сообщение · #2

вот такой инструмент вам нужно взять и потом понять почему FileOffset и Virtual Address не одно и тоже.



-----
[nice coder and reverser]




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 сентября 2016 19:56
· Личное сообщение · #3

Hellspawn пишет:
вот такой инструмент вам нужно взять и потом понять почему FileOffset и Virtual Address не одно и тоже.

а что это за инструмент если не секрет?))



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 22 сентября 2016 20:08 · Поправил: dosprog
· Личное сообщение · #4

udman пишет:
с помощью любого хекс редактора можно найти все


С помощью любого нельзя.

Кстати, есть такая прикольная тулза, называется --> "File Location Calculator" <--.





Ранг: 47.8 (посетитель), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 22 сентября 2016 20:22
· Личное сообщение · #5

udman
CFF Explorer

| Сообщение посчитали полезным: udman

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 сентября 2016 20:32
· Личное сообщение · #6


ввел виртуал адрес, получил файл офсет, но все равно это никак не адрес на [BLOCKED]




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 22 сентября 2016 20:50
· Личное сообщение · #7

udman
вычтете из него ImageBase, его можно в olly увидеть в memory map, и вводите в строку в RVA

-----
[nice coder and reverser]


| Сообщение посчитали полезным: udman


Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 22 сентября 2016 20:51
· Личное сообщение · #8

udman пишет:
ввел виртуал адрес, получил файл офсет, но все равно это никак не адрес на [BLOCKED]

потому что введенный адрес основан на релоцированной базе, а калькулятор считает на основе оригинальной базы 0x10000000

udman пишет:
0FAB767B BA ACFD2111 MOV EDX,OFFSET chrome.1121FDAC ; ASCII "[BLOCKED]"

выделенный адрес ЯВНО меньше 0x10000000, значит база ДЛЛ в памяти изменена.

в олли на вкладке с буквой Е (список модулей) найди свою длл и её базу.
потом ручками в калькуляторе рассчитай 0х1121FDAC - (та_самая_база), получишь RVA - относительный виртуальный адрес. дальше я думаю и так станет понятно

| Сообщение посчитали полезным: udman


Ранг: 56.2 (постоянный), 14thx
Активность: 0.120
Статус: Участник

Создано: 22 сентября 2016 21:12
· Личное сообщение · #9

на счёт смещения и разности хорошо,а для чего смотреть правильный адрес из олли в хексе там же опкоды
патч хотите создать?



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 сентября 2016 21:28
· Личное сообщение · #10

-=AkaBOSS=- пишет:
в олли на вкладке с буквой Е (список модулей) найди свою длл и её базу.
потом ручками в калькуляторе рассчитай 0х1121FDAC - (та_самая_база), получишь RVA - относительный виртуальный адрес. дальше я думаю и так станет понятно

да, тут разобрался, теперь появился другой вопрос, возможно ли через хекс редактор узнать (та_самая_база)?

то есть цель такая, найти в хекс коде
[BLOCKED]
его текущий файл офсет 01EDE3AC, потом перевести его в РВА и потом уже с новым этим адресом посмотреть в хекс коде что на него ссылается?

Добавлено спустя 1 минуту
script_kidis пишет:
на счёт смещения и разности хорошо,а для чего смотреть правильный адрес из олли в хексе там же опкоды
патч хотите создать?

да, хочу написать патч под хром, но проблема ровно в том что в каждой новой версии длл-ка и её адреса отличаются, конечно как вариант можно взять все версии хрома и каждую дллку обработать, но это нереальный геморой




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 22 сентября 2016 21:56
· Личное сообщение · #11

udman пишет:
возможно ли через хекс редактор узнать (та_самая_база)?

в данном случае та_самая_база - это адрес, по которому была загружена длл.
а загружается она туда, если её оригинальная база уже кем-то занята.
соответственно, статично определить это нельзя.
да и нет нужды, ведь есть RVA.


udman пишет:
то есть цель такая, найти в хекс коде [BLOCKED]
его текущий файл офсет 01EDE3AC, потом перевести его в РВА и потом уже с новым этим адресом посмотреть в хекс коде что на него ссылается?

если это делается статично (тоесть работа с файлом а не с образом в памяти) - тогда используй ImageBase из хидера.
если это делается на лету (тоесть патчится память запущенного приложения) - тогда нужно сначала выяснить базовый адрес нужного модуля

между прочим, а на что конкретно нужно пропатчить? мож есть смысл строку менять, а не код?



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 сентября 2016 22:07 · Поправил: udman
· Личное сообщение · #12

-=AkaBOSS=- пишет:
между прочим, а на что конкретно нужно пропатчить? мож есть смысл строку менять, а не код?

надо пропатчить на возможность устанавливать расширения с ПК, с 33й версии они запретили это дело, но если перед ссылкой [BLOCKED] поменять всего лишь 1 байт и вместо JNE поставить JMP, то появляется снова возможность ставить расширения с компьютера, но для того чтобы найти этот JNE надо найти то самое место которое ссылется на [BLOCKED], отмотать пару десятков байт обратно и соответственно изменить его


-=AkaBOSS=- пишет:
если это делается статично (тоесть работа с файлом а не с образом в памяти) - тогда используй ImageBase из хидера.

я посмотрел через ХИЕВ ImageBase = 10000000, но увы это никак не помогает)




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 22 сентября 2016 22:19
· Личное сообщение · #13

udman пишет:
я посмотрел через ХИЕВ ImageBase = 10000000, но увы это никак не помогает)

значит не той стороной пихаете
алгоритм примерно такой:
1. ищем строку в файле
2. полученное смещение пересчитываем в RVA
3. к нему плюсуем ImageBase - получился вполне себе искабельный виртуальный адрес
4. ищем этот адрес в файле (не забываем про little-endianess)
5. при нахождении референса, проверяем цепочку байт перед ним на наличие опкода jne
6. патчим, сохраняем и радуемся

а не вариант патчить ту самую функцию, результат которой проверяется перед jne?



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 сентября 2016 22:51
· Личное сообщение · #14

-=AkaBOSS=- пишет:
алгоритм примерно такой:
1. ищем строку в файле
2. полученное смещение пересчитываем в RVA
3. к нему плюсуем ImageBase - получился вполне себе искабельный виртуальный адрес
4. ищем этот адрес в файле (не забываем про little-endianess)
5. при нахождении референса, проверяем цепочку байт перед ним на наличие опкода jne


такс, вроде как все понятно, но, как мне пересчитать в РВА не используя CFF Explorer?

на счет патчить функцию, то она в разных вариантах браузера разная, по этому тут только опираясь на [BLOCKED]




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 22 сентября 2016 23:00 · Поправил: -=AkaBOSS=-
· Личное сообщение · #15

udman пишет:
как мне пересчитать в РВА

дока на все времена

/к следующему посту

SReg пишет:
без дизасма никак

а зачем тут дизасм? к константам обращение идёт напрямую по вирт адресу, найти его не такая большая проблема
остаётся конечно вероятность словить вместо своей константы какие-то инструкции, но это вполне решаемо.
можно сделать проверку возможных байт перед найденной цепочкой байт.
можно подсчитать реальное количество референсов, и если патчер найдёт больше чем нужно, сообщить пользователю о необходимости что-то менять



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 22 сентября 2016 23:37
· Личное сообщение · #16

udman пишет:
собственно вопрос в том, как найти в хекс редакторе ссылки на этот [BLOCKED]?

в хекс редакторе? думаю без дизасма никак..

Добавлено спустя 37 минут
-=AkaBOSS=-
да я согласен что решаемо, но не по феншую
а в данном конкретном случае и нормального патерна для dUP'a достаточно, зачем этот поиск ссылок.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 23 сентября 2016 00:16
· Личное сообщение · #17

Зачем эти сложности?
Hiew религия использовать не позволяет?





Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 сентября 2016 00:16
· Личное сообщение · #18

-=AkaBOSS=- пишет:
дока на все времена

перечитал несколько раз но так и не понял)) но все равно спасибо за многое, просветил реально во многом




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 23 сентября 2016 00:50 · Поправил: -=AkaBOSS=-
· Личное сообщение · #19

udman пишет:
перечитал несколько раз но так и не понял

да, за один раз всё вкурить может быть непросто.

ладно, разжую малость
чтобы из физического смещения получить RVA - потребуется прокурить PE-формат, хотя бы основные заголовки.
продравшись через него (e_lfanew+0x18+SizeOfOptionalHeader) до таблицы секций, можно начинать работать
1. ищем секцию у которой PointerToRawData <= нужное_нам_смещение < (PointerToRawData+SizeOfRawData)
2. вычитаем из нужного_нам_смещения PointerToRawData найденной секции (получается смещение относительно начала секции)
3. и прибавляем VirtualAddress этой же секции (получается, собственно, RVA)
4. фсё

фактически, есть еще кой-какие тонкости, связанные с механизмом маппинга секций в память, однако я не думаю что для чистой непротекченной длл нужно их учитывать



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 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

почему так? что я не так сделал?

при этом всем код который в Оли, я не могу найти в хекс редакторе




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 23 сентября 2016 20:17
· Личное сообщение · #21

udman ну опять 25, пчитайте про PE формат. это из-за релоков! видите, адрес в олли подчеркнут.

-----
[nice coder and reverser]





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 24 сентября 2016 01:35
· Личное сообщение · #22

всё банально просто в олли пкм>view>Executable file или Copy executablt>selection>save file

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 сентября 2016 14:42
· Личное сообщение · #23

ClockMan пишет:
всё банально просто в олли пкм>view>Executable file или Copy executablt>selection>save file

я знаю как в оли, в а делфи как?



Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 27 сентября 2016 15:37 · Поправил: unknownproject
· Личное сообщение · #24

udman пишет:
я знаю как в оли, в а делфи как?

Работа с бинарными файлами в любой нормальной книге описана.При желании можно допереть то, как читаются, перезаписываются и извлекаются блоки нужных данных.Этого никто разжевывать не будет.

-----
TEST YOUR MIGHT




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 сентября 2016 19:57
· Личное сообщение · #25

unknownproject пишет:
Работа с бинарными файлами в любой нормальной книге описана.При желании можно допереть то, как читаются, перезаписываются и извлекаются блоки нужных данных.Этого никто разжевывать не будет.


мне выше уже разжевали и я все уже сделал, хорошо что все таки есть нормальные люди которые могут разжевать, даже если ты прочел книгу и все равно не понял



Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 октября 2016 15:29
· Личное сообщение · #26

с х86 все работает как часы, с х64 просчитываю через CFF Explorer RVA перевожу его в little-endianess и не могу найти его в коде... кто-то может подсказать куда копать что читать?


 eXeL@B —› Вопросы новичков —› Смещение в DLL
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати