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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

160个Crackme006

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

文章目錄

    • 查殼
    • 導(dǎo)入符號
    • 分析程序
    • 分析Cancella按鈕點擊事件
      • 分析關(guān)鍵函數(shù)
      • 寫出注冊機
      • 驗證結(jié)果
    • 分析ok按鈕點擊事件
      • 分析關(guān)鍵函數(shù)
      • 寫出注冊機
      • 校驗結(jié)果

查殼

同樣也是用Delphi寫的,沒有殼。

導(dǎo)入符號

將程序載入到IDA,添加所有的Delphi的簽名,然后導(dǎo)出為map文件,在OD中加載map文件,強大的簽名庫可以減少后面的分析時間。

分析程序

接下來分析一下這個程序,OK那個按鈕被禁用了,這是什么套路?

旁邊還有個help,不過都是英文的,上翻譯。



好,大概了解了。我們的目的就是要讓那兩個按鈕變成隱藏的。

再拖到Darkde4里面查看一下按鈕事件和窗口

從控件窗口可以看到在下面這個控件里有一個OK按鈕 有一個Cancella按鈕,還有一個圖片。我們的目的應(yīng)該就是讓那個圖片顯示出來。

事件按鈕有如下幾個響應(yīng)事件,每個響應(yīng)事件都有對應(yīng)的RVA:

  • 代碼變換事件
  • OK按鈕點擊事件
  • 用戶名變換事件
  • Cancella按鈕點擊事件
  • About按鈕的點擊事件

那么既然要讓這兩個按鈕變的不可見,就從Cancella這個按鈕的點擊事件開始分析

分析Cancella按鈕點擊事件

找到Cancella按鈕點擊事件對應(yīng)的RVA0x442EA8,隨便輸入一個賬號密碼,下斷分析。

首先會獲取輸入的密碼,然后將密碼轉(zhuǎn)為十進(jìn)制數(shù)。接著獲取用戶名,然后是一個關(guān)鍵函數(shù),這個函數(shù)如果返回值為1,那么就不跳轉(zhuǎn),按鈕就會消失。接下來分析下這個關(guān)鍵函數(shù)。

分析關(guān)鍵函數(shù)

這里直接貼出IDA的分析結(jié)果,如果想要詳細(xì)的過程可以去看我的udd文件。首先對用戶名的做取模運算之后求階乘,然后將每個用戶名的ASCII乘以階乘相加,最后把結(jié)果減去輸入的密碼,如果等于31337就返回1,否則返回零。也就是說,我們只要復(fù)制上面的過程,然后將結(jié)果減去31337,就能得到正確的密鑰。

寫出注冊機

//計算第二個按鈕Cancella所需要的密碼 int CalcKey1() {int key = 0;int nTemp = 0;int num = 0; char username[20] = { 0 };printf("請輸入用戶名,長度必須在六位以上:");scanf_s("%s", username, 20);//檢查長度if (strlen(username)<=5){printf("用戶名長度不滿足 請重新輸入");return 0;}//求階乘num = ((int)username[4]) % 7 + 2;nTemp = num;for (int i=1;i< nTemp;i++){num *= i;}nTemp = num;int result = 0;//求用戶名的ASCII和乘以階乘for (int i=0;i<strlen(username);i++){result += nTemp * username[i];}//取出正確的密碼key = result - 0x7A69;printf("%d\n", key);}

驗證結(jié)果

輸入計算的結(jié)果,點擊 我們可以看到右邊的按鈕消失了,并且左邊的OK按鈕也解除了禁用狀態(tài)。

分析ok按鈕點擊事件

接下來來到的位置,來分析OK按鈕的點擊事件。

還是同樣的套路,有一個關(guān)鍵的算法函數(shù),這個函數(shù)返回1,按鈕就消失,否則不成功。

分析關(guān)鍵函數(shù)

整個關(guān)鍵函數(shù)校驗如下,首先取出密碼的最后一位,然后做平方運算,接著乘以當(dāng)前的密碼長度,也就是index,然后對0x19取模,最后加上0x41然后保存結(jié)果,每個結(jié)果對應(yīng)一位用戶名。

寫出注冊機

接下來還原算法寫出注冊機

//計算第一個按鈕OK所需要的密碼 int CalcKey2() {char key[20] = { 0 };char username[20] = { 0 };printf("請輸入注冊碼,長度必須在六位以上:");//輸入密碼scanf_s("%s", key, 20);//檢查長度if (strlen(key) <= 5){printf("密碼長度不滿足 請重新輸入");return 0;}for (int i= strlen(key)-1;i!=-1;i--){username[i] = (key[i] * key[i] * (i + 1)) % 0x19 + 0x41;}printf("%s", username); }

校驗結(jié)果

輸入序列號,然后自動生成用戶名,可以看到OK按鈕也跟著消失了。

需要相關(guān)文件的可以到我的Github下載:https://github.com/TonyChen56/160-Crackme

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。