Ericky 发表于 2013-7-5 08:38

【.Net】编写的一个crackme的分析

本帖最后由 PoJie_小雨 于 2013-7-5 08:45 编辑

今天跟大家分析一个简单的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 IfEnd 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 IfEnd Sub将S字符串base64编码后 倒转 再经过base64编码,与固定字符串“PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph”比较,同则注册成功。分析了加密过程,我们可以逆向的来找注册码:第一步:base64解码(“PTBpVGxSM1lqTWtVaE4yU0pOM1J2Qnph”)= “=0iTlR3YjMkUhN2SJN3RvBza”第二步:Array.Reverse(“=0iTlR3YjMkUhN2SJN3RvBza”)=“azBvR3NJS2NhUkMjY3RlTi0=”第三步:base64解码(“azBvR3NJS2NhUkMjY3RlTi0= ”)= “k0oGsIKcaRC#cteN-”第四步:首字符变小写,即不变第五步:Array.Reverse后替换:得到最后的注册码:.Ne7c#CR4cK1sG0Ok本文的三个函数附录:Toupper:功能:将字符转换为大写英文字母Tolower:功 能: 把字符转换成小写字母,非字母字符不做出处理Array.Reversepublic static stringReverseByArray(this stringoriginal){    char[] c = original.ToCharArray();    Array.Reverse(c);    return new string(c);}


【下载地址】: http://bbs.pediy.com/showthread.php?t=170313

很久没来了 实习好忙o~

ps122 发表于 2013-7-5 08:48

厉害,这都看到源码了

RedAngel丶 发表于 2013-7-5 11:19

厉害,学习了

吾爱扣扣 发表于 2013-7-5 12:39

这CM的源码如果经过乱序就更难了。。 不过能搞.net的人一定是高手。。我死也不会

那小子真高 发表于 2013-7-5 12:53

新手虽然完全不懂,不过支持一下

a070458 发表于 2013-7-5 13:14

又一篇NET分析的好文章 收藏了

苏紫方璇 发表于 2013-7-5 14:33

支持小雨。。。话说好长时间不见你发帖了

qiusuo 发表于 2013-7-5 14:59

虽然完全不懂,不过支持一下

Ericky 发表于 2013-7-5 15:15

苏紫方璇 发表于 2013-7-5 14:33 static/image/common/back.gif
支持小雨。。。话说好长时间不见你发帖了

嘿嘿 忙了 谢谢支持·

小雨细无声 发表于 2013-7-5 18:56

玩.net的都是高手,谢谢!
页: [1] 2
查看完整版本: 【.Net】编写的一个crackme的分析