![]() |
eXeL@B —› Вопросы новичков —› Поиск определенного RVA в PE |
Посл.ответ | Сообщение |
|
Создано: 12 апреля 2011 20:17 · Личное сообщение · #1 Допустим у меня есть исходник с чем то таким: Code:
Нужно в экзешнике не запуская его найти DWORD ,с RVA hello ,передаваемый мессагбоксу.Каким приемчиком это можно осуществить?С исходником для этого можно делать что угодно, главное нужное RVA обнаружить. ![]() |
|
Создано: 12 апреля 2011 20:50 · Личное сообщение · #2 |
|
Создано: 12 апреля 2011 20:54 · Личное сообщение · #3 |
|
Создано: 12 апреля 2011 22:11 · Поправил: yens · Личное сообщение · #4 |
|
Создано: 12 апреля 2011 22:59 · Личное сообщение · #5 |
|
Создано: 13 апреля 2011 00:06 · Личное сообщение · #6 |
|
Создано: 13 апреля 2011 05:06 · Поправил: sen · Личное сообщение · #7 yens шесть раз перечитал все твои посты, и нихрена не понял. какой tls вдруг вылез ? в головном посте о нем ни полслова, и при чем тут rva в va ? хочешь найти va строки в pe - просто ищи в файле нужную строку, а потом найденное физическое смещение в файле пересчитаешь в va. ничего запускать и никаких дизассемблеров для этого не надо. единственная трудность может быть в случае если такая строка не одна, но это, похоже, не твой случай. p.s. va = imagebase + rva, и оба ниразу не физическое смещение в файле p.p.s. посмотрел количество новых тем, весеннее обострение активности младых на новом названии ? ![]() |
|
Создано: 13 апреля 2011 10:06 · Личное сообщение · #8 Грубо говоря, нужно двигаться по секции кода в поисках дворда, который бы являлся адресом искомой мессаги. Для этого: 1. Поиском подстроки в строке ищем в ехе требуемую строку. 2. Нашли, на данном этапе имеем её PointerToRawData. 3. Далее переводим PointerToRawData в RVA. 4. Теперь прибавляя ImageBase, получаем то значение, которое нужно искать в кодосекции. 5. Как я понимаю, ищется что-то типа push 00xxxxxx, так вот 00xxxxxx мы поиском по кодосекции находим, далее от адреса, по которому нашли, вычитаем 1 и дизасмим команду по этому адресу. Если получили искомое push 00xxxxxx, так мы найдём адрес, по которому расположена команда заталкивания в стек нужного параметра. Если я нигде не ошибся (а я могу), то как-то так.Но зачем это нужно, ума не приложу. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 14 апреля 2011 04:59 · Личное сообщение · #9 |
|
Создано: 14 апреля 2011 17:31 · Личное сообщение · #10 yens пишет: Я хочу увидить DWORD с "адресом" статической TLS переменной,до того как системный загрузчик сделает из него VA. а статическая TLS-переменная - это типа константа, которую тлс-колбэк куда-то пихает? или я совсем не шарю? ![]() ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. ![]() |
|
Создано: 14 апреля 2011 17:39 · Личное сообщение · #11 |
|
Создано: 14 апреля 2011 18:24 · Личное сообщение · #12 |
|
Создано: 14 апреля 2011 19:05 · Личное сообщение · #13 |
|
Создано: 15 апреля 2011 00:34 · Личное сообщение · #14 PE_Kill у ТС на лету менятся ТЗ, пусть выкладывает реальный пример, тогда и можно будет конкретно говорить, где что. Из первого сообщения ТС вообще не следует, что речь о TLS. я ориентировался на это: yens пишет: Если точнее, я пытаюсь понять, как системный загрузчик находит места в коде для втыкания в них VA с TLSной переменной. раз ТС в первом посте привёл кусок сорса, значит может собрать бинарник с релоками - а это сильно упростит дело ----- EnJoy! ![]() |
|
Создано: 15 апреля 2011 01:54 · Личное сообщение · #15 |
|
Создано: 15 апреля 2011 19:17 · Поправил: yens · Личное сообщение · #16 Code:
Когда используется WaitForSingleObject,для обоих потоков один и тот же VA с tls_char.А если выполнить оба потока одновременно то VA разный.Я правильно понимаю что загрузчик видя в коде мейджик байт для такой переменной, фиксит код на лету?И пока этот код неначал выполнятся,вместо VA там находится упаковнные в DWORD мейджик байт,индекс переменной в её секции и ещё возможно какая та инфа? Так как вот как этот DWORD в нефикшенном виде выдрать? ![]() |
|
Создано: 15 апреля 2011 20:55 · Личное сообщение · #17 |
|
Создано: 16 апреля 2011 08:34 · Поправил: sen · Личное сообщение · #18 совершенно невозможно понять логику непрофессионала (с)Мюллер, 17 мгновений yens код в #1 и #16 это абсолютно разный код, между ними нет ничего общего кроме строки "Hello World". я сегодня не ленивый и прогнал твой код: раз: Code:
два: Code:
вывод полностью идеинтичный, что с WaitForSingleObject, что без. Какой VA у тебя разный ? нет никаких мейджик байт, нет никаких фиксов кода не лету (а также в воде и на земле), читай про локальную память потока. как только ты написал __declspec(thread) компилятор положит переменную в отдельный раздел, а линкер соберет все такие разделы в одну секцию с именем .tls При загрузке система видя секцию .tls динамически выделяет память для хранения всех статических tls-переменных, поэтому в коде потока для обращения к такой переменной будет обращение из нескольких команд в блок памяти конкретно этого потока, для другого потока система выделит другой блок, каждый поток работает со своими переменными, в другой обратиться он не может. какой dword и откуда хочешь выдрать ? зачем и что конкретно надо, задай точный вопрос на русском языке (без всяких втыканий и пр.) Archer нет там никаких апи, все гораздо проще: Code:
![]() |
|
Создано: 16 апреля 2011 13:21 · Личное сообщение · #19 |
|
Создано: 16 апреля 2011 17:20 · Личное сообщение · #20 |
|
Создано: 16 апреля 2011 18:23 · Личное сообщение · #21 |
![]() |
eXeL@B —› Вопросы новичков —› Поиск определенного RVA в PE |