破解Java to C# Converter
起因
最近在对接一个第三方平台。该平台只提供了Java版本的SDK,C#版本的还处于敬请期待状态。由于C#可以复用绝大部分代码,便考虑找一个Java到C#的转换器,在试用了几个软件之后,发现还是Java to C# Converter(下文简称Converter)好用一点。然而基本版功能受限(文件夹不能超过1000行代码,代码片段不能超过100行),高级版的则要$169。
在经历过自己写小程序转换Java、手写代码、利用Converter分批次转换、查找替换等方式完成C#版本之后。终于按捺不住心中的好奇心,研究了下软件的破解。
希望
首先看看这个软件是不是C#写的,将文件拖入ILSpy,一看之下,果然有惊喜。

嗯,惊喜就是虽然该软件是利用C#+WinForm写成的,但是很明显的经过了混淆。吓得我赶忙利用ILSpy的Save Code功能将其保存为工程文件。看能不能重新编译成可执行程序。
失望
首先试试双击工程文件,VS没反应。换用dotPeek依然如此。
然后新建工程,将项目添加到工程中,一大堆错误,无外乎是变量名不正确。换用dotPeek依然如此。如果时间充足的话,可以细心研读代码,修复错误,重新编译。一来错误太多、二来我也不想花太多时间在读代码上面、三来我的目的不在这上面。于是果断放弃该方式。

新希望
思路
我们知道,C#程序是编译成IL的,恰好我知道Reflexil可以直接编辑IL。上Reflexil官网一看,现在也支持ILSpy(以前我以为只支持Reflector),那就直接在ILSpy中改写IL。
查找编辑位置
要编辑IL的话,关键是要找对地方。软件未注册的话,好多时候都会弹出一个对话框,Converter也与此类似。

直接在VS中查找相应的字符串,如最开始的The Free Edtion of。经过简单分析后不难看出_g22.cs正是我们要找的地方。
internal static bool _g41(List<string> Copyright_Tangible_Software_Solutions_p0)
{
if (_g22._g24 == _g3.FreeEdition)
{
if (_g22._m21 != 100)
{
Copyright_Tangible_Software_Solutions_g810._g844(Copyright_Tangible_Software_Solutions_g810._g843);
return false;
}
if (Copyright_Tangible_Software_Solutions_p0 == null)
{
return true;
}
int num = 0;
for (int i = 0; i < Copyright_Tangible_Software_Solutions_p0.Count; i++)
{
if (Copyright_Tangible_Software_Solutions_p0[i].Trim().Length > 0 && !Copyright_Tangible_Software_Solutions_p0[i].TrimStart(new char[0])._g1079("//"))
{
num++;
if (num > _g22._m21)
{
new _g376(string.Concat(new string[]
{
"The Free Edition of ",
Application.ProductName,
" doesn't allow conversion of snippets with more than ",
_g22._m21.ToString(),
" lines at a time."
}));
return false;
}
}
}
}
return true;
}
下面还有两个函数,_g42和_g43形式与此类似,_g42应该是文件夹的许可,_g43不知道是做什么的。从函数的代码上看,感觉直接将返回值改成true就好了。不管那么多,先来试试改写_g41。
准备工作
在网站上下了reflexil.for.ILSpy.2.0.AIO(我愣了下才反应过来AIO是All In One的意思),解压后将里面的DLL复制到ILSpy目录下。打开ILSpy(如果ILSpy复制前是打开,则需重启),在View中点击Reflexil v2.0,然后在ILSpy中打开Converter的可执行文件,找到_g22类中的_g41函数。如下图所示:

Instructions标签页就是进行IL编辑操作的地方。虽然在Reflexil中可以直接编辑源码:在Instructions标签页的表格中选择Replace all with code,在弹出的窗口中编辑源码。但是在Converter中默认的代码方法体无任何内容,而且Complie也会访问错误(虽然并没有错误)。于是果断放弃这种方式。

编辑IL
编辑IL还有一个问题就是我们要将IL改变成什么样。在本例中就是return true对应的IL是什么 。这个问题说难也难,说简单也简单。只要我们在VS中编写一段同样的代码,生成后在ILSpy中以IL方式查看即可。

C#形式的代码

IL形式的代码
接下来就是将Instructions标签页表格中的IL改为与上图的IL一样。整个过程很简单,删除、添加、修改,只要保持指令与目标一致。值得一提的是,总共6条指令(nop将就留下吧),只有第4条有操作数,可将其最后添加。因为是跳转语句,需要在Operand type中选择Instruction reference,然后在Operand选择要跳转的指令位置。

