《贏證股市分析軟體》V2.01 高階版的破解 (10千字)

看雪資料發表於2001-05-08

《贏證股市分析軟體》V2.01 高階版的破解


軟體名稱:《贏證股市分析軟體》V2.01
釋出日期:  2001.3.5
軟體來源:《軟體》雜誌第4期配套光碟。
軟體簡介:
    《贏證股市分析軟體》主要面向廣大中小投資者,特別是上班族股民,為他們提供一種功能強大,價廉物美的炒股工具。
    
    軟體分為共享版,標準版和高階版三個版本,使用者可以完全免費地,無期限地試用共享版軟體,充分體會軟體強大的功能。如果使用者感到軟體的功能能夠滿足自己的需要,就可以註冊成為標準版或高階版,以獲取更多更全面的功能和廠家提供的更多服務內容。

    高階版是《贏證股市分析軟體》系列產品中最優秀的版本。與標準版的唯一區別就是增加了“贏證紅綠燈”訊號。該訊號是一種全新的選股方式,是由計算機透過對大量的歷史資料進行智慧分析總結出來的具有普遍規律性的選股法。經過實際驗證,該訊號能夠獲得非常準確清晰的買賣結果,以紅綠燈的方式直接表現在K線圖中。



【宣告】
      我寫這篇文章是以技術交流為主,希望大家在轉載時能保持文章的完整性。


作    者:佳潔士
解密日前:2001年4月26日
解密工具:1、Trw2000 1.22
          2、W32Dasm 8.93 超級中文版


    從軟體幫助檔案的介紹上可以得知,軟體的使用許可權越高,功能越強大,而使用許可權是同過註冊碼來確定的,小弟的功力太菜。追不到它的註冊碼。不得已用爆破手段來搞定它。

    找到我們的神兵利器W32Dasm 8.93 超級中文版反彙編《贏證股市分析軟體》的主程式StockNT.exe。靜態分析看看能夠有什麼收穫。皇天不負有心人。讓我找到了共享版、標準版、高階版等關鍵字串。並記下了他們的記憶體地址(memory offset)。

共享版: 0042AE28  MOV      EAX,005135E0

標準版: 0042AE35  PUSH    DWORD 005135D0

高階版: 0042AE41  PUSH    DWORD 005135C0


我們可以利用在W32Dasm 8.93 超級中文版找到的記憶體地址(memory offset),在Trw2000中下中斷點。

在TRW2000執行視窗用Browse選中StockNT.exe,然後用Loaf按鈕裝載。裝載檔案後,將中斷在這檔案的主函式(即程式的入口處)。

將中斷點下在共享版上:bpx 0042AE28

..............
0167:0042ADE9  LEA      ECX,[EDI+EDI*4]
0167:0042ADEC  PUSH    BYTE +00
0167:0042ADEE  LEA      ECX,[ECX+ECX*4]
0167:0042ADF1  LEA      ECX,[EBX+ECX*4]
0167:0042ADF4  LEA      ECX,[ECX+ECX*4]
0167:0042ADF7  LEA      EDX,[ECX+ECX*4]
0167:0042ADFA  LEA      ECX,[EBP+EDX*4+00]
0167:0042ADFE  MOV      EDX,[EAX+1C]
0167:0042AE01  PUSH    ECX
0167:0042AE02  PUSH    DWORD 05C2            //將05C2壓入堆疊.  關鍵哦!
0167:0042AE07  PUSH    EDX
0167:0042AE08  CALL    `USER32!SendMessageA`  ==>重點!!! 按F8進入此CALL.
0167:0042AE0E  TEST    EAX,EAX              試著下 EAX=1(這是以EAX為旗幟)
0167:0042AE10  JNZ      0042AE30              可以看見變成標準版。隨便移動滑鼠,
0167:0042AE12  CALL    004CFC96              又變回共享版了。
0167:0042AE17  MOV      ECX,[EAX+04]
0167:0042AE1A  CALL    00499610
0167:0042AE1F  TEST    EAX,EAX
0167:0042AE21  MOV      EAX,005135F0
0167:0042AE26  JNZ      0042AE2D
0167:0042AE28  MOV      EAX,005135E0    <<=共享版
0167:0042AE2D  PUSH    EAX
0167:0042AE2E  JMP      SHORT 0042AE46     
0167:0042AE30  CMP      EAX,BYTE +01        //比較EAX是不是等於1
0167:0042AE33  JNZ      0042AE3C            //不相等就跳,
0167:0042AE35  PUSH    DWORD 005135D0    <<=標準版
0167:0042AE3A  JMP      SHORT 0042AE46   
0167:0042AE3C  CMP      EAX,BYTE +02        //比較EAX是不是等於2
0167:0042AE3F  JNZ      0042AE4F            //不相等就跳,
0167:0042AE41  PUSH    DWORD 005135C0    <<=高階版
0167:0042AE46  LEA      ECX,[ESP+14]
0167:0042AE4A  CALL    004B7D9F
0167:0042AE4F  MOV      EAX,[ESP+10]
0167:0042AE53  MOV      EDX,[ESI]
0167:0042AE55  MOV      ECX,[EAX-08]
.....................

