破解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 ...
随机推荐
- Web测试介绍一 UI测试
随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时, ...
- 时钟周期,CPU周期,指令周期,CPU时间片
从小到大来说:时钟周期,CPU周期,指令周期,CPU时间片 时钟周期:一个脉冲需要的时间,频率的倒数 CPU周期:读取一个指令节所需的时间 指令周期:读取并执行完一个指令所需的时间 CPU时间片:CP ...
- Lind.DDD.Paging分页模块介绍
回到目录 分页组件网上有很多,MVC.Pager,JSPager等,通过实现方式大体分为前端分页和后端分页,前端分页是前台对list内存本地集合进行分页,缺点就是在大数据情况下,内存占用过高:后端分页 ...
- jQuery:年月日三级联动
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...
- centos yum Segmentation fault 问题解决办法
今儿在centos 使用yum 安装软件时出现了 ”Segmentation fault“ 错误提示,google一大把执行 yum clean all 命令后,再执行还是没用,最后把 zlib.x. ...
- BUTTONS V. 2.0.0——CSS按钮库
BUTTONS-V2-CSS库样式职责 CSS库样式职责分离优点 模块样式命名更清晰化 易于维护.扩展性强 动画效果——修改样式后有过度效果,默认样式 源码如下 <!DOCTYPE html&g ...
- ul ol di三者区别
1.ul是无序列表,也就是说没有排列限制可以随意加li: <ul> <li>可以随意放置</li> <li>可以随意放置</li> < ...
- css(二)
本文是一些作者在长期写代码中总结的常用css查询,写在本博客中,方便以后查询. 1. 颜色属性: color HEX(十六进制色:color: #FFFF00 --> 缩写:#FF0) RG ...
- Oracle system identifier(SID) "xxx" alread exits. Specify another SID
案例环境: 操作系统 :Oracle Linux Server release 5.7 64 bit 数据库版本:Oracle Database 10g Release 10.2.0.4.0 - ...
- SQL SERVER 2000通过链接服务器发送邮件出现错误
案例环境: 服务器A系统: Windows Server 2000 数据库版本 : Microsoft SQL Server 2000 - 8.00.2282 (Intel X86) 服务器B系统: ...