一个简单的crackme,程序是由.Net编写的

一个简单的crackme,程序是由.Net编写的


我们用.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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值