MOLPRO 2012 for linux x86_64的破解

来源:互联网 发布:中财网数据引擎 编辑:程序博客网 时间:2024/06/05 05:08

弄到了MOLPRO 2012的源代码,但是手头只有某个低版本MOLPRO的license。只好试试破解了。

 

事先已经编译好了MOLPRO 2012,系统为linux x86_64。以下是分析过程。


1. 首先,用伪造的license运行MOLPRO计算,运行脚本run.sh的内容为

#!/bin/bash
export HOME=/home/communix/Molpro2012/
export PATH=/home/communix/Molpro2012/bin:$PATH
export MOLPRO_KEY='id=abcdef,date=:2038/01/01,version=:2012,mpp=32767,modules=mpp,password=1m00d0b73be021&7BLlzSaeV5cg5mM4'
export MOLPRO_OPTIONS='-W /home/communix/wfu -d /scratch/communix/molpro/'

export OPAL_PREFIX=/usr/local/openmpi-1.4.1-GNU/
export LD_LIBRARY_PATH=/usr/local/openmpi-1.4.1-GNU/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/openmpi-1.4.1-GNU/bin/:$PATH

molpro -n 2 -s --no-xml-output 01.inp

其中,01.inp是MOLPRO输入文件,可以自己准备,越简单越好。 在MOLPRO_KEY变量中定义了许可,是根据旧版本license伪造的:

id是用户名,可以随便写;
date是有效期,作为演示这里没写的太大,否则还需要破解时间限制(其实更简单,这里不讨论);
version是主版本号,正准备用的当然是2012版;
mpp和mpp大概和并行有关,没有动;
最重要的是password,是前面这些信息加密后得到的一段字符串。因为不知道加密算法(本文也不打算做完美破解),这段密文不能随便改,否则不能翻译回去。所以仍然保留了旧版的password。

前面伪造的明文和后面的密文不匹配,所以计算是不可能进行的。一运行立刻出错了,得到错误信息:
!LICENCE! (2) Invalid password on licence token

2. 因为有源代码,所以无需分析MOLPRO可执行程序。检查license的源代码不可能提供,只有目标文件,位于src/parse/下,根据计算机系统,应当是parse-Linux-x86_64-i8.o。为了验证,用UE打开此文件,在文本模式下果然能搜到上面的出错信息,而且只有一处。

3. 用idaq64.exe打开目标文件,找到以上出错信息(极快),再往前直接就看到跳跃的入口:
jz      short loc_AA7D
表示license的明文密文相符就跳跃(很可能跳到正常计算),否则进行下一步(打印出错信息)。对应的二进制码为
7433488B0573520000488B004889C248
为了便于搜索,上面还给出了后面的一些二进制码。破解方法是把单字节相等判断jz(74)改为单字节的无条件跳跃jmp(EB)。

4. 用UE打开目标文件,搜索上面的二进制码。奇怪,搜不到!通过比较IDA和UE下的二进制码,发现二进制码在7433488B05之后出现不同,可能是未分配。可以推测,这段二进制码在molpro二进制程序中也应当存在。

5. 把molpro.exe下载到windows本机,用UE打开molpro.exe,搜索7433488B05,有多处,实际上只修改前两处就可以了。把74改为EB并保存。

6. 把改过的molpro.exe上传到linux计算服务器,覆盖原文件。注意正确的权限和属性。

7. 重新运行脚本run.sh,已经能算了。

8. 一劳永逸的办法是修改src/parse/下的目标文件parse-Linux-x86_64-i8.o,改法参见上面的第5步,只有一处修改。然后重新编译molpro。


原创粉丝点击