股票賬戶管理軟體 1.12(破解手記) (9千字)

看雪資料發表於2002-02-16

軟體名稱:股票賬戶管理軟體 1.12

下載地址:http://www.008008.com 或 http://whsoft.126.com

簡    介:“除基本的資金存取、股票買賣、除權功能外,還提供精確的買賣費用設定,可精確指定各種股票、基金的交易稅、佣金等。”,據說是個很不錯的管理軟體,我不炒股的,對股票一竅不通,所以沒法兒鑑別它的好壞……

破解日期:2002年2月9號

破解目的:解掉它的時間限制(不註冊只能用到2001年12月31日),其功能限制暫且不提,其實是我的水平實在是……知道了吧?拜託就別說出來了。

所需工具:SoftICE4.05(loader32.exe)、PDump321.62 、Blast Wave 2000、UltraEdit9.00a and PW32Dasm8.93。

說    明:本灌水只供技術交流用!本人乃一隻超級菜鳥,文中若有不當之處還請“大蝦米”們多多指教,謝謝!

Let's Go!!!

執行程式StkAct.exe,彈出一畫面――“試用期已過。繼續……”。若把時間調到2001年12月31日以前,程式可以正常執行,不會出現需要註冊的畫面。用loader32載入它,出現一條錯誤資訊並詢問是否繼續,單擊“YES”後,程式沒有中斷就自動執行了,用PDump32的PE-Editor開啟它,將UPX0的Characteristics的值由E0000080改為E0000020。然後再用loader32載入它,這次它將啟用SoftIce,繼續往下走一段你會看到:
                                  .
                                  .
                                  .
:00402C1C 68857B3101              push 01317B85
:00402C21 E856E60000              call 0041127C
:00402C26 59                      pop ecx
:00402C27 DD9D74FFFFFF            fstp qword ptr [ebp+FFFFFF74]
:00402C2D DD4508                  fld qword ptr [ebp+08]
:00402C30 DC9D74FFFFFF            fcomp qword ptr [ebp+FFFFFF74]
:00402C36 DFE0                    fstsw ax
:00402C38 9E                      sahf
:00402C39 0F97C2                  seta dl
:00402C3C 83E201                  and edx, 00000001
:00402C3F 84D2                    test dl, dl
:00402C41 7459                    je 00402C9C----------------------->>>NOJUMP(繼續讓
                                                          它走就會出現註冊畫面了。)
:00402C43 8B0E                    mov ecx, dword ptr [esi]
:00402C45 8B81E0020000            mov eax, dword ptr [ecx+000002E0]
:00402C4B 33D2                    xor edx, edx
:00402C4D 8B08                    mov ecx, dword ptr [eax]
:00402C4F FF515C                  call [ecx+5C]
                                    .
                                    .
                                    .
我們把00402C41處的程式碼改為:JMP 00402C9C  (記下它的機器碼)這下看看,按F5讓程式繼續執行,哈哈……沒有出現註冊的畫面,操作一切正常,隨即就用R'PP做了一個PATCH,果然OK,正在高興時,突然又彈出了剛才的註冊畫面。天哪!(這個畫面我不知設什麼斷點來攔,連Hmemcpy都不行,知道的告訴我一聲哦,也由此引出了“脫殼篇”。)怎麼辦?想了許久,也沒想出個辦法,哎!還是先把它脫了殼再說吧。(接著請看――脫殼篇)

讓我拿TYP看看它,哦?是用UPX0.9加的殼,…………<<<----一段兒痛苦的經歷,發現它檢測PDump32和TRW,發現它們存在後拒不執行!真是的!太不給我面子了!抄起BW2000(好東西,省了我不少事,感謝D.Boy),執行StkAct.exe找到了入口地址00401012(經驗證無誤),再次用loader32加
載它,下指令

g 00401012  程式會在下面停下來:
                                  .
                                  .
                                  .
:00401000 EBFE                    jmp 00401012    --->>>      (跳到程式的入口地點)
:00401002 66623A                  bound di, word ptr [edx]
:00401005 43                      inc ebx
:00401006 2B2B                    sub ebp, dword ptr [ebx]
:00401008 48                      dec eax
:00401009 4F                      dec edi
:0040100A 4F                      dec edi
:0040100B 4B                      dec ebx
:0040100C 90                      nop
:0040100D E970744C00              jmp 008C8482
:00401012 A163744C00              mov eax, dword ptr [004C7463]--->>>(Stop Here程式的
                                                                    入口地點)
:00401017 C1E002                  shl eax, 02
:0040101A A367744C00              mov dword ptr [004C7467], eax
:0040101F 52                      push edx
:00401020 6A00                    push 00000000
:00401022 E8E5490C00              call 004C5A0C
:00401027 8BD0                    mov edx, eax
                                  .
                                  .
                                  .
現在,我們在00401000處設斷點,重新載入後讓其在此處中斷,並鍵入以下指令:

a eip    (回車)
jump eip  (回車)        讓程式在00401000處暫停嘛。

按F5讓程式執行回到Windows……

開啟PDump32,在Task中選中StkAct.exe,右鍵單擊執行"Dump (Full)",起個名字存檔,然後再右鍵單擊StkAct.exe,選擇"Kill Task"。脫殼結束!接下來該修改脫殼後程式的入口地址了:

我們已經知道原程式的入口地址是:00401012,再次用PDump32中的PE-Editor,開啟脫殼後的檔案,我們會看到其Entry Point(入口地址)是:00128F20,正確的應是:
原程式的入口地址-基址(Image Base),即:
00401012-00400000=1012,修改後單擊“OK”退出程式,執行看看,怎麼樣?可以正常執行了吧?

