Блог технического писателя Ильи Жукова

Декомпиляция CHM-файла

Файл в формате CHM представляет собой скомпилированный HTML. В него могут входить HTML-страницы, рисунки, таблицы стилей, скрипты и другие файлы. Подробное описание состава CHM смотрите в материале Формат HTML Help. Результирующий файл в формате CHM не редактируется. Отредактировать можно только файлы, входящие в его состав. Извлечь файлы или декомпилировать CHM можно при помощи бесплатной программы HTML Help Workshop.

 

Чтобы декомпилировать выбранный для примера файл api.chm:

  1. На локальном диске, например на диске С, создайте папку для работы test и в ней подпапку decompiled.
  2. Скопируйте файл chm в папку test.
  3. Запустите HTML Help Workshop.
  4. Выберите File / Decompile.

команда декомпиляции

  1. В окне Decompile .CHM file: нажмите на кнопку Browse справа от поля Destination folder и выберите папку decompiled.
  2. В поле Compiled help file: аналогичным образом выберите файл chm.

параметры декомпиляции

  1. Нажмите на кнопку ОК. На экран будет выведено сообщение о том, что 64 файла извлечено из файла chm.

Это именно те файлы, которые мы будем редактировать. Рассмотрим их подробнее:

  • CSS-файлы содержат таблицы стилей, определяющих внешний вид контента справки;
  • Рисунки в формате GIF — это скриншоты и другие рисунки, использованные в CHM-файле;
  • HTM-файлы соответствуют страницам разделов справки содержат текст, ссылки на рисунки, скрипты и т.д.
  • файл api.hhc содержит оглавление справки;
  • файл api.hhk содержит ключевые слова.

декомпилированные файлы

  1. Откройте в Проводнике папку C:\test\decompiled и найдите в ней .htm-файл, который соответствует разделу справки, открываемому по умолчанию при запуске chm. Это файл ov_main.htm.

 

Важно! Обратите внимание на то, что в содержании api.chm нет ссылки для открытия раздела из файла ov_main.htm. Это раздел справки, который открывается по умолчанию при запуске CHM-файла. Его можно также открыть при помощи кнопки Домой.

На этом декомпиляция CHM-файла завершена. Далее необходимо научиться собирать новый CHM-файл с функционалом, аналогичным оригиналу. Дело в том, что во время редактирования нужно будет периодически собирать CHM, чтобы в случае возникновения ошибок их было проще и быстрее найти. О том, как собрать новый CHM из полученных файлов, речь пойдет в следующем материале Создание и настройка проекта в HTML Help Workshop.

 

Добавить комментарий

Комментарии  

Ирина
# +1 Ирина 17.01.2019 15:35
Илья, здравствуйте!
Возможно, стоит добавить, что после декомпиляции и повторной сборки chm-файла теряется информация о контекстных вызовах справки. То есть, если chm-файл был частью какого-либо приложения и при работе в этом приложении по F1 открывались определенные страницы справки, то после процедуры редактирования справка будет везде открываться на первой странице (при условии, конечно, что ее назвали прежним именем и положили в прежнее место).
Или я не права и как-то можно при декомпиляции получить сведения, содержавшиеся в разделе MAP?
Ответить Ответить с цитатой Цитировать
Илья Жуков
# 0 Илья Жуков 18.01.2019 18:43
Ирина, здравствуйте! Вы правы: во время декомпиляции часть данных из CHM-файла, в т.ч. информация о контекстных вызовах справки, теряется. Во время декомпиляции из CHM не извлекаются служебные файлы. Полный список файлов из CHM можно посмотреть, например, при помощи 7-Zip. Данные о контекстных вызовах формируются из разделов .hhp --- [MAP] #define IDH_DefaultPage 1000 и [ALIAS] IDH_DefaultPage=ov_main.htm. --- и содержатся в служебном файле #IVB в виде 1000 = ov_main.htm. Извлекать такие данные из CHM и воссоздавать файл проекта .hhp умеют программы KeyTools (бесплатная) и CHMDecompiler (платная). Но в пересобранном из такого проекта CHM данных о контекстных вызовах не будет. Данные из разделов [MAP] и [ALIAS] можно получить во время декомпиляции, если в сборку исходного CHM-файла был включен файл проекта .hhp. Он не является служебным и будет декомпилирован вместе с остальными файлами описанным в статье способом.
Ответить Ответить с цитатой Цитировать
Ирина
# -1 Ирина 23.01.2019 14:18
Спасибо, Илья, очень интересно!
Я знала, что chm можно открыть архиватором, но не знала, что это за служебные файлы, начинающиеся с решетки. Правда, мой #IVB нечитаемый получился((
Ответить Ответить с цитатой Цитировать
Илья Жуков
# 0 Илья Жуков 24.01.2019 10:12
Часть служебных файлов из CHM можно прочитать при помощи программы KeyTools (разработчики Ralph Walden и Cheryl Lockett Zubak). Для просмотра файлов, входящих в состав CHM, без декомпиляции выберите Tools \ Examine CHM File. Файлы: #IDXHDR – количество узлов разделов; #IVB – данные контекстных вызовов; #SYSTEM – большая часть данных из файла проекта .HHP; #TOPICS – заголовки и URL разделов; #WINDOWS – определения использованных типов окон и другие файлы.
Ответить Ответить с цитатой Цитировать
Ирина
# +1 Ирина 30.01.2019 17:16
Спасибо еще раз, Илья. Собственно, пока у меня нет такой задачи, но на всякий случай приму к сведению.
Ответить Ответить с цитатой Цитировать
Владимир
# 0 Владимир 03.11.2021 15:23
Здравствуйте Илья.
Объясните, пожалуйста, непонятную для меня вещь. Речь идет о chm-файлах обычной справки программ. Если декомпилировать chm файл, получим: несколько папок (одна из них lib с изображениями), ряд файлов html, ряд изображений.
Проблема в следующем:
Справки прекрасно открываются на Windows 7 Enterprise x32, Internet Explorer 8, а вот на Windows 7 Enterprise x64, Internet Explorer 11 справки открываются, но те изображения, которые находятся после html файлов, не отображаются - вместо них квадратик с крестиком (или что-то в этом роде). Причем все изображения, находящиеся в папке lib отображаются без проблем.
Спасибо.
PS Объясните, пожалуйста, попроще – я в этом почти полный НОЛЬ. Если не затруднит – ответ отправьте на .
Ответить Ответить с цитатой Цитировать
Илья Жуков
# 0 Илья Жуков 01.02.2026 12:20
Здравствуйте. IE 11 более требователен к формату ссылок, чем IE8. «Квадратик с крестиком» - файл по ссылке не найден. Нужно посмотреть в коде HTML-файлов ссылки + куда распаковались во время декомпиляции файлы, на которые указывают ссылки. Дальше либо поправить ссылки, либо переместить файлы.
Ответить Ответить с цитатой Цитировать

Все о справке и документации для пользователей!

Следить за новыми статьями: