Перейти к содержанию

darkIT

Пользователь
  • Публикаций

    30
  • Зарегистрирован

  • Посещение

Репутация

70 Excellent

Информация о darkIT

  • Звание
    Rank №2
  1. Спасибо за ссылку. А код выше как раз и использует EnueResourceNamesA Вот кстати рабочая версия кода, ищет ресурсы, удаляет их. Затем дописывает ресурсы из источника PE и вставляет их. У меня успешно сработаботало в 5 из 5 PE файлах. Только, если исходный PE файл имеет несколько VersionInfo с разными языками, то нужно для их удалении передать нужный LanguageIdentifier в UpdateResource, значение взять отсюда xttps://docs.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings В моем случае там только EN_US и RU, потому-что я использую этот скрипт для смены иконки PE файлах [Не смейтесь ;)] которые создает iexpress.exe на Windows RU Spoiler import ctypes import ctypes.wintypes # ctypes functions LoadLibraryEx = ctypes.windll.kernel32.LoadLibraryExW FreeLibrary = ctypes.windll.kernel32.FreeLibrary EnumResourceNames = ctypes.windll.kernel32.EnumResourceNamesA EnumResourceNameCallback = ctypes.WINFUNCTYPE( ctypes.wintypes.BOOL, ctypes.wintypes.HMODULE, ctypes.wintypes.LONG, ctypes.wintypes.LONG, ctypes.wintypes.LONG) FindResource = ctypes.windll.kernel32.FindResourceA LoadResource = ctypes.windll.kernel32.LoadResource FreeResource = ctypes.windll.kernel32.FreeResource SizeofResource = ctypes.windll.kernel32.SizeofResource LockResource = ctypes.windll.kernel32.LockResource UnlockResource = lambda x: None # hehe BeginUpdateResource = ctypes.windll.kernel32.BeginUpdateResourceA EndUpdateResource = ctypes.windll.kernel32.EndUpdateResourceA UpdateResource = ctypes.windll.kernel32.UpdateResourceA GetLastError = ctypes.windll.kernel32.GetLastError # Resource Types RT_ICON = 3 RT_VERSION = 16 RT_GROUP_ICON = RT_ICON 11 # LoadLibrary flags DONT_RESOLVE_DLL_REFERENCES = 0x1 LOAD_LIBRARY_AS_DATAFILE = 0x2 LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20 # Language Identifiers LOCAL_EN_US = 1033 LOCAL_RU = 1049 class ResourceEditor(object): def __init__(self, filename): self.filename = filename def update_resources(self, resources): language = LOCAL_EN_US filename = bytes(self.filename, encoding='utf8') update_handle = BeginUpdateResource(filename, False) for type_, name, data in resources: ret = UpdateResource(update_handle, type_, name, language, data, len(data)) ret = EndUpdateResource(update_handle, False) print(ret) return ret == 1 def delete_resources(self, resources): filename = bytes(self.filename, encoding='utf8') update_handle = BeginUpdateResource(filename, False) for type_, name, data in resources: if type_ == 16: UpdateResource(update_handle, type_, name, LOCAL_EN_US, None, 0) UpdateResource(update_handle, type_, name, LOCAL_RU, None, 0) else: ret = UpdateResource(update_handle, type_, name, LOCAL_EN_US, None, 0) ret = EndUpdateResource(update_handle, False) return ret == 1 def get_resources(self, resource_types): self.module = LoadLibraryEx(self.filename, 0, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE) if self.module == 0: raise Exception("Can't read resources from file %s" % self.filename) manifests = [] def callback(hModule, lpType, lpName, lParam): hResource = FindResource(hModule, lpName, lpType) size = SizeofResource(hModule, hResource) hData = LoadResource(hModule, hResource) try: ptr = LockResource(hData) try: manifests.append((lpType, lpName, ctypes.string_at(ptr, size))) finally: UnlockResource(hData) finally: FreeResource(hData) return True for resource_type in resource_types: EnumResourceNames(self.module, resource_type, EnumResourceNameCallback(callback), None) FreeLibrary(self.module) return manifests def clone_file(source, dest): re_from = ResourceEditor(source) re_to = ResourceEditor(dest) del_resources = [] del_resources = re_to.get_resources([RT_GROUP_ICON, RT_ICON, RT_VERSION]) resources = [] resources = re_from.get_resources([RT_GROUP_ICON, RT_ICON, RT_VERSION]) re_to.delete_resources(del_resources) re_to.update_resources(resources) clone_file("p.exe", "pp.exe") Visual Studio, кстати уже скачивается ;) Может, ребята, посоветуете еще и книженцию по си, чтоб с минимумом воды была и давала базу? А то книг очень много, разных годов. Глаза разбегаются.
  2. Ух, чувак. Ты прямо сейчас ответил на вопрос, который меня мучал последние 2 дня. Я то думаю, почему, например, LoadLibrary аж 4 штуки типа LoadLibraryA, LoadLibraryW, LoadLibraryExW итд. Теперь все стало понятнее) Вообще, я пока разбирался как обращаться к Winapi из питона, сам понял что это муть. Ибо ctypes тоже люди пишут, и многие функцие либо не работают, либо работают некорректно. И легче будет для этих дел попрактиковаться писать на си, и обращаться к winapi напрямую, чем тратить время и нервы на решение проблем и недочетов в ctypes.
  3. UPD: Обнаружил, что функция UpdateResourceA, выдает ошибку 87 только потому, что перед ней функция BeginUpdateResourceA выдает ошибку 2, что в документации msdn значит: ERROR_FILE_NOT_FOUND, а это дает конкретики и упрощает задачу. Проблема решена, в параметрах BeginUpdateResourceA, путь к файлу должен быть представлен в виде строки байтов, вместо обычной строки.
  4. Знаю про pefile, крутая либа. Но через winapi функции BeginUpdateResource, UpdateResource, EndUpdateResource - намного проще. В pefile, можно только побайтово дописать их в секцию, при этом нужно все смещения вручную выставлять, а для этого надо структуру pe файла хорошо знать, а она для меня еще более сложная, чем документация msdn ;) Короче, очень сложно жить. Надо мне не выебываться, а начать писать на си.
  5. Привет. Очень нужна помощь. Сразу скажу - код не мой. Задача: извлечь ресурсы Icon, IconGroup и VersionInfo из одного .exe, и вставить в другой. Spoiler import ctypes import ctypes.wintypes # ctypes functions LoadLibraryEx = ctypes.windll.kernel32.LoadLibraryExW FreeLibrary = ctypes.windll.kernel32.FreeLibrary EnumResourceNames = ctypes.windll.kernel32.EnumResourceNamesA EnumResourceNameCallback = ctypes.WINFUNCTYPE( ctypes.wintypes.BOOL, ctypes.wintypes.HMODULE, ctypes.wintypes.LONG, ctypes.wintypes.LONG, ctypes.wintypes.LONG) FindResource = ctypes.windll.kernel32.FindResourceA LoadResource = ctypes.windll.kernel32.LoadResource FreeResource = ctypes.windll.kernel32.FreeResource SizeofResource = ctypes.windll.kernel32.SizeofResource LockResource = ctypes.windll.kernel32.LockResource UnlockResource = lambda x: None # hehe CloseHandle = ctypes.windll.kernel32.CloseHandle LoadString = ctypes.windll.user32.LoadStringA BeginUpdateResource = ctypes.windll.kernel32.BeginUpdateResourceA EndUpdateResource = ctypes.windll.kernel32.EndUpdateResourceA UpdateResource = ctypes.windll.kernel32.UpdateResourceA GetLastError = ctypes.windll.kernel32.GetLastError # resource types RT_CURSOR = 1 # Hardware-dependent cursor resource. RT_BITMAP = 2 # Bitmap resource. RT_ICON = 3 # Hardware-dependent icon resource. RT_MENU = 4 # Menu resource. RT_DIALOG = 5 # Dialog box. RT_STRING = 6 # String-table entry. RT_FONTDIR = 7 # Font directory resource. RT_FONT = 8 # Font resource. RT_ACCELERATOR = 9 # Accelerator table. RT_RCDATA = 10 # Application-defined resource (raw data.) RT_MESSAGETABLE = 11 # Message-table entry. RT_VERSION = 16 # Version resource. RT_DLGINCLUDE = 17 # Allows a resource editing tool to associate a string with an .rc file. Typically, the string is the name of the header file that provides symbolic names. The resource compiler parses the string but otherwise ignores the value. For example, RT_PLUGPLAY = 19 # Plug and Play resource. RT_VXD = 20 # VXD. RT_ANICURSOR = 21 # Animated cursor. RT_ANIICON = 22 # Animated icon. RT_HTML = 23 # HTML resource. RT_MANIFEST = 24 # Side-by-Side Assembly Manifest. RT_GROUP_CURSOR = RT_CURSOR + 11 # Hardware-independent cursor resource. RT_GROUP_ICON = RT_ICON + 11 # Hardware-independent icon resource. # LoadLibrary flags DONT_RESOLVE_DLL_REFERENCES = 0x1 LOAD_LIBRARY_AS_DATAFILE = 0x2 LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20 # locales # LOCAL_EN_US = 0x0800 LOCAL_EN_US = 1033 class ResourceEditor(object): def __init__(self, filename): self.filename = filename def update_resources(self, resources): language = LOCAL_EN_US update_handle = BeginUpdateResource(self.filename, False) for type, name, data in resources: print(type, name, language, len(data)) ret = UpdateResource(update_handle, type, name, language, data, len(data)) #ВЫЗОВ GetLastError # print(ctypes.windll.kernel32.GetLastError()) ret = EndUpdateResource(update_handle, False) print(ret) return ret == 1 def get_resources(self, resource_types): """Retrieves the manifest(s) embedded in the current executable""" self.module = LoadLibraryEx(self.filename, 0, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE) if self.module == 0: raise Exception("Can't read resources from file %s" % self.filename) manifests = [] def callback(hModule, lpType, lpName, lParam): hResource = FindResource(hModule, lpName, lpType) size = SizeofResource(hModule, hResource) hData = LoadResource(hModule, hResource) try: ptr = LockResource(hData) try: manifests.append((lpType, lpName, ctypes.string_at(ptr, size))) finally: UnlockResource(hData) finally: FreeResource(hData) return True for resource_type in resource_types: EnumResourceNames(self.module, resource_type, EnumResourceNameCallback(callback), None) FreeLibrary(self.module) return manifests def clone_file(source, dest): re_from = ResourceEditor(source) re_to = ResourceEditor(dest) resources = [] resources += re_from.get_resources([RT_GROUP_ICON, RT_ICON, RT_VERSION]) # add the contents of the source file to resource RT_RCDATA 1 # resources += [(RT_RCDATA, 1, open(source, "rb").read())] return re_to.update_resources(resources) clone_file("SOURCE FILE PATH", "DEST FILE PATH") Код не работает, потому-что функция UpdateResourceA возвращает ошибку 87. Я уже понял, что это из за неправильного аргумента, но я не могу найти из за какого конкретно Ведь когда я смотрю документацию, в коде вроде-бы все нормально сделано. Знаю, что не лучшее решение делать все эти вещи на питоне, но это единственный язык которым я умею пользоваться. Если кто-нибудь, обращался к winapi из питона, буду признателен за совет. Не советуйте читать документацию msdn, я уже этим занимаюсь третий день, несмотря на то что, она для меня кажется пугающе сложной.
  6. Друзья. А у меня есть огромная куча доступов к GPU майнинг ригам. Ищу решение, как можно аккуратно использовать 15% от их мощностей в свою пользу.
  7. Пользуюсь уже четвертый месяц. Все отлично, нареканий нет.
  8. Опробовал сей продукт Продажа прошла быстра, продавец почти всегда в сети. Функционал обширный, описанию полностью соответствует. Фильтр логов очень гибкий по куки, паролям, кошелькам, формам итд.. возможность выбирать несколько параметров фильтра - здорово. Панель мне показалась тяжеловата, я бы отказался от дизайна в пользу производительности, но возможно, это лишь потому, что мое сердце, до сих пор, пренадлежит всемилюбимому детищу CrydBrox. Перед использованием тестировал отстук на 5 разных машинах и ОС. 7, 8, 10, Server 2012, Server 2016 Отстучало 5 из 5, что здорово. Единственный и пожалуй, самый неприятный недостаток который я заметил, это факт, что если на машине есть большое количество файлов (для граббера), или если предположительный вес лога будет больше 30мб, то машина не отстукивает. Это очень досадно. Надеюсь что автор софта обратит внимание на этот недостаток. В целом неплохо, желаю успехов в развитии автору.
  9. Initiative Q

    Спойлер
  10. Ботнет. Обсуждение.

    ТС, тебе никто точного ответа никто не даст, на твой вопрос. В 2018 я покупал много инсталлов у ineirino и digital, всего около 250к микса мира. В итоге я сделал абсолютно точный вывод - это все ебучий рандом. Ты можешь купить и отработать 3 раза под ряд по 15 к, и остаться при этом у разбитого корыта. А можешь и окупить. Может же сынок какого-нибудь крупного трейдера захочет скачать читы для майнкрафта на компе отца? Сейчас положениее немного ухудшилось, я так понимаю, из за ужесточения модерации на биржах инсталлы толкают по 100-120 а не по 50-70, а так-же, следует учитывать то, что для крипты сейчас не самые лучшие времена. Лучше всего ориентироваться на окуп инсталлов НЕ криптой, а крипту воспринимать как приятные бонусы.
  11. Куда бы вы уехали (за границу)?

    Я бы ухеал куда-нибудь в Южную Америку на Амазонку, охотился бы, ловил рыбу и пил аяхуаску, как Стинг, и знать не знал бы всей этой перенасыщенной информацией мирской суеты до тех пор, пока не умер бы от какой-нибудь малярии. Но к сожалению, это лишь фантазия :sad:
  12. Скорее всего, это все из за кривого GUI. Используй консольную версию, разобраться в командах - 10 минут. Будет тебе счастье.
  13. Ребята, подскажите годные материалы по SEO, PPC, SMM. Задача: белая раскрутка белого интернет магазина. Я знаю, что Google в помощь, но там очень много информации сомнительной актуальности, к тому-же от разных источников. Если есть какое-нибудь пособие начинающего SEO и работе с Adwords, быть может книга, или еще лучше - методичка. Где вся информация и советы структурированны. Знаю что в этом ремесле, актуальную информацию найти очень сложно. Но наверняка есть базовые, актуальные вещи, которые нужно знать. Буду рад услышать совет человека с опытом.
  14. Работаю с ТС уже более 6 месяцев, за это время не было никаких проблем. Рекомендую
  15. Регулярно беру у ТС инсталы, взял всего уже около 15к. Все отлично, рекомендую.
×