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

 eXeL@B —› Программирование —› Определение порядкового номера байта файла по его адресу в процессе
Посл.ответ Сообщение

Ранг: 47.4 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 30 ноября 2006 13:27
· Личное сообщение · #1

Вообщем есть адрес в памяти к примеру 0040BC18 Как узнать его порядковый номер в EXE файле? скажите если не трудно

P.S. Учусь писать патчи...



Ранг: 19.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 ноября 2006 13:47
· Личное сообщение · #2

Есть проги LordPE или PE Tools, в них есть FLC (File Location Calculator) который и делает переводы.



Ранг: 47.4 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 30 ноября 2006 13:51
· Личное сообщение · #3

Да мне не нужно что бы это делали программы так как по моему мнению крякер должен знать всё и уметь применить. А если (!К ПРИМЕРУ!) в будущем мне захочется написать подобную программу и я не буду знать как это делается? Что так и писать: зайди туда перевиди вот это и вставь сюда?




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 30 ноября 2006 14:21
· Личное сообщение · #4

SeQuick, из кода это делается примерно так - читаешь в PE заголовки секций и смотришь в какую секцию этот адрес попадает. Потом смотришь смещение этой секции в файле и счетаешь разницу.



Ранг: 47.4 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 30 ноября 2006 14:29
· Личное сообщение · #5

Ну это мне кажется лишний геморрой... Ведь если можно определить по адресу номер значить есть формула а если если есть формула значит проще посчитать чем ехать в Москву через Париж. Может я ошибаюсь




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

Создано: 30 ноября 2006 23:40
· Личное сообщение · #6

фомула есть) обычный поиск по RvaToOffset
но там много ньюансов, но в большинстве случае будет работать....

-----
[nice coder and reverser]




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

Создано: 01 декабря 2006 00:10
· Личное сообщение · #7

SeQuick пишет:
Ведь если можно определить по адресу номер значить есть формула

Есть не формула, а подпрограмма - это разные вещи. И я больше чем уверен, что она не в 100% правильный ответ дает. Поэтому два пути - использовать готовые инструменты/подпрограммы, либо написать свою. Второй путь ведет в никуда.




Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 01 декабря 2006 00:47
· Личное сообщение · #8

Это все примерно выглядит так (кусок кода)

for (num = 0; num < n_head->FileHeader.NumberOfSections; num++)
{
if (IN_REGION(entry->offset, section[num].VirtualAddress, section[num].SizeOfRawData))
{
offset = entry->offset - section[num].VirtualAddress + section[num].PointerToRawData;
break;
}
}


-----
Скажем дружно - нафиг нужно.




Ранг: 47.4 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 01 декабря 2006 09:59
· Личное сообщение · #9

А можно в цифрах? На примере какого-нить конкретного адреса?



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 01 декабря 2006 10:13
· Личное сообщение · #10

SeQuick
Для разных файлов будут разные цифры. Что непонятно в посте Ms-Rem?



Ранг: 27.7 (посетитель), 2thx
Активность: 0.01=0.01
Статус: Участник

Создано: 01 декабря 2006 11:33
· Личное сообщение · #11

SeQuick пишет:
Да мне не нужно что бы это делали программы так как по моему мнению крякер должен знать всё и уметь применить.


Конкретно в данном случае, чтобы решить задачу, нужно знать формат PE файла. Тогда ты сразу поймешь, что универсальной формулы (типа "разделить на три и прибавить два") здесь НЕТ. Нужно парсить exe (PE), находить описатель секции, которая отвечает за нужный тебе диапазон адресов и, относительно ее начала (в файле и в виртуальных адресах) уже есть простая формула.

Представление о том какая информация содержится в описателе секции можно получить нажав в HIEW: F8, F6




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 01 декабря 2006 11:34 · Поправил: s0larian
· Личное сообщение · #12

....кста, просто посмотреть можно и в hiew - смотрим disasm - слева адреса. Нажимает F3 (edit) - слева смещения.



Ранг: 47.4 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 01 декабря 2006 15:07
· Личное сообщение · #13

Проводил эксперименты дабы вычислить хотя бы как это происходит на деле и вывел небольшую закономерность. Причём испытана она на 3 разных прогах. Вообщем если хотите потестируйте. Берётся адрес байта из процесса (без имаг баз) к примеру DEC(0040BC2F - 00400000 - BFF(hex)) = порядковый номер байта в РЕ файле. и что самое странное это всё работает!!!




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 01 декабря 2006 16:13 · Поправил: s0larian
· Личное сообщение · #14

SeQuick, Ёлки-палки - мы же все тебе популярно объясняем, что это счетается используя виртуальные адреса по которым секции из PE файла загружаются в память. Перестань делать свои миклухо-маклайские арифметические попытки, и сделай правильно.

Утиль который делает все такие пересчёты смотрит PE - т.к. заголовок всегда в памяти.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 01 декабря 2006 20:14
· Личное сообщение · #15

SeQuick А теперь возбми свою формулу и посчитай смещение mz сигнатуры.



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

Создано: 01 декабря 2006 20:32
· Личное сообщение · #16

Просто клиника какая-то...

wasm.ru/article.php?article=packlast01#21




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

Создано: 02 декабря 2006 02:06
· Личное сообщение · #17

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

-----
[nice coder and reverser]





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 04 декабря 2006 16:46
· Личное сообщение · #18

AmLupus пишет:
Просто клиника какая-то...

LOL!!! +1


 eXeL@B —› Программирование —› Определение порядкового номера байта файла по его адресу в процессе
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати