本帖最后由 WuJiYun 于 2017-6-23 20:51 编辑
通过一天到晚的战斗,终于攻破Aspose.Cells 17.6的License:
看战果吧:
链接: https://pan.baidu.com/s/1c2pKlsG 密码:
过程:
跟踪Aspose.Cells的Licensed过程,下了N个断点,发现如下代码是关键:
[C#] 纯文本查看 复制代码 private object \u0002(object[] \u0002, Type[] \u0003, Type[] \u0005, object[] \u0008)
{
if (\u0002 == null)
{
\u0002 = global::\u0006\u2002<object>.\u0002;
}
if (\u0003 == null)
{
\u0003 = Type.EmptyTypes;
}
if (\u0005 == null)
{
\u0005 = Type.EmptyTypes;
}
this.\u0002\u2000 = \u0008;
this.\u0006\u2003 = \u0003;
this.\u000E\u2003 = \u0005;
this.\u000F\u2000 = this.\u0002(\u0002);
this.\u0008\u2000 = this.\u0006\u2000();
object result;
try
{
\u0005\u2007 \u0005\u2007 = new \u0005\u2007(this.\u0008\u2003);
try
{
using (this.\u0006\u2000 = new \u0002\u2007(\u0005\u2007))
{
this.\u0003 = false;
this.\u0002\u2003 = null;
this.\u0003\u2001.\u0002();
this.\u0006();
}
}
finally
{
((IDisposable)\u0005\u2007).Dispose();
}
Type type = this.\u0008(this.\u0003\u2002.\u0006());
if (type != global::\u0008\u2007.\u0005 && this.\u0003\u2001.Count > 0)
{
result = global::\u0002\u2002.\u0002(null, type).\u0008\u2008\u2008\u0002(this.\u0003\u2001()).\u0008\u2008\u2008\u0002();
}
else
{
result = null;
}
}
finally
{
for (int i = 0; i < this.\u0003\u2002.\u0003().Length; i++)
{
global::\u0005 \u00052 = this.\u0003\u2002.\u0003()[i];
if (\u00052.\u0003())
{
\u000E\u2002 \u000E\u2002 = (\u000E\u2002)this.\u000F\u2000[i];
Type type2 = this.\u0008(\u00052.\u0002());
\u0002[i] = global::\u0002\u2002.\u0002(null, type2.GetElementType()).\u0008\u2008\u2008\u0002(\u000E\u2002.\u0002()).\u0008\u2008\u2008\u0002();
}
}
this.\u0002\u2000 = null;
this.\u000F\u2000 = null;
this.\u0008\u2000 = null;
}
return result;
}
通过处理result,可以达到破解的目的。全程通过修改IL代码达到目的(用De4Dot反编译出的Strong Name直接运行都会报错,没办法)
最后强调:
1、下载的dll文件适用.Net 4.0版本,其它版本按如上方法处理; 2、不通过修改内存数据达到破解目的,因此编译项目不需要/unsafe模式【这点最赞】;
3、学习归学习,如要商用支持正版哈
|