最近学习 Markdown,从网上下载了 Windows 下的编辑器:MarkdownPad。这款软件分为免费版和专业版(收费), 对于普通用户来说免费版已经足够,专业版比免费版多了如下几个功能:
其实,对于专业版提供的众多功能我最看重的只有导出 PDF这一项。出于程序员的职业病,我打开了 MarkdownPad 的安装目录, 然后几乎是瞬间就看出来了这是用 C# 写的,因为我看到了 MarkdownPad2.exe.config 这个文件,这是典型的 C# 应用程序的配置文件。
于是,我又抱着试一试的心态用 Reflector 打开了 MarkdownPad2.exe 。不看不知道,一看吓一跳,居然又木有加密,又木有混淆, 这真的让生在天朝的我大开眼界。作为一款收费的商业软件(14.95 USD),居然任何防护措施都木有,这不是存心找死的节奏啊!
后面的事情就很简单了,用 Reflector + Reflexil 修改授权相关代码就可以了,在这里我就不赘述了, 直接给出我修改的地方(有很多地方都可以修改,自己看着办):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 |
public
bool VerifyLicense( string
licenseKey, string
email) { if
( string .IsNullOrEmpty(licenseKey) || string .IsNullOrEmpty(email)) { return
false ; } try { this .License = this .Decrypt(licenseKey); this .LicenseProcessed = true ; } catch
(FormatException exception) { _logger.ErrorException( "Bad license format" , exception); MessageBoxHelper.ShowWarningMessageBox(LocalizationProvider.GetLocalizedString( "License_BadFormat" , false , "MarkdownPadStrings" ) + StringUtilities.GetNewLines(2) + LocalizationProvider.GetLocalizedString( "License_PleaseVerify" , false , "MarkdownPadStrings" ), LocalizationProvider.GetLocalizedString( "License_ErrorTitle" , false , "MarkdownPadStrings" )); return
false ; } catch
(OpenSslException exception2) { _logger.ErrorException( "Error decrypting license" , exception2); MessageBoxHelper.ShowWarningMessageBox(LocalizationProvider.GetLocalizedString( "License_ErrorMessage" , false , "MarkdownPadStrings" ) + StringUtilities.GetNewLines(2) + LocalizationProvider.GetLocalizedString( "License_PleaseVerify" , false , "MarkdownPadStrings" ), LocalizationProvider.GetLocalizedString( "License_ErrorTitle" , false , "MarkdownPadStrings" )); return
false ; } catch
(Exception exception3) { _logger.ErrorException( "Error processing license: "
+ licenseKey, exception3); MessageBoxHelper.ShowErrorMessageBox(LocalizationProvider.GetLocalizedString( "License_ErrorMessage" , false , "MarkdownPadStrings" ) + StringUtilities.GetNewLines(2) + LocalizationProvider.GetLocalizedString( "License_PleaseVerify" , false , "MarkdownPadStrings" ), LocalizationProvider.GetLocalizedString( "License_ErrorTitle" , false , "MarkdownPadStrings" ), exception3, "" ); return
false ; } if
((( this .License == null ) || ( this .License.Email == null )) || ( this .License.Product == null )) { return
false ; } bool
flag = this .License.Email == email; bool
flag2 = this .License.Product == "MarkdownPad2" ; return
(flag && flag2); } |
这个函数就是用来判断授权是否合法的,只需要让它永远返回 true 就可以了。用 Reflexil 插件将这个函数的 IL 代码修改如下:
1
2 |
ldc.i4.1 // ldc.i4.0 返回 false ret |
上面的 IL 代码就相当于如下一行代码:
1 |
return
true ; |
然后,保存修改过的 MarkdownPad2.exe,并替换原来的文件,重启即可。
以上所述,主要出于研究学习之目的,如果经济条件允许请自己购买正版软件。
MarkdownPad 破解学习,布布扣,bubuko.com
原文:http://www.cnblogs.com/platobeing/p/3588426.html