一個簡單的crackme,程序是由.Net編寫的
我們用.Net Reflector 載入
找到關鍵處 按鈕事件:
btn_ok_Click(Object, EventArgs) : Void
將輸入的字符串(key)中的“.”換成“-”,“7”換成“t”,“4”換成“a”,。。。等
Array.Reverse(array)
將替換過之後的序列號用Reverse()函數將一個字符串中最後一個字符放置到另一個字符串的第一個字符位置、倒數第二個字符放置在另一個字符串的第二個字符位置,以此類推。
將array 給定義的變量S,將字符串首位變爲大寫
將S字符串base64編碼後 倒轉 再經過base64編碼,與固定字符串“PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph”比較,同則註冊成功。
分析了加密過程,我們可以逆向的來找註冊碼:
第一步:base64解碼(“PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph”)= “=0iTlR3YjMkUhN2SJN3RvBza”
第二步:Array.Reverse(“=0iTlR3YjMkUhN2SJN3RvBza”)=“azBvR3NJS2NhUkMjY3RlTi0=”
第三步:base64解碼(“azBvR3NJS2NhUkMjY3RlTi0= ”)= “k0oGsIKcaRC#cteN-”
第四步:首字符變小寫,即不變
第五步:Array.Reverse後替換:得到最後的註冊碼:
.Ne7c#CR4cK1sG0Ok
本文的三個函數附錄:
Toupper:
功能:將字符轉換爲大寫英文字母
Tolower:
功 能: 把字符轉換成小寫字母,非字母字符不做出處理
我們用.Net Reflector 載入
找到關鍵處 按鈕事件:
btn_ok_Click(Object, EventArgs) : Void
對於的關鍵代碼如下:
Private Sub btn_ok_Click(ByVal sender As Object, ByVal e As EventArgs)
If (Me.textBox_Pass.Text = "") Then
MessageBox.Show("請輸入密碼!")
Else
Dim array As Char() = Me.textBox_Pass.Text.Replace(".", "-").Replace("7", "t").Replace("4", "a").Replace("1", "I").Replace("0", "o").Replace("O", "0").ToCharArray
Array.Reverse(array)
Dim s As New String(array)
s.ToUpper
Dim chArray2 As Char() = Convert.ToBase64String(Encoding.GetEncoding("UTF-8").GetBytes(s)).ToCharArray
Array.Reverse(chArray2)
Dim str2 As New String(chArray2)
Dim str3 As New String(Convert.ToBase64String(Encoding.GetEncoding("UTF-8").GetBytes(str2)).ToCharArray)
If (str3 = "PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph") Then
MessageBox.Show("密碼正確!密碼就是Key!", "成功")
Else
MessageBox.Show("密碼錯誤!", "失敗")
End If
End If
End Sub
下面我們分析一下代碼: If (Me.textBox_Pass.Text = "") Then
MessageBox.Show("請輸入密碼!")
Else
爲空則提示錯誤 Dim array As Char() = Me.textBox_Pass.Text.Replace(".", "-").Replace("7", "t").Replace("4", "a").Replace("1", "I").Replace("0", "o").Replace("O", "0").ToCharArray
將輸入的字符串(key)中的“.”換成“-”,“7”換成“t”,“4”換成“a”,。。。等
Array.Reverse(array)
將替換過之後的序列號用Reverse()函數將一個字符串中最後一個字符放置到另一個字符串的第一個字符位置、倒數第二個字符放置在另一個字符串的第二個字符位置,以此類推。
Dim s As New String(array)
s.ToUpper
將array 給定義的變量S,將字符串首位變爲大寫
Dim chArray2 As Char() = Convert.ToBase64String(Encoding.GetEncoding("UTF-8").GetBytes(s)).ToCharArray
Array.Reverse(chArray2)
Dim str2 As New String(chArray2)
Dim str3 As New String(Convert.ToBase64String(Encoding.GetEncoding("UTF-8").GetBytes(str2)).ToCharArray)
If (str3 = "PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph") Then
MessageBox.Show("密碼正確!密碼就是Key!", "成功")
Else
MessageBox.Show("密碼錯誤!", "失敗")
End If
End If
End Sub
將S字符串base64編碼後 倒轉 再經過base64編碼,與固定字符串“PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph”比較,同則註冊成功。
分析了加密過程,我們可以逆向的來找註冊碼:
第一步:base64解碼(“PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph”)= “=0iTlR3YjMkUhN2SJN3RvBza”
第二步:Array.Reverse(“=0iTlR3YjMkUhN2SJN3RvBza”)=“azBvR3NJS2NhUkMjY3RlTi0=”
第三步:base64解碼(“azBvR3NJS2NhUkMjY3RlTi0= ”)= “k0oGsIKcaRC#cteN-”
第四步:首字符變小寫,即不變
第五步:Array.Reverse後替換:得到最後的註冊碼:
.Ne7c#CR4cK1sG0Ok
本文的三個函數附錄:
Toupper:
功能:將字符轉換爲大寫英文字母
Tolower:
功 能: 把字符轉換成小寫字母,非字母字符不做出處理
Array.Reverse
public static string ReverseByArray(this string original)
{
char[] c = original.ToCharArray();
Array.Reverse(c);
return new string(c);
}