hack のためのネタ帳, etc,,,

状況

PowerPoint の資料にアプリのアイコンを貼りたいので、.exe にリソースとして埋め込まれたアイコンを取り出したい。

解法

.exe resource extract cygwin」でググると、以下のページを見つけた。
曰く、icoutils に収録されてる wrestool がいいですよと。
意外なことに 7z は .exe をアーカイブ扱いしてリソースを extract 出来ますよと。マジか。

これはどちらも Cygwin にも収録されている。

ICON 取り出しの実際

コマンド プロンプト (cmd.exe) について試した結果を以下に示す。
.ico → .png の変換は ImageMagick の convert を使っている。

wrestool の場合

リソースの一覧
$ wrestool /cygdrive/c/WINDOWS/System32/cmd.exe -l
--type='MUI' --name=1 --language=1033 [offset=0x65420 size=216]
--type=3 --name=1 --language=1033 [type=icon offset=0x5d778 size=1640]
--type=3 --name=2 --language=1033 [type=icon offset=0x5dde0 size=744]
--type=3 --name=3 --language=1033 [type=icon offset=0x5e0c8 size=296]
--type=3 --name=4 --language=1033 [type=icon offset=0x5e1f0 size=3752]
--type=3 --name=5 --language=1033 [type=icon offset=0x5f098 size=2216]
--type=3 --name=6 --language=1033 [type=icon offset=0x5f940 size=1384]
--type=3 --name=7 --language=1033 [type=icon offset=0x5fea8 size=5790]
--type=3 --name=8 --language=1033 [type=icon offset=0x61548 size=9640]
--type=3 --name=9 --language=1033 [type=icon offset=0x63af0 size=4264]
--type=3 --name=10 --language=1033 [type=icon offset=0x64b98 size=1128]
--type=14 --name='IDI_APPICON' --language=1033 [type=group_icon offset=0x65000 size=146]
--type=16 --name=1 --language=1033 [type=version offset=0x65098 size=904]
--type=24 --name=1 --language=1033 [offset=0x5d350 size=1064]
グループ アイコン(= type 14) の取り出し
$ wrestool /cygdrive/c/WINDOWS/System32/cmd.exe -x -t14 -o.
$ find . -type f -exec ls -l --time-style="+%F %T" {} +
-rw-r--r-- 1 kou なし 31166 2022-04-07 18:24:36 ./cmd.exe_14_IDI_APPICON.ico
.ico → .png 変換
$ convert -verbose cmd.exe_14_IDI_APPICON.ico cmd.exe_14_IDI_APPICON_%02d.png
PNG:cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON.ico PNG 256x256 256x256+0+0 8-bit sRGB 5790B 0.000u 0:00.004
cmd.exe_14_IDI_APPICON.ico[0] ICO 48x48 48x48+0+0 4-bit sRGB 0.015u 0:00.013
cmd.exe_14_IDI_APPICON.ico[1] ICO 32x32 32x32+0+0 4-bit sRGB 0.015u 0:00.013
cmd.exe_14_IDI_APPICON.ico[2] ICO 16x16 16x16+0+0 4-bit sRGB 0.015u 0:00.012
cmd.exe_14_IDI_APPICON.ico[3] ICO 48x48 48x48+0+0 8-bit sRGB 0.015u 0:00.012
cmd.exe_14_IDI_APPICON.ico[4] ICO 32x32 32x32+0+0 8-bit sRGB 0.015u 0:00.012
cmd.exe_14_IDI_APPICON.ico[5] ICO 16x16 16x16+0+0 8-bit sRGB 0.015u 0:00.012
cmd.exe_14_IDI_APPICON.ico[0] PNG 256x256 256x256+0+0 8-bit sRGB 5790B 0.015u 0:00.004
cmd.exe_14_IDI_APPICON.ico[1] ICO 48x48 48x48+0+0 8-bit sRGB 0.015u 0:00.004
cmd.exe_14_IDI_APPICON.ico[2] ICO 32x32 32x32+0+0 8-bit sRGB 0.015u 0:00.003
cmd.exe_14_IDI_APPICON.ico[3] ICO 16x16 16x16+0+0 8-bit sRGB 31166B 0.000u 0:00.003
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[0] ICO 48x48 48x48+0+0 4-bit sRGB 0.000u 0:00.006
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[1] ICO 32x32 32x32+0+0 4-bit sRGB 0.000u 0:00.008
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[2] ICO 16x16 16x16+0+0 4-bit sRGB 0.000u 0:00.010
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[3] ICO 48x48 48x48+0+0 8-bit sRGB 0.000u 0:00.012
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[4] ICO 32x32 32x32+0+0 8-bit sRGB 0.016u 0:00.014
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[5] ICO 16x16 16x16+0+0 8-bit sRGB 0.016u 0:00.015
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[6] PNG 256x256 256x256+0+0 8-bit sRGB 5790B 0.016u 0:00.027
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[7] ICO 48x48 48x48+0+0 8-bit sRGB 0.032u 0:00.029
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[8] ICO 32x32 32x32+0+0 8-bit sRGB 0.032u 0:00.032
cmd.exe_14_IDI_APPICON.ico=>cmd.exe_14_IDI_APPICON_%02d.png[9] ICO 16x16 16x16+0+0 8-bit sRGB 31166B 0.032u 0:00.033
$ find . -type f -exec ls -l --time-style="+%F %T" {} +
-rw-r--r-- 1 kou なし 31166 2022-04-07 18:47:03 ./cmd.exe_14_IDI_APPICON.ico
-rw-r--r-- 1 kou なし   606 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_00.png
-rw-r--r-- 1 kou なし   462 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_01.png
-rw-r--r-- 1 kou なし   338 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_02.png
-rw-r--r-- 1 kou なし   583 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_03.png
-rw-r--r-- 1 kou なし   545 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_04.png
-rw-r--r-- 1 kou なし   357 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_05.png
-rw-r--r-- 1 kou なし  5914 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_06.png
-rw-r--r-- 1 kou なし   879 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_07.png
-rw-r--r-- 1 kou なし   796 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_08.png
-rw-r--r-- 1 kou なし   357 2022-04-07 18:47:47 ./cmd.exe_14_IDI_APPICON_09.png

