一直在用makedown2(free版),每当打开多个页面,就会提示升级为pro,还要注册码激活什么的。就有了破解的想法。以前也弄过一个小程序的破解,所以还算有些经验。

1. ildasm 用来将makedown2.exe转存为 il文件和res资源

2.修改il代码。通过分析得知新建文件、到处pdf和 自动保存都调用了 ValidateLicense 函数(返回值bool) 开来有重大嫌疑,试试直接返回true;

return true : 在il文件中如何表示呢!我用c# 写了个函数,用来提取return true代码

//000017:
//000018: static bool test(string str)
//000019: {
//000020: if (str.Length > 0)
IL_0000: /* 02 | */ ldarg.
IL_0001: /* 6F | (0A)000011 */ callvirt instance int32 [mscorlib/**/]System.String/**/::get_Length() /* 0A000011 */
IL_0006: /* 16 | */ ldc.i4.
IL_0007: /* 31 | 02 */ ble.s IL_000b .line , : , ''
//000021: {
//000022: return true;
IL_0009: /* 17 | */ ldc.i4.1
IL_000a: /* 2A | */ ret .line , : , ''
//000023: }
//000024: else
//000025: {
//000026: return false;
IL_000b: /* 16 | */ ldc.i4.
IL_000c: /* 2A | */ ret
} // end of method Program::test .method /**/ public hidebysig specialname rtspecialname
instance void .ctor() cil managed
// SIG: 20 00 01
{
// Method begins at RVA 0x2069
// Code size 7 (0x7)
.maxstack
IL_0000: /* 02 | */ ldarg.
IL_0001: /* 28 | (0A)000012 */ call instance void [mscorlib/**/]System.Object/**/::.ctor() /* 0A000012 */
IL_0006: /* 2A | */ ret
} // end of method Program::.ctor

所以要将函数开头位置修改成红色字体代码这样就ok 了

 .maxstack
.locals /*1100000B*/ init (class MarkdownPad2.Properties.Settings/**/ V_0,
class MarkdownPad2.Core.StartupHelper/**/ V_1,
valuetype MarkdownPad2.Core.StartupResult/**/ V_2,
string V_3,
string V_4,
string V_5,
valuetype [PresentationFramework/**/]System.Windows.MessageBoxResult/**/ V_6,
class MarkdownPad2.Licensing.UpgradeProWindow/*0200006A*/ V_7,
class MarkdownPad2.Licensing.UpgradeProWindow/*0200006A*/ V_8,
string[] V_9)
IL_0000: /* 17 | */ ldc.i4.1
IL_0001: /* 2A | */ ret
IL_0006: /* 73 | (06)000011 */ newobj instance void MarkdownPad2.Core.StartupHelper/**/::.ctor() /* 06000011 */
IL_000b: /* 0B | */ stloc.

直接修改了函数入口,进去就return true 了

保存好文件

3.利用ilasm.exe 将il文件重新编译为exe

使用资源管理器搜索ilasm.exe 一般在.net 框架目录下。在ilasm所在目录下打开cmd,输入以下代码。(自己根据自己的情况修改下)

ilasm /RESOURCE=C:\Users\xxx\Documents\makedown2.res C:\Users\xxx\Documents\makedown2.il

这样程序就编译成功了。

这样就解禁了很多功能。不过开始启动很慢,点击注册什么的还提示错误!

