回覆列表
-
1 # 成睿軟體
-
2 # 使用者2226384485603
軟體破解首先要截獲註冊碼資訊(部分要先脫殼),使用ollyice這類軟體,透過在資料中搜索註冊碼、註冊失敗這類欄位來確定註冊碼即將出現的位置,然後設定斷點,截獲註冊碼(部分軟體註冊碼是內嵌的),還有的是把軟體的註冊碼校驗過程改掉,直接連線到註冊成功部分,也就是輸入任何字元都成功。還有則是透過修改登錄檔來達成(這是最簡單的)
破解軟體是一種逆向思維,就好比開鎖師傅開鎖的一個過程。
所有開發者開發的軟體,最終都需要終端使用者的載體上執行,這個載體可能是電腦,可能是手機終端等移動裝置,這個載體的cpu硬體把軟體的程式碼轉成二進位制程式碼解析並執行。
大概流程講完了,說一說破解過程。
1. 爆破
爆破就是修改目標軟體的執行流程,因為軟體執行程式碼都需要轉換成二進位制cpu指令,彙編就是高階的系統基層程式設計軟體,任何軟體都可以轉變成彙編指令。
工具常用的od,hexedit,載入目標軟體自動程式設計彙編指令,把原來要跳轉的改成不跳轉。
例如
Cmp eax,edx
Je ebx
改成
Cmp eax,edx
Jne ebx
什麼意思呢?就是假如這是軟體輸入註冊碼過程判斷註冊碼是否正確的一個流程指令。
cmp是比較的意思,
eax和edx 是暫存器地址,裡面對應沒錯地址儲存的內容是錯誤的註冊碼和正確的註冊碼,
Je 是相等,如果
使用者輸入的住麼嗎和軟體內部計算的註冊碼相等,條件滿足的話執行指定位置程式碼。
Jne是不相等。
我們肯定不知道正確的註冊碼,所以修改後隨意輸入註冊碼就跳轉到了ebx這個正確註冊碼的位置,就完成了破解。在用二進位制的形式儲存你修改後的檔案,這就是破解補丁。
2. 演算法註冊機
註冊碼生成都是有一套開發者自定義的演算法,做演算法註冊機就是透過除錯分析逆向推斷出這個演算法。
例如 軟體的機器碼123456,開發者會根據他自己的演算法生成abcd這個註冊碼,當用戶輸入註冊碼的556677的時候,軟體會根據機器碼123456透過演算法生成abcd,在對比使用者輸入的是不是abcd,來判斷註冊碼是否正確。我們只要追蹤除錯這個演算法生成過程,就能寫出對應的註冊機。
3.記憶體補丁
記憶體補丁就是動態的爆破修改軟體,或者動態的抓去正確的註冊碼。
例如 記憶體補丁找註冊碼,就是監控兩個註冊碼的對比過程,發現正確的註冊碼就把它抓取出來並且顯示出來,這樣就可以用正確的註冊碼來註冊了。
破解是一個很綜合的一個過程,會碰到各種開發者故意設定的抵抗防線,要一層一層的去掉這些防線合法透過,這個過程對破解者的邏輯思維、數學演算法、彙編功力都要求很好。