作者: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
|