1.Reflector.exe + ilDasm.exe + ilasm.exe 破解DundasWebChart(VS2005) 5.5 成功
上篇介绍的破解方法可以去除图片中的水印并且不稳定,但是无法去除falsh中的水印.
后来继续分析出了其破解方法,可以完全实现DundasWebChart的破解,方法如下:
1.分析Dundas.Charting.WebControl.ChartLicenseProvider中方法 iskeyvalid
protected
virtual
bool
IsKeyValid(
string
key, Type type)
{
if (((textArray1.Length >= 2) && (textArray1[1] == Chart.b)) && (textArray1[1] == this.a()))
{
//将返回的false 改为 true
return false;
}
}
return true ;
}
{
if (((textArray1.Length >= 2) && (textArray1[1] == Chart.b)) && (textArray1[1] == this.a()))
{
//将返回的false 改为 true
return false;
}
}
return true ;
}
2.取消绘画的水印.
Dundas.Charting.WebControl.ChartPicture 中方法
public
void
Paint(Graphics graph,
bool
paintTopLevelElementOnly, RenderingType renderingType, XmlTextWriter svgTextWriter, Stream flashStream,
string
documentTitle,
bool
resizable,
bool
preserveAspectRatio)
{
this.OnAfterPaint(new ChartPaintEventArgs(this.a, this.a, new ElementPosition(0f, 0f, 100f, 100f)));
foreach (ChartArea area9 in this.a)
{
if (area9.Visible)
{
area9.a();
area9.d();
}
}
//由于为真,会每次都会重画水印,设置为false 即可. 将this.e=true;改为 graph.e=false;
this.e = true;
if (graph.e)
{
StringFormat format1 = new StringFormat();
format1.Alignment = StringAlignment.Near;
format1.LineAlignment = StringAlignment.Near;
SolidBrush brush1 = new SolidBrush(Color.FromArgb(40, 1, 1, 0xaf));
SolidBrush brush2 = new SolidBrush(Color.FromArgb(40, 200, 200, 200));
Font font1 = new Font(ChartPicture.a(), 8f);
SizeF ef3 = this.a.GetRelativeSize(new SizeF(2f, 2f));
.
}
{
this.OnAfterPaint(new ChartPaintEventArgs(this.a, this.a, new ElementPosition(0f, 0f, 100f, 100f)));
foreach (ChartArea area9 in this.a)
{
if (area9.Visible)
{
area9.a();
area9.d();
}
}
//由于为真,会每次都会重画水印,设置为false 即可. 将this.e=true;改为 graph.e=false;
this.e = true;
if (graph.e)
{
StringFormat format1 = new StringFormat();
format1.Alignment = StringAlignment.Near;
format1.LineAlignment = StringAlignment.Near;
SolidBrush brush1 = new SolidBrush(Color.FromArgb(40, 1, 1, 0xaf));
SolidBrush brush2 = new SolidBrush(Color.FromArgb(40, 200, 200, 200));
Font font1 = new Font(ChartPicture.a(), 8f);
SizeF ef3 = this.a.GetRelativeSize(new SizeF(2f, 2f));
.
}
利用 ildasm 反编辑程序集.
1.修改 IsKeyValid 的返回值
.method family hidebysig newslot
virtual
instance bool IsKeyValid( string key,
class [mscorlib]System.Type ' type ' ) cil managed
{
.
IL_0091: ldc.i4.1
IL_0092: ret
IL_0093: ldc.i4.0 //将其修改为 ldc.i4.1
IL_0094: ret
IL_0095: ldc.i4.0 //将其修改为 ldc.i4.1
IL_0096: ret
}
instance bool IsKeyValid( string key,
class [mscorlib]System.Type ' type ' ) cil managed
{
.
IL_0091: ldc.i4.1
IL_0092: ret
IL_0093: ldc.i4.0 //将其修改为 ldc.i4.1
IL_0094: ret
IL_0095: ldc.i4.0 //将其修改为 ldc.i4.1
IL_0096: ret
}
2.修改Paint 方法.
找到方法位置如下:
IL_0aff: ldarg.
0
IL_0b00: ldc.i4. 1
IL_0b01: stfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b06: ldarg. 0
IL_0b07: ldfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b0c: brfalse IL_0bfb
IL_0b11: newobj instance void [System.Drawing]System.Drawing.StringFormat::.ctor()
IL_0b16: stloc.s V_24
IL_0b18: ldloc.s V_24
IL_0b1a: ldc.i4. 1
IL_0b1b: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_Alignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b20: ldloc.s V_24
IL_0b22: ldc.i4. 1
IL_0b23: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_LineAlignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b28: ldc.i4.s 40
IL_0b2a: ldc.i4. 0
IL_0b2b: ldc.i4. 0
IL_0b2c: ldc.i4 0xaf
IL_0b31: call valuetype [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Color::FromArgb(int32,
IL_0b00: ldc.i4. 1
IL_0b01: stfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b06: ldarg. 0
IL_0b07: ldfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b0c: brfalse IL_0bfb
IL_0b11: newobj instance void [System.Drawing]System.Drawing.StringFormat::.ctor()
IL_0b16: stloc.s V_24
IL_0b18: ldloc.s V_24
IL_0b1a: ldc.i4. 1
IL_0b1b: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_Alignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b20: ldloc.s V_24
IL_0b22: ldc.i4. 1
IL_0b23: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_LineAlignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b28: ldc.i4.s 40
IL_0b2a: ldc.i4. 0
IL_0b2b: ldc.i4. 0
IL_0b2c: ldc.i4 0xaf
IL_0b31: call valuetype [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Color::FromArgb(int32,
将以上代码修改为下面的il 代码.
IL_0aff: ldarg.
1
IL_0b00: ldc.i4. 0
IL_0b01: stfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b06: ldarg. 1
IL_0b07: ldfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b0c: brfalse IL_0bfb
IL_0b11: newobj instance void [System.Drawing]System.Drawing.StringFormat::.ctor()
IL_0b16: stloc.s V_24
IL_0b18: ldloc.s V_24
// 破解方法在此
IL_0b1a: ldc.i4. 0
IL_0b1b: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_Alignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b20: ldloc.s V_24
IL_0b22: ldc.i4. 0
IL_0b23: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_LineAlignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b28: ldc.i4.s 40
IL_0b2a: ldc.i4. 1
IL_0b2b: ldc.i4. 1
IL_0b2c: ldc.i4 0xaf
IL_0b31: call valuetype [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Color::FromArgb(int32,
IL_0b00: ldc.i4. 0
IL_0b01: stfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b06: ldarg. 1
IL_0b07: ldfld bool Dundas.Charting.WebControl.ChartPicture::e
IL_0b0c: brfalse IL_0bfb
IL_0b11: newobj instance void [System.Drawing]System.Drawing.StringFormat::.ctor()
IL_0b16: stloc.s V_24
IL_0b18: ldloc.s V_24
// 破解方法在此
IL_0b1a: ldc.i4. 0
IL_0b1b: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_Alignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b20: ldloc.s V_24
IL_0b22: ldc.i4. 0
IL_0b23: callvirt instance void [System.Drawing]System.Drawing.StringFormat::set_LineAlignment(valuetype [System.Drawing]System.Drawing.StringAlignment)
IL_0b28: ldc.i4.s 40
IL_0b2a: ldc.i4. 1
IL_0b2b: ldc.i4. 1
IL_0b2c: ldc.i4 0xaf
IL_0b31: call valuetype [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Color::FromArgb(int32,
重新进行编译 ilasm /dll /RESOURCE=DundasWebChart.res DundasWebChart.il
OK,大功告成
/Files/wangzhq/DundasWebChart2006-11-15.rar