7z の場合

リソースの一覧
$ 7z l /cygdrive/c/WINDOWS/System32/cmd.exe

7-Zip [64] 15.14 : Copyright (c) 1999-2015 Igor Pavlov : 2015-12-31
p7zip Version 15.14.1 (locale=ja_JP.UTF-8@cjknarrow,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz (506E3),ASM,AES-NI)

Scanning the drive for archives:
1 file, 289792 bytes (283 KiB)

Listing archive: /cygdrive/c/WINDOWS/System32/cmd.exe

--
Path = /cygdrive/c/WINDOWS/System32/cmd.exe
Type = PE
Physical Size = 289792
CPU = x64
64-bit = +
Characteristics = Executable LargeAddress
Created = 2090-01-16 18:26:43
Headers Size = 1024
Checksum = 316591
Name = Cmd.Exe
Image Size = 421888
Section Alignment = 4096
File Alignment = 512
Code Size = 200704
Initialized Data Size = 201728
Uninitialized Data Size = 0
Linker Version = 14.20
OS Version = 10.0
Image Version = 10.0
Subsystem Version = 10.0
Subsystem = Windows CUI
DLL Characteristics = Relocated NX-Compatible TerminalServerAware 0x4020
Stack Reserve = 1048576
Stack Commit = 1032192
Heap Reserve = 1048576
Heap Commit = 4096
Image Base = 5368709120
Comment = FileVersion: 10.0.19041.746
FileVersion: 10.0.19041.746 (WinBuild.160101.0800)
ProductVersion: 10.0.19041.746
CompanyName: Microsoft Corporation
FileDescription: Windows Command Processor
InternalName: cmd
LegalCopyright: © Microsoft Corporation. All rights reserved.
OriginalFilename: Cmd.Exe
ProductName: Microsoft® Windows® Operating System

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2090-01-16 18:26:43 .....       200441       200704  .text
2090-01-16 18:26:43 .....        42300        42496  .rdata
2090-01-16 18:26:43 .....          512          512  .data
2090-01-16 18:26:43 .....         9012         9216  .pdata
2090-01-16 18:26:43 .....          144          512  .didat
                    .....         1626         1626  .rsrc/version.txt
                    .....          216          216  .rsrc/MUI/1
                    .....         1662         1640  .rsrc/ICON/1.ico
                    .....          766          744  .rsrc/ICON/2.ico
                    .....          318          296  .rsrc/ICON/3.ico
                    .....         3774         3752  .rsrc/ICON/4.ico
                    .....         2238         2216  .rsrc/ICON/5.ico
                    .....         1406         1384  .rsrc/ICON/6.ico
                    .....         5790         5790  .rsrc/ICON/7
                    .....         9662         9640  .rsrc/ICON/8.ico
                    .....         4286         4264  .rsrc/ICON/9.ico
                    .....         1150         1128  .rsrc/ICON/10.ico
                    .....          146          146  .rsrc/GROUP_ICON/IDI_APPICON
                    .....         1064         1064  .rsrc/MANIFEST/1
