作者:xiangya
我很高兴向大家知会一声,scioworks Camino的基于Struts的Web Application开发工具已经可以破解了。因为Struts不错,我才想这样,目的只有一个,用来测试检验Struts。
这个工具使用注册码,并使用注册码进行日期判断。让我有点恼火的是,程序会想一个地址发送UDP包,不管怎样,我不希望这样的事情发生。
我想这个工具的破解有两种方式,
1, 认真钻研其算法,然后给出一个KeyGen程序。这种方式对程序本身不会有什么影响,但是研读算法比较费时间。
2, 改写程序控制,然后给出一个替代的class文件。这种方式因为改写了程序控制流程,需要特别小心,不小心的话,原来的程序就会崩溃。
这两种方式各有千秋,取决于你的兴趣所在。因为这个工具经过了代码优化以及别的处理,所以,改写代码稍嫌麻烦。
要做改写代码方式破解的话,你需要一个反编译工具,我推荐你使用jshrink,因为jad好像已经不再做下去了。(别说你还有好多反编译工具,错,大多使用jad Engine。)其次你需要了解一点java虚拟机规范,没有也行,那么你需要熟悉java语言,或者加上一些windows汇编语言知识。
我没有更多耐心所更多的东西。给出源代码,你爱谁谁去。
// Main.java; class file size 15569 bytes
package scioworks.camino;
/*
import BindingSchemaLoader;
import CaminoApp;
import CaminoModel;
import Config;
import ContextPathUtil;
import ExpressException;
import FileReadWriteException;
import InvalidResourceException;
import Main$CMon;
import Main$SMon;
import Navigatable;
import ParseException;
import StrutsSubApp;
*/
import com.jxml.quick.QDoc;
import scioworks.camino.event.ProjectReadyEvent;
import scioworks.camino.gui.LcPanel;
import scioworks.camino.io.DirtyStatusLookup;
import java.awt.Color;
import java.awt.Frame;
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeMap;
import javax.swing.JOptionPane;
import scioworks.camino.prjModel.CaminoProject;
import scioworks.camino.prjModel.SubApp;
import scioworks.aspen.BaseDialog;
import scioworks.aspen.HelpManager;
import scioworks.aspen.SwingUtil;
import scioworks.aspen.progress.ProgressListener;
import scioworks.common.io.FileUtil;
import scioworks.common.io.filemonitor.FileMonitor;
import scioworks.common.logging.Logger;
import scioworks.common.logging.LoggerFactory;
import scioworks.common.message.Message;
import scioworks.common.message.MessageCategory;
import scioworks.util.crypto.TransformerRev;
import scioworks.camino.strutsModel.Action;
import scioworks.camino.strutsModel.StrutsConfig;
import scioworks.camino.webdd.Servlet;
import scioworks.camino.webdd.ServletMapping;
import scioworks.camino.webdd.WebApp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.InetAddress;
class Main
implements
CaminoModel
{
final static private String _$159506 = "VGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaXMgaW52YWxpZA==";
final static private String _$115780 = "Q2FtaW5vIExpY2Vuc2UgSW5mbw==";
final static private String _$159525 = "VHJpYWwgbGljZW5zZSBleHBpcmVzIGluIHswfSBkYXlz";
final static private String _$159544 = "WW91ciB0cmlhbCBsaWNlbnNlIGhhcyBleHBpcmVkLiBWaXNpdCBodHRwOi8vd3d3LnNjaW93b3Jrcy5jb20gdG8gcHVyY2hhc2UgYSBsaWNlbnNlZCBjb3B5IG9mIFNjaW93b3JrcyBDYW1pbm8=";
final static private String _$159561 = "VW5yZWdpc3RlcmVkIFRyaWFsIENvcHk=";
final static private String _$159583 = "usitPzelhkTNlTcaSpAIIiuaalidM";
final static private String _$159605 = "U3RhbmRhcmQ=";
final static private String _$159621 = "RW50ZXJwcmlzZQ==";
static private scioworks.common.logging.Logger _$3187 = scioworks.common.logging.LoggerFactory.getLogger(Main.class);
// scioworks.common.logging.LoggerFactory.getLogger((class$scioworks$camino$Main == null) ? (class$scioworks$camino$Main = Main.class$("scioworks.camino.Main")) : class$scioworks$camino$Main);
private int _$159639;
private String _$159651;
//private Main$CMon _$159668;
//private Main$SMon _$159676;
private int _$159680;
private String _$59575;
private long _$159700;
private String _$59588;
private String _$115870;
private CaminoProject _$62680;
private WebApp _$126484;
private java.util.Map _$159711;
public Main() throws InvalidResourceException {
_$159639 = 12345;
_$159651 = "230.10.10.11";
//_$159668 = null;
//_$159676 = null;
_$159680 = 1;
_$59575 = "";
_$159700 = -1;
_$59588 = "";
_$115870 = "";
_$62680 = null;
_$126484 = null;
_$159711 = new java.util.TreeMap();
getLc(javax.swing.JOptionPane.getRootFrame(), true);
_$3187.info("License Count = ".concat(String.valueOf(_$159680)));
_$3187.info("Serial Number = ".concat(_$59575));
_$115870 = _$159725();
//_$159744();
BindingSchemaLoader.getProjectBindingSchema();
BindingSchemaLoader.getStrutsConfigBindingSchema();
BindingSchemaLoader.getWebDDBindingSchema();
scioworks.aspen.HelpManager.instance();
}
public java.util.List findGlobalForwardsByTarget(Navigatable n1) {
ArrayList a2;
Iterator i3;
StrutsSubApp s4;
List l5;
a2 = new java.util.ArrayList();
i3 = _$159711.values().iterator();
while (i3.hasNext()) {
s4 = (StrutsSubApp) i3.next();
l5 = s4.getStrutsConfig().findGlobalForwardsByTarget(n1);
a2.addAll(l5);
}
return a2;
}
public Navigatable findNavigatable(String s1) {
Iterator i2;
StrutsSubApp s3 = null;
i2 = _$159711.values().iterator();
{
do {
if (i2.hasNext()) {
s3 = (StrutsSubApp) i2.next();
}
}
while (s3.isInSubApp(s1) == false);
return s3.findSubAppNavigatable(s3.makeSubAppRelative(s1));
}
//return null;
}
public Action findAction(String s1) {
Iterator i2;
StrutsSubApp s3 = null;
i2 = _$159711.values().iterator();
{
do {
if (i2.hasNext()) {
s3 = (StrutsSubApp) i2.next();
}
}
while (s3.isInSubApp(s1) == false);
return s3.findSubAppAction(ContextPathUtil.makeSubAppRelative(s3.getPrefix(), s1));
}
//return null;
}
public CaminoProject getProject() {
return _$62680;
}
public WebApp getWebApp() {
return _$126484;
}
public StrutsSubApp getSubApp(String s1) {
return (StrutsSubApp) _$159711.get(s1);
}
public java.util.Set getSubAppPrefixes() {
return _$159711.keySet();
}
java.util.Map getAllSubApps() {
return _$159711;
}
public void initNewProject(CaminoProject c1, scioworks.aspen.progress.ProgressListener p2) throws InvalidResourceEx