Покажем пошагово. Во-первых, вам нужно посмотреть, что находится внутри вашего EXE:
wrestool -l file.exe
Обычно лучшим значком является первый GROUP_ICON, но когда имена GROUP_ICONs представляют собой слова вместо цифр, тогда GROUP_ICON имеет наибольший размер (или второй по величине размер, если первый GROUP_ICON пуст, вам нужно извлечь и).
wrestool -x -t14 -n(GROUP_ICON name) file.exe > file.ico
Если вы хотите создать идеальный код, вам, вероятно, следует также включить язык GROUP_ICON (иногда у исполняемого файла не будет языка (16-битные приложения), поэтому вам нужно будет поместить оба кода):
wrestool -x -t14 -n(GROUP_ICON name) -l(GROUP_ICON language) file.exe > file.ico
В некоторых приложениях извлечение GROUP_ICON завершится неудачно. Это связано с тем, что некоторые новые приложения (например, новые игры) используют GROUP_ICON в качестве ссылки и вставляют настоящие значки в ICON. Затем вам нужно извлечь самый большой ICON с этим кодом:
wrestool -x -R -t3 -n(ICON name) -o. file.exe > file.ico
НО будет БОЛЬШАЯ проблема. Это извлечет ICON, но будет отсутствовать небольшая часть файла, что необходимо для открытия этого файла в формате .ico. Вам нужно будет открыть этот файл в шестнадцатеричном редакторе и вставить в него небольшой шестнадцатеричный код, прежде чем все остальное.
00 00 01 00 01 00 80 80 00 00 01 00 18 00 28 C8 00 00 16 00 00 00
Возможно, теперь вы думаете, что это конец. NO. Приближается худшая часть: извлеките правильную картинку из ICO. Во-первых, вам понадобится не только wrestool, но и icotool. Затем используйте этот код:
icotool -l file.ico
Затем вам нужно извлечь файл с самой большой шириной, высотой и глубиной в битах.
icotool -x -o. -w(Width) -h(Height) -b(Bit-depth) file.ico
Результатом будет файл PNG с идеальной иконкой. Иногда этот код может давать сбой (Пример: программа «Robust Motion Deblurring»), тогда вам потребуется второй собеседник для перехода с ICO на PNG, но в некоторых случаях этот собеседник может выйти из строя (Пример: игра «Mass Effect») , так что вам, вероятно, понадобится оба в вашем коде.
Я однажды использовал эту логику в программе Objective-C, поэтому я знаю, что она функциональна (и до сих пор с 99,9% успеха).