Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
 
Gazzi
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 77
1

Как получить доступ к памяти ?

22.12.2017, 21:56. Просмотров 370. Ответов 9
Метки нет (Все метки)

Добрый день.

Не подскажет ли кто:
"Подправляю" чужую DLL-ку (Win32). Понадобилось сохранить где-нибудь в памяти ("рядом")
пару dword-овых слов. Как я понимаю, тут-же, в исполняемом сегменте этого сделать не получиться.

А где мне найти такую память ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2017, 21:56
Ответы с готовыми решениями:

На какую область памяти указывает адрес недоступной памяти
Здравствуйте! Написал программу, выводит (из PSP) сегментный адрес первого...

Как получить доступ к памяти устройство которое Windows не определило?
Вобщем такая тема учусь на первом курсе АГТУ (Програмная инжинерия) вобщем то...

Получить доступ к памяти
struct df{ unsigned f1: 1; unsigned f2: 1; unsigned f3: 6; }; df gh; ...

Получить доступ к внешней карте памяти (Android 6)
В предыдущей теме мне помогли разобраться с доступом к внутренней памяти....

Есть ли средства для питон, позволяющие получить прямой доступ к памяти?
Есть ли средства для питон, которые бы позволили напрямую обращаться к памяти?

9
Ol44
703 / 84 / 15
Регистрация: 10.07.2016
Сообщений: 146
23.12.2017, 00:35 2
Если в пределах одного вызова api из dll: можно в xmm5-xmm7 - эти обычно dll'ками не поганятся.
0
Gazzi
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 77
26.12.2017, 12:52  [ТС] 3
xmm5-xmm7.
Да, можно и так, спасибо (возьму "на вооружение").

Боюсь полезу "глубже" - понадобится побольше "дежурной" памяти. Вызов будет происходить
в пределах одной вызываемой фуни в "чужой" DLL-ке (но вот она - чёрти-куда лазает).

Думаю вот так поступить:
1). В PE-заголовке "Перетяну" начало функции на свою вставку.
2). Перед вызовом "штатной" фуни мне надо сохранить адрес с вершины стека, засунуть туда свой
адрес, и вызвать CALL-ом как ни в чём ни бывало "родную" фуню.
3). По окончании, родная фуня вернёт опять-же на мой "костыль" управление. Вся задача - сделать
возврат из DLL-ки по RETN, потому как сами "родные" фуни имеют исключительно RET-ы.
Тупо подставлять в концах "родных" фуней RETN - прокатывет не во всех случаях. Очень много
JMP-ов/CALL-ов изнутри одной фуни - куда-нибудь в середину другой.

И ещё по ходу возникли некоторые вопросы:
1). При входе в "родную" функцию в EAX находится тот-же адрес что и в EIP.
Это "писатель" данной DLL-ки так поступил, или это некий "закон Window-оза", заносить в EAX
точку входа ?

2). Всяческие модули типа ".rdata", ".data", "_RDATA", ".rsrc", ".reloc" обязательно следуют друг
за другом в памяти при запуске DLL-ки, или это опять же проделки конкретно-взятого "писателя" ?

3). Я думаю в конце кого-то из этих модулей "занять" мальца памяти ("на будещее пригодится").
Как это будет смотреться ?
Скорее всего в концах сидят "ничьи" байты (последствия выравнивания) ?
В крайнем случае опять же можно в заголвке PE "прибавить" 1000.h - Байт ?

4). Каким образом можно "получить" указатели на начало вышеперечисленных модулей
(вдруг они не всегда будут "лежать" друг за другом) ?

Заранее спасибо!
0
Ol44
703 / 84 / 15
Регистрация: 10.07.2016
Сообщений: 146
27.12.2017, 02:40 4
1.Использовать eax на входе - на усмотрение автора, но такого закона нет. А на выходе да, результат в eax.
2.Думаю должны быть по порядку, их смещения от адреса загрузки содержатся в описании каждой секции или модуля по вашей терминологии.
3.Идея не новая, иногда других вариантов нет, но тут нужно смотреть в описании секции сколько запрашивается виртуальной памяти для секции и сколько реальной. Разница заполняется нулями, которые можно как-то использовать, если у секции есть разрешение на запись в её память. По "прибавить" 1000.h Байт - если только добавить виртуальный размер секции, но тут нужно исправлять смещения следующих секций. В общем всё это возможно, но сложнее, чем просто использовать несколько 128 битных регистров.
4.В PE всегда есть полное описание, что куда и сколько, только там не прямые адреса, а смещения от предполагаемого адреса загрузки. Изучайте его и/или используйте спец. программы, например exescope - там даже помимо расшифровки пишет смещения от начала файла, где лежит интересующее значение. Думаю подобных программ много, да я особо не интересовался.
0
Gazzi
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 77
27.12.2017, 13:11  [ТС] 5
... используйте спец. программы ...
Использую, конечно-же, как же без них. В Olly-"ковыряю", в PEview - смотрю.

Дошёл методом Научного тыка:

