[屌丝的逆袭系列]是个人都能破解之终结NhibernateProfiler-写个自动破解工具(源码)...

  在NhibernateProfiler破解这个系列的第一篇里我们描述了NhibernateProfiler的破解思路,同时也对这个思路进行了验证。本来准备第二篇就写这个工具的,但最终中间还是插了二篇关于附加到进程工具的介绍与实现。现在我们就回来把这个工具给完成了,也为这个系列做个完结 。  

  在第一篇里我们描述的那种方法叫做暴破,也就是暴力破解,理论上跟出注册算法,是更好的选择,但NhibernateProfiler使用的是许可认证技术,采用的是RSA非对称公钥加密(RSACryptoServiceProvider),也就是说在你不知道公钥或私钥中的任何一个的情况下,知道了算法也是白搭,事实上RSA非对称公钥加密的算法本来就是公开的。关于RSA加密,网上的资料很多,各位可自行百度或GOOGLE,在这里就不详述了,使用许可认证技术的软件基本上只有暴破一种方法,暴破虽然较跟出算法更容易一些,但缺点也是很明显的,就是破解的目标每出来一个新版本都要重新破解一次,而跟出算法,就不会出这样的问题,无论他出多少版本,只要他的注册算法不变,写个注册机,就可以无限制的使用,所以为了在一定程度上弥补暴破的这种缺陷,我们来写一个自动破解工具,这样就可以在作者没有改动我们修改的那块代码的情况下,实现多次破解 。  

  遵循我们一向的习惯,介绍前,先看看这个破解工具实现后的 样子。 

  如果你不想打开解决方案,调试运行的话(源码在根目录下的src文件平里),附录的根目录的Build文件夹里有一个编译好的程序 NHProfilerCracker.exe , 双击打开就可以运行了。 

 

  可以看到有个去除升级的选项框,选中的话,NHibernateProfiler的自动升级部分也会被清除,如果不选的话,破解后的NHibernateProfiler就还可以继续升级,不过如果保留升级的话有个问题,就是他升级一次,你就要再使用工具破解一次,而且不保证他每次升级后,这个破解工具都还有效。所以这个你们可以自行选择,不过建议,至少保存一个去升级的版本,以备各种不测

  OKAY,点击中间那个大按钮  会弹出文件选择对话框,选中,附录里 target文件夹里 NHProf.exe ,这个是我下的最新的V2.0 build 2150 的版本,写第一篇时还是build 2148 。 如图所示

  点击打开。 这时候如果弹出 

 

  则说明破解已经完成了,这时候我们再到target文件夹里去看看,会发现多了两个文件,一个NHProf_bak.exe 还有一个是HibernatingRhinos.Profiler.Client.Host_bak.dll 。这是两个被修改文件的备份,如果发现破解不行了,可以把这两个文件替换回去 。 

  OKAY,这个很简单,没什么好介绍的,下面就开始讲这个东西是怎么实现的,不过在讲实现之前,还得再回顾一下,第一篇里分析出来的结果 。

  在第一篇里,我们分析出来,验证许可有效是由HibernatingRhinos.Profiler.Client.Host.dll 里 Rhino.Licensing命名空间的AbstractLicenseValidator类的IsLicenseValid这个方法完成的,所以我们只要让这个方法永远返回TRUE就可以实现无论如何验证都有效了,另外我们也分析出来,只要在这个方法里改掉三个地方,就可以保证它永远返回TRUE了,其中第一处为 

throw new LicenseExpiredException("Expiration Date: " + this.ExpirationDate);

对应的是IL代码是

IL_0085:  /* 72   | (70)0021CC       */ ldstr     "Expiration Date: "
IL_008a:  /* 02   |                  */ ldarg.0
IL_008b:  /* 28   | (06)0001AD       */ call      instance valuetype [mscorlib]System.DateTime Rhino.Licensing.AbstractLicenseValidator::get_ExpirationDate()
IL_0090:  /* 8C   | (01)000038       */ box       [mscorlib]System.DateTime
IL_0095:  /* 28   | (0A)000140       */ call      string [mscorlib]System.String::Concat(object,object)
IL_009a:  /* 73   | (06)000207       */ newobj    instance void Rhino.Licensing.LicenseExpiredException::.ctor(string)
IL_009f:  /* 7A   |                  */ throw 

提出来上面红字的部分

72 700021CC
02
28 060001AD 
8C 01000038
28 0A000140
73 06000207
7A

变成实际顺序(还记得那个大端小端吗,不记得可以翻翻第一篇里的描述)   