看到共享版、標準版、高階版的區別了嗎! 他們都是以EAX的值作為判斷共享版、標準版、高階版的!

也就是說:當EAX=0 為共享版
          當EAX=1 為標準版
          當EAX=2 為高階版


向上看看,看何處使EAX可為1、2 。可以找到這裡:

0167:0042AE08  CALL    `USER32!SendMessageA` 
0167:0042AE0E  TEST    EAX,EAX      <<-強制使EAX=1,軟體將變成標準版。
0167:0042AE10  JNZ      0042AE30        強制使Eax=2,軟體會變成高階版。

如果在上述部位強制使EAX=1。雖然在使用許可權中會變成了標準版、高階版,但是還是有很多的功能不能正常使用。比如紅綠燈功能就不能使用,也就是說軟體表面上變成是標準版、高階斑,但同實際上還是共享版。只是文字改變了。可以肯定程式在某處有全域性變數註冊旗幟。

現在要做的事情就是找到這個註冊旗幟!!!

按F8進入0167:0042AE08  CALL    `USER32!SendMessageA`
這時將來到系統檔案USER32.dll的鄰空。
按F10慢慢走,看看程式要把我們帶到什麼地方?
....................
0167:BFF559E6  CALL    BFF55000
0167:BFF559EB  PUSH    DWORD [ESP+04]
0167:BFF559EF  CALL    BFF5506B
0167:BFF559F4  TEST    EAX,EAX
0167:BFF559F6  JZ      BFF55A5E
0167:BFF559F8  TEST    BYTE [EAX+2F],02
0167:BFF559FC  JZ      BFF55A5E
0167:BFF559FE  MOV      CX,[FS:28]
0167:BFF55A06  CMP      [EAX+20],CX
0167:BFF55A0A  JNZ      BFF55A5E
0167:BFF55A0C  MOV      EDX,[BFF5D5D2]
0167:BFF55A12  ADD      EDX,1112
0167:BFF55A18  CMP      WORD [EDX+0A],BYTE +00
0167:BFF55A1D  JNZ      BFF55A5E
0167:BFF55A1F  CMP      WORD [EDX+1A],BYTE +00
0167:BFF55A24  JNZ      BFF55A5E
0167:BFF55A26  PUSH    EAX
0167:BFF55A27  PUSH    CX
0167:BFF55A29  PUSH    WORD 00
0167:BFF55A2D  CALL    `KERNEL32!MapSL`
0167:BFF55A32  MOV      ECX,EAX
0167:BFF55A34  POP      EAX
0167:BFF55A35  ADD      ECX,BYTE +5E
0167:BFF55A38  CMP      WORD [ECX+0A],BYTE +00
0167:BFF55A3D  JNZ      BFF55A5E
0167:BFF55A3F  CMP      WORD [ECX+1A],BYTE +00
0167:BFF55A44  JNZ      BFF55A5E
0167:BFF55A46  MOV      CX,[EAX+2A]
0167:BFF55A4A  MOV      ES,CX
0167:BFF55A4D  MOVZX    EAX,WORD [EAX+28]
0167:BFF55A51  MOV      EAX,[ES:EAX+02]
0167:BFF55A55  PUSH    DS
0167:BFF55A56  POP      ES
0167:BFF55A57  CALL    BFF5500C
0167:BFF55A5C  JMP      EAX          <<==回到StockNT.exe
......................

經過上面不長不短的程式碼。突然從系統檔案USER32.dll的領空返回到了StockNT.exe的領空。

這可是軟體的關鍵的部位,好好的分析一下。
......................


