TOEFT Practice Online(TPO),是ETS出品的官方TOEFL样题,一共有23套,给考生提供了在参加TOEFL考试前仿真训练的环境。但TPO不是免费提供给各位使用的,在ETS官网购买的价格是$44.95,新东方的代理价是280。不过,有"热心网友"把付费的TPO的内容截取了出来,再自己给它写一个和真正考试界面类似的界面,这就是盗版的TPO。盗版TPO的界面有很多种,我见过的有用Web作界面的,用PPT作界面的,还有用桌面程序作界面的。现在考托福的人越来越多,有人就看到了这其中的商机:用现有的数据,配上一个仿真度高、操作友好的界面,就能在淘宝卖出个229的价钱。

我的室友就刚刚买了一套,他现在想把这个TPO共享给另一个好友使用,但这个盗版的TPO还需要验证机器码,一个Licence无法在多台电脑间通用。盗版的东东还写all rights reserved... 于是我们果断决定把它XX掉。

看到登陆的界面,是个Java写的程序。看可执行文件的信息,应该是用exe4j打包成了exe。首先考虑的是把这个可执行文件中包着的jar抽取出来。在网上搜到的信息时,exe4j会把jar打包进exe,在打包时会把jar按字节异或0x88. 那么, 理想状态下, 我只要把exe再异或0x88后, 根据jar文件的头部信息提取出jar文件就可以了. 但现实是, 这个文件被异或后找不到有jar头部特征的串. 我有尝试过检测它是否有壳等等, 但很久没有接触crack了, 实在手生, 不得要领(这貌似和写blog是一个道理, 最近不少人吐槽我的blog怎么不更新). 不过室友提出的另类思路倒是解决了问题.

我们在尝试破解时检测过这个进程都创建并访问了哪些文件, 因为有网友说exe4j会先把jar解压到临时文件夹. 但那可能是老版本的exe4j了, 因为我们发现它根本没有创建类似的文件. 但有趣的是它访问了两个文件, 一个是ipconfig.exe, 另一个是在临时文件夹下的一个vbs脚本. 我们根据机器码的内容, 我们推断它就是用这两个程序产生机器码的.

室友提出弄两个假的程序去看它是用什么参数调这两个程序的. 于是我们在ToeflTPO.exe的目录下放了一个假的ipconfig.exe和一个假的wscript.exe. 果然, 这个程序根据环境变量里的PATH值来找这两个系统程序. 那自然第一个会在当前目录下寻找. 把命令行输出来之后发现, 它调用了"ipconfig.exe /all"和"wscript.exe 临时目录里的vbs"这两条命令. 对ipconfig的输出, 它是依次匹配输出的各行, 取出第一个匹配上的Mac地址加入机器码. 对vbs脚本, 就直接取了其输出值. 然后我写了两个程序, 输出我室友机器上运行这两个命令得到的值. 那么, 只要把这两个程序和ToeflTPO.exe放在一个目录下, 在任何一台机器上, 它都只能读取到这个机器码. 由于室友已经购买了这个机器码的注册码, 即使不知道注册码的算法也能成功激活.

至此, 已经可以算是从功能上完美破解了, 虽然只能说是一种爆破. 遗憾的是最终还是没能把jar包提取出来. 我还会继续研究这个程序, 争取把jar也提取出来.