72 CC210070
02
28 AD010006 
8C 38000001
28 4001000A
73 07020006
7A

  然后在文件(这段HEX所在的文件,这里是 HibernatingRhinos.Profiler.Client.Host.dll )里搜索上面的HEX。找到后,把他们全部清0,这样就可以实现第一处的更改了,剩下的两处原理也是一样的。

   OAKY,上面就是第一篇里分析出来的结果,有了这些,这个工具就容易实现了,其实我们的工具就是把上面的工作自动化了而已,自动搜索HEX,然后自动把这段HEX清0。下面我们就来用这个第一处的修改来作为例子说明一下这个工具是怎么写的,修改其它地方的代码你们可以自己去实现或者看源代码里的实现,原理都是一样的 。  

代码不是很麻烦,直接上代码 。  

string filePath = rootPath + "\\HibernatingRhinos.Profiler.Client.Host.dll" ;   
// 将要修改的文件读到文件流里。   
FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite) ; 
// 再将文件流写到一个byte[]  
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
// Rhino.Licensing命名空间里的AbstractLicenseValidator类的  IsLicenseValid  方法 
// 里的throw ....    
/***********************************
72 700021CC => CC210070
02
28 060001AD => AD010006 
8C 01000038 => 38000001
28 0A000140 => 4001000A
73 06000207 => 07020006
7A
***********************************/    
byte[] sinCode = new byte[] { 
0x72, 0xCC, 0x21, 0x00, 0x70,
    0X02,
    0x28, 0xAD, 0x01, 0x00, 0x06,
    0x8C, 0x38, 0x00, 0x00, 0x01,
    0x28, 0x40, 0x01, 0x00, 0x0A,
    0x73, 0x07, 0x02, 0x00, 0x06,
    0x7A 
};    
// 找到位置  这个方法在源文件里有,可以自己看一看不麻烦。  
int startPos = this.findFirstPos(buffer, 0, sinCode);
if (startPos > 0)
{
  // 全部清0  
  for (int i = 0; i < sinCode.Length; i++)
  {
    stream.Seek(startPos + i, SeekOrigin.Begin);
    stream.WriteByte(0x00);
  }
}  

  这段代码并不是很难,不详细解释了, 看看注释应该就明白了。 :)      

  从上面我们可以看出,只要作者不对我们改的这几个方法进行变动的话,这个工具就是一直可以使用的,不过如果变动了这几个地方,这个工具也就不能用了   :)     

  附录源码+目标

转载于:https://www.cnblogs.com/jivi/archive/2013/04/14/3020318.html

当然可以。以下是一份Java版本的《屌丝逆袭记》策划案: 一、游戏概述 《屌丝逆袭记》是一款以逆袭为主题的Java游戏。玩家将扮演一个屌丝角色,通过挑战各种任务和关卡,逐渐提升自己的能力,成为一名成功人士。游戏采用2D横版的画面风格,操作简单易上手,适合各种年龄段的玩家。 二、游戏玩法 1.人物设置 玩家可以选择男女角色,并自定义角色的外观和属性。角色属性包括力量、敏捷、智力和生命值等,不同属性会对游戏过程产生不同的影响。 2.关卡设置 游戏分为多个关卡,每个关卡有不同的任务和挑战。玩家需要通过关卡,完成任务,获得金币和经验值,提升自己的能力。随着关卡的逐渐升级,任务和挑战也会变得越来越难。 3.装备系统 游戏中设置不同等级的装备,玩家可以通过购买或任务奖励获得装备,提升自己的属性和能力。不同的装备有不同的属性加成,玩家需要根据自己的需求和游戏情况选择合适的装备。 4.商城系统 游戏中设置商城,玩家可以通过金币或充值购买各种道具和装备。商城中的物品种类繁多,包括装备、技能书、药品等,可以帮助玩家在游戏中更好地完成任务和挑战。 5.技能系统 游戏中设置各种技能,玩家可以通过任务奖励或商城购买技能书,提升自己的技能等级。不同的技能有不同的效果,可以帮助玩家在游戏中更好地应对不同的挑战和任务。 6.成就系统 游戏中设置成就系统,玩家可以通过完成特定的任务和挑战获得成就称号和奖励。成就系统不仅可以帮助玩家提升自己的游戏体验,还可以增加游戏的乐趣和挑战性。 三、游戏特点 1.简单易上手,适合各种年龄段的玩家; 2.丰富的角色和装备系统,可以让玩家自由选择和定制自己的角色; 3.多样化的任务和挑战,可以让玩家在游戏中不断挑战自我,提高自己的能力; 4.成就系统和商城系统,可以让玩家获得更多的奖励和乐趣; 5.游戏采用Java语言编,具有良好的稳定性和可移植性。 四、游戏技术实现 1.游戏采用Java语言编,使用Eclipse或IntelliJ IDEA等开发工具; 2.游戏采用Java2D图形库实现2D横版画面风格; 3.游戏采用MySQL数据库存储玩家数据; 4.游戏采用Java Socket实现多人联机模式; 5.游戏采用Java Swing实现用户界面和控件。 以上是一份Java版本的《屌丝逆袭记》策划案,希望能够对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值