ディレクトリ
探索するために-1使用NLogロギングフレームワーク
NLogロギングフレームワークを使用してお問い合わせを-2
科学的使用Log4View2
序文
このタイトルは非常に低いキーそれであるが、今あなたが来ていることを指して、その後、次の乾貨物はあなたに属しています。
ハッカーはプログラマではない優秀なプログラマーになることを望んでいません。前に「2の使用探索するNLogロギング・フレームワーク」の記事を、そのようなデータベースの負荷を使用しないように、機能の数に限定される試用期間を超えて、Log4View2ツール30日間の試用期間を挙げます。だから、どのように我々はそれを科学を使うのですか?
この記事では逆コンパイル技術、非対称暗号、IL中間言語技術に関するものです。これらの技術を武器に、私はより多くの科学的なソフトウェアを使用することができていることがわかります。
個人的な使用のための次の学習内容は、商業目的ではない個人または違法な手段を使用するために、私はすべての結果の責任はないです。
科学的な使用
我々は使用することができますdnspy、ilspy逆コンパイルプログラムへと.NETリフレクター。Log4View2は、純粋な.NET開発プロジェクトです。
有料で反射するだけでなく、科学を使用する必要があります。
ILSpyは、オープンソースの.NETアセンブリブラウザとコンパイラです。
dnSpyは、.NETアセンブリデバッガとエディタです。利用可能なソースコードが存在しない場合でも、それはまた、編集、デバッグ・アセンブリに使用することができます。
dnspyはまた、機能のその富の増加に基づいて、ILSpy逆コンパイルエンジンを基に、あなたも、直接ソースコードを変更することができます。まず我々は、dyspyによって、関連する登録のソースを見て直接インストールパスdbSpyにドラッグLog4View.exeファイルを見つけます。
関連するモジュールのライセンスを取得して下さい(非常にフレンドリーな命名)
LicenseMgrの中に見つけることができるApplyLicense
方法、それが呼び出されますCheckForTrial();
有効期限を確認すること。
在检查过期时间后回调用SetLicenseInformation()
和SetLicensedFeatures()
SetLicenseInformation
方法是用于从License中获取一些注册信息。
Ctrl+鼠标左键可以跳转到方法
private void SetLicenseInformation()
{
base.LicensedTo = null;
if (this.License == null)
{
return;
}
Log4ViewProductProvider log4ViewProductProvider = this.ProductProvider as Log4ViewProductProvider;
this.ProductInfo = ((log4ViewProductProvider != null) ? log4ViewProductProvider.GetProductName(this.License.ProductReferenceId) : null);
if (!this.License.RegisteredName.IsNullOrEmpty() && !this.License.RegisteredCompany.IsNullOrEmpty())
{
base.LicensedTo = this.License.RegisteredName + "\n" + this.License.RegisteredCompany;
return;
}
if (!this.License.RegisteredName.IsNullOrEmpty())
{
base.LicensedTo = this.License.RegisteredName;
return;
}
if (!this.License.RegisteredCompany.IsNullOrEmpty())
{
base.LicensedTo = this.License.RegisteredCompany;
}
}
SetLicensedFeatures
则是根据是否注册,是否试用等信息决定产品功能限制。若注册则根据注册的信息取配置,若是试用,则最大限度开放使用,否则只允许一个接收器,比如你使用网络接收器就不能使用文件接收器,且一些功能会被限制使用。
如图Logboxx和Database功能被禁用。
private void SetLicensedFeatures()
{
if (base.IsRegistered)
{
LicenseMgr.Logger.Info(string.Format("Log4View is licensed with {0}", this.License.LicenseKey));
Log4ViewFeatureAdapter log4ViewFeatureAdapter = new Log4ViewFeatureAdapter(this.License.Features);
this.MultipleInstances = log4ViewFeatureAdapter.MultipleInstances;
this.MaxReceivers = log4ViewFeatureAdapter.MaxReceivers;
this.FileReadFilterEnabled = log4ViewFeatureAdapter.FileReadFilterEnabled;
this.DatabaseReceiverEnabled = log4ViewFeatureAdapter.DatabaseReceiverEnabled;
this.ExportEnabled = log4ViewFeatureAdapter.ExportEnabled;
this.AnnotationsEnabled = log4ViewFeatureAdapter.AnnotationsEnabled;
this.ChartEnabled = log4ViewFeatureAdapter.ChartEnabled;
return;
}
if (this.IsTrial)
{
this.MaxReceivers = 250;
this.FileReadFilterEnabled = (this.MultipleInstances = (this.DatabaseReceiverEnabled = (this.ExportEnabled = (this.AnnotationsEnabled = (this.ChartEnabled = true)))));
return;
}
this.MaxReceivers = 1;
this.FileReadFilterEnabled = (this.MultipleInstances = (this.DatabaseReceiverEnabled = (this.ExportEnabled = (this.AnnotationsEnabled = (this.ChartEnabled = false)))));
}
我们知道了试用所有功能都可以使用,试用又是有试用期的,那么只要我们调大试用期即可。
IsTrial
是否试用。
private void CheckForTrial()
{
this.IsTrial = false;
if (this.License != null)
{
return;
}
DateTime? dateTime = base.CheckTrialDate();
if (dateTime != null && dateTime.Value > DateTime.Now)
{
this.TrialExpireTime = dateTime.Value;
LicenseMgr.Logger.Info(string.Format("Log4View License expires on {0}", this.TrialExpireTime));
this.IsTrial = true;
}
}
试用期判断,首先从_licenseStore
读取日期参数,然后进行校验。
protected DateTime? CheckTrialDate()
{
Tuple<DateTime, DateTime> tuple = this._licenseStore.CheckTrialDate();
if (tuple == null)
{
return null;
}
DateTime item = tuple.Item1;
DateTime dateTime = tuple.Item2;
if (item > DateTime.Now)
{
return null;
}
if (dateTime < new DateTime(2007, 8, 15, 16, 58, 0))
{
dateTime = DateTime.Now.AddDays(30.0);
}
this._licenseStore.SaveTrialDate(dateTime);
return new DateTime?(dateTime);
}
我们可以直接看保存的时间存放路径。首先将当前时间和过期时间拼凑后加密,然后存储到文件名为FodszqufeUsjbmEbuf
的文件中。文件路径则存到了_storagePath
字段中
public void SaveTrialDate(DateTime expireDate)
{
string value = LicenseStore.EncryptTrialDate(string.Format(CultureInfo.InvariantCulture, "{0}#{1}", DateTime.Now.ToString(this._trialFormat), expireDate.ToString(this._trialFormat)));
using (StreamWriter streamWriter = new StreamWriter(Path.Combine(this._storagePath, "FodszqufeUsjbmEbuf"), false))
{
streamWriter.Write(value);
}
}
直接Ctrl+F
查找一下该变量,可以看到在LicenseStore
初始化时会赋值。
public LicenseStore(string productFamilyId, SigningSerializer serializer)
{
this._serializer = serializer;
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
this._storagePath = Path.Combine(folderPath, "Prolic", productFamilyId);
}
Environment.SpecialFolder.CommonApplicationData
指向的是系统盘的ProgramData
目录下,我的系统盘是C盘,则为C:\ProgramData\
,在该目录下可以找到Log4View的日期保存的文件。
我们获取到了文件内容,可以看下NLog是如何加解密的。
protected DateTime? CheckTrialDate()
{
Tuple<DateTime, DateTime> tuple = this._licenseStore.CheckTrialDate();
...
}
public Tuple<DateTime, DateTime> CheckTrialDate()
{
string text = this.ReadTrialDate();
if (string.IsNullOrEmpty(text))
{
return null;
}
string text2 = LicenseStore.DecryptTrialDate(text);
...
}
private static string DecryptTrialDate(string cip)
{
if (cip == null)
{
return null;
}
RijndaelManaged rijndaelManaged = null;
MemoryStream memoryStream = null;
CryptoStream cryptoStream = null;
StreamReader streamReader = null;
string result = null;
try
{
rijndaelManaged = new RijndaelManaged
{
IV = Convert.FromBase64String("X9w3vURHpNUhpU+kICttoQ=="),
Key = Convert.FromBase64String("vhMit23SLc56FN8oylrOUy8trs0I2z7piFrh4vnfx+s=")
};
ICryptoTransform transform = rijndaelManaged.CreateDecryptor(rijndaelManaged.Key, rijndaelManaged.IV);
memoryStream = new MemoryStream(Convert.FromBase64String(cip));
cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Read);
streamReader = new StreamReader(cryptoStream);
result = streamReader.ReadToEnd();
}
...
return result;
}
可以看出来它使用的是3DES算法。Key和IV都有了。对于RijndaelManaged
我个人不是很了解它,因此还需要看以下它默认的分组模式和填充模式。
public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV)
{
return this.NewEncryptor(rgbKey, this.ModeValue, rgbIV, this.FeedbackSizeValue, RijndaelManagedTransformMode.Encrypt);
}
private ICryptoTransform NewEncryptor(byte[] rgbKey, CipherMode mode, byte[] rgbIV, int feedbackSize, RijndaelManagedTransformMode encryptMode)
{
if (rgbKey == null)
{
rgbKey = Utils.GenerateRandom(this.KeySizeValue / 8);
}
if (rgbIV == null)
{
rgbIV = Utils.GenerateRandom(this.BlockSizeValue / 8);
}
return new RijndaelManagedTransform(rgbKey, mode, rgbIV, this.BlockSizeValue, feedbackSize, this.PaddingValue, encryptMode);
}
查找一下ModeValue是哪里赋值的,选中this.ModeValue
右键点击分析
看下哪里被赋值的
protected SymmetricAlgorithm()
{
this.ModeValue = CipherMode.CBC;
this.PaddingValue = PaddingMode.PKCS7;
}
那么聪明的你知道怎么做了吗?比如把超时时间定义到2999年,这是不是很科学呢?
将加密后的文件替换原文件后重启,可以看到过期时间变为了2999年
什么?你懒得加解密,想让我直接给?
拿去吧Rtii82/K20ex7W41cuLLTHBq9qGA/VrVEf/zv7IoPUQL8ZUA8fikC3Saeh5oZUwcTUI+0xdX08OXGXqQwJP+eA==
替换后
想知道为什么?自己去解密一下吧。
编辑和调试程序集
本篇文章实际已经结束了,但是上一篇有人感谢我如此热心还教人破解。
我可不会破解!!!
但是为了让大家学到更多的使用技能,还是在讲一些干货吧。
前面提到了DnSpy是一个调试器和.NET程序集编辑器。即使没有任何可用的源代码,也可以使用它来编辑和调试程序集。
调试程序集
眼尖的同学可能一开始就看到第一张图绿色的启动按钮。
就像在VS中调试一下,我们打上断点直接启动。
调试方法和在VS中一样,快捷键也一样,F10
逐过程或F11
逐语句。
编辑程序集
前面我们科学使用还是挺麻烦的,找了半天代码,还要了解加密解密算法。
我们知道只要我们是试用,就可以最大程度的使用软件。那我们直接可以修改源码this.IsTrial = false
改为this.IsTrial = true
然后就返回即可。
private void CheckForTrial()
{
this.IsTrial = false;
if (this.License != null)
{
return;
}
DateTime? dateTime = base.CheckTrialDate();
if (dateTime != null && dateTime.Value > DateTime.Now)
{
this.TrialExpireTime = dateTime.Value;
LicenseMgr.Logger.Info(string.Format("Log4View License expires on {0}", this.TrialExpireTime));
this.IsTrial = true;
}
}
直接在需要修改源码的地方右键选择编辑IL指令。
可以看到首先通过ldc.i4.0
将0(false)加载到栈,然后调用set_IsTrial
赋值。
我们可以将ldc.i4.0
改为ldc.i4.1
赋值为true。然后将ldarg.0
改为ret
返回。我们也可以直接新增指令。
本篇的重点不是讲如何学习IL,大家可以到网上搜一下,一搜一大把。
然后点击右下角确定保存,可以发现编译器自动优化了代码。
刚才只是保存到内存中,最后需要保存到文件中。
需要以管理员权限运行DnSpy,否则无法保存。
DnSpy还可以编辑方法。
但是我自己试了下无法编译保存,感兴趣的同学可以自己试试。
结语
この記事では、逆コンパイルに関し対称暗号化を3DES、IL言語技術。使用DnSpyは非常に簡単にILを変更することができ、変更後にあなたが行うことができますか?私たちは皆、それを再生します。
実際に多くのことを行うためにILヘルプの後ろに私たちを修正しDnSpy。私たちが学ぶために多くの時間を過ごすために必要なすべての原理。最後にない違法な目的のために、海賊版ソフトウェアを広めていない、著作権を尊重するために皆に呼びかけました。
最後に、最後には、この記事の助けあなたは、その後、マイクロチャネルのサブスクリプションの数Jiege技術の共有に焦点を掃引場合
推奨文献
マイクロチャネルは、Jiege注意サブスクリプション番号共有の二次元コード技術スイープ
この記事のアドレス:ソースをhttps://www.cnblogs.com/Jack-Blog/p/11976252.html
著者:Jiege忙しい
としては4.0 BY」、ここCCを使用「クリエイティブ・コモンズの合意。転載へようこそ、目立つ場所に、ソースとのリンクを明記してください。