大功告成
在ILSpy中Converter可执行文件上单击右键,在弹出的右键菜单中选择Save As,保存好文件(可以对Converter原文件作好备份后直接覆盖)。验证后发现针对代码片段的限制确实失效了。
如果对_g42和_g43也如法炮制,就会发现针对文件夹的限制也会失效。
结语
我是抱着研究学习的态度来尝试破解的,破解之后也没有作其他用途。本着跟大家沟通交流的初衷将这个过程写下来,请各位多多赐教,同时,也希望大家多支持正版。
然而我辛辛苦苦作出的C#版本最终一点用都没派上,这真是一个温暖人心的结局。
破解Java to C# Converter的更多相关文章
- JAVA To C++ Converter Cracked ( 破解版 )
JAVA To C++ Converter v17.10.2 Cracked by X-Cracker 简介 JAVA To C++是一款将JAVA代码或项目转换为 C++的工具 免费版本只每次只支持 ...
- 一招破解 Java 集合类面试题
今日招式:Java集合类面试题 Java集合类绝对是我们的老朋友了,Java技术江湖里,谁人不知,谁人不晓,它的使用率非常高,使用难度却也不大,这也导致了很多人对它不屑一顾,殊不知其中却暗藏玄机,今天 ...
- [破解]java打包Exe工具 - Jar2Exe Wizard
打包java文件为exe的方法和软件有很多,还有一些开源的软件和一些免费的软件. 我用过的所有打包exe软件中,Jar2Exe Wizard是最好用的,但是只有一个月的试用期,需要的可以从官网下载. ...
- 最简破解-java代码热加载热部署IDEA插件JRebel
如果经济实力允许的话,还是建议大家去购买收费版.支持原创作者,才能有更好的产品出现. 一.Jrebel插件介绍 JRebel一款帮助我们在开发过程中实现热加载的插件,目前来说,在IDEA中实现热加载最 ...
- IT生涯, 我的常用软件清单
IT生涯, 我的常用软件清单 SkySeraph Jan. 26th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.skysera ...
- Windows 7上QTP11破解及java等插件破解方法
QTP11破解方法: 1.准备文件 注册机mgn-mqt82.exe 2.安装QTP11 3.运行注册机mgn-mqt82.exe 如果运行mgn-mqt82.exe 没有反应-,请注意关掉暂时关掉杀 ...
- Java To CSharp源代码转换
前言 开发环境 客户端:Unity3D开发(C#) 服务器:Java (基于Java7) 日 期:2016年09月 需求说明 部分服务器的部分逻辑功能在客户端实现一遍,可以简单的理解为服务器的部分 ...
- Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php
Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处 ...
- paip.c++ 转换 java 解决方案
paip.c++ 转换 java 解决方案 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/a ...
随机推荐
- border:0与border:none区别与联系
联系:前台效果均实现了无边框 区别: 要解释区别,首先得先介绍一下border这个属性. border是一个简写属性.可以设置如下属性 border-width border-style border ...
- python基础之函数
python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...
- 更新整理本人所有博文中提供的代码与工具(Java,2013.11)
为了更方便地管理博文中涉及的各种代码与工具资源,现在把这些资源迁移到 Google Code 中,有兴趣者可前往下载. Java 1.<高效 Java Web 应用开发框架 JessMA v3. ...
- jQuery实现右上角点击后滑下来的竖向菜单
效果体验请点击这里:http://keleyi.com/a/bjad/27095rgj.htm 这个菜单我觉得可以做成在线客服之类的,点击下滑后,带关闭按钮,因此在不想显示的时候可以关掉它. 以下是源 ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(四)地图导航控件模块
config.xml文件的配置如下: <widget left="10" top="50" config="widgets/Navigation ...
- Objective-C 工厂方法
类方法用来创建对象的方法就是工厂方法 1.无参工厂方法 创建对象,并给属性一个默认值. //无参工厂方法实现 +(Student*)student{ return [[Student alloc]in ...
- SharePoint 2013 母版页取消和HTML页关联
前言:在新版本的SharePoint 2013上,有新的功能可以通过HTML导入母版页,然后HTML和Master页面相关联,更改HTML页的时候,Master会自动同步修改,然而,有些时候我们不需要 ...
- 地理数据库 (Geodatabase) 版本管理
版本化地理数据库包含一些非版本化地理数据库中不存在的附加表格和记录.这些附加表和记录有助于长时间执行并行编辑.如果不进行版本化处理,则编辑者需要锁定数据并防止其他用户对数据进行编辑或查看.要使用此功能 ...
- 长链接转换成短链接(iOS版本)
首先需要将字符串使用md5加密,添加NSString的md5的类别方法如下 .h文件 #import <CommonCrypto/CommonDigest.h> @interface NS ...
- "Type Coercion failed" Error in FlashBuilder 4.7
作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/3544450.html 原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动 做robot ...