一个没有实现的想法。。。

本文的主题其实是关于Codesmith的授权技术讨论;

有一个类:

[Serializable, LicenseProvider(typeof(cn))]
public sealed class CodeSmithLicense
{
    // Fields
    private static CodeSmithLicense _codeSmithLicense;
    private static string _enginePublicKeyToken;
    private static DateTime _expirationDate;
    private static bool _isBeta;
    private static bool _isFullTrial;
    private static bool _isProfessional;
    private static bool _isSDK;
    private static bool _isServer;
    private static bool _isStandard;
    private static bool? _isStandardInstall;
    private static bool _isTrial;
    private SecureLicense _license;
    private static DateTime _licenseCacheExpirationDate;
    private static CodeSmithEditions _licensedEdition;
    private static object _lockHandle;

位于CodeSmith.Engine.dll中。。。
 

其实想办法改变这些变量估计就可以通过验证与授权之类的了。

所以要写一些代码,但怎么然这些代码运行起来呢?我们写的代码好像与CodeSmithStudio.exe没有关系啊!

其实就是把我们写的一些代码注入到CodeSmithStudio.exe,如果要注入,当然要改原版的程序啦,大家知道改程序用什么啦把(IL语言啊)

.method private hidebysig static void a(string[] A_0) cil managed
{
    .custom instance void [mscorlib]System.STAThreadAttribute::.ctor()
    .entrypoint
    // token: 06000527
    .maxstack 4
    .locals init (
        [0] class [CodeSmith.Engine]CodeSmith.Engine.FeatureNotAllowedException exception)
    L_0000: call void [System.Windows.Forms]System.Windows.Forms.Application::EnableVisualStyles() // 282B05000A
    L_0005: ldc.i4.0  // 16
    L_0006: call void [System.Windows.Forms]System.Windows.Forms.Application::SetCompatibleTextRenderingDefault(bool) // 282C05000A
    L_000b: ldstr "CodeSmith Generator Studio" // 7289150070
    L_0010: ldc.i4.1  // 17

在入口点加入我们写的代码行不?

代码加完了,再编译回来(大家注意强命名啦,否则编译回来无法运行,要去掉强命名的)

只是一些思路,我也没有去实现,呵呵,仅供技术交流。。。

原文地址:https://www.cnblogs.com/zhahost/p/2005189.html