• 标 题:QuickCD V1.0.4算法分析+注册机源码  
  • 作 者: netfox
  • 时 间:2003/04/21 07:18pm 
  • 链 接:http://bbs.pediy.com

这是我第一次写pj文章,希望大家能给点鼓励:)
QuickCD V1.0.4

软件大小:  59 KB
软件语言:  简体中文
软件类别:  国产软件 / 共享版 / 光驱工具
应用平台:  Win9x/NT/2000/XP
界面预览:  无
加入时间:  2003-04-18
联 系 人:  QuickMore@Hotmail.com  
开 发 商:  http://www.websamba.com/morequick
软件介绍:
   QuickCD 可以帮助你方便快捷的打开关闭光驱门,你可以选择热键或者鼠标点击两种方式:1.热键(F9:打开光驱门,F10:关闭光驱门,F11:弹出设置对话框),当然你可以设置新的热键.2.鼠标点击(点击托盘图标:打开光驱门,右击托盘图标:关闭光驱门,右双击托盘图标:弹出菜单)

下载地址:http://www.skycn.com/soft/6381.html

工具:softice4.05
进入软件注册画面:
输入注册码:12345678
调出softice,下断点bpx getwindowtexta,回到软件,点击注册后中断,F12返回程序领空,
到这里
001B:0040A9C6  8B4C2408            MOV       ECX,[ESP+08]
001B:0040A9CA  6AFF                PUSH      FF
001B:0040A9CC  E8FA380000          CALL      0040E2CB
001B:0040A9D1  EB0C                JMP       0040A9DF
001B:0040A9D3  8B01                MOV       EAX,[ECX]
001B:0040A9D5  FF742408            PUSH      DWORD PTR [ESP+08]
001B:0040A9D9  FF9088000000        CALL      [EAX+00000088]
001B:0040A9DF  5E                  POP       ESI

一直按F10,此时Eax值没有变化,所以一直走下去
到这里
001B:00402342 8B442414             mov eax, dword ptr [esp+14]//这里eax变化,用d eax,看到什么?我的机器吗!!!
001B:00402346 50                   push eax//机器码入栈,为下面的call做准备
001B:00402347  E84B180000          CALL      00403B97//这个call的作用是将机器吗的十进制值转化为十六进制值,怎么知道呢?call完之后用?eax就知道了

001B:0040234C  8B4C2410            MOV       ECX,[ESP+10]//假注册码给Ecx
001B:00402350  8BF8                MOV       EDI,EAX//eax赋值给edi,也就是edi中放着机器吗

001B:00402352  51                  PUSH      ECX//ecx(假注册码)入栈
001B:00402353  E83F180000          CALL      00403B97//同上面的call一样把假注册码转为十六进制值

001B:00402358  57                  PUSH      EDI//机器吗入栈,机器吗和假注册码都入栈了,后面有好戏看了:)

001B:00402359  8BE8                MOV       EBP,EAX//eax赋值给ebp
001B:0040235B  E860FFFFFF          CALL      004022C0//这个call不知道是干嘛的,搁着.....

001B:00402360  83C40C              ADD       ESP,0C
001B:00402363  3BC5                CMP       EAX,EBP//关键比较

001B:00402365  0F8587000000        JNZ       004023F2//关键跳转,怎么知道是关键跳转呢?这里有个技巧,用r fl z将zf置1,接着按F5,看到了什么?注册错误!!!说明这是个关键跳转,不用说上面就是关键跳转了,那么是什么改变了eax呢?在001B:00402359处eax不是赋值给了ebp吗?两者应该相等才对!!!
呵呵,现在应该知道0040235B处的call是干什么的吧,他就是关键call,计算注册码后,改变了eax的值,现在我们F8进入到关键call  004022C0

001B:004022C0  8B442404            MOV       EAX,[ESP+04]//机器吗放入eax
001B:004022C4  35AC0BBB02          XOR       EAX,02BB0BAC//eax与0X02BB0BAC异或结果放入eax
001B:004022C9  05FD593202          ADD       EAX,023259FD//eax+0X023259FD
001B:004022CE  7905                JNS       004022D5//SF=0则跳走
001B:004022D0  99                  CDQ
001B:004022D1  33C2                XOR       EAX,EDX
001B:004022D3  2BC2                SUB       EAX,EDX
001B:004022D5  C3                  RET
注册码的计算过程就这么一点,简单吧:)

注册成功后注册码写入同目录下的QuickCD.ini文件中

c++源码:
#include<iostream.h>
void main()
{
int mac_code,reg_code;
cout<<"\n*************KenGen BY NetFox*************"<<endl
             <<"\n";
cout<<"Machine Code Please:";
cin>>mac_code;
mac_code^=0x02bb0bac;
reg_code=mac_code+0x023259fd;
cout<<"Your Register Code Is:"<<reg_code<<endl<<"\n";
}