CHEMCAD帮助文件汉化.doc

上传人:jian****018 文档编号:9362496 上传时间:2020-04-05 格式:DOC 页数:5 大小:122KB
返回 下载 相关 举报
CHEMCAD帮助文件汉化.doc_第1页
第1页 / 共5页
CHEMCAD帮助文件汉化.doc_第2页
第2页 / 共5页
CHEMCAD帮助文件汉化.doc_第3页
第3页 / 共5页
点击查看更多>>
资源描述
CHEMCAD的汉化及其帮助文件在线功能的恢复戴 斌徐 宏1(南京化工职业技术学院化学工程系南京 210048)摘要:本文介绍了CHEMCAD的汉化技术及其帮助文件在线功能恢复,探索出了一条CHM格式帮助文件汉化后恢复在线帮助功能的技术路线:使用Microsoft HtlmHelp Workshop反编译原帮助文件,翻译网页格式的帮助文档,使用反向工程工具IDA pro或OllyDbg追踪出原帮助文件的帮助主题ID,重新编写预定义别名和ID的头文件,连同汉化后的网页,重新使用Microsoft HtlmHelp Workshop编译成CHM格式的帮助文件,即可恢复汉化后帮助文件的在线帮助功能。关键词 汉化在线帮助反向工程CHEMCADIDA proOllyDbgLocation of CHEMCAD and Recovery of Its On-line Help FunctionDai Bin1 Xu Hong1 1(Department of Chemical Engineering, NanJing College of Chemical Technology, 210048,China) Abstract: A technical route about recovering the function of on-line help which is chm format file after it is localized is explored: first, using Microsoft HtlmHelp Workshop to decompile the original help file and then translating the web pages; second, using reverse engineering tool, IDA pro or OllyDbg, to trace the help topic ID of original file; finally, rewriting the alias and ID in the header file, along with the localized web pages, to be compiled into chm format help file by Microsoft HtlmHelp Workshop again. So the on-line help function is restored after location. Key words: Localizion on-line help reverse engineering CHEMCADIDA proOllyDbg0 引言 化工流程模拟软件CHEMCAD作为辅助教学软件被引入到课程教学中,极大的提高师生专业知识融会贯通和应用能力;但是CHEMCAD一直是英文版的,这使得只有既懂化工流程模拟的原理又具有很强的英语水平的人才能正常的学习和使用它。随着化工生产要求的进一步提高,对化工流程模拟软件的使用普及是大势所趋,然而具有大量专业词汇的流程模拟软件对广大非英语语种的工程师及高职层次的学生来说,是一个难以逾越的障碍。英文软件的汉化,网上有不少资源介绍,笔者也是在学习了这些资料后,汉化了CHEMCAD;采用的技术如下:使用SDL Passolo 汉化CHEMCAD的主窗口和菜单,使用CHEMCAD自身的二次开发工具如Dialog Editor汉化各个单元操作设备的窗口,汉化如ctalk.xml、ctalk.msg等的外挂文件,这些文件主要用于显示消息框和结果报表,针对结果报表中的中文乱码,使用UltraEdit32修改CHEMCAD中相关动态链接库文件中有关字体字号的反汇编代码,汉化帮助文件。使用Wise Installation System制作中英文版的补丁包。但是当笔者汉化了帮助文件之后,却发现无法实现其原有的在线帮助功能,着实是一个很大的遗憾,网络上也鲜有解决此问题的帖子。下面就以笔者汉化的帮助文件CC6.CHM为例,讨论一下以在线帮助功能实现机制为基础,应用反向工程来恢复在线帮助功能的技术路线。1 研究方法与实现1.1 选用编译和反编译CHM格式帮助文件的软件反编译帮助文件,可以将帮助文件的各个章节离解成一个个的网页文件,然后逐个翻译即可;翻译好的网页再通过编译,制作成帮助文件。编译和反编译CHM格式帮助文件的软件有很多,但是考虑到今后在线功能的恢复,最好是用Microsoft HtlmHelp Workshop,因为它可以提供映射表的制作,这是实现在线功能所必须的步骤。1.2 Htmlhelp帮助系统的接口收稿日期: 2011-12-28。作者简介:戴斌,硕士,讲师,主研领域:化工流程模拟与优化。调用CHM格式的帮助文件需要用HtmlHelpAPI函数HtmlHelp(),这个函数驻留在HtmlHelp ActiveX控件Hhctrl.ocx中1。函数HtmlHelp()语法如下2:HWND HtmlHelp(HWND hwndCaller, LPCSTR pszFile, UNIT uCommand, DWORD dwData)参数hwndCaller为调用HtmlHelp()的窗口句柄,pszFile为文件、URL,或是经过编译的帮助文件的路径,uCommand指定了要执行的动作,dwData是uCommand所需要的参数。1.3 实现在线帮助的机制3,4所谓在线帮助,就是当应用程序弹出某一个人机交互窗口的情况下,按下F1键,将直接弹出该窗口所对应的帮助页面。例如在CHEMCAD中,双击流程图中某一个单元设备图标,弹出该设备操作参数窗口,点击该窗口左下方的帮助按钮,或按F1,即可调出帮助文件CC6.CHM所对应的该设备的帮助页面。要实现程序的在线帮助,从MFC提供的帮助函数来看,要直接调用HTMLHelp,则需要提供给按钮“帮助”一个执行函数。使用ClassWizard增加按钮“帮助”的单击消息处理函数。以CHEMCAD中“简捷精馏塔”的窗口实现在线帮助为例,“帮助”按钮单击消息处理代码可能如下:ON_BN_CLICKED(ID_HELP, OnHelp)void CVchelpDlg:OnHelp()/ TODO: Add your control notification handler code hereHtmlHelp(NULL, cc6.chm, HH_HELP_CONTEXT,3002); 上述HtmlHelp函数中的 3002这个数值,就是程序员为“简捷精馏塔”的在线帮助页面指定的帮助主题ID。大型的帮助文件通常包含许多在线帮助页面,程序员分别为它们分配一个唯一的ID,并编写一个.h格式的头文件,预定义在线帮助页面的别名和ID;没有这样的头文件就无法实现在线帮助功能。1.4 恢复在线帮助的功能要想恢复汉化后帮助文件的在线帮助功能,关键是获得预定义在线帮助页面的别名和ID的头文件,如果程序的作者不能直接提供给你,那就只能通过反向工程跟踪主程序调用HtmlHelp函数的动态过程。笔者主要使用了汇编级工具IDA pro和OllyDbg,前者以静态分析分析为主,后者以动态跟踪分析为主5。通过对调用函数HtmlHelp()实现在线帮助功能的机制分析可知,函数的第一个参数NULL;函数的第二个参数是文件名 “*.CHM”;第三个参数是HH_HELP_CONTEXT,这个参数在Microsoft HtlmHelp Workshop文件夹下的“HtmlHelp.h”头文件中被预定义为0F,即第三个参数是数值0F;如果在反汇编代码中找到以上信息,那么就容易找到第四个参数帮助主题ID的数值了。下面以笔者恢复汉化后的帮助文件cc6.chm为例,分别应用IDA pro和OllyDbg追踪到帮助主题ID的过程。(1) IDA pro 追踪法用IDA pro 5.0打开CHEMCAD的运行程序,在“strings”窗口查找“cc6.chm”,共计6个,逐个双击找到的字符串,返回到反汇编窗口“IDA View-A”,字符串处于“初始化的数据块”,通过“跳转”菜单下的“跳转到操作数”或“跳转到交叉参考”查看在“指令代码”区块中参数传递的代码,如果在该代码附近有“push 0F”,可以初步判断为函数HtmlHelp()对四个参数的读取和传递,如图1所示;图1 函数HtmlHelp读取参数的反汇编代码区在图1显示的“push 0Fh”之后,有三个“call”,尽管“sub_4A6C11”没有被IDA pro分析出是函数“HtmlHelp”,把鼠标放在“sub_4A6C11”上面,显示出这个函数有5个指针参数,符合调用函数HtmlHelp时参数压入内存堆栈的情况。跳转到地址“4A6C11”,在这一段代码中有字符串“hhctrl.ocx”,更加证明了“sub_4A6C11”就是函数“HtmlHelp”。接着在该地址处设定断点,然后按“F9”开始跟踪调试,IDA pro打开CHEMCAD后,按下“F1”调用帮助文件,IDA pro调试窗口“IDA View-EIP”停止在地址004A6C11处,同时在“IDA View-ESP”窗口中显示了四个参数的传递,如图2所示; 图2 IDA pro的调试窗口其中第三个参数是“0Fh”,第四个参数“unk_37EA8”,是帮助主题ID的数值,点击“查看”菜单下的“计算器”命令,可查看到该数值是229032,如图3所示;图3不同进制的数值转换的计算器窗口(2) OllyDbg 追踪法用OllyDbg(汉化第三版)打开CHEMCAD的运行程序,该版本有丰富的插件和右键菜单,应用起来极其简单方便。通过右键菜单的“超级字串参考”命令,弹出“超级字串参考”窗口,通过字符串“cc6.chm”或“hhctrl.ocx”,按照上述方面,同样可以找到函数HtmlHelp()所在的地址004A6C11,用右键菜单“断点 切换”或直接用“F2”按键设定该处断点。按下“F9”键,由OllyDbg调试运行CHEMCAD,在打开的CHEMCAD主窗口中拖放一个简捷精馏塔图标,双击该图标,弹出“简捷精馏塔”操作界面,按下“F1”键,OllyDbg的“CPU-主线程”窗口停止在地址004A6C11处;OllyDbg右下方的“堆栈”窗口,如图4所示,从第二行起就是HtmlHelp的四个参数,通过右键菜单“Extra”的下拉菜单,看到帮助主题ID的数值是3002。图4 OllyDbg右下方的“堆栈”窗口1.5 重新编译帮助文件3逐一找出帮助主题ID,编写预定义别名和ID的头文件,连同Microsoft HtlmHelp Workshop工程下的帮助页面文档一起编译,即可恢复汉化后帮助文件的在线帮助功能。2 结论笔者探索出了一条CHM格式帮助文件汉化后恢复在线帮助功能的技术路线:使用Microsoft HtlmHelp Workshop反编译原帮助文件,翻译网页格式的帮助文档,使用反向工程工具IDA pro或OllyDbg追踪出原帮助文件的帮助主题ID,重新编写预定义别名和ID的头文件,连同汉化后的网页,重新使用Microsoft HtlmHelp Workshop编译成CHM格式的帮助文件,即可恢复汉化后帮助文件的在线帮助功能。参考文献1 冯慧军. 跟我学HtmlHelp Workshop.chmJ/OL.(1999-11-06). http:/www.netyi.net/Book/3744b990-ea1e-4e2b-8d06-edc845417062.htm2 韩永生, 姚峥. MFC与HtmlHelp帮助系统的集成J. 电脑编程技巧与维护,2005(7):11-143 周德兴,管键,张凤均.应用程序帮助系统制作指南M.北京: 科学出版社,2002.4 心铃.一步一步开发CHM在线帮助系统J/OL.软件报,2004-10-14 http:/www.sweek.com/ArticleDisplay.aspx?Id=160&Title=一步一步开发CHM在线帮助文件系统-15 段钢.加密与解密M.北京:电子工业出版社, 2003
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!