简单破解.net(C#)程序
一直在用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#)程序的更多相关文章
- 利用OD破解一个简单的C语言程序
最近在学习汇编(看的是王爽老师的<汇编语言(第三版)>),然后想尝试使用OD(Ollydbg)软件破解一个简单的C语言程序练练手. 环境: C语言编译环境:VC++6.0 系统:在Wind ...
- CrackMe的简单破解
[CrackMe的简单破解] 对于以下这样的输入账号和密码的窗口,我们可以猜测该程序使用最简单的机制实现,即用strmp来比较用户输入的密码和原始密码匹配.所以为了破解该程序,可以通过bp strmp ...
- 一个简单的P2P传输程序
写了一个简单的P2P传输程序,在P2P的圈子中传输文件,不过为了简便,这个程序没有真正的传输文件,只是简单的判断一下文件的位置在哪里.这个程序可以处理当有一个peer闪退的情况,在这种情况下,剩下的p ...
- 循序渐进做项目系列(2):最简单的C/S程序——消息异步调用与消息同步调用
上篇博客 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法 实现了一个最简单的C/S程序,即让服务器来做加法.当时为了通俗易懂采用了消息异步调用的方式.今天我们要采用消息同步调用的方式 ...
- IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序
前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...
- iOS开发UI篇—简单的浏览器查看程序
iOS开发UI篇—简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件 ...
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...
- C#--简单的串口通信程序
前几天做毕业设计,其中要用到串口和下位机进行通信,于是自己捣鼓了一个简单的串口通信程序. 在做通信之前要先弄一个SerialPort组件出来,当然也可以通过程序来创建.本次设计中采用的是拖的winfo ...
- 分析Android程序之破解第一个程序
破解Android程序通常的方法是将apk文件利用ApkTool反编译,生成Smali格式的反汇编代码,然后阅读Smali文件的代码来理解程序的运行机制,找到程序的突破口进行修改,最后使用ApkToo ...
- 一个简单的MDI示范程序(Delphi)
http://www.cnblogs.com/pchmonster/archive/2012/01/07/2316012.html 最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI ...
随机推荐
- 19.创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
package zuoye2; public class People { protected double height; protected double weight; private Stri ...
- 在windows7下安装CentOS
需要用到的软件 EasyBCD 设置索引菜单 PA5.2_Portable 分区助手 WinGrub 查看硬盘代号 1.使用分区助手,腾出至少4GB的空间,并格式化为fat32格式,将CentOS的I ...
- 【iCore3 双核心板_FPGA】实验十五:基于USART的ARM与FPGA通信实验
实验指导书及代码包下载: http://pan.baidu.com/s/1c1RbE5E iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- swift 2.x学习笔记(二)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } p.p2 { margin: 0.0px 0. ...
- oracle 11g 通过在线重定义方式修改表结构
今天因为要对一套数据库的数据抽取进行io优化,希望通过修改表结构将抽取io降下来,因为抽取只针对标签HAVE_FLAG为"0"的值进行抽取,抽取之后更新HAVE_FLAG为其他值, ...
- django 动态更新属性值
django 动态更新属性值 class TestTime(models.Model): """ 功能说明:指定测试的每一关总用时 """ ...
- Android Studio编译运行project报错:····· finished with non-zero exit value 1
错误代码: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.ide.c ...
- Java输入流之BufferReader和Scanner的用法!
在Java中,我们都知道Java的标准输入串是System.in.但是我们却很少在Java中看到谁使用它,这是因为我们平时输入的都是一个字符串或者是一个数字等等.而System.in提供的read方法 ...
- java中类的创建及初始化过程
java中类的创建及初始化过程无外乎两种情况,其一为单类的创建及初始化,其二具有继承关系的父子类创建及初始化过程. 首先说简单的,单类的创建及初始化过程.在java中我们都知道绝大部分对象的创 ...
- oracle拼接字符串
参考:http://www.cnblogs.com/freeliver54/archive/2013/07/01/3165144.html