Я так понимаю, что "записаться" можно только в секции ".data" ?
В заголовке секции .data (в файле) (именно в секции .data, а не в OPTION_HEADER) :
Virtual Size - 1.0C70 (.h Байт)
В заголовке OPTION_HEADER:
Section Alignment - 1.000

При старте действительно, данная секция длиной 1.1000 байт.
Значит: 1.1000 - 1.0C70 = 390 (h) Байт "Мои" ?
Этого расчёта достаточно, что-б не накосячить ?

И в памяти (при запущенной DLL), тоже, именно 390.h байт в конце секции ".data" - нулевые,
а буквально перед ними что-то "сидит" (не моё).
В дальнейшем, именно такую "технологию" применять ?

Теоретически может оказаться, что где-нибудь (в другой DLL) "мне" ни одного байта могут и не оставить ?

Осталось выяснить:
Где в PE "записана гарантия" загрузки этих секций "друг за другом" ?

Ну и ещё немножко не понял:
В OPTION_HEADER :
Size of Initialized Data - 4.CA00
Это сумма каких-то нескольких секций что-ли (что-то у меня не суммируется таковое значение) ?

Если что, вот DLL-ка (работает от Win-7 и выше, писалась на VS-2012, исходников конечно же нет):
0
ФедосеевПавел
27.12.2017, 23:52
  #6
 Комментарий модератора 
Впечатление, что идёт обсуждение взлома.
Тема закрыта по причинам нарушения Правил форума:
5.3 Запрещено размещать любые материалы, нарушающие авторские права (без разрешения правообладателя), а также ссылки на них.
5.7 Запрещено создание и распространение вредоносного ПО, вирусов, кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.

Если я ошибаюсь - пожалуйтесь на моё сообщение, приведите доводы, опровергающие мои рассуждения и тема будет открыта.
0
Gazzi
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 77
28.12.2017, 16:03  [ТС] 7
Я конечно извиняюсь, но я не нашёл "жалобную книгу" на этом форуме.
Ув. ФедосеевПавел !

5.3:
Вы уже "закрыли" файл, что-ж ещё по этому пункту не устраивает ?
Мне выложить свою DLL-ку ?

5.7:
А что собственно было создано, распространено ?
Данная библиотека лежит в открытом доступе.
Вирус ? Вы там обнаружили вирус ?
Кряк ? Вы обнаружили кряк ?
Взлом ? Что именно, и где взломали, крякнули, заразили ?

Вы можете точно указать адреса, смещения ???

... Впечатление, что идёт обсуждение взлома ...
В каком именно месте обсуждался взлом и что именно собирались ломать ?

???
0
ФедосеевПавел
Модератор
3856 / 2177 / 894
Регистрация: 01.02.2015
Сообщений: 7,261
28.12.2017, 20:07 8
Пожаловаться на тему - нажать на кнопку в виде красного треугольника
Название: f0cd3cee-8a34-4948-a0e9-1447017c3c25.png
Просмотров: 22

Размер: 3.2 Кб
и заполнить поля в появившейся форме.

Судя по вопросам в закрытой теме вы не имеете исходников декомпилируемой dll, но пытаетесь её изменить. Происхождении dll нигде не пояснено. Указание на попытки связи с автором dll в теме отсутствуют.

На мой взгляд - это похоже на взлом коммерческого продукта (dll). Перечислю ещё раз признаки взлома, которые я увидел:
1. Вы декомпилируете и дорабатываете что-то не в вашем программном продукте.
2. Происхождение продукта (dll) не указано.
3. Причины и характер доработки - не указаны.
4. Согласие автора dll на исследование и доработку не обозначено.
0
Gazzi
-12 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 77
29.12.2017, 11:25  [ТС] 9
Ну и какой смысл жаловаться, а главное кому и зачем ???
Всё и так понятно.

Закрытая тема больше не будет открыта ?
0
ФедосеевПавел
Модератор
3856 / 2177 / 894
Регистрация: 01.02.2015
Сообщений: 7,261
29.12.2017, 14:19 10
1. О смысле жаловаться.

Я не предполагал возникновения второй темы с обсуждением. Но какая-то обратная связь была желательна. Поэтому при закрытии темы сразу обозначил способ опротестовать решение.

При нажатии на красный треугольник автоматически создаётся тема, видимая только администраторам и модераторам в разделе "Жалобы". Жалобы рассматривают в первую очередь не модераторы, а администраторы. Если бы вы создали "жалобу" и подтвердили в ней, что тема закрыта из-за недопонимания, то или я или администратор открыли тему. Или же администратор подтвердит, что тема не соответствует правилам.

2. Если вы подтверждаете, что речь не идёт о взломе - тема будет открыта независимо от моих представлений о мироустройстве.
0
29.12.2017, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2017, 14:19

Как получить доступ к ftp, http и ssh по VPN через роутер, если есть доступ к samba?
Есть системник с Ubuntu Server 12.04. Он находится за роутером. На системнике...

Доступ к vector<pair<.>> как к памяти
У меня есть например vector&lt;pair&lt; int,double&gt;&gt;, или может быть пара с другими...

Как дать доступ к разделенной памяти для пользовательских программ из сервиса
У меня такая проблема, при запуске компьютера стартует сервис с правами SYSTEM....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru