一款比較簡單的PDF解密工具註冊碼分析

準備工作

  1. 工具環境
    Windows7+OllyDbg+PEiD
  2. 查殼
    無殼,VB6.0程序
    在這裏插入圖片描述

暴力破解

OD載入文件,F9運行,點擊註冊按鈕,彈出註冊頁面
在這裏插入圖片描述
去掉網頁彈窗,字符串搜索,找到網址
在這裏插入圖片描述
在這裏插入圖片描述
內存修改網址,用00填充
在這裏插入圖片描述
保存文件
在這裏插入圖片描述
分析dump出來的文件
在這裏插入圖片描述
提示字符串剛纔在找網址的時候見過,定位過去
在這裏插入圖片描述
跟蹤跳轉,直到找到關鍵跳轉
在這裏插入圖片描述
驗證一下找的對不對,再次運行程序,NOP掉關鍵跳轉,程序註冊成功。
在這裏插入圖片描述

算法分析

  1. 找到註冊碼算法位置
    註冊窗口會阻塞父窗口,說明這是一個模態對話框 下API斷點DialogBoxParamA/W,DialogBoxIndirectParamA/W
    程序沒有斷下
    獲取註冊碼輸入框內容APIGetDlgItemTextA/W也沒有斷下
    使用VB反編譯工具查找按鈕響應事件
    在這裏插入圖片描述
    Command1和Command2分別是確定和取消按鈕
    在這裏插入圖片描述

使用這個工具可以查看響應函數地址,確定按鈕的響應函數地址是0x4F9110
定位到響應函數,F8跟蹤
在這裏插入圖片描述
0x4F9162處F8會運行到關鍵跳轉斷點處,也就是說這個CALL就是關鍵函數了,註冊碼計算判斷都在這個函數裏進行,F7單步進入,繼續F8跟蹤
在這裏插入圖片描述
觀察堆棧,此處出現註冊碼的比較,比較完成後會把ax的值保存在[ebp-0xE8]中,接下來會判斷該值是否爲0,不爲0對[ebp-0x34]賦值爲0xFFFF,跳轉到關鍵跳轉進行判斷,下面是詳細的代碼分析

004FB0C8 > \FF75 C4 PUSH DWORD PTR SS:[EBP-0x3C] ; "FLA873416588611047"
004FB0CB . FF75 C0 PUSH DWORD PTR SS:[EBP-0x40] ; "123456"
004FB0CE . E8 C36FF0FF CALL <JMP.&MSVBVM60.__vbaStrCmp>
004FB0D3 . F7D8 NEG EAX
004FB0D5 . 1BC0 SBB EAX,EAX
004FB0D7 . 40 INC EAX
004FB0D8 . F7D8 NEG EAX
004FB0DA . 66:8985 18FFF>MOV WORD PTR SS:[EBP-0xE8],AX ; 標誌位賦值
004FB0E1 . 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-0x40]
004FB0E4 . 50 PUSH EAX
004FB0E5 . 8D45 C4 LEA EAX,DWORD PTR SS:[EBP-0x3C]
004FB0E8 . 50 PUSH EAX
004FB0E9 . 6A 02 PUSH 0x2
004FB0EB . E8 946FF0FF CALL <JMP.&MSVBVM60.__vbaFreeStrList>
004FB0F0 . 83C4 0C ADD ESP,0xC
004FB0F3 . 8D45 B0 LEA EAX,DWORD PTR SS:[EBP-0x50]
004FB0F6 . 50 PUSH EAX
004FB0F7 . 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-0x4C]
004FB0FA . 50 PUSH EAX
004FB0FB . 6A 02 PUSH 0x2
004FB0FD . E8 646FF0FF CALL <JMP.&MSVBVM60.__vbaFreeObjList>
004FB102 . 83C4 0C ADD ESP,0xC
004FB105 . 0FBF85 18FFFF>MOVSX EAX,WORD PTR SS:[EBP-0xE8] ; 取出保存的值
004FB10C . 85C0 TEST EAX,EAX
004FB10E . 74 0E JE SHORT PPR_1.004FB11E ; 進行判斷
004FB110 . C745 FC 06000>MOV DWORD PTR SS:[EBP-0x4],0x6
004FB117 . 66:834D CC FF OR WORD PTR SS:[EBP-0x34],0xFFFF
004FB11C . EB 31 JMP SHORT PPR_1.004FB14F ; 跳轉到關鍵跳轉
004FB11E > C745 FC 09000>MOV DWORD PTR SS:[EBP-0x4],0x9
004FB125 . 8D85 F8FEFFFF LEA EAX,DWORD PTR SS:[EBP-0x108]
004FB12B . 50 PUSH EAX ; /TMPend8
004FB12C . 8D85 08FFFFFF LEA EAX,DWORD PTR SS:[EBP-0xF8] ; |
004FB132 . 50 PUSH EAX ; |TMPstep8
004FB133 . 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-0x30] ; |
004FB136 . 50 PUSH EAX ; |Counter8
004FB137 . E8 4C6EF0FF CALL <JMP.&MSVBVM60.__vbaVarForNext> ; \__vbaVarForNext
004FB13C . 8985 E0FEFFFF MOV DWORD PTR SS:[EBP-0x120],EAX
004FB142 > 83BD E0FEFFFF>CMP DWORD PTR SS:[EBP-0x120],0x0
004FB149 .^ 0F85 86FEFFFF JNZ PPR_1.004FAFD5
004FB14F > C745 FC 0A000>MOV DWORD PTR SS:[EBP-0x4],0xA
004FB156 . 66:837D CC FF CMP WORD PTR SS:[EBP-0x34],0xFFFF
004FB15B . 0F85 61030000 JNZ PPR_1.004FB4C2 ; 跳轉到失敗
004FB161 . C745 FC 0B000>MOV DWORD PTR SS:[EBP-0x4],0xB
004FB168 . 833D B8185000>CMP DWORD PTR DS:[0x5018B8],0x0
004FB16F . 75 1B JNZ SHORT PPR_1.004FB18C

已經可以確定,堆棧中出現的字符串 "FLA873416588611047"就是註冊碼,進行驗證
在這裏插入圖片描述
該軟件的註冊碼是唯一的,也就不需要註冊機了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章