N年前的LiveForSpeed破解历程(2)

本文完成于2007年,现在把它搬到这里,留作纪念。

另外,现在的LiveForSpeed用户注册体系已有很大改变,本文可能已经失去参考价值。

已经开始X版keygen补完计划(X版已经有keygen了,是noword出的,Y版已出了-_-!!!),创造属于自己的
keygen
用noword生成的f2.xxx和f3.xxx的密文解出datakey,再用自己的TEA key加密,再生成
TEA key对应的f1.xxx
noword是使用了lfs的正版license制作他的keygen,而我就使用noword的keygen生成的license制作自己的
keygen
先从入手f3.xxx入手,f3.xxx是64个字节的文件。
用IDA分析程序(静态分析),查找字符串f3.xxx,得到字符串的虚地址(IDA已经把字符串的PE文件地址转换
成虚地址了),用ollydebug加载程序(动态分析),在该地址下内存访问断点,启动程序,程序被断,发现断
点出现在地址0x7XXXXXXX的区域,这是某dll的代码了,非用户代码,使用ollydebug的执行到用户代码,从
dll的调用返回到0x005XXXXX的区域,向上翻看这个函数汇编代码的起始地址位置,记录下来到IDA内搜一下

题外话,为什么要到IDA内搜一下函数的起始地址呢?因为IDA能够识别crt库函数(ollydebug默认没有加载程序数据库)
且能图形化显示函数调用关系及代码逻辑,很直观。用IDA区分这个函数究竟是crt库函数还是用户自定义的函数,这样的做能大大简化反汇编的
工作。
果然是crt库函数,是一个关于文件操作的内部函数,ok,使用ollydebug的执行的返回,从函数返回,还是
在0x005XXXXX的区域,继续查看代码的起始地址,还是crt库函数,继续执行的返回...重复了几次,终于来
到了用户自定义函数区域,原来lfs是通过fopen来打开f3.xxx文件的,到现在为止,我们终于找到了操作
f3.xxx而且是属于lfs的函数,把它记为lfsf3op函数。lfsf3op打开文件后,读取40h(64)个字节到一个结构体
内,然后调用了一些复杂的移位,异或运算,其中还出现了TEA黄金分割数(IDA对这个数是很敏感的)和1Fh(31)
这些数字(都是以常量的方式存在于汇编代码内),我认为它使用了32round的TEA加解密算法(TEA用128位密
钥加解密64位数据,强度随加密round数增加而增加,TEA的标志就是黄金分割数或者他的补码),对64个字节
(512位)数据进行了8次解密。随着程序的往下执行,我终于在内存区域看到了我的用户名和密码,还有一些
其他信息。原来f3.xxx就是保存了用户注册是的用户名和密码的密文。
ok了,f3.xxx的内容大致可以确定下来了,现在就差那个密钥,需要再跟一下程序。今天到此为止。

原文地址:https://www.cnblogs.com/rickerliang/p/2175309.html