重啟驗證軟體破解思路二――無敵檔案批處理大師 V1.0.1

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

重啟驗證軟體破解思路二

破解作者
        yzez[DFCG][BCG][FCG]
破解物件
        無敵檔案批處理大師 V1.0.1
軟體介紹
        軟體大小:  688 KB
        軟體語言:  簡體中文
        軟體類別:  國產軟體 / 共享版 / 檔案更名
        應用平臺:  Win9x/NT/2000/XP
        介面預覽:  無
        加入時間:  2003-11-14 09:23:39
        下載次數:  24 
   計算機使用者必備!口號:我們處理一切關於“檔案批次處理”。功能:檔案和資料夾各種方式的更名、
批次檔案分割、檔案內容替換等功能,並且在以後陸續增加圖片大小轉換、影像格式轉換、音樂檔案壓縮
比更改等更多實用功能,該軟體的設計以人為本,處處為使用者著想,沒有華麗的外表,卻有眾多強大且實
用的功能,既能滿足一般使用者的需求,也能照顧到高階的使用者。

下載地址
        http://www.skycn.com/soft/14515.html 
破解工具
        pe-scan、OllyDbg 1.09、C32Asm(PLL621的作品,很感謝)
破解目的
        只為交流技術,請不要用於商業目的,多支援國產軟體。
破解過程
    說明:這個軟體注不註冊,影響並不太大,沒有使用時期限制,是否有功能限制我沒有去看,寫這篇
文章只為說明重啟驗證破解的一種思路,這個軟體重啟後,還是會彈出註冊介面,前面我寫過兩篇關於這
種情況重啟驗證軟體的破解思路,這篇文章將從另一角度來說明它的破解。這種破解方法是充分利用軟體
的有用資訊去找關鍵點,下面看過程。
1、用pe-scan查殼,是ASPack 2.11的殼,用pe-scan輕鬆脫殼,脫殼後的程式正常執行。用C32Asm反彙編,
查詢有用資訊,用W32DASM反彙編沒有反應,我倒!不知怎麼一回事,找有用資訊:已註冊。

::004E94D2::  PUSH EBP                                
::004E94D3::  PUSH 4E95ED                              
::004E94DB::  MOV FS:[EAX],ESP                        
::004E94DE::  CALL 004C8C98 ************這是關鍵CALL嗎?在此設斷吧!                   
::004E94E3::  MOV EBX,EAX                             
::004E94E5::  MOV [ESI+428],BL                        
::004E94EB::  TEST BL,BL****************測試BL的值是否為0,為0就跳,跳到何處?                              
::004E94ED::  JE SHORT 004E9522*********為0就跳,跳到004E9522,跳過了下面的已註冊!不跳會怎樣?                     
::004E94EF::  LEA EDX,[EBP-C]                         
::004E94F2::  MOV EAX,[4EEDC4]                        
::004E94F7::  MOV EAX,[EAX]                           
::004E94F9::  CALL 004673C4                         
::004E94FE::  PUSH DWORD PTR [EBP-C]                  
::004E9501::  PUSH 4E9604                                 ->: V1.01
::004E9506::  PUSH 4E9614   ->:  已註冊*****看,我們找到這裡!往上找一找,有什麼!
::004E950B::  LEA EAX,[EBP-8] 
2、執行脫殼後的程式,輸入註冊碼:1234567890,點確定程式要求重啟驗證,我們就退出程式,然後用
OllyDbg 1.09載入脫殼後的程式,在004E94DE處設定好斷點,按F9程式執行,一會兒就被斷在這個地方:

004E94D8  PUSH    DWORD PTR FS:[EAX]
004E94DB  MOV     DWORD PTR FS:[EAX], ESP
004E94DE  CALL    unpack.004C8C98***********我們在此設斷,按F9執行程式,被斷,關鍵CALL按F7跟進!
004E94E3  MOV     EBXEAX
004E94E5  MOV     BYTE PTR DS:[ESI+428], BL
004E94EB  TEST    BLBL********************註冊成功,BL的值為1,反之則為0
004E94ED  JE      SHORT unpack.004E9522*****為0就跳,跳就失敗!
004E94EF  LEA     EDX, [LOCAL.3]
004E94F2  MOV     EAXDWORD PTR DS:[4EEDC4]
004E94F7  MOV     EAXDWORD PTR DS:[EAX]
004E94F9  CALL    unpack.004673C4
004E94FE  PUSH    [LOCAL.3]                        
004E9501  PUSH    unpack.004E9604                  
004E9506  PUSH    unpack.004E9614
004E950B  LEA     EAX, [LOCAL.2]
004E950E  MOV     EDX, 3
======================================================================================
關鍵CALL的程式碼:

004C8C98  MOV     EAXDWORD PTR DS:[4EEF8C]
004C8C9D  MOV     EAXDWORD PTR DS:[EAX]
004C8C9F  MOV     EAXDWORD PTR DS:[EAX+8]
004C8CA2  CALL    unpack.004C8AE8***************演算法CALL,按F7跟進!程式碼看下面!
004C8CA7  RETN**********************************返回指令!
========================================================================================
演算法CALL的程式碼:

004C8AE8  PUSH    EBP********跟進演算法CALL我們停在這裡!
004C8AE9  MOV     EBPESP
004C8AEB  XOR     ECXECX
004C8AED  PUSH    ECX
*********************省略!************************************

004C8B1D  MOV     EAXEBX
004C8B1F  CALL    unpack.0040E9A8
004C8B24  MOV     EAX, [LOCAL.1]***********試驗碼移入EAX
004C8B27  CALL    unpack.00404D1C
004C8B2C  CMP     EAX, 10******************EAX的值是0A(十進位制值是10)試驗碼的位數,比較0A和10(十進位制值是16)
**************也就是說試驗碼必須是16位
004C8B2F  JE      SHORT unpack.004C8B38****相等就跳到下面進一步處理!
004C8B31  XOR     EBXEBX*****************不相等往下,EBX清0,BL的值就為0,失敗!
004C8B33  JMP     unpack.004C8C3C**********無條件跳到:004C8C3C處,所以重新來過,輸入試驗碼:1234567887654321
004C8B38  MOV     EAX, [LOCAL.1]***********相等跳到此,試驗碼:1234567887654321移入EAX
004C8B3B  CALL    unpack.004A3CEC**********此CALL檢驗輸入的試驗碼是否是0--9之間的數字,是就置AL的值為1,反之為0
004C8B40  TEST    ALAL*******************測試AL的值是否為0
004C8B42  JNZ     SHORT unpack.004C8B4B****不為0就跳,為0就不跳,往下,失敗!
004C8B44  XOR     EBXEBX*****************不相等往下,EBX清0,BL的值就為0,失敗!
004C8B46  JMP     unpack.004C8C3C**********無條件跳到:004C8C3C處
004C8B4B  LEA     ECX, [LOCAL.3]************跳到這裡!
004C8B4E  MOV     EDX, 1********************賦EDX常數1
004C8B53  MOV     EAX, [LOCAL.1]************試驗碼入EAX
004C8B56  CALL    unpack.004A3EBC
004C8B5B  MOV     EAX, [LOCAL.3]
004C8B5E  CALL    unpack.004093AC***********取試驗碼的最後一位1入EAX
004C8B63  MOV     ECXEAX******************EAX的初始值是1,把這個值移入ECX
004C8B65  MOV     EAXECX
004C8B67  MOV     ECX, 3********************把3送入ECX
004C8B6C  CDQ*******************************EDX清0
004C8B6D  IDIV    ECX***********************EAX=EAX/ECX=1/3,商0放EAX,餘數1放EDX
004C8B6F  MOV     ESIEDX******************把餘數1送到ESI                        
004C8B71  XOR     EBXEBX******************EBX清0
004C8B73  LEA     EAX, [LOCAL.4]
004C8B76  PUSH    EAX
004C8B77  MOV     EDXEBX******************EBX的值是0,這個值移入到EDX中
004C8B79  ADD     EDXEDX******************EDX自身相加,0+0=0                       
004C8B7B  ADD     EDXESI******************EDX=EDX+ESI=0+1=1
004C8B7D  ADD     EDX, 2********************EDX=EDX+2=1+2=3,
004C8B80  MOV     ECX, 1
004C8B85  MOV     EAX, [LOCAL.1]************把試驗碼送入EAX,取試驗碼的第3位:3
004C8B88  CALL    unpack.00404F74
004C8B8D  MOV     EDX, [LOCAL.4]
004C8B90  LEA     EAX, [LOCAL.2]
004C8B93  CALL    unpack.00404D24
004C8B98  INC     EBX***********************EBX加1
004C8B99  CMP     EBX, 6********************比較EBX是否等於6!
004C8B9C  JNZ     SHORT unpack.004C8B73********迴圈,迴圈6次,這個迴圈取試驗的值,依次取:3、5、7、9、11、13
**********************6位,連線起來就是:357864
004C8B9E  XOR     ESIESI*********************ESI清0
004C8BA0  MOV     EBX, 1***********************賦EBX的值為1,EBX做計數器!
004C8BA5  LEA     EAX, [LOCAL.5]***************賦EAX地址值
004C8BA8  MOV     EDX, [LOCAL.1]***************試驗碼入EDX
004C8BAB  MOV     DLBYTE PTR DS:[EDX+EBX-1]**取試驗碼的第1位:1
004C8BAF  CALL    unpack.00404C44
004C8BB4  MOV     EAX, [LOCAL.5]
004C8BB7  CALL    unpack.004093AC**************此CALL把取出的第1位試驗碼:1送入EAX
004C8BBC  ADD     ESIEAX*********************ESI=ESI+EAX=0+1=1
004C8BBE  INC     EBX**************************EBX加1,做計數器!
004C8BBF  CMP     EBX, 11**********************比較EBX的值是否等於11
004C8BC2  JNZ     SHORT unpack.004C8BA5********迴圈,這個迴圈是把試驗碼的各位相加:1+2+3+4+5+6+-----+1=48,值存放在ESI
004C8BC4  MOV     EAX, [LOCAL.2]***************把上面取出的6位試驗碼:357864入EAX
004C8BC7  MOV     EDX, unpack.004C8C80*********固定字串值472008入EDX
004C8BCC  CALL    unpack.00404E60
004C8BD1  JB      SHORT unpack.004C8BE6********比較:357864和472008,低於就跳走!一跳就失敗!
004C8BD3  MOV     EAX, [LOCAL.2]***************把上面取出的6位試驗碼:357864入EAX
004C8BD6  MOV     EDX, unpack.004C8C90*********固定字串值500000入EDX
004C8BDB  CALL    unpack.00404E60
004C8BE0  JA      SHORT unpack.004C8BE6********比較:357864和500000,高於就跳走!一跳就失敗!
004C8BE2  MOV     BL, 1************************不跳到這裡,賦BL的值為1
004C8BE4  JMP     SHORT unpack.004C8BE8********無條件跳!
004C8BE6  XOR     EBXEBX********************跳到這裡EBX清0
004C8BE8  TEST    BLBL**********************004C8BE2處跳來,測試BL的值!
004C8BEA  JE      SHORT unpack.004C8C3C*******為0就跳,跳就失敗!不跳往下!
004C8BEC  XOR     EBXEBX********************EBX清0
004C8BEE  CMP     ESI, 39*********************比較ESI與39,ESI的值是:48
004C8BF1  JL      SHORT unpack.004C8BFA*******小於就跳走
004C8BF3  CMP     ESI, 39*********************比較ESI與39
004C8BF6  JG      SHORT unpack.004C8BFA*******大於就跳走!相等呢?不跳!就成功
004C8BF8  MOV     BL, 1***********************賦BL的值為1
004C8BFA  CMP     ESI, 47*********************同上!
004C8BFD  JL      SHORT unpack.004C8C06
004C8BFF  CMP     ESI, 48*********************同上!
004C8C02  JG      SHORT unpack.004C8C06*******大於就跳,等於48就不跳!就成功
004C8C04  MOV     BL, 1
004C8C06  CMP     ESI, 64
004C8C09  JL      SHORT unpack.004C8C12
004C8C0B  CMP     ESI, 65
004C8C0E  JG      SHORT unpack.004C8C12*******等於65就成功!
004C8C10  MOV     BL, 1
004C8C12  CMP     ESI, 6F
004C8C15  JL      SHORT unpack.004C8C1E
004C8C17  CMP     ESI, 6F
004C8C1A  JG      SHORT unpack.004C8C1E******等於6F就成功!
004C8C1C  MOV     BL, 1
004C8C1E  CMP     ESI, 7D
004C8C21  JL      SHORT unpack.004C8C2A
004C8C23  CMP     ESI, 7D
004C8C26  JG      SHORT unpack.004C8C2A******等於7D就成功
004C8C28  MOV     BL, 1
004C8C2A  CMP     ESI, 88
004C8C30  JL      SHORT unpack.004C8C3C
004C8C32  CMP     ESI, 88
004C8C38  JG      SHORT unpack.004C8C3C*****等於88就成功!
004C8C3A  MOV     BL, 1*********************賦BL的值為1
004C8C3C  XOR     EAXEAX
004C8C3E  POP     EDX                              
004C8C3F  POP     ECX                              
004C8C40  POP     ECX                              
004C8C41  MOV     DWORD PTR FS:[EAX], EDX         
004C8C44  PUSH    unpack.004C8C5E
004C8C49  LEA     EAX, [LOCAL.5]
004C8C4C  MOV     EDX, 5
004C8C51  CALL    unpack.00404A88
004C8C56  RETN

3、演算法分析:
   這個軟體註冊成功必須滿足下列條件:
   第一:註冊碼必須是16位!
   第二:從註冊碼中取出6位,必須不能小於472008,不能大於500000,註冊碼的6位取法:取註冊碼的最後1位,
與3除,由除的餘數來控制從第幾位取,如最後一位是1,則餘數為1,1+2=3,就從第3位取,如是2,則餘數是2,2+2=4,
從第4位取,以下類推,然後每隔一位取1位,取完6位為止。
   第三:把註冊碼的各位相加,設值為X,則X必須等於:39、48、65、6F、7D、88中的任何一個就成功!
   給幾個可用的註冊碼:1243858867111101、8488999999999999

相關文章