fecell 125 Posted October 13, 2015 (edited) Итак: 0. Предварительно ищем точку входа в нужную функцию (ida в помощь, или гуглите смещения в интернете) 1. Имея точку входа и несколько версий exe-файла определяем действительную сигнатуру (шаблон+маска) сравнивая последовательности из разных файлов. char *wotPy_InitModule4_tmpl = "\x55\x8B\xEC\x81\xEC\x14\x02\x00\x00\xA1\x00\x00\x00\x00\x33\xC5\x89\x45\xFC\x8B\x45\x10\x53"; char *wotPy_InitModule4_mask = "xxxxxxxxxx????xxxxxxxxx"; 2. По сигнатуре ищем точку входа, она должна совпадать с найденной вручную в нулевом этапе разработки. DWORD wotPy_InitModule4_addr = FindPattern(wotPy_InitModule4_tmpl, wotPy_InitModule4_mask); 3. Объявляем тип, соответствующий оригинальному объявлению функции в питоне. typedef PyAPI_FUNC(PyObject *) Py_InitModule4_def(char *, PyMethodDef *, char *, PyObject *, int); 4. Объявляем функцию с типом и адресом подготовленными на этапах 2 и 3. Py_InitModule4_def* wotPy_InitModule4 = (Py_InitModule4_def*)wotPy_InitModule4_addr; 5. Переопределяем оригинальную функцию питона на созданную в 4 этапе #define Py_InitModule4(name, methods, doc, passthrough, module_api_version) wotPy_InitModule4(name, methods, doc, passthrough, module_api_version) Во вложении пример исходника пида для прямой работы с памятью в World Of Tanks. Если в исходнике CONSOLE_VER1 переименовать в CONSOLE_VER, то пид будет собран для консоли, если оставить как есть - для танков. Пример использования пида: def do_show(): import imp try: import BigWorld mem_helper = imp.load_dynamic('mem_helper', 'res_mods/mem_helper.pyd') except: mem_helper = imp.load_dynamic('mem_helper', 'mem_helper.pyd') print mem_helper.__doc__ orig = 'ABCDEF' print 'orig =', orig orig_addr = id(orig) + ''.__sizeof__() - 1 print 'orig_addr =', orig_addr new_val = '\1\0' + '34' + '\0\1' print 'new_val = %s (%s)' % (new_val, repr(new_val)) print res = mem_helper.write(orig_addr, new_val) print "mem_helper.write(%s, '%s') = %s " % (orig_addr, new_val, res) print 'new orig = %s' % orig print res = mem_helper.read(orig_addr, len(orig)) print "mem_helper.read(%s, %s) = '%s'" % (orig_addr, len(orig), res) print res = mem_helper.find('MZZ', 'xx?') print "mem_helper.find('MZZ', 'xx?') = %s" % res res1 = mem_helper.read(res, 3) print "mem_helper.read(%s, 3) = '%s'" % (res, res1) try: import BigWorld except: print "\npress CTRL+C or CTRL+BREAK" while 1 : pass do_show() При использовании любого материала из данного поста указывайте автора! WBW / fecell / lelicopter. зы: Далее в теме ответов и комментариев вероятней всего не будет. Вопросы сотрудничества обсуждаемы в ЛС. psps: без этих людей не возник бы этот шаблон - squadteam, Makct, Dr. Webber, mercger, kastiil, Sharmatov upd: - обновлено для 9.16 - в исходник добавлен код для назначения __doc__ для пида (print mem_helper.__doc__). ~mem_helper.pyd.rar Edited October 30, 2016 by fecell 15 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #294971 Posted October 13, 2015 (edited) Плюсанул, интересно данный пост как то связан с этим? После вашего сообщения в теме по ссылке так же начал изучать это направление, но знаний и опыта, как и времени учиться нет и скорее всего не будет. А можно ссылку на подтверждение, что ребята из XVM будут использовать *.pyd? Edited October 13, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
fecell 125 #295059 Posted October 13, 2015 Плюсанул, интересно данный пост как то связан с этим? После вашего сообщения в теме по ссылке так же начал изучать это направление, но знаний и опыта, как и времени учиться нет и скорее всего не будет. Да, напрямую. Руки так и не дошли заняться, можешь сам попробовать собрать из этого шаблона и того исходника. 'офтоп' А можно ссылку на подтверждение, что ребята из XVM будут использовать *.pyd? 'как-то так' 2 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #295061 Posted October 13, 2015 (edited) Да, напрямую. Руки так и не дошли заняться, можешь сам попробовать собрать из этого шаблона и того исходника. 'офтоп' 'как-то так' Просто нет слов... P.S. У меня сейчас оочень много работы по оформлению пусковой документации на один объект - думаю не осилю сам :( Edited October 13, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
PinkElfant 25 #295107 Posted October 13, 2015 (edited) Куда кидать PYD файл, чтоб WoT сама его подхватила, и + можно из либы вызывать python функции? Edited October 13, 2015 by BrainRegress Quote Share this post Link to post Short link Share on other sites
fecell 125 #295118 Posted October 14, 2015 Куда кидать PYD файл, чтоб WoT сама его подхватила, и + можно из либы вызывать python функции? обновил первый пост. 1 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #295235 Posted October 14, 2015 Если кому интересен ответ на вопрос - почему спустя 100 лет я таки до сих пор не юзаю эти пиды. То ответ в пункте №0 - метод не универсальный. ЗЫ: fecell, а где можно почитать предысторию, которая сподвигла тебя к публикации данной темы? Мы же все тут знаем, что такие темы на пустом месте не вырастают, где-то поди в каком-то Мордоре битва титанов произошла наверно... а эта тема её отголосок ))))) 1 1 Quote Share this post Link to post Short link Share on other sites
fecell 125 #295271 Posted October 15, 2015 предысторию просто надоело в ЛС одно и тоже писать по сто раз) 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #298164 Posted November 9, 2015 (edited) ЗЫ: fecell, а где можно почитать предысторию, которая сподвигла тебя к публикации данной темы? Мы же все тут знаем, что такие темы на пустом месте не вырастают, где-то поди в каком-то Мордоре битва титанов произошла наверно... а эта тема её отголосок ))))) Дык у меня в сообщении есть правильная ссылка. Одна из многих предпосылок к написанию. Если конечно уделят мне внимание... Вопрос если SWIG как интерфейс и GCC как компилятор по этой инструкции можно использовать? Edited November 9, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #298206 Posted November 9, 2015 Дык у меня в сообщении есть правильная ссылка. Одна из многих предпосылок к написанию. Если конечно уделят мне внимание... Вопрос если SWIG как интерфейс и GCC как компилятор по этой инструкции можно использовать? Вроде бы, но нет )))) Писать код dll (а она и есть pyd) можно на любом языке, главное предусмотреть базовую функцию, которую вызовет питон и пробросить "правильно" в dll адреса импортируемых функций. Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #298207 Posted November 9, 2015 (edited) Вроде бы, но нет )))) Писать код dll (а она и есть pyd) можно на любом языке, главное предусмотреть базовую функцию, которую вызовет питон и пробросить "правильно" в dll адреса импортируемых функций. Так мне вроде и надо - из python вызвать вибрацию в геймпаде не вызывая ctypes. Может тогда подскажете "инструкцию для чайника"? P.S. Попробовал код и утилиту из моей темы - под Win10 отработала как надо ;) Edited November 9, 2015 by kharlashkin Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #298210 Posted November 9, 2015 Так мне вроде и надо - из python вызвать вибрацию в геймпаде не вызывая ctypes. Может тогда подскажете "инструкцию для чайника"? P.S. Попробовал код и утилиту из моей темы - под Win10 отработала как надо ;) Нету для чайников, есть через три-пи***ды-колено, а всё благодаря ВГ. Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #298233 Posted November 10, 2015 Нету для чайников, есть через три-пи***ды-колено, а всё благодаря ВГ. А я попробую, ведь если я правильно понял необходимый функционал мода никаким образом к ВГ не относится, разве что к их реализации python,.. Quote Share this post Link to post Short link Share on other sites
lolokoko2009 1 #322321 Posted April 1, 2016 просто надоело в ЛС одно и тоже писать по сто раз) Добрый день хотел бы с Вами переговорить по поводу возможности создания мода одного но почему то ЛС писать не могу (( подскажите как с Вами связаться? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #337903 Posted July 22, 2016 Это было сложно, но я смог. Quote Share this post Link to post Short link Share on other sites
aks1983 19 #342141 Posted August 3, 2016 Мало что понял, поэтому вопросы: Из-за чего WoT-клиент не поддерживает загрузку обычных .pyd? Можно ли используя исходники pyd, скажем, Pillow, собрать тот, который загрузится? Можно ли сделать pyd-обёртку, который загрузит обычный модуль pyd? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #342145 Posted August 3, 2016 (edited) Можно ли используя исходники pyd, скажем, Pillow, собрать тот, который загрузится?Можно. Можно ли сделать pyd-обёртку, который загрузит обычный модуль pyd?Сделать можно, но займет много времени. Там надо создать экспорт всех Python C API функций. Вопрос - зачем? Из-за чего WoT-клиент не поддерживает загрузку обычных .pyd?В клиенте нет таблицы экспорта функций из питона. Edited August 3, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #342944 Posted August 5, 2016 В клиенте нет таблицы экспорта функций из питона.Лучше сказать по другому: libpython слинкован c WorldOfTanks.exe статически, а не динамически, как этого требуют штатные Python C Extensions. Сделать можно, но займет много времени. Там надо создать экспорт всех Python C API функций. Вопрос - зачем?На самом деле, не сильно много, такое себе медитативное залипалово в IDA. Дошел до 102 функций и надоело. Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #342947 Posted August 5, 2016 На самом деле, не сильно много, такое себе медитативное залипалово в IDA. Дошел до 102 функций и надоело. Поделитесь наработками? Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #342953 Posted August 5, 2016 (edited) Поделитесь наработками? https://bitbucket.org/Mixail/xvm.native/ Я там еще 20 функций наковырял... Edited August 5, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites