找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 310274|回复: 63

[文件管理] 批处理版chm文件反编译器V1.3[20100409]

[复制链接]
发表于 2007-12-27 22:41:06 | 显示全部楼层 |阅读模式

____________________________版主提醒____________________________

  为了避免影响技术讨论、提高看帖的舒适性,请大家不要在此帖下跟
无实质内容的口水帖,特别是纯顶、纯支持、纯感谢、路过之类的帖子,
管理人员将不定期清理此类回帖,请大家多参与讨论少灌水,与人方便,
终将给自己带来方便,谢谢合作。
________________________________________________________________


  你手头是否有几本chm格式的电子书?你是否有过满世界搜索反编译chm软件的痛苦经历?你是否抱怨过这些软件有这样或那样的限制?然而,你是否意识到,就在你的系统里,微软已经为你准备好了小巧而强悍的反编译程序?

  没错,微软已经为各位准备好了这样的软件,它就是各位双击chm文件时系统默认调用的hh.exe!我没有开玩笑,hh.exe这个毫不起眼的家伙,除了是个默默无闻的chm文件阅览器之外,还是个现成的chm文件反编译器!只是这个反编译器的调用参数一直未见微软公布,网上偶尔见到只言片语,也未引起大家的足够重视,因此它一直是大隐隐于市。

  不过,hh.exe要成为我们手里的反编译利器,光靠一条简陋的命令是不够的,它还需要各位的反复测试、耐心打磨。现奉上本人草就的代码,只做了一些主要的功能,尚未做界面的美化,请各位测试。
  1. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. :: chm文件反编译器 V1.3
  3. :: code by namejm 2007.12.27~2010.4.9 bbs.bathome.net CMD@XP
  4. ::
  5. :: 功能:
  6. ::   单个/批量反编译chm文件,并保持资源的原始结构。
  7. :: 使用方式有两种:
  8. ::     ① 把单个或多个文件直接拖放到本程序。
  9. ::     ② 直接双击运行。此时处理的是当前目录下所有以.chm为后缀的文件
  10. :: 执行过程及处理效果:
  11. ::   因为 hh -decompile 语句不能使用引号,所以,先把原始资源释放到
  12. :: 短文件名格式的文件夹中,释放完毕后再改名;
  13. ::   两种执行方式都有简单的容错处理;反编译后的资源放在单独的文件夹
  14. :: 中,此文件夹位于当前目录,并以chm文件名命名。
  15. ::  无法识别不以.chm为后缀名的chm文件,但是可以识别以.chm为后缀名
  16. ::的其他文件(貌似有点拗口^_^)
  17. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  18. @echo off
  19. set TT=chm文件反编译器 1.3
  20. echo.&echo.&echo     正在反编译CHM文件,请稍候...
  21. cd /d "%~dp0"
  22. :: 以拖动文件到批处理文件上的方式运行批处理时,%cd% 的值将会强制转换为
  23. :: %homepath%,因此,上一条语句非常关键!
  24. set "destination=chm文件反编译结果"
  25. for /f "delims=" %%i in ("%destination%") do set "destination_short=%%~sfi"
  26. md "%destination%" 2>nul
  27. del /a /f "%destination%\伪chm文件列表.txt" 2>nul
  28. if "%~1"=="" goto All

  29. :Some
  30. set str=%*
  31. set "str=%str:"=%"
  32. set "str= %str%"
  33. call set "str=%%str: %~d1=" "%~d1%%"
  34. for %%i in ("%str%") do (
  35.     if not %%i=="" (
  36.         title %TT%-正在处理"%%~nxi"
  37.         if /i not "%%~xi"==".chm" (
  38.             echo.&echo     "%%~nxi"不是chm文件
  39.             echo.&echo     请按任意键继续...
  40.             pause>nul
  41.             cls
  42.             echo.&echo.&echo     正在反编译CHM文件,请稍候...
  43.         ) else (
  44.             rd /q /s "%%~ni" 2>nul
  45.             hh -decompile %destination_short%\%%~sni %%~sfi
  46.             if not exist "%destination%\%%~sni" (
  47.                 echo "%%~nxi">>"%destination%\伪chm文件列表.txt"
  48.             ) else (
  49.                 ren "%destination%\%%~sni" "%%~ni" 2>nul
  50.             )
  51.         )
  52.     )
  53. )
  54. exit

  55. :All
  56. for /f "delims=" %%i in ('dir /a-d /b *.chm 2^>nul') do (
  57.     title %TT%-正在处理"%%~nxi"
  58.     rd /q /s "%destination%\%%~ni" 2>nul
  59.     hh -decompile %destination_short%\%%~sni %%~sfi
  60.     if not exist "%destination%\%%~sni" (
  61.         echo "%%~nxi">>"%destination%\伪chm文件列表.txt"
  62.     ) else (
  63.         ren "%destination%\%%~sni" "%%~ni" 2>nul
  64.     )
  65. )
