好友
阅读权限10
听众
最后登录1970-1-1
|
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。
本帖最后由 hqm1234 于 2011-8-15 15:37 编辑
今天早上闲来无事,看来下52的暑假cm(上),拿来其中一个cm,用.net写的,由于之前完全没有接触过.net的破解方面,今天早上花了一上午终于把这个暴力破解了。下面写下我的心得体会。
1.先看看需要用的工具Reflector.exe(用于查看反编译的c#代码,不过这个cm比较简单可以不用)
ildasm 把.net程序翻译成il文件(具体什么是il文件,自己搜)
ilasm 把.il文件编译成exe文件(另外上面反编译出来的几个文件必须需要才能编译成exe文件,不然编译不成功)
另外需要了解il指令,http://www.cnblogs.com/flyingbirds123/archive/2011/01/29/msil_ref.html
2.现在先来看具体步骤
先用Reflector.exe打开,基本上可以看出这个cm的思路,由于程序比较简单,可以很容易就逆出他的算法,由于要爆破,继续往下走。
下面我们来看下如何爆破
先用ildasm反编译,,得到一系列文件
用010edit打开il文件,这么多,挨个看太麻烦了。由上面可以看到cm成功或者失败 都是用messgebox显示的,所以直接搜messgebox果然有,重点就是下面这段代码了。
IL_0048: brtrue.s IL_0080
IL_004a: nop
IL_004b: ldarg.0
IL_004c: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication1.Form1::textBox1
IL_0051: ldc.i4.0
IL_0052: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Visible(bool)
IL_0057: nop
IL_0058: ldarg.0
IL_0059: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication1.Form1::textBox2
IL_005e: ldc.i4.0
IL_005f: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Visible(bool)
IL_0064: nop
IL_0065: ldarg.0
IL_0066: ldfld class [System.Windows.Forms]System.Windows.Forms.Label WindowsFormsApplication1.Form1::label3
IL_006b: ldc.i4.1
IL_006c: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Visible(bool)
IL_0071: nop
IL_0072: ldstr bytearray (4F 00 4B 00 02 30 53 00 75 00 63 00 63 00 65 00 // O.K..0S.u.c.c.e.
73 00 73 00 ) // s.s.
IL_0077: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
IL_007c: pop
IL_007d: nop
IL_007e: br.s IL_008b
IL_0080: ldstr bytearray (4E 00 6F 00 02 30 66 00 61 00 69 00 6C 00 65 00 // N.o..0f.a.i.l.e.
64 00 ) // d.
IL_0085: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
IL_008a: pop
IL_008b: ret
两个messagebox肯定就是我们需要爆破的地方了,通常就是改跳转,结合Reflector反编译的,我们可以得出IL_0085这个call就是显示成功crack的地方
在往上看到IL_0048: brtrue.s IL_0080,查询il指令,
brtrue.s 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)
改成IL_0048: brfalse.s IL_0080,保存。
调用ilasm编译 命令为(ilasm 求爆破)默认编译成exe,
OK 爆破成功!
这个.net程序,没有用到其他的加密措施,如加壳,混淆代码等,故比较简单,希望以上的一点心得对大家有帮助,
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|