|
吾爱游客
发表于 2015-8-31 20:21
1、申 请 I D :小政
2、个人邮箱:1520765870@qq.com
3、原创技术文章:net程序破解
今天同学给我发了个百度文库下载器让我看下,要注册,习惯性的先抄起OD,不过载入后没断下来程序直接跑起来了。。。看了下原来是.net程序撒,一直没搞过这玩意,网上找了下资料,发现也不是很难。
程序是这样子的,我擦CSDN传不了图片?
反正就是这样,拿Reflector打开找到关键位置
[csharp] view plaincopyprint?
- private void Button9_Click(object sender, EventArgs e)
- {
- try
- {
- RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\老张百度文库下载器", true);
- key.SetValue("注册码", this.TextBox3.Text.Trim());
- Module1.code2 = this.TextBox3.Text.Trim();
- key.Close();
- key = null;
- Module1.IsCopyRight = Conversions.ToBoolean(Module1.Get_zccode(Module1.code1, Module1.code2));
- if (Module1.IsCopyRight)
- {
- this.TabPage3.Text = "软件注册(已注册)";
- this.Button9.Enabled = false;
- this.Button8.Enabled = false;
- this.Button10.Enabled = false;
- this.TextBox3.ReadOnly = true;
- Interaction.MsgBox("注册成功,感谢您使用正版软件!", MsgBoxStyle.OkOnly, null);
- }
- else
- {
- this.TabPage3.Text = "软件注册(未注册)";
- Interaction.MsgBox("注册失败,请检查您的注册码或与软件提供商联系!", MsgBoxStyle.OkOnly, null);
- }
- }
- catch (Exception exception1)
- {
- ProjectData.SetProjectError(exception1);
- Exception exception = exception1;
- Interaction.MsgBox(exception.Message, MsgBoxStyle.OkOnly, "系统提示");
- ProjectData.ClearProjectError();
- }
- }
- 可以看到 Module1.IsCopyRight = Conversions.ToBoolean(Module1.Get_zccode(Module1.code1, Module1.code2));
- if (Module1.IsCopyRight)
private void Button9_Click(object sender, EventArgs e){ try { RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\老张百度文库下载器", true); key.SetValue("注册码", this.TextBox3.Text.Trim()); Module1.code2 = this.TextBox3.Text.Trim(); key.Close(); key = null; Module1.IsCopyRight = Conversions.ToBoolean(Module1.Get_zccode(Module1.code1, Module1.code2)); if (Module1.IsCopyRight) { this.TabPage3.Text = "软件注册(已注册)"; this.Button9.Enabled = false; this.Button8.Enabled = false; this.Button10.Enabled = false; this.TextBox3.ReadOnly = true; Interaction.MsgBox("注册成功,感谢您使用正版软件!", MsgBoxStyle.OkOnly, null); } else { this.TabPage3.Text = "软件注册(未注册)"; Interaction.MsgBox("注册失败,请检查您的注册码或与软件提供商联系!", MsgBoxStyle.OkOnly, null); } } catch (Exception exception1) { ProjectData.SetProjectError(exception1); Exception exception = exception1; Interaction.MsgBox(exception.Message, MsgBoxStyle.OkOnly, "系统提示"); ProjectData.ClearProjectError(); }} 可以看到 Module1.IsCopyRight = Conversions.ToBoolean(Module1.Get_zccode(Module1.code1, Module1.code2)); if (Module1.IsCopyRight)[csharp] view plaincopyprint?
就是计算注册码然后设置IsCopyRight布尔变量的值,将判断语句条件改为!Moudle.IsCopyRight就可以了。。。懒得看算法,其实进去看了也不难。。
怎么改呢,切换到IL
[csharp] view plaincopyprint?
- L_005d: stsfld bool 老张百度文库下载器.Module1::IsCopyRight
- L_0062: ldsfld bool 老张百度文库下载器.Module1::IsCopyRight
- L_0067: brfalse.s L_00b8
L_005d: stsfld bool 老张百度文库下载器.Module1::IsCopyRight L_0062: ldsfld bool 老张百度文库下载器.Module1::IsCopyRight L_0067: brfalse.s L_00b8
计算的值出栈到IsCopyRight,然后入栈判断是否为false来跳转,我们将brfalse.s改为brtrue.s就可以了。
打开ildasm找到对应的位置,显示字节
[csharp] view plaincopyprint?
- IL_005d: /* 80 | (04)00004C */ stsfld bool '老张百度文库下载器'.Module1::IsCopyRight
- IL_0062: /* 7E | (04)00004C */ ldsfld bool '老张百度文库下载器'.Module1::IsCopyRight
- IL_0067: /* 2C | 4F */ brfalse.s IL_00b8
- IL_0069: /* 02 | */ ldarg.0
IL_005d: /* 80 | (04)00004C */ stsfld bool '老张百度文库下载器'.Module1::IsCopyRight IL_0062: /* 7E | (04)00004C */ ldsfld bool '老张百度文库下载器'.Module1::IsCopyRight IL_0067: /* 2C | 4F */ brfalse.s IL_00b8 IL_0069: /* 02 | */ ldarg.0
特征码2C 4F 02,本来我天真的以为,这玩意改下跳转地址也可以的,我打算是将4F(是跳转的偏移,错误跳到的标号处)改为01,但是没成功。
正确的是将2C改为2D,不懂的看下IL指令,ue中修改后保存运行,随便输入一个注册码,注册成功
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|