转载请注明
轩辕春秋文化论坛设计与修改区 Maxwell
版区链接
http://www.xycq.net/forum/forum-48-1.html
原帖链接
http://www.xycq.net/forum/thread-152078-1-1.html
谢谢合作
前些天我开了一个帖子,试图向大家介绍一下汉语编程到底是什么样的一门语言,到底有没有它自己宣传的那么神奇,在搜索资料时发现铁血www.tiexue.net有帖子http://bbs.tiexue.net/post2_2286499_1.html说汉语编程与一门上世纪60年代发明的forth语言有一定关系,而在该论坛上的汉语编程的某疑似代言人声称汉语编程为完全自主知识产权与Forth没有一点关系。因此花了两天的业余时间研究了一下,取得了一些结果,发出来展现给大家。为了让大家能够自己重复实验,我会尽量将过程写详细一点,如果对我所说内容有质疑的朋友,可以花上半个小时自己验证一下。
1. 相关连接
汉语编程网的连接是http://www.hybcw.com/,但是不知道什么原因,刚才连接上去显示是建设中,希望过段时间能够恢复,毕竟我可不想刚有点眉目网站就关了
因为汉语编程网暂时无法连接,那么就无法提供下载地址了,不过下载就在网站上的汉编下载栏目中,下载汉编编译器即可,下载文件名是by.rar,解开之后有一个by目录。
刚刚试了一下,汉语编程网站恢复了,汉语编程编译器的下载地址是http://www.hybcw.com/down/by.rar
汉语编程目前能够下载到的版本为2.03.1920,运行后显示的版权信息如下
Windows(9x,Me,NT,2K) 32位汉语编程系统 Ver 2.03
基于汉语编程核心版本 Ver 1.02
版权所有 (C) 2003-2005 大连.汉编科技(研究院)
编译时间: 2004年4月10日 12:20
版本号: 2.03.1920
由于只使用一个版本的汉语编程,后面的描述中就省掉版本了。
注:有传闻说汉语编程网站的论坛里forth是禁用词汇,不过本人没有去注册帐号试试,有兴趣的可以自己试试,要不赶快可能就改了。
win32forth是forth语言的一个windows系统下的实现,在铁血网中的帖子有一个简单的比较,用的就是这个win32forth,该forth实现的主页在http://win32forth.sourceforge.net/,在其主页Download's中可以看到
Tom Zimmer's last Win32Forth Version 4.2 Build 671
Our new stable Win32Forth release 6.12.00 (This Version was released on July 14th, 2007).
两项,点击这两项可以得到两个不同的版本,一个是4.2build671,Tom Zimmer似乎是win32forth之前的作者,这应该是他的最后一个版本,另一个是6.12.00是目前最新的稳定版。
为了方便大家,我把直接下载的链接也贴出来
4.2build671
http://nchc.dl.sourceforge.net/s ... th/W32FOR42_671.zip
6.12.00
http://nchc.dl.sourceforge.net/s ... forth/w32f61200.exe
如果这两个链接下载速度太慢,请登录其主页选择其他镜像下载点。
2. 安装
win32forth4.2和6.12都有安装程序,安装比较简单。汉语编程解压即可使用。
3. wincon.dll
在铁血帖中提到过这个文件,我也是从这个文件入手的。
VC6中有个工具叫做Depends,下面就是Depends查看三个wincon.dll的结果
win32forth4.2
win32forth6.12
汉语编程
铁血帖的朋友说汉语编程是从win32forth中去掉几个函数入口之后形成的,可能那位朋友没有多找几个版本看一下,我觉得这个更像是与4.2差别不大的一个版本,但是可以看到,第1个入口地址与4.2的不同,应该是版本不同造成的。说到版本不同,下面也是一个证据。
由于入口如此的相似,我想这几个dll能否互相替换呢,于是进行下一步实验。
为了方便,我将三个dll文件复制到一起,后缀f4是4.2版,f6是6.12版,hy是汉语编程版。
先将三个文件复制到win32forth4.2中,分别使用三个dll后启动WIN32FOR.EXE的结果如下
4.2版
6.12版
汉语编程版
然后是win32forth6.12中,由于6.12需要更多的接口,所以4.2和汉语编程的dll调用存在问题,只贴出使用自带dll的截图
最后是汉语编程中
4.2版
6.12版
汉语编程版
注意几幅图中画线部分,汉语编程的wincon.dll文件能够被win32forth4.2正常使用,而且读出来的数值与汉语编程环境下一致,都是10895。由于接口改变,4.2和汉语编程的wincon.dll都不能在6.12中使用了。而win32forth4.2版与6.12版的wincon.dll文件都能够在汉语编程环境下使用,而且读出的值都与原环境下一致。综上情况,汉语编程与win32forth在wincon.dll文件上保持了相当好的兼容性,如果说二者一点关系都没有,形成这种结果的几率不知道能有多大。
另外汉语编程菜单查看->模板、API列表中有选项可以查看dll中的符号,有兴趣的可以自己看一下,不光数字上是兼容的,还能顺利读取出所有的符号来
根据接口的变化和常量数量的变化看,汉语编程应该是5.2到6.11.03之间的某个版本的win32forth改的(后来我找到了5.2版win32forth,与4.2版在实验中差别不大,所以没有列出,铁血上的朋友用的是6.11.03)
除了互换之外,再试试缺少这个文件时的表现吧,一试结果还挺有意思
win32forth 4.2版缺少wincon.dll文件时错误提示
win32forth 6.12版缺少wincon.dll文件时表现差别比较大,就不贴出来了。
汉语编程缺少wincon.dll文件时错误提示
从上面的图看出来,汉语编程与4.2的提示基本一致。这也是巧合吗?一个号称汉语的居然冒出一句英文的提示而且还跟别人的如此相似,而且是"Missing procedures!"这种计算机程序中少见的用词以及少见的标题栏中用标点。
4. win32forth与汉语编程乾坤大挪移
前面实现了替换winapi常量的数值,我又进一步想替换画线数值上面的几个数值,中间的过程比较曲折,花了我一些时间,不过取得的成果还是很让人激动的,我也能做出汉语编程来了
4.1 win32forth 4.2变汉语编程
将汉语编程的win32chp.dll文件复制到win32forth4.2文件夹下并命名为win32for.img,当然之前要备份好原来的win32for.img文件;将汉语编程的ckernel.ovl复制到win32forth4.2文件夹下。然后找一个16进制编辑器,打开win32for.img文件,从偏移4(也就是第5个字节)开始,连续4个字节修改为D5 11 92 01,保存。
双击win32for.exe,猜猜能看到什么?如果你怀疑ckernel.ovl在其中也起了作用的话,可以随便用个什么文件命名为ckernel.ovl甚至是建一个0字节的空文件也没有问题。看截图,带着win32forth 4.2图标的汉语编程。实际上这跟汉语编程的界面还有一个数值不一样,至于怎么变得完全一样,以及测试一下能不能使用,这都留给您自己去做吧。
带着win32forth 4.2图标的汉语编程
4.2 汉语编程变win32forth 4.2
将win32forth 4.2的win32for.img文件复制到汉语编程文件夹中,并命名为win32chp.dll,同样,也要备份好原来的那个;将win32forth 4.2的KERNEL.BIN文件复制到汉语编程文件夹中。还是用16进制编辑器打开win32chp.dll文件,从偏移4(也就是第5个字节)开始,连续4个字节修改为DA B7 6E EF,保存。双击win32chp.exe,看到了吧。
带着汉语编程图标的win32forth 4.2
4.3 结论
结论,呃,还用我来下结论吗?喔,是的,您想起了一个问题,我来回答您:
win32forth4.2的安装文件的日期是2002年4月2日,win32forth5.2的发布日期是2002年5月9日,而汉语编程编译器最早的一个文件日期是2003年5月15日,其版权信息上说明为编译于2004年4月10日 12:20。
说到底,汉语编程应该是这么来的,由于win32forth的源码是公开的(我没注意是按照什么许可协议发布的,6.12似乎是GPL),汉语编程利用其源代码将win32forth字样抹去,并且修改了识别词库文件的标志(将win32forth的D5 11 92 01修改为DA B7 6E EF),编译出可执行程序。然后又根据需要,汉化及添加、修改了词库形成了现在用汉字和一堆全角符号编程的汉语编程语言。可以说汉语编程为了掩盖其与win32forth的关系,将符号修改的很彻底,也不管那一堆全角符号用起来多么古怪。
甚至有可能是汉语编程作者中某位技术好一些的,直接修改了win32forth的某个版本的二进制代码生成的汉语编程,实际上也不难,不过就是抹掉win32forth字样和修改一个符号而已,让我这不懂破解的人来做也不过就是一个多小时的事。
如果继续研究下去,我想还会掌握更多的证据,甚至有希望根据wincon.dll和winapi词数找到汉语编程使用的那个版本的win32forth,不过目前我觉得这些证据已经足够了,已经不需要再浪费时间了。
4.4 其他
其实汉语编程就是win32forth的一个修改版,实现的功能基本上都是win32forth实现的。把这个东西吹嘘为民族的希望,(以下省略,技术帖,技术帖)
汉语编程需要带的ckernel.ovl和win32forth 4.2需要带的kernel.bin文件都是词库(其实就是编译过一次的字节码)的要求,比如要是用汉语编程的编辑器winedit.dll替换成win32for.img的话就不需要带ckernel.ovl了。
注意观察一下汉语编程的各个程序,都是由同名的一个exe文件和一个dll文件组成的,那个dll文件并不是真正的win32格式的dll文件,而是与win32forth 4.2的img仅差一个标志的一种格式;而那个exe文件其实都是可以互换使用的,当然跟win32forth 4.2互换都没有问题。
5. 又一出骗局!
虽然是一出骗局,但也不是像有人认为的那样,欺骗国家经费,按我目前了解的情况,也就忽悠了几个地方政府的一些经费,还好不算太多。汉语编程是公司化运营的,好像主要是靠培训骗学员的钱,从网上可以看到一些痕迹。
汉语编程像谁呢?是汉芯还是麒麟?汉芯吧,虽然假的彻底,但是毕竟都是从技术上面忽悠,不像汉语编程,宣传的那东西一点技术含量都没有,全是假大空。像麒麟吧,不过麒麟好歹还是能用。看起来也就跟传销差不多了,洗脑、假货、骗钱,只是不知道它的学员想退出容易不?突然又想起了玩轮子的李大师,好像也差不多,您觉得呢?
[ 本帖最后由 Maxwell 于 2007-10-15 11:52 编辑 ]