-
-
[原创]
-
发表于: 2013-7-5 08:39 3569
-
一个简单的crackme,程序是由.Net编写的
下载地址:http://bbs.pediy.com/showthread.php?t=170313
我们用.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);
}
下载地址:http://bbs.pediy.com/showthread.php?t=170313
我们用.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);
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [原创]2015移动安全挑战赛解题思路 2569
- [原创]第一次接触APK[破解纪实] 7645
- [原创]HOOK学习笔记与心得 35191
- [原创]大学的那点事~XX高校数字登录系统浅析 7753
- [求助]RSA有加密算法源码 如何写一个小程序 7724
看原图
赞赏
雪币:
留言: