• 标 题:初学者的东西:Transoft's Server All 1.02破解 (3千字)
  • 作 者:Passion
  • 时 间:2001-1-8 19:55:09
  • 链 接:http://bbs.pediy.com

初学者的东西:Transoft's Server All 1.02破解
——Passion在新世纪的第一个破解

    以前用过一个叫Transoft's Server All的服务器软件,华军下的,能将WINNT下的任意程序转换成NT的服务,也就是不需要登录就能自动运行。这号功能听起来不错,只是仍然要注册,于是忍不住又想练练手。——高手可别笑话我这个初学者。

    说实话Transoft's Server All 1.02在高手眼里只不过是小菜,但我对付它却花了两个多小时,时间就花在寻找用我输入的用户名生成注册码的过程。开始原想分析出注册码计算的算法的,可似乎太复杂,跟了几百个语句后放弃了。早知道这样,不如在内存中寻找假注册码再设内存读写断点,那样八成更快些。
   
    还是老手段,点菜单“Apply Registration Code”弹出注册框,要输入name、userkey和Email address,于是输入Passion/1212121212121212/passion@email.com.cn(不过后来这个Email地址根本就没用到)。下断bpx hmemcpy,断后回Server All领空,RET大概七层后来到此处:
   
:00478C95 E86276FAFF              call 004202FC

//运行到这里,上边这个CALL是读取userkey的。

:00478C9A 8B45F8                  mov eax, dword ptr [ebp-08]
:00478C9D 50                      push eax
:00478C9E 8D55F4                  lea edx, dword ptr [ebp-0C]
:00478CA1 8B45FC                  mov eax, dword ptr [ebp-04]
:00478CA4 8B80FC010000            mov eax, dword ptr [eax+000001FC]
:00478CAA E84D76FAFF              call 004202FC
//这个CALL读取NAME

:00478CAF 8B45F4                  mov eax, dword ptr [ebp-0C]
:00478CB2 5A                      pop edx

:00478CB3 E850FFFFFF              call 00478C08

//这里肯定是生成注册码并判断的,判断结果在AL中。

:00478CB8 84C0                    test al, al
:00478CBA 0F8474030000            je 00479034  //如果跳就完了。

我以前把这里的0F8474030000全用90来NOP掉也注册成功了,不过这里要找出注册码,因此在此处按F8进入:

:00478CB3 E850FFFFFF              call 00478C08

进入后程序段变得很复杂,不过前边的逻辑还是稍微有些清楚,首先将输入的name按字符分开,按ASCII码进行迭代运算(许多乘法和浮点指令弄得我头晕脑胀的)。后来也不知怎么回事就出现了字符串“80219520”,幸亏觉得不对头,因为刚跟那么一点时间就出来注册码,那算法也太不成器了。再跟,又出来一个字符串“10027440”。——当然还得跟。
再跟下去,这两个字符串被作为参数参与了下一轮运算。并且运行到00466757处出现字符表,估计是计算出来的值通过查表的方式生成对应字符。
具体的流程复杂得很,注册码计算至少经过了三大步骤,迭代运算我也搞不清有多少次,因此代码没法贴出来。

:004666CB E810D6F9FF              call 00403CE0
//此处D EAX可看到第一个中间结果——字符80219520

:00466757 E888D7F9FF              call 00403EE4
//此处D EAX可看到字符表

:0046676A E871D5F9FF              call 00403CE0
//此处D EAX可看到第二个中间结果——字符10027440

最后,在00466779上下D EAX,可看见最终的注册码。
——这个地方对于我来说真不容易找,几乎每一个CALL我都跟进去了。

:00466779 E87ED3F9FF              call 00403AFC
//这里注册码是JNZVh,一般长度都在五六个左右。

所以我注册时用的就是:
Name:Passion
Userkey:JNZVh
Email Address:随便

填入自己的Name后在0167:00466779处中断时,来一个D EAX可看见与自己的注册名对应的、属于自己的注册码。(相信大家都喜欢得到这种结果吧?)
另外我怀疑这个程序是用DELPHI写的,因为凡是碰到取字符串长度的子程序,都是在EBP-04还是类似的其他地方取一个值到EAX里再RET回去,这是Pascal的风格,跟C的字符串遍历的方法不一样。

  • 标 题:Passion的笑话 (824字)
  • 作 者:Passion
  • 时 间:2001-1-8 19:53:22

话说二十一世纪的某年某月某日,Passion偶然把系统时钟调后了一年,不料运行某软件时连续弹出过期提示共三百六十五次,Passion给气得七窍生烟,马上动手Crack。开始Win32 Dasm反汇编,却找不到执行入口点,Program entry point的菜单也是灰色,而且代码开始处的指令也不是通常的push ebp之类的。Passion于是心中发虚,“反汇编手段这么高?”
——用FileInfo等东西看,没有丝毫结果。Passion于是更发虚:“加壳手段也这么高?”
——用SoftIce Loader载入,开始倒是能执行,运行一段代码后,居然出现一个int 3,按F10便直接启动软件,跳过后又碰到一个REPZ MOVSB,执行便同样直接启动。Passion开始冒冷汗了:“反跟踪手段也太高了吧?”
——于是“两股战战,几欲先走。”

    过了数日,Passion又想起这事,越想越不对劲,可百思不得其解。最后碰上了NORTON ANTIVIRUS……,NORTON老先生告诉他说:“……WIN95.CIH……”
——“砰!”
    Passion当场晕倒。
    ……