Уведомления

Группа в Telegram: @pythonsu

#1 Июль 11, 2019 11:23:47

lngvar
Зарегистрирован: 2019-07-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

Добрый день, подскажите насколько возможно путем инжекта dll в чужой процесс, получить доступ к объектам питона ?
Таргет импортирует python27.dll и еще пару, наверное, своих Py_***.dll

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

Офлайн

#2 Июль 11, 2019 20:57:18

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

Прочитайте
https://docs.python.org/3/extending/index.html
и попробуйте сформулировать вопрос в понятных остальным терминах
p.s.
python2.7 не актуален и его поддержка скоро будет прекращена



Отредактировано doza_and (Июль 11, 2019 20:58:39)

Офлайн

#3 Июль 12, 2019 00:12:42

lngvar
Зарегистрирован: 2019-07-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

Прочитал.
Давай еще раз попробую обьяснить.
Есть программа, использующая Python27.dll и еще несколько своих Py***.dll а также *.pyd

Задача :
Путем инжекта dll внедрить свой поток в эту программу, который бы мог хоть что-то из следующего ..
1. Получить доступ к полям объектов ( вроде атрибуты в питоне )
2. Иметь возможность выполнять методы

Библиотеки имеют всего по 1 экспортируемой функции Init** . (ну кроме , естественно, стандартной Python27).

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

Отредактировано lngvar (Июль 12, 2019 00:13:00)

Офлайн

#4 Июль 12, 2019 05:05:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

lngvar
Путем инжекта dll внедрить свой поток
Ты это делал когда-нибудь вообще? Питон-то тут вообще ни при чём.

lngvar
Я не прошу выкладывать тут готовый код, просто скажите такое возможно или нет
Я тебе чисто логически скажу. Если ты это делал, то ты бы этот вопрос не задавал, потому что знал бы на него ответ сходу. Следовательно, ты этого не делал. А если ты этого не делал, то ты этого сходу и не сделаешь.

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



Отредактировано py.user.next (Июль 12, 2019 05:09:34)

Офлайн

#5 Июль 12, 2019 08:36:23

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

Мы с вами используем разную терминологию. Я вообще первый раз слышу об инжекте dll в питоне. Я не могу поверить что вы собираетесь так лезть в процесс : https://habr.com/ru/post/73324/. Это скорее всего не будет работать на современных ОС да и непонятно зачем это делать когда есть гораздо более простые пути. Вызов методов из вспомогательного потока точно не получится поскольку нужен захват GIL без него вы быстро уроните приложение. Этот путь как удаление гландов через ж.

Сами объекты питона никак не защищены и лежат в словарях которые можно получить вызовами globals(),locals().

Библиотеки вы можете просто импортами подгузить в питон и посмотреть содержимое обычными методами интроспекции. Если нужен живой доступ к объектам, то соберите python27.dll с соответствующими возможностями. Ее исходники доступны в интернете. Откроете сокет и будете слать команды какие хотите.
конечно у вас может быть специальная “криптографически защищенная” python27.dll, тогда ничего не получится :).

p.s.
Есть еще один читерский способ. Обычно помогает прочитать документацию по программе. Там обычно написано как запустить питоновскую консоль.



Отредактировано doza_and (Июль 12, 2019 08:47:37)

Офлайн

#6 Июль 12, 2019 14:23:14

lngvar
Зарегистрирован: 2019-07-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

инжект уже сделан на с++ , он работает и выполняет код от имени таргета.

Вот про GIL я , кстати читал, что нужно его захватить.

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

Отредактировано lngvar (Июль 12, 2019 14:24:02)

Офлайн

#7 Июль 12, 2019 14:53:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

lngvar
Будет лучше, если вы расскажите, какую задачу вообще пытаетесь решить таким изощренным способом.



Офлайн

#8 Июль 12, 2019 15:17:12

lngvar
Зарегистрирован: 2019-07-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

Все довольно примитивно, даже стыдно говорить.
Есть игра, в которой логика сделана на питоне.
Изучал память, не смог найти твердые указатели на нужные мне значения.
Используется там stackless python. В питоне я не разбираюсь, но пишу на С++, и думаю я смогу сам разобраться в нужной мере для меня.
Мне бы хотелось услышать что это действительно возможно, что бы мотивированно начать копаться в питоне. И желательно в двух словах, кокрентное направление.
Уже понял что надо плотно курить GIL .

Офлайн

#9 Июль 12, 2019 21:29:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

lngvar
Мне бы хотелось услышать что это действительно возможно,
Я думаю что для вас это невозможно.
Обосную.
lngvar
Задача :
Путем инжекта dll внедрить свой поток в эту программу
Вы ставите метод решения перед задачей. т.е. имеются проблемки в планировании.

lngvar
Изучал память, не смог найти твердые указатели
Попытка обнаружить статические объекты в питоне в котором в пользовательском коде вообще не бывает статических объектов.
lngvar
1. Получить доступ к полям объектов ( вроде атрибуты в питоне )
2. Иметь возможность выполнять методы
Получается, если я из с++( может вставкой кода питона) захвачу этот GIL
Складывается впечатление что вы воспринимаете поля и методы в стиле C/C++. Если это так то у вас совершенно неправильное представление о предмете с которым вы имеете дело.
lngvar
Уже понял что надо плотно курить GIL .
Вам этого никто не говорил. Вы делаете поспешные выводы.

lngvar
И желательно в двух словах, конкретное направление.
Питон это конечный автомат, которому на вход поступает текст состоящий из команд языка. Достаточно получить доступ к этому потоку и вы получите из питона все что угодно. НО надо учитывать что питон может использовать динамические библиотеки. Можете для простоты считать что они написаны на С. При этом доля питона может варьироваться от все на питоне до одной команды на питоне запустить сишный “main”.



Офлайн

#10 Июль 12, 2019 22:05:15

lngvar
Зарегистрирован: 2019-07-11
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Объекты Python в чужом процессе

doza_and , вы умеете запутать.

Что значит получить доступ к этому потоку ?

Значит инжектом своего потока я не добьюсь своей цели ?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version