2090-01-16 18:26:43 .....          780         1024  .reloc
------------------- ----- ------------ ------------  ------------------------
2090-01-16 18:26:43             287293       288370  20 files
アイコンの取り出し
$ 7z x /cygdrive/c/WINDOWS/System32/cmd.exe .rsrc/ICON

7-Zip [64] 15.14 : Copyright (c) 1999-2015 Igor Pavlov : 2015-12-31
p7zip Version 15.14.1 (locale=ja_JP.UTF-8@cjknarrow,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz (506E3),ASM,AES-NI)

Scanning the drive for archives:
1 file, 289792 bytes (283 KiB)

Extracting archive: /cygdrive/c/WINDOWS/System32/cmd.exe
--
Path = /cygdrive/c/WINDOWS/System32/cmd.exe
Type = PE
Physical Size = 289792
CPU = x64
64-bit = +
Characteristics = Executable LargeAddress
Created = 2090-01-16 18:26:43
Headers Size = 1024
Checksum = 316591
Name = Cmd.Exe
Image Size = 421888
Section Alignment = 4096
File Alignment = 512
Code Size = 200704
Initialized Data Size = 201728
Uninitialized Data Size = 0
Linker Version = 14.20
OS Version = 10.0
Image Version = 10.0
Subsystem Version = 10.0
Subsystem = Windows CUI
DLL Characteristics = Relocated NX-Compatible TerminalServerAware 0x4020
Stack Reserve = 1048576
Stack Commit = 1032192
Heap Reserve = 1048576
Heap Commit = 4096
Image Base = 5368709120
Comment = FileVersion: 10.0.19041.746
FileVersion: 10.0.19041.746 (WinBuild.160101.0800)
ProductVersion: 10.0.19041.746
CompanyName: Microsoft Corporation
FileDescription: Windows Command Processor
InternalName: cmd
LegalCopyright: © Microsoft Corporation. All rights reserved.
OriginalFilename: Cmd.Exe
ProductName: Microsoft® Windows® Operating System

Everything is Ok

