標 題:QuickCD V1.0.4演算法分析+序號產生器原始碼
發信人: netfox
時 間:2003/04/21 07:18pm
詳細資訊:
這是我第一次寫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";
}