首页
社区
课程
招聘
[原创]windows manager中文版6.0.2版本的破解
发表于: 2009-5-21 11:32 7794

[原创]windows manager中文版6.0.2版本的破解

2009-5-21 11:32
7794
1.        首先用Reflector静态分析工具分析,打开到程序的入口点。

可以发现,它的注册是调用MyClsDetermineRegister.DetermineRegistered(....)这个函数进行注册。
2.        如果这我把“publicVarFun.RemainDays==”已注册””改成publicVarFun.RemainDays!=”已注册”发现程序可以用,但是它的辅助工具运行的时候还是提示使用期开始15天,如果我把他的辅助工具都这样进行感觉有点麻烦,趁现在还是个初学者那就脚踏实地的进行破解吧。
3.        通过第二步我发现他的判断注册信息是放在pcl.dll当中,这是用Reflector打开pcl.dll发现了

找到它的注册所调用的类。哈哈。
4.        打开看到了,那个注册函数

剩下的就是去读函数了。

.method public static string DetermineRegistered([opt] string strCPUID) cil managed
{
    .param [1] = string('')
    .maxstack 8
    .locals init (
        [0] string str,
        [1] char[] chArray,
        [2] bool flag,
        [3] int32 num)
    L_0047: nop
    L_0048: ldarg.0
    L_0049: ldstr ""
    L_004e: ldc.i4.0
    L_004f: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators::CompareString(string, string, bool)
    L_0054: ldc.i4.0
    L_0055: ceq
    L_0057: stloc.2     
    L_0063: ldloc.2
    L_0064: brfalse.s L_00b5//判断CPUID是否为空,如果CPUID为空则跳转到L_00b5,否则接着执行

    L_0071: br.s L_00dd

    L_007e: br.s L_00cc
    L_0080: nop
    L_0081: ldc.i4.s 15
    L_0083: call bool PCL.MyClsDetermineRegister/b::b(uint8)
    L_0088: stloc.2

    L_0097: ldc.i4.1
    L_0098: br.s L_009d
    L_009a: ldc.i4.0
    L_009b: br.s L_009d
    L_009d: brfalse.s L_009f
    L_009f: ldloc.2
    L_00a0: brfalse.s L_00f7

    L_00b0: br L_01ab
    L_00b5: nop
    L_00b6: ldarg.0
    L_00b7: stsfld string c::a

    L_00ca: br.s L_013a
    L_00cc: nop

    L_00db: br.s L_0116
    L_00dd: call string PCL.MyClsDetermineRegister::GetCPUID()
    L_00e2: stsfld string c::a

    L_00f5: br.s L_013a
    L_00f7: nop
    L_00f8: ldsfld uint8 PCL.MyClsDetermineRegister::b
    L_00fd: call string [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions::ToString(uint8)
    L_0102: stloc.0

    L_0111: br L_01f0
    L_0116: nop

    L_0125: br L_01f0

    L_0138: br.s L_0116
    L_013a: nop
    L_013b: ldsfld class [mscorlib]Microsoft.Win32.RegistryKey [mscorlib]Microsoft.Win32.Registry::CurrentUser
    L_0140: ldstr "Software\\"
    L_0145: call string PCL.SoftwareInfo::get_CompanyName()
    L_014a: ldstr "\\"
    L_014f: call string PCL.SoftwareInfo::get_ProductName()
    L_0154: ldc.i4.1
    L_0155: newarr char
    L_015a: stloc.1
    L_015b: ldloc.1
    L_015c: ldc.i4.0
    L_015d: ldc.i4.s 0x2d
    L_015f: stelem.i2
    L_0160: ldloc.1
    L_0161: callvirt instance string[] [mscorlib]System.String::Split(char[])
    L_0166: ldc.i4.0
    L_0167: ldelem.ref
    L_0168: callvirt instance string [mscorlib]System.String::ToString()
    L_016d: callvirt instance string [mscorlib]System.String::Trim()
    L_0172: call string [mscorlib]System.String::Concat(string, string, string, string)
    L_0177: callvirt instance class [mscorlib]Microsoft.Win32.RegistryKey [mscorlib]Microsoft.Win32.RegistryKey::OpenSubKey(string)
    L_017c: stsfld class [mscorlib]Microsoft.Win32.RegistryKey PCL.MyClsDetermineRegister::a
    L_0181: call bool PCL.MyClsDetermineRegister::b()
    L_0186: stloc.2

    L_0195: ldloc.2
    L_0196: brfalse L_0080//关键的跳转,就是比较注册成功与否,

    L_01a9: br.s L_01d4
    L_01ab: ldstr "\u60a8\u7684\u8bd5\u7528\u671f\u5df2\u8fc7\uff0c\u8bf7\u8fd0\u884c\u4e3b\u7a0b\u5e8f\u8ba2\u8d2d\u6b64\u8f6f\u4ef6\uff01"
    L_01b0: ldstr "\u8b66\u544a"
    L_01b5: ldc.i4.0
    L_01b6: ldc.i4.s 0x30
    L_01b8: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string, valuetype [System.Windows.Forms]System.Windows.Forms.MessageBoxButtons, valuetype [System.Windows.Forms]System.Windows.Forms.MessageBoxIcon)
    L_01bd: pop
    L_01be: ldstr "\u5df2\u8fc7\u671f"
    L_01c3: stloc.0
  
    L_01d2: br.s L_01f0
    L_01d4: call void PCL.MyClsDetermineRegister::a()
    L_01d9: nop
    L_01da: ldstr "\u5df2\u6ce8\u518c"//已注册
    L_01df: stloc.0

    L_01ee: br.s L_01f0
    L_01f0: ldloc.0
    L_01f1: ret
}

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
呵呵呵,这个N年就已经有教学了,我告诉你修改 MyClsDetermineRegister-----b() Boolean这个类,,返回True,就是注册版了
2009-5-21 16:12
0
雪    币: 7906
活跃值: (3086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
对于我们新手很有帮助
2009-5-21 16:45
0
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
我将我朋友的教学也放上来吧,但是这是旧版本的教学,新版本的破解,我的方法是最快的
上传的附件:
2009-5-21 16:54
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看了,学习一下
2009-5-21 16:56
0
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
方便参考,来个图吧
上传的附件:
2009-5-21 17:12
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
能否在发个关于教学的啊,可以多学习学习吗
2009-5-22 08:38
0
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
我感觉这里不喜欢video的教学,但是,我没有时间写文字,我一般都是在破解时就做Video
2009-5-22 09:41
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
奇怪,你们用Reflector看到6.0.2版的CLASS没有打混淆么。我用Reflector直接看不到。
我的做法比这个更简单点,由于没有强名,直接把返回注册码比较的那个明显的函数改为static的public函数。再编译回去。自己用函数调用这个方法就得到注册码了。注册机也就出来了。
2009-6-16 13:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
PCL.dll
.class private auto ansi sealed beforefieldinit c 改成
.class public auto ansi sealed beforefieldinit c
.field public static string a (不记得原来是不是public的了)
上面这是CPUID,注册机用到,可以帮他人注册用
主要是下面的MyClsDetermineRegister::a改成
.method public static string a(string A_0) cil managed
这个a的方法参数是注册名。
2009-6-16 14:06
0
游客
登录 | 注册 方可回帖
返回
//