EAX=004B440A  EBX=00000005  ECX=C174DC30  EDX=000194C4  ESI=0079F7DC       
EDI=000007D1  EBP=00000008  ESP=0079F730  EIP=004B440A  o d I s Z a P c   
CS=0167  DS=016F  SS=016F  ES=016F  FS=0FAF  GS=0000  SS:0079FA04=000005C2 看這兒! ==================================================byte==============PROT========
0030:00000000 9E 0F C9 D8 65 04 70 00-16 00 E9 CD 65 04 70 00  ....e.p.....e.p.
0030:00000010 65 04 70 00 54 FF 00 F0-08 80 00 F0 6F EF 00 F0  e.p.T.......o...
0030:00000020 00 00 EF 08 8C 19 CA CE-6F EF 00 F0 6F EF 00 F0  ........o...o...
0030:00000030 6F EF 00 F0 6F EF 00 F0-9A 00 E9 CD 65 04 70 00  o...o.......e.p.
==========================================================================ROT32

0167:004B4409  RET                                                           
0167:004B440A  PUSH      EBP                                                 
0167:004B440B  MOV      EBP,ESP                                               
0167:004B440D  CMP      DWORD PTR [EBP+0C],00000360                           
0167:004B4414  JNZ      004B441B                                             
0167:004B4416  PUSH      01                                 
0167:004B4418  POP      EAX                             
0167:004B4419  JMP      004B4435                                             
0167:004B441B  PUSH      DWORD PTR [EBP+08]                                   
0167:004B441E  CALL      004B4385                                             
0167:004B4423  PUSH      DWORD PTR [EBP+14]                                   
0167:004B4426  PUSH      DWORD PTR [EBP+10]                                   
0167:004B4429  PUSH      DWORD PTR [EBP+0C]                                   
0167:004B442C  PUSH      DWORD PTR [EBP+08]                                   
0167:004B442F  PUSH      EAX                                                   
0167:004B4430  CALL      004B419D                                             
0167:004B4435  POP      EBP                                                   
0167:004B4436  RET      0010                                                 
0167:004B4439  MOV      EAX,004B440A                                         
0167:004B443E  RET                                                             
0167:004B443F  MOV      EAX,004E24A0                                         
0167:004B4444  CALL      004A3488                                             
0167:004B4449  SUB      ESP,40                                               
0167:004B444C  PUSH      EBX                                                 
0167:004B444D  PUSH      ESI                                             
====================================STOCKNT!.text+000B3409======================
Break due to BPX #0167:0042AE02  (ET=2.31 seconds)                             
:pagein n 23.txt                                                               

.................

0167:004B440A  PUSH      EBP                                                 
0167:004B440B  MOV      EBP,ESP                   
0167:004B440D  CMP      DWORD PTR [EBP+0C],00000360    取堆疊的值與0360作比較               
0167:004B4414  JNZ      004B441B                                             
0167:004B4416  PUSH      01            //將01壓入堆疊        <<=註冊旗幟哦   
0167:004B4418  POP      EAX            //從堆疊取出01到EAX                   
0167:004B4419  JMP      004B4435                                             


    [EBP+0C]=05C2,05C2是不是很眼熟,在什麼地方見過。找一找?
   
把0167:004B440D  CMP  DWORD PTR [EBP+0C],00000360 改成0167:004B440D  CMP  DWORD PTR [EBP+0C],000005C2。來改變軟體的跳轉方向。

    按F5回到程式,這時可以發現軟體在使用許可權上已經變成了標準版。試一試各種功能。都可以正常使用(除紅綠燈功能外)。從前面的分析我們知道!高階版與標準版的區別!只是EAX值的不同,EAX=2就是高階版。


0167:004B440D  CMP      DWORD PTR [EBP+0C],000005C2                           
0167:004B4414  JNZ      004B441B                                             
0167:004B4416  PUSH      01                    改為:PUSH 02               
0167:004B4418  POP      EAX                             
0167:004B4419  JMP      004B4435                                         

  這樣一來,不就使EAX=2了嘛。看使用許可權中是不是就變成了高階版。 試一下高階版中的紅綠燈功能。可以正常使用了。


最後整理一下:

高階版的修改方法:
找到:817D0C6003000075056A01
改成:------C205----------02          注:“ - ” 表示不用改!



                                                  佳潔士
                                                2001.04.26




後記:在寫《贏證股市分析軟體》破解記錄時,發現一個有趣的現象。我寫破解錄時喜歡把軟體的名稱作為檔名稱,比如說:"贏證股市分析軟體.txt".此時再執行贏證,贏證會提示軟體已經在執行之中。不知這算不算軟體的Bug。


廣告: 我們的目標,沒有加密!  -----佳潔士

相關文章