160个Crackme031之一元二次方程
文章目錄
- 查殼
- 設(shè)計(jì)思路
- 算法分析
- 第一部分
- 第二部分
- 寫出注冊(cè)機(jī)
- 校驗(yàn)結(jié)果
查殼
這個(gè)Crackme和030是同一個(gè)作者,也是VB程序。雖然難度顯示是問號(hào),充其量也就一星
設(shè)計(jì)思路
這個(gè)Crackme和上一個(gè)算法幾乎一樣,作者又故技重施了一次。所以我們先來捋一遍Crackme30的校驗(yàn)過程,再看這個(gè)會(huì)相對(duì)輕松。
作者首先準(zhǔn)備了一個(gè)正確的序列號(hào)和一個(gè)密鑰,然后用密鑰去加密這個(gè)正確的序列號(hào),得到密文,也就是結(jié)果;然后用同樣的密鑰去加密用戶輸入的序列號(hào),得到結(jié)果。最后去比較正確的序列號(hào)加密的結(jié)果和用戶輸入的序列號(hào)加密的結(jié)果。如圖:
根據(jù)異或的特性,直接用正確結(jié)果去異或密鑰,就能得到正確的序列號(hào),相當(dāng)于解一個(gè)一元一次方程。那么這一次的Crackme有兩個(gè)密鑰,作者對(duì)序列號(hào)進(jìn)行了兩次加密,這就相當(dāng)于解一個(gè)一元二次方程了。直接來看這個(gè)程序的算法
算法分析
這個(gè)序列號(hào)被加密了兩次,所以分為兩個(gè)部分,先來看第一個(gè)部分,先隨便輸入一個(gè)序列號(hào)123456789
第一部分
獲取序列號(hào)長度,轉(zhuǎn)成int之后將序列號(hào)長度作為循環(huán)次數(shù)
然后開始逐個(gè)取出序列號(hào)的每一個(gè)字符
然后取出硬編碼字符串的字符,也就是前面說的密鑰,這是第一個(gè)密鑰,數(shù)字4
然后再將序列號(hào)的ASCII值和密鑰的ASCII值進(jìn)行異或
然后將異或后的結(jié)果保存到[epb-0x38]
然后開始新一輪循環(huán)
我們直接在[ebp-0x38]就能看到這部分的計(jì)算結(jié)果,這個(gè)部分的計(jì)算結(jié)果還要用于跟第二個(gè)密鑰進(jìn)行異或
第二部分
首先還是獲取第一部分的結(jié)果的長度,作為循環(huán)次數(shù),然后你會(huì)看到[402D8D]這個(gè)地址有一個(gè)cmp [ebp-0x8],4,這個(gè)4其實(shí)是密鑰長度
然后從第一部分的計(jì)算結(jié)果中開始逐個(gè)取字符
然后從硬編碼的字符串中取一個(gè)字符,也就是這部分的密鑰,密鑰就是數(shù)據(jù)窗口的02 00 00 00,長度為4
然后用第一部分計(jì)算的結(jié)果和密鑰進(jìn)行異或,5是我們第一部分的計(jì)算結(jié)果的第一位,32是2的ASCII值
異或完成之后開始下一輪循環(huán),循環(huán)結(jié)束之后會(huì)得到最終結(jié)果
最后用最終結(jié)果和硬編碼的字符串進(jìn)行比較,根據(jù)比較的結(jié)果提示注冊(cè)成功與否
寫出注冊(cè)機(jī)
來總結(jié)一下剛才的分析過程,用輸入的序列號(hào)和密鑰1進(jìn)行異或,得到結(jié)果。然后再將結(jié)果和密鑰2進(jìn)行異或,得到最終結(jié)果。然后將最終結(jié)果和字符串進(jìn)行比對(duì)。
那么我們就能利用字符串和兩個(gè)密鑰,進(jìn)行兩次異或操作,就能拿到正確的序列號(hào)了。這個(gè)可以手工計(jì)算也可以寫個(gè)注冊(cè)機(jī)實(shí)現(xiàn)。最后,貼上代碼:
#include <iostream> #include <windows.h> using namespace std;int main() {char serial[16] = { 0 };char result[15] = { "VeiajeEjbavwij" };char key1[16] = { "200020002000200" };char key2 = '4';for (int i = 0; i < 14; i++){serial[i] = result[i] ^ key2;}for (int i = 0; i < 14; i++){serial[i] = serial[i] ^ key1[i];}printf("%s\n", serial);system("pause");return 0; }校驗(yàn)結(jié)果
填入計(jì)算出來的序列號(hào),提示密碼正確 破解完成。
需要相關(guān)文件的可以到我的Github下載:https://github.com/TonyChen56/160-Crackme
總結(jié)
以上是生活随笔為你收集整理的160个Crackme031之一元二次方程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 160个Crackme030之一元一次方
- 下一篇: 160个Crackme032用Proce