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之六段式注册码详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 160个Crackme025之巧去Neg
- 下一篇: 160个Crackme027之First