第二個需要寫注冊機
首先查看檔案,打開檔案,什么也沒有,help ->about,彈出下面的彈窗

看來是沒有什么線索,直接放進OD里面

這里有一個函式CreatFileA,這個函式目的是訪問一個檔案,如果檔案不存在回傳值為-1
HANDLE CreateFile(
LPCTSTR lpFileName, //指向檔案名的指標
DWORD dwDesiredAccess, //訪問模式(寫/讀)
DWORD dwShareMode, //共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全屬性的指標
DWORD dwCreationDisposition, //如何創建
DWORD dwFlagsAndAttributes, //檔案屬性
HANDLE hTemplateFile //用于復制檔案句柄
);
跟下去看,可以看到函式執行完成后會回傳一個-1到eax,下一條指令cmp捕獲到后讓ZF位變成0,后面的jnz指令就沒辦法跳轉了

如果沒有這個檔案的話就沒有辦法繼續下去了,所以我們在同目錄下新建一個同名稱檔案(CRACKME3.KEY),而且在里面寫入字串,重新開始除錯


重新除錯后就不會回傳-1了

繼續,接下來又呼叫了一個ReadFile函式把檔案里面的字串放進暫存器ebx和記憶體空間里面

而且可以看到,這個函式到這里只截取了到r的字符,也就是說前18個截取到了,后面8個暫時沒有管
繼續往下,有一個陌生的call,由于不清楚這個call的用處,所以f7跟進

前面兩個xor清空暫存器,之后把push進來的引數,也就是18個字符給esi,然后給bl數值41,之后就是一串回圈

回圈是根據cl的大小來判斷的,回圈內部有bl的自加演算法,如果bl里面的數等于4f就會跳出回圈,之前給bl的數是41,也就是說這個回圈會執行4f-41=14次
看一下這個代碼,首先以位元組的大小把剛才esi里面傳入的字符給到al,然后將bl里面的數和al里面的數進行異或,異或完了之后再將它傳給esi,
我們來看第一次異或后得到的結果,第一次是a的ascall碼和41異或

得到了0x20,然后我們再搜索0x20的ascall碼的含義

在鍵盤上是space,以字符的形式顯示就是空格
b的ascall碼和0x42(每次回圈bl自加1)異或得到的結果也是0x20,所以前十四個字符在回圈過后都顯示為空格,

再看另外一個指令

這個是把前14個字符的ascall碼加到0x4020f9這個地址上,原本地址里面數字是00,加上14次之后就變成了0x01c0這個十六進制數

那這個回圈就沒有什么其他含義了,往下走

可以看見剛出call后,剛才的4020f9這個地址就和12345678進行了一次異或,異或完了之后這個地址里面的數變成了123457b8,之后又進了一個call

這個call也是不清楚什么含義,f7進去看看之后發現是給esi賦值opqr,然后把123457b8(即所有輸入進去字符中的前14個字符的ascall碼的和異或上0x12345678之后得到的數)和opqr進行比較,如果相同就進行跳轉,

而跳轉是跳轉到了破解成功的彈窗上,那么我們就明白了key檔案里面的后4位字符和前面的14位字符的關系,后4位字符就是前面14位字符的ascall碼和異或上0x12345678得到的
理清了思路,我們就可以寫注冊機制作key檔案破解程式了
下面是注冊機的腳本
username = input("please input your username:").center(14)
if len(username) > 14:
print("error,please input number less 14")
exit(0)
#先用username和0x41開始異或
tem_ = 0
xor_use = []
sum = 0
for i in range(len(username)):
tem = ord("A") + i
xor_use.append(tem ^ ord(username[i]))
#還有連加異或后得到的結果
sum += ord(username[i])
key = sum ^ 0x12345678
key_bytes = bytes(key.to_bytes(4,byteorder='little'))
with open('CRACKME3.KEY',"wb+") as f:
#把前十四個加密后的字符輸入進去,然后把后四位需要進行比較的字符也輸入進去,即可搞定key檔案注冊
f.write(bytes(xor_use))
f.write(bytes(key_bytes))
print("it is ok!")
當然,這個程式也能破解,不過破解難度會比較大,有時間的話會更新

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/548339.html
標籤:其他
