fecell Posted October 13, 2015 Share 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 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted October 13, 2015 Share Posted October 13, 2015 (edited) Плюсанул, интересно данный пост как то связан с этим? После вашего сообщения в теме по ссылке так же начал изучать это направление, но знаний и опыта, как и времени учиться нет и скорее всего не будет. А можно ссылку на подтверждение, что ребята из XVM будут использовать *.pyd? Edited October 13, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted October 13, 2015 Author Share Posted October 13, 2015 Плюсанул, интересно данный пост как то связан с этим? После вашего сообщения в теме по ссылке так же начал изучать это направление, но знаний и опыта, как и времени учиться нет и скорее всего не будет. Да, напрямую. Руки так и не дошли заняться, можешь сам попробовать собрать из этого шаблона и того исходника. 'офтоп' А можно ссылку на подтверждение, что ребята из XVM будут использовать *.pyd? 'как-то так' 2 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted October 13, 2015 Share Posted October 13, 2015 (edited) Да, напрямую. Руки так и не дошли заняться, можешь сам попробовать собрать из этого шаблона и того исходника. 'офтоп' 'как-то так' Просто нет слов... P.S. У меня сейчас оочень много работы по оформлению пусковой документации на один объект - думаю не осилю сам :( Edited October 13, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted October 13, 2015 Share Posted October 13, 2015 (edited) Куда кидать PYD файл, чтоб WoT сама его подхватила, и + можно из либы вызывать python функции? Edited October 13, 2015 by BrainRegress @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted October 14, 2015 Author Share Posted October 14, 2015 Куда кидать PYD файл, чтоб WoT сама его подхватила, и + можно из либы вызывать python функции? обновил первый пост. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted October 14, 2015 Share Posted October 14, 2015 Если кому интересен ответ на вопрос - почему спустя 100 лет я таки до сих пор не юзаю эти пиды. То ответ в пункте №0 - метод не универсальный. ЗЫ: fecell, а где можно почитать предысторию, которая сподвигла тебя к публикации данной темы? Мы же все тут знаем, что такие темы на пустом месте не вырастают, где-то поди в каком-то Мордоре битва титанов произошла наверно... а эта тема её отголосок ))))) 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted October 15, 2015 Author Share Posted October 15, 2015 предысторию просто надоело в ЛС одно и тоже писать по сто раз) 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 9, 2015 Share Posted November 9, 2015 (edited) ЗЫ: fecell, а где можно почитать предысторию, которая сподвигла тебя к публикации данной темы? Мы же все тут знаем, что такие темы на пустом месте не вырастают, где-то поди в каком-то Мордоре битва титанов произошла наверно... а эта тема её отголосок ))))) Дык у меня в сообщении есть правильная ссылка. Одна из многих предпосылок к написанию. Если конечно уделят мне внимание... Вопрос если SWIG как интерфейс и GCC как компилятор по этой инструкции можно использовать? Edited November 9, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 9, 2015 Share Posted November 9, 2015 Дык у меня в сообщении есть правильная ссылка. Одна из многих предпосылок к написанию. Если конечно уделят мне внимание... Вопрос если SWIG как интерфейс и GCC как компилятор по этой инструкции можно использовать? Вроде бы, но нет )))) Писать код dll (а она и есть pyd) можно на любом языке, главное предусмотреть базовую функцию, которую вызовет питон и пробросить "правильно" в dll адреса импортируемых функций. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 9, 2015 Share Posted November 9, 2015 (edited) Вроде бы, но нет )))) Писать код dll (а она и есть pyd) можно на любом языке, главное предусмотреть базовую функцию, которую вызовет питон и пробросить "правильно" в dll адреса импортируемых функций. Так мне вроде и надо - из python вызвать вибрацию в геймпаде не вызывая ctypes. Может тогда подскажете "инструкцию для чайника"? P.S. Попробовал код и утилиту из моей темы - под Win10 отработала как надо ;) Edited November 9, 2015 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 9, 2015 Share Posted November 9, 2015 Так мне вроде и надо - из python вызвать вибрацию в геймпаде не вызывая ctypes. Может тогда подскажете "инструкцию для чайника"? P.S. Попробовал код и утилиту из моей темы - под Win10 отработала как надо ;) Нету для чайников, есть через три-пи***ды-колено, а всё благодаря ВГ. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 10, 2015 Share Posted November 10, 2015 Нету для чайников, есть через три-пи***ды-колено, а всё благодаря ВГ. А я попробую, ведь если я правильно понял необходимый функционал мода никаким образом к ВГ не относится, разве что к их реализации python,.. @ Quote Link to comment Short link Share on other sites More sharing options...
lolokoko2009 Posted April 1, 2016 Share Posted April 1, 2016 просто надоело в ЛС одно и тоже писать по сто раз) Добрый день хотел бы с Вами переговорить по поводу возможности создания мода одного но почему то ЛС писать не могу (( подскажите как с Вами связаться? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted July 22, 2016 Share Posted July 22, 2016 Это было сложно, но я смог. @ Quote Link to comment Short link Share on other sites More sharing options...
aks1983 Posted August 3, 2016 Share Posted August 3, 2016 Мало что понял, поэтому вопросы: Из-за чего WoT-клиент не поддерживает загрузку обычных .pyd? Можно ли используя исходники pyd, скажем, Pillow, собрать тот, который загрузится? Можно ли сделать pyd-обёртку, который загрузит обычный модуль pyd? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 3, 2016 Share Posted August 3, 2016 (edited) Можно ли используя исходники pyd, скажем, Pillow, собрать тот, который загрузится?Можно. Можно ли сделать pyd-обёртку, который загрузит обычный модуль pyd?Сделать можно, но займет много времени. Там надо создать экспорт всех Python C API функций. Вопрос - зачем? Из-за чего WoT-клиент не поддерживает загрузку обычных .pyd?В клиенте нет таблицы экспорта функций из питона. Edited August 3, 2016 by ShadowHunterRUS @ Quote Link to comment Short link Share on other sites More sharing options...
Mixaill Posted August 5, 2016 Share Posted August 5, 2016 В клиенте нет таблицы экспорта функций из питона.Лучше сказать по другому: libpython слинкован c WorldOfTanks.exe статически, а не динамически, как этого требуют штатные Python C Extensions. Сделать можно, но займет много времени. Там надо создать экспорт всех Python C API функций. Вопрос - зачем?На самом деле, не сильно много, такое себе медитативное залипалово в IDA. Дошел до 102 функций и надоело. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 5, 2016 Share Posted August 5, 2016 На самом деле, не сильно много, такое себе медитативное залипалово в IDA. Дошел до 102 функций и надоело. Поделитесь наработками? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 5, 2016 Share Posted August 5, 2016 (edited) Поделитесь наработками? https://bitbucket.org/Mixail/xvm.native/ Я там еще 20 функций наковырял... Edited August 5, 2016 by ShadowHunterRUS @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.