简单破解.net(C#)程序的更多相关文章

  1. 利用OD破解一个简单的C语言程序

    最近在学习汇编(看的是王爽老师的<汇编语言(第三版)>),然后想尝试使用OD(Ollydbg)软件破解一个简单的C语言程序练练手. 环境: C语言编译环境:VC++6.0 系统:在Wind ...

  2. CrackMe的简单破解

    [CrackMe的简单破解] 对于以下这样的输入账号和密码的窗口,我们可以猜测该程序使用最简单的机制实现,即用strmp来比较用户输入的密码和原始密码匹配.所以为了破解该程序,可以通过bp strmp ...

  3. 一个简单的P2P传输程序

    写了一个简单的P2P传输程序,在P2P的圈子中传输文件,不过为了简便,这个程序没有真正的传输文件,只是简单的判断一下文件的位置在哪里.这个程序可以处理当有一个peer闪退的情况,在这种情况下,剩下的p ...

  4. 循序渐进做项目系列(2):最简单的C/S程序——消息异步调用与消息同步调用

    上篇博客 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法 实现了一个最简单的C/S程序,即让服务器来做加法.当时为了通俗易懂采用了消息异步调用的方式.今天我们要采用消息同步调用的方式 ...

  5. IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序

    前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...

  6. iOS开发UI篇—简单的浏览器查看程序

    iOS开发UI篇—简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件 ...

  7. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...

  8. C#--简单的串口通信程序

    前几天做毕业设计,其中要用到串口和下位机进行通信,于是自己捣鼓了一个简单的串口通信程序. 在做通信之前要先弄一个SerialPort组件出来,当然也可以通过程序来创建.本次设计中采用的是拖的winfo ...

  9. 分析Android程序之破解第一个程序

    破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkToo ...

  10. 一个简单的MDI示范程序(Delphi)

    http://www.cnblogs.com/pchmonster/archive/2012/01/07/2316012.html 最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI ...

随机推荐

  1. SBT Assembly - Deduplicate error & Exclude error

    sbt assembly java.lang.RuntimeException: deduplicate: different file contents found in the following ...

  2. java 极光推送

    Web.xml配置文件 <context-param> <param-name>contextConfigLocation</param-name> <par ...

  3. oracle 字符乱码问题解决方案

    今天在客户服务器上遇到了oracle中文乱码问题,第一个想到的是:要想避免oracle字符乱码的问题,需要注意oracle客户端的字符编码和服务端的字符编码保持一致. 于是操作如下: 1.查看服务端字 ...

  4. window dos命名

    dos命令从c盘进入d盘c:\>d:敲回车 >dir 查看文件夹中文件运行java程序,最好先进入文件夹:然后javac Hello.javajava Hello

  5. GROUP BY 與 Null 值

    若群組資料行包含了 Null 值,該資料列將變成結果中的一個群組.若群組資料行內包含了多個 Null 值,Null 值將放入單一群組內.此行為定義於 SQL-2003 標準之中. Product 資料 ...

  6. 【7集iCore3基础视频】7-3 iCore3硬件介绍

    iCore3原理图介绍: 高清源视频:http://pan.baidu.com/s/1gfbhuE3%20密码:xnbc iCore3 购买链接:https://item.taobao.com/ite ...

  7. 实现服务器端与客户端的高频实时通信 SignalR(2)

    说明:本篇文章与上篇文章 实现服务器端与客户端的实时通信 SignalR(1) 基本代码类似,只是做了些处理 高频 的改动. 一.本文出处:SignalR 实例介绍 (建议看原著里面有DEMO下载) ...

  8. xib连线出错,模型保存cell状态(最后个Cell隐藏分割线),

    一个.m文件中有好几个cell类,拖线,要看看该控件对应的是哪个类,否则点击事件不响应,因为归属的xib错了 拖不过来线,因为是view拖不动,加了个button就行了   使用模型属性记录是否隐藏c ...

  9. The index also can be used for LIKE comparisons if the argument to LIKE is a constant string that does not start with a wildcard character.

    http://dev.mysql.com/doc/refman/5.7/en/index-btree-hash.html MySQL 5.7 Reference Manual  /  ...  /   ...

  10. Java Basic - Encapsulation

    *** 封装 *** 面向对象特征 - 封装 封装的基本原则 将你的实例变量标记为私有的,比如提供公有的get与set方法来控制存取动作 有些get和set 可能什么事情也没做, 只是把值设给变量而已 ...