本帖最后由 Blue1845596018 于 2014-4-9 15:00 编辑
好了,终于要开始讲条件判断了,这次会使用第三课写的例子进行分析破解,直接进入正题
------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
用到的工具依然是那两个,自行下载
NETReflector8.1 链接: http://pan.baidu.com/s/1c0gmOFY 密码: m6r2
reflexil1.6 链接: http://pan.baidu.com/s/1c0gmOFY 密码: m6r2
第三课的例子 链接: http://pan.baidu.com/s/1bniWSsJ 密码: nttn
------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
分析下If-else
C#中的If-else
[C#] 纯文本查看 复制代码
if (判断条件)
//判断条件为true(真)执行的代码
else
//判断条件为false(假)执行的代码
IL中的If-else
[C#] 纯文本查看 复制代码
条件为真:goto 真
假
//判断条件为false(假)执行的代码
goto 退出
真
//判断条件为true(真)执行的代码
退出
下面我们来看第三课里我们编写的实例
C#中源码
[C#] 纯文本查看 复制代码 if (textBox1.Text == "Blue")
MessageBox.Show("注册成功");
else
MessageBox.Show("注册失败");
IL的代码
[C#] 纯文本查看 复制代码 IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication1.Form1::textBox1
IL_0007: callvirt instance string [System.Windows.Forms]System.Windows.Forms.Control::get_Text()
IL_000c: ldstr "Blue"
IL_0011: call bool [mscorlib]System.String::op_Equality(string,
string)
IL_0016: ldc.i4.0
IL_0017: ceq
IL_0019: stloc.0
IL_001a: ldloc.0
IL_001b: brtrue.s IL_002a
IL_001d: ldstr bytearray (E8 6C 8C 51 10 62 9F 52 ) // .l.Q.b.R
IL_0022: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
IL_0027: pop
IL_0028: br.s IL_0035
IL_002a: ldstr bytearray (E8 6C 8C 51 31 59 25 8D ) // .l.Q1Y%.
IL_002f: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
IL_0034: pop
IL_0035: ret
看到IL中,IL_001b: brtrue.s IL_002a,如果为TRUE跳转到IL_002a,就是注册成功的逻辑
下面开始破解这个程序
brtrue.s改brfalse.s
这个界面怎么来的。。。。。。请看第一课和第二课,如果已经看了,继续
UPDATE后保存,执行一下看看
是不是感觉有点不完美,如果我想输入Blue也是注册成功呢,好吧,我们继续想办法
回到RE
改这个我框出来的下拉列表,当前是第10行,那就让他无论条件判断是TRUE还是FALSE,都跳转到11
这样修改的话无论条件成立与否都是执行11行的
修改保存,执行看看
有人会问了,如果注册逻辑是倒的么,或者这个地方,我实际想要的是输入任意字符都是注册失败怎么办
返回RE,继续想办法
把我选中的11~14行删除的话,不就是无论TRUE和FALSE都是执行第15行了,试试看
右键删除,另存,执行
顺利搞定
这课就到这里了,大家平时需要注意的是NET的IL代码,不是随便修改的,不符合语法规范或者改得不对就会报错,执行不起来的,如何避免,只有多改多试多积累了
修改软件注册逻辑的时候,如果修改正常逻辑走不下去(大部分软件都走不下去的其实)因为正常逻辑里会对注册码进行解码换算赋值等等,这些你输的假码都是无法完成的
所以会报错,这个时候就要分析正常流程到底做了什么,有的只是把注册码写入TXT,DATA或者注册表,重启之后再验证,有的是拆解,解码,比对机器码,赋值时间等等
如果改注册不行就可以尝试用别的破解方法,初始值啊,改功能逻辑跳转等等
传送门
第一课 http://www.52pojie.cn/thread-248348-1-1.html
第二课 http://www.52pojie.cn/thread-249034-1-1.html
第三课 http://www.52pojie.cn/thread-250626-1-1.html
第四课 http://www.52pojie.cn/thread-250633-1-1.html |