Files: 10
Size:       31052
Compressed: 289792
$ find . -type f -exec ls -l --time-style="+%F %T" {} +
-rw-r--r-- 1 kou なし 1662 2021-08-23 15:06:55 ./.rsrc/ICON/1.ico
-rw-r--r-- 1 kou なし 1150 2021-08-23 15:06:55 ./.rsrc/ICON/10.ico
-rw-r--r-- 1 kou なし  766 2021-08-23 15:06:55 ./.rsrc/ICON/2.ico
-rw-r--r-- 1 kou なし  318 2021-08-23 15:06:55 ./.rsrc/ICON/3.ico
-rw-r--r-- 1 kou なし 3774 2021-08-23 15:06:55 ./.rsrc/ICON/4.ico
-rw-r--r-- 1 kou なし 2238 2021-08-23 15:06:55 ./.rsrc/ICON/5.ico
-rw-r--r-- 1 kou なし 1406 2021-08-23 15:06:55 ./.rsrc/ICON/6.ico
-rw-r--r-- 1 kou なし 5790 2021-08-23 15:06:55 ./.rsrc/ICON/7
-rw-r--r-- 1 kou なし 9662 2021-08-23 15:06:55 ./.rsrc/ICON/8.ico
-rw-r--r-- 1 kou なし 4286 2021-08-23 15:06:55 ./.rsrc/ICON/9.ico
.ico → .png 変換
$ find . -type f | while read i; do convert -verbose "$i" "${i%.*[a-z]}.png"; done
./.rsrc/ICON/1.ico ICO 48x48 48x48+0+0 4-bit sRGB 1662B 0.000u 0:00.001
./.rsrc/ICON/1.ico=>./.rsrc/ICON/1.png ICO 48x48 48x48+0+0 4-bit sRGB 1662B 0.000u 0:00.002
./.rsrc/ICON/10.ico ICO 16x16 16x16+0+0 8-bit sRGB 1150B 0.000u 0:00.001
./.rsrc/ICON/10.ico=>./.rsrc/ICON/10.png ICO 16x16 16x16+0+0 8-bit sRGB 1150B 0.000u 0:00.002
./.rsrc/ICON/2.ico ICO 32x32 32x32+0+0 4-bit sRGB 766B 0.000u 0:00.001
./.rsrc/ICON/2.ico=>./.rsrc/ICON/2.png ICO 32x32 32x32+0+0 4-bit sRGB 766B 0.000u 0:00.002
./.rsrc/ICON/3.ico ICO 16x16 16x16+0+0 4-bit sRGB 318B 0.000u 0:00.001
./.rsrc/ICON/3.ico=>./.rsrc/ICON/3.png ICO 16x16 16x16+0+0 4-bit sRGB 318B 0.000u 0:00.002
./.rsrc/ICON/4.ico ICO 48x48 48x48+0+0 8-bit sRGB 3774B 0.015u 0:00.001
./.rsrc/ICON/4.ico=>./.rsrc/ICON/4.png ICO 48x48 48x48+0+0 8-bit sRGB 3774B 0.000u 0:00.002
./.rsrc/ICON/5.ico ICO 32x32 32x32+0+0 8-bit sRGB 2238B 0.000u 0:00.002
./.rsrc/ICON/5.ico=>./.rsrc/ICON/5.png ICO 32x32 32x32+0+0 8-bit sRGB 2238B 0.016u 0:00.002
./.rsrc/ICON/6.ico ICO 16x16 16x16+0+0 8-bit sRGB 1406B 0.000u 0:00.001
./.rsrc/ICON/6.ico=>./.rsrc/ICON/6.png ICO 16x16 16x16+0+0 8-bit sRGB 1406B 0.000u 0:00.002
./.rsrc/ICON/7 PNG 256x256 256x256+0+0 8-bit sRGB 5790B 0.000u 0:00.003
./.rsrc/ICON/7=>./.rsrc/ICON/7.png PNG 256x256 256x256+0+0 8-bit sRGB 5790B 0.016u 0:00.010
./.rsrc/ICON/8.ico ICO 48x48 48x48+0+0 8-bit sRGB 9662B 0.000u 0:00.001
./.rsrc/ICON/8.ico=>./.rsrc/ICON/8.png ICO 48x48 48x48+0+0 8-bit sRGB 9662B 0.000u 0:00.003
./.rsrc/ICON/9.ico ICO 32x32 32x32+0+0 8-bit sRGB 4286B 0.016u 0:00.001
./.rsrc/ICON/9.ico=>./.rsrc/ICON/9.png ICO 32x32 32x32+0+0 8-bit sRGB 4286B 0.000u 0:00.003
$ find . -type f -exec ls -l --time-style="+%F %T" {} +
-rw-r--r-- 1 kou なし 1662 2021-08-23 15:06:55 ./.rsrc/ICON/1.ico
-rw-r--r-- 1 kou なし  606 2022-04-07 18:46:05 ./.rsrc/ICON/1.png
-rw-r--r-- 1 kou なし 1150 2021-08-23 15:06:55 ./.rsrc/ICON/10.ico
-rw-r--r-- 1 kou なし  357 2022-04-07 18:46:05 ./.rsrc/ICON/10.png
-rw-r--r-- 1 kou なし  766 2021-08-23 15:06:55 ./.rsrc/ICON/2.ico
-rw-r--r-- 1 kou なし  462 2022-04-07 18:46:05 ./.rsrc/ICON/2.png
-rw-r--r-- 1 kou なし  318 2021-08-23 15:06:55 ./.rsrc/ICON/3.ico
-rw-r--r-- 1 kou なし  338 2022-04-07 18:46:05 ./.rsrc/ICON/3.png
-rw-r--r-- 1 kou なし 3774 2021-08-23 15:06:55 ./.rsrc/ICON/4.ico
-rw-r--r-- 1 kou なし  583 2022-04-07 18:46:05 ./.rsrc/ICON/4.png
-rw-r--r-- 1 kou なし 2238 2021-08-23 15:06:55 ./.rsrc/ICON/5.ico
-rw-r--r-- 1 kou なし  545 2022-04-07 18:46:05 ./.rsrc/ICON/5.png
-rw-r--r-- 1 kou なし 1406 2021-08-23 15:06:55 ./.rsrc/ICON/6.ico
-rw-r--r-- 1 kou なし  357 2022-04-07 18:46:05 ./.rsrc/ICON/6.png
-rw-r--r-- 1 kou なし 5790 2021-08-23 15:06:55 ./.rsrc/ICON/7
-rw-r--r-- 1 kou なし 5914 2022-04-07 18:46:06 ./.rsrc/ICON/7.png
-rw-r--r-- 1 kou なし 9662 2021-08-23 15:06:55 ./.rsrc/ICON/8.ico
-rw-r--r-- 1 kou なし  879 2022-04-07 18:46:06 ./.rsrc/ICON/8.png
-rw-r--r-- 1 kou なし 4286 2021-08-23 15:06:55 ./.rsrc/ICON/9.ico
-rw-r--r-- 1 kou なし  796 2022-04-07 18:46:06 ./.rsrc/ICON/9.png

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます