QuickCD V1.0.4演算法分析+序號產生器原始碼

看雪資料發表於2015-11-15

標 題: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";
}

相關文章