日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

160个Crackme004

發布時間:2025/3/21 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 160个Crackme004 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 查殼
    • 導出符號
    • 尋找突破口
    • 單擊事件
      • 結論
    • 雙擊事件
      • 結論
    • 再次尋找突破口
    • chkcode事件
    • 校驗結果
    • 寫出注冊機

查殼

程序是使用delphi編寫的 無殼

導出符號

既然是delphi編寫的 那么我們首先把他放到IDA里,把所有的關于Delphi的簽名全部加上

讓會自動幫我們識別所有的Delphi的函數,可以看到 添加簽名之后 未識別的函數就只有那么一丟丟,剩下的都是庫函數。然后再導出為MAP文件,導入到OD里,可以極大的減輕負擔。

尋找突破口

來觀察一下這個程序,兩個編輯框 一個圖片顯示框,據說是注冊之后會顯示一個朱茵的圖片。沒有按鈕,沒有提示。這尼瑪,完全沒有思路啊怎么整?難道要下內存訪問斷點?

這里要借助一款Delphi的反編譯工具Darkde4來幫助我們尋找突破口。

打開窗體部分,我們看到 原來之前一直誤以為的圖片顯示框是一個大按鈕,而這個大按鈕有兩個對應的相應事件,分別是單擊事件和雙擊事件。

接著再來來到過程部分。

這里是整個程序的所有的響應事件 以及對應的RVA

  • 第一個FormCreate是窗體的創建事件 這個不必關心,一般創建事件都是顯示圖形界面相關的操作
  • 第二個事件名是chkcode,全稱應該是checkcode,校驗代碼,至于校驗的是什么代碼?不知道
  • 第三個KeyUp是響應的鍵盤的彈起
  • 第四個DbClick是按鈕的雙擊事件
  • 第五個Click是按鈕的單擊事件

那么思路和突破口也就有了,對應單擊和雙擊事件的RVA 直接去OD分析兩個響應事件的具體實現部分。

單擊事件

在單擊事件的RVA 0x00457B8處下斷點,隨便輸入一組用戶名,從上往下分析所有的執行過程。

校驗過程如下

  • 獲取用戶名
  • 獲取用戶名長度 將長度加上0x1E
  • 將長度轉為字符串
  • 字符串拼接 拼接為長度+用戶名+循環次數
  • 整個算法循環18次 最后的結果如上圖
  • 算法循環完了之后 比較[esi+0x30C]的值是否相等,如果不相等直接退出。如果相等,又是一輪重復的循環校驗,接著提示注冊成功。就是說前面的循環算法就是作者下的一個套,真正有用的部分就是這個比較,也就是[esi+0x30C]的值必須是0x85。

    結論

    [esi+0x30C]的值必須是0x85

    OK 單擊事件分析結束 接下來分析雙擊事件

    雙擊事件

    還是通過Delphi的反編譯工具Darkde4的過程窗口找到雙擊事件的RVA。下斷點,分析。注意,在這之前必須取消單擊事件的斷點,否則斷不下來。

    還是同樣的套路,一輪循環的驗證之后,才來到真正有用的部分。

    [esi+0x30C]和0x3E作比較,如果成立,就把[esi+0x30C]賦值為0x85,也就滿足了單擊事件的條件。

    也就是說必定有一個地方,是把[esi+0x30C]賦值為0x3E。如果滿足了這個條件,那么雙擊事件校驗通過,單擊事件也通過。這簡直就是俄羅斯套娃啊。

    結論

    [esi+0x30C]的值必須為0x3E

    再次尋找突破口

    根據雙擊事件經驗 我們能猜測,肯定有一個地方是把0x3E賦值給了[esi+0x30C]。

    那么我們直接在OD中,右鍵->查找所有常量,輸入3E,看看能不能找到mov [esi+0x30C],0x3E這樣一條指令。如果能,那么這個就是真正校驗的地方。

    雖然跟想象的不一樣 但是大致還是差不多的 跟進去看看。然后,拉到函數最上面

    之前導入的IDA的注釋顯示這個是chkcode的校驗事件。就是之前我們在Darkde4過程窗口里看到的checkcode的響應事件,這個應該就是真正的校驗函數了。OK ,下斷點,開始分析

    chkcode事件

    這個在注冊碼輸入的時候就斷下來的,應該響應的是編輯框變換的響應事件。校驗過程如下

    首先獲取用戶名長度 然后將用戶名長度+5,接著進行字符串拼接 拼接方式為黑頭Sun Bird(用戶名長度+5)dseloffc-012-OK(用戶名),拼接好的字符串就是密碼。

    校驗結果

    接著輸入用戶名和序列號,根據之前的分析過程 我們需要先雙擊,再單擊才能夠校驗成功。

    但是這里需要注意一點,在過程窗口中有一個KeyUp鍵盤彈起事件,在你輸入序列號的時候 他會檢測是否有鍵盤彈起,如果沒有 則不成功,這樣做的目的是為了防止復制粘貼。破解的方法也很簡單,在復制粘貼完序列號之后隨便按一個鍵(我按的是方向鍵 因為不會影響到輸入結果),接著雙擊 再單擊。可以看到,成功注冊完成。

    寫出注冊機

    編寫注冊機 代碼如下

    #include "pch.h" #include <stdlib.h> #include <stdio.h> #include <windows.h>int main() {char key1[50] = "黑頭Sun Bird";char key2[50] = "dseloffc-012-OK";char username[20] = { 0 };printf("請輸入用戶名:");scanf_s("%s", username, 20);printf("序列號為:\n");printf("%s%d%s%s\n", key1, strlen(username)+5, key2, username);system("pause"); }

    校驗結果 隨便輸入一個用戶名,復制到程序,然后隨便按一個按鍵,雙擊 單擊。OK校驗成功!

    最后附上我的Github鏈接:https://github.com/TonyChen56/160-Crackme

    需要分析過程和udd等相關文件的可以去我的Github下載。

    總結

    以上是生活随笔為你收集整理的160个Crackme004的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。