复制代码
更新历史:
  1. 2010.4.9
  2.   把反编译后的资源统一存放在指定的目录下,不再与cmd文件位于同一
  3. 目录下;
  4.   修改了几处错误:
  5.   1、当把文件拖曳到cmd窗口时,能兼容绝大多数特殊情况,比如等号、
  6. 分号、&;唯有两种情况无法处理:当路径中带&而没有任何空格时;当路径
  7. 中存在^符号时;但是,双击运行时不受任何特殊字符的影响;
  8.   2、当拖曳过来的文件与cmd文件不在同一目录下时也能正确处理;
  9.   此为1.3版;
  10. 2008.3.13
  11.   生成的文件夹与CHM文件名保持一致,无须对特殊字符再做任何替换;
  12. 感谢 随风 的提醒;此为1.2版;
  13. 2008.1.27
  14.   增添了反编译多个指定CHM文件的功能;修正了不兼容文件名中带^的
  15. 错误;修改了部分提示信息;此为1.1版;
  16. 2008.1.8
  17.   不再把文件名中的&强制改为&,但是,文件名中的空格仍然没法不去掉
  18. 2007.12.27
  19.   初始版本1.0发布
复制代码

评分

参与人数 5PB +28 技术 +2 收起 理由
lvzhu + 1 支持原创
zcydez + 1 NB啊
smilediao + 10 真是佩服得5体投地!
foxJL + 10 原创内容
youxi01 + 8

查看全部评分

发表于 2007-12-27 23:32:24 | 显示全部楼层
厉害呀..又是一个新发现.
发表于 2007-12-29 17:20:05 | 显示全部楼层
说心理话,对hh.exe没研究过...
发表于 2007-12-29 18:34:41 | 显示全部楼层
hh d:
可以打开相应的盘,又发现了一种打开磁盘的方法,呵呵..
发表于 2008-1-1 18:29:58 | 显示全部楼层
好帖顶起来!!
想读大学那阵,还到处找破解软件,原来幸福就在身边,哈哈
发表于 2008-1-5 15:41:35 | 显示全部楼层
好强 ...     HH.exe也可以这么用..
发表于 2008-1-15 23:36:17 | 显示全部楼层
强~~~~········
发表于 2008-2-16 14:29:57 | 显示全部楼层
大开眼界!!

hh d:
可以打开相应的盘,又发现了一种打开磁盘的方法,呵呵..
发表于 2008-2-22 11:02:55 | 显示全部楼层
试了下
十分佩服阁下的才学,不禁要注册进来回个帖顶下
bb另外要向你好好学习,望不伶赐教
发表于 2008-2-28 21:58:33 | 显示全部楼层
好东西````哈哈``HH.EXE也可以这样用``太强了``
发表于 2008-3-3 12:48:30 | 显示全部楼层
为什么要反编译呢   反编译后有什么效果呢
 楼主| 发表于 2008-3-12 23:25:33 | 显示全部楼层
  反编译是为了提取其中有用的资源,或是修改其中的错误而重新制作成chm文件。

  反编译后的效果我在代码里已经说明了:单个/批量反编译chm文件,并保持资源的原始结构。
发表于 2008-3-13 00:05:40 | 显示全部楼层
不懂,反编译就是把chm文件改为txt文件吗?
 楼主| 发表于 2008-3-13 00:12:56 | 显示全部楼层
  chm文件其实是把各种格式的文件打包而成的,主要是网页文件,打包的过程有点像用WinRAR压缩文件的过程,是把一大堆文件打包成一个文件;而反编译的过程类似WinRAR的解压,反编译的过程并不是更改文件格式的过程,而是把"壳"去掉,从中释放出原始资源。
发表于 2008-3-13 01:14:32 | 显示全部楼层
原来如此,
但我测试可以使用短文件名啊?!!!

测试方法:
@echo off
for %%a in (*.chm) do (
hh -decompile %%~sna %%~snxa
)
pause





....

[ 本帖最后由 随风 于 2008-3-13 01:20 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:04 , Processed in 0.027704 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表