還記得我們剛才修改的程式碼使程式跳過時間限制的地方嗎?就是:00402C41 7459  je 00402C9C,
我把它附近的機器碼記了下來,用Ultra Edit開啟脫殼後的檔案,尋找我記下的程式碼,一共找到了兩處,開始我以為是我記錄的太少了,隨後我又增加了許多,可還是找到了兩處。仔細想想,的確,當時我只在記憶體中修改了一處的程式碼,不到兩分鐘就又出現了那個另人討厭的註冊畫面,對,準是有地方又檢查了一次,用PW32Dasm開啟脫殼後的檔案,終於找到了這個地方:
很面熟吧?和00402C41處的程式碼一樣!
                                  .
                                  .
                                  .
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00402D9D(C), :00402DAC(C), :00402DC1(C), :00402DE2(C)
|
:00402F18 68857B3101              push 01317B85
:00402F1D E85AE30000              call 0041127C
:00402F22 59                      pop ecx
:00402F23 DD9D74FFFFFF            fstp qword ptr [ebp+FFFFFF74]
:00402F29 DD4508                  fld qword ptr [ebp+08]
:00402F2C DC9D74FFFFFF            fcomp qword ptr [ebp+FFFFFF74]
:00402F32 DFE0                    fstsw ax
:00402F34 9E                      sahf
:00402F35 0F97C2                  seta dl
:00402F38 83E201                  and edx, 00000001
:00402F3B 84D2                    test dl, dl
:00402F3D 7459                    je 00402F98----------------------->>>NOJUMP(繼續讓
                                                          它走就會出現註冊畫面了。)
:00402F3F 8B0E                    mov ecx, dword ptr [esi]
:00402F41 8B81E0020000            mov eax, dword ptr [ecx+000002E0]
:00402F47 33D2                    xor edx, edx
:00402F49 8B08                    mov ecx, dword ptr [eax]
:00402F4B FF515C                  call [ecx+5C]
                                  .
                                  .
                                  .
這段程式是由00402D9D(C), :00402DAC(C), :00402DC1(C), :00402DE2(C)跳過來的,估計是程式執行後的記時程式碼:差不多兩分鐘檢測一遍執行條件,脫殼之前並沒有發現,所以程式一開始透過了檢測,但一會兒就又出現了註冊畫面,這部分記時程式我沒看懂,原本惦著把時間調成一年檢查一次的,可我不會,見笑了。還有,怎樣做才能使它跨平臺執行呢?誰教教我?

破解總結:將00402C41和00402F3D的程式碼“je 00402F98”改為:“jmp 00402F98”,即:
          搜尋--->>>  84D274598B0E
          改為--->>>  ~~~~EB~~~~~~    (共兩處)

BTW:要不是成功的把它脫了殼,恐怕我是不會把它的時間限制搞定的。這篇灌水花了我將近3個半小時,由此我想到所有把自己的破解手記POST出來的人,是他們的辛勤勞動才使得我初涉了Crack的技術,感謝看學老師整理的《論壇精華》系列,其中眾Cracker的文章使我受益非淺。今天是2002年2月12日(初一),在此,給大家拜個年――新年快樂!萬事如意!馬到成功!


                                                                                                    Written by Maxnut

                                    2002年2月12日晚23:30


續:第二種脫殼方法(★推薦★):

(前天(13號)又發現它檢測Filemon,真不知它到底想怎樣!)

首先要載入Sice和其相對應的Icedump(要放到Sice的目錄裡執行),然後執行PDump32,單擊執行“Bhrama Server”,現在你就可以繼續用loader32載入StkAct.exe,還記得程式的入口地址嗎?是:00401012。下指令:g 00401012(回車),這時Sice會在程式的入口處停下來,即:
                                  .
                                  .
                                  .
:00401012 A163744C00              mov eax, dword ptr [004C7463]--->>>(程式的入口地點)
:00401017 C1E002                  shl eax, 02
:0040101A A367744C00              mov dword ptr [004C7467], eax
                                  .
                                  .
                                  .
這時你可以下指令進行脫殼了,我Icedump的版本是6.023,用以下的指令:

/BHRAMA ProcDump32 - Dumper Server(回車) (別忘了前面的“/”符號)

隨後你便會回到Windows下,PDump32會提示你給脫殼後的檔案起名存檔,存檔後你可以用PDump32的PE-Editor對它進行檢視,你可以看到這時的Entry Point(入口地址)是00001012,不用再修改了,這點是不同於第一種脫殼方法的(原來的脫殼方法還需要手動修改EP)!好了,讓我們重新啟動計算機,不載入Sice(還有其他的解除安裝方法嗎?)。

執行脫殼操作生成的程式,這時的程式你可以看到是無法執行的,會出現“非法操作”。現在該讓PEditor(注意:不是PDump32中的PE-Editor)出場了!我用的是1.7版。用“browse”選擇該程式,用它的“rebuilder”功能進行重建,在選項中四個鉤全選上,其中:“realign file”選
“normal”;“rebuild Import Table”選“rebuild ImportTable”,然後就可以“DO”了,完成後退出程式,再執行這個程式看看,怎麼樣?可以執行了吧?!

脫殼總結:用PDump32中的PE-Editor檢視修復後的程式,這次脫殼後的檔案比原來的在“Sections Iformations”中多了一個“.idata”,原來脫殼後的程式在我朋友的計算機(WIN98)上是執行不了的,而用這種方法脫殼就沒有出現問題(我的系統是WIN97)。我想這正是Icedump的功勞吧?不過得需要“rebuilder”。你會選擇哪種方法脫殼呢?


                                                                                                      Written by Maxnut

                                      2002年2月15日晚21:35


                                                                笑對人生……

相關文章