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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

160个Crackme026之六段式注册码详解

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

文章目錄

    • 查殼
    • 分析程序
    • 算法分析
      • 基礎校驗
      • 第一部分
      • 第二部分
      • 第三部分
      • 第四部分
      • 第五部分
      • 第六部分
    • 寫出注冊機
    • 驗證結果

查殼

這個Crackme也是用VB寫的,難度是問號,自我感覺應該值三顆星

分析程序

首先根據字符串提示,來到按鈕點擊事件的開頭

下斷點,隨便輸入一個用戶名和序列號,開始分析程序

算法分析

這個程序的算法分成六個部分,下面依次對每個部分的算法進行詳細的講解

基礎校驗

首先獲取輸入的用戶名的長度,必須大于4,如果不大于則提示錯誤

第一部分

最難也是最麻煩的就是第一部分了,如果解決了這個部分,那么后面剩余的四個部分就不成問題

1-1 首先獲取用戶名長度,然后以用戶名長度作為循環的次數,開始一輪循環,即i=strlen(username)

1-2 獲取用戶名第一位的ASCII值->username[0]

1-3 用戶名的第一位的ASCII值乘以432.4再乘以17.79,->username[0]*432.4*17.79

1-4 將1-3-result除以0x15,然后把浮點數值轉為字符串->username[0]*432.4*17.79/0x15

1-5 跳到循環開始處,開始新一輪循環

1-6 取最后一次循環的計算結果,然后舍去小數部分->username[usernameLength-1]*432.4*17.79/x0x15

1-7 將1-6的結果轉為浮點數后加上用戶名的第一個字節的ASCII值 這個就是完整的第一部分的算法了

用代碼表示這部分的算法結果如下:

(username[usernameLength - 1] * 432.4*17.79 / 15 + username[0])

剩下的幾部分算法也都是基于這個部分的結果

第二部分

2-1 首先將用戶名的第一位的ASCII值乘以0x19->username[0]*0x19

2-2 用1-4的結果減去2-1的結果,->(username[usernameLength - 1] * 432.4*17.79 / 15 - username[0] * 0x19)

第三部分

第三部分直接就是第一部分以十六進制形式轉成字串的結果->username[usernameLength - 1] * 432.4*17.79 / 15

第四部分

第四部分就是用username[0]*用戶名的長度再減去0x1B->username[0] * usernameLength - 0x1b

第五部分

第五部分就是用戶名的長度

第六部分

第六部分是固定的字符串"-CM",拼接完第六部分之后就算關鍵的比較函數了。

以上就是這個程序的完整的算法,另外這個作者好像還有點皮,會用SendKey來模擬鍵盤按鍵給你搗亂,但對調試程序影響不大。

寫出注冊機

根據每一部分的算法 我們可以寫出這個程序的注冊機 代碼如下:

#include <iostream> #include <windows.h>using namespace std;int main() {char username[20] = { 0 };printf("請輸入用戶名:");scanf_s("%s", username, 20);int usernameLength = strlen(username);if (usernameLength < 5){printf("用戶名長度必須大于5");}char key[50];char key1[10], key2[10], key3[10], key4[10], key5[10];sprintf(key1, "%d", (int)(username[usernameLength - 1] * 432.4*17.79 / 15 + username[0]));sprintf(key2, "%X", (int)(username[usernameLength - 1] * 432.4*17.79 / 15 - username[0] * 0x19));sprintf(key3, "%X", (int)(username[usernameLength - 1] * 432.4*17.79 / 15));sprintf(key4, "%d", (int)(username[0] * usernameLength - 0x1b));sprintf(key5, "%d", usernameLength);memset(key, 0, sizeof(key));strcat(key, key1);strcat(key, key2);strcat(key, key3);strcat(key, key4);strcat(key, key5);strcat(key, "-CM");printf("%s\n", key);system("pause");return 0; }

驗證結果

輸入注冊機算出的序列號,提示成功 破解完成

最后,需要udd相關文件的可以到我的Github下載:https://github.com/TonyChen56/160-Crackme

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的160个Crackme026之六段式注册码详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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