一个.net程序的简单破解

时间:2021-12-03 05:46:05

今天同学给我发了个百度文库下载器让我看下,要注册,习惯性的先抄起OD,不过载入后没断下来程序直接跑起来了。。。看了下原来是.net程序撒,一直没搞过这玩意,网上找了下资料,发现也不是很难。

程序是这样子的,我擦CSDN传不了图片?

反正就是这样,拿Reflector打开找到关键位置

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)
 

就是计算注册码然后设置IsCopyRight布尔变量的值,将判断语句条件改为!Moudle.IsCopyRight就可以了。。。懒得看算法,其实进去看了也不难。。

怎么改呢,切换到IL

   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找到对应的位置,显示字节

    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中修改后保存运行,随便输入一个注册码,注册成功