hqm1234 发表于 2011-8-15 15:31

.net 初破 心得

本帖最后由 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.TextBox WindowsFormsApplication1.Form1::textBox1
    IL_0051:ldc.i4.0
    IL_0052:callvirt   instance void System.Windows.Forms.Control::set_Visible(bool)
    IL_0057:nop
    IL_0058:ldarg.0
    IL_0059:ldfld      class System.Windows.Forms.TextBox WindowsFormsApplication1.Form1::textBox2
    IL_005e:ldc.i4.0
    IL_005f:callvirt   instance void System.Windows.Forms.Control::set_Visible(bool)
    IL_0064:nop
    IL_0065:ldarg.0
    IL_0066:ldfld      class System.Windows.Forms.Label WindowsFormsApplication1.Form1::label3
    IL_006b:ldc.i4.1
    IL_006c:callvirt   instance void 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.DialogResult 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.DialogResult 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程序,没有用到其他的加密措施,如加壳,混淆代码等,故比较简单,希望以上的一点心得对大家有帮助,





hqm1234 发表于 2011-8-15 15:42

。。。貌似这个cm破解心得有人发了,之前没发现,囧~~~~~~~~



Shiny 发表于 2011-8-15 15:57

hqm1234 发表于 2011-8-15 16:03

谢谢 第一次发贴

woyaodaili 发表于 2011-8-15 16:27

hqm1234 发表于 2011-8-15 15:31 static/image/common/back.gif
今天早上闲来无事,看来下52的暑假cm(上),拿来其中一个cm,用.net写的,由于之前完全没有接触过.net的 ...

不错,感谢提供的思路和资料~

a070458 发表于 2011-8-15 20:11

先顶 再看 谢LZ了

低调(d-iao) 发表于 2011-8-16 01:25

还是比较喜欢用SAE直接修改..方便多
转IL 只在非常时期 嘿嘿

hqm1234 发表于 2011-8-16 09:20

LS 我也是第一次破.net
想请教下SAE是什么东东

xiaorong520 发表于 2011-8-16 12:41

Simple Assembly Explorer (SAE) 用来破解和汉化。net 常用 看个人喜好~

xiaorong520 发表于 2011-8-16 12:44

http://code.google.com/p/simple-assembly-explorer/ 加个地址上去吧
页: [1] 2
查看完整版本: .net 初破 心得