扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
该过程需要经历四个步骤:解压,反编译,修改,打包。
目前创新互联建站已为数千家的企业提供了网站建设、域名、网络空间、网站运营、企业网站设计、禄丰网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
解压:jar文件和我们平常的rar和zip文件一样是属于压缩文件,通过一般的解压缩工具(例如:winrar)都能解压。解压之后生成的文件为**.class的字节码文件。
反编译:互联网上有很多的字节码文件反编译工具(例如:jad)。他能够将**.class文件或者直接能够将jar文件反编译为**.java文件。
得到java文件以后就可以修改里面的源代码了。
将修改好的代码编译成**.class字节码文件以后再添加替换掉原来jar包中的class文件,或者重新将修改后的java代码转换成java工程,再生成jar文件都行。
这个过程的完成需要熟悉java基础,编译环境等相关知识。尤其是对jar包的理解很重要。反编译在互连网上就能直接找到很多工具。打包则很简单不做累述。
SSL 连接的 context 目前用那个 KeyManager, TrustManager 的实现(Sun 公司提供的)都是默认地从命令行提供的参数或代码中明确初始化的 trust manager / key manager 中查找的,这里面可以肯定的是这个参数在连接建立之前已经固定了的静态形式,这要求我们把可以信任的服务器证书的颁发机构的根证书先导入到 trust store 中然后指派给 java 程序。
因此当我们的服务器使用了一张不在 trust store 中的信任根证书机构名录中的证书是不会被信任的,因此我们必须提供一个有别于 Sun 的 Trust Manager 接口的实现类,然后像 IE 浏览器那样在查找证书来确认是否信任时弹出一个对话框出来让用户检查,当用户点击“以后一直信任该证书的厂商”时我们把它缓存在持久性介质(比如文件或数据库)中,下次访问时先看是否有缓存的,没有再来弹对话框让用户确认,当服务器要求客户端出示客户端证书时(比如网银业务)我们同样需要提供自己的 key manager 实现。
要是你嫌用cmd执行麻烦的话,你可以去下载相应的java开发工具。如Ecplise或者MyEcplise。这些都是可以直接用于java 的开发,其中的道理跟cmd利用javac编译 java运行。只不过其中省略了cmd的步骤,而开发程序自动帮你完成了javac.xxxx.java和java xxxx这两步。对,javac是对java程序进行一次编译,生成class文件,然后在运行.
正则表达式分析文件就可以了……
再加个状态机就好…
当然在处理代码字符串之前,先要把所有的注释部分删除掉,包括//和/* */部分
import java.util.regex.*;
public class InterfaceAnalyzer {
public static void main(String[] args) {
interface_context =
"package com.app.test;\n"
+"public interface IA {\n"
+" public abstract void a();\n"
+" public abstract void b();\n"
+"}";
interface_name = "";
class_name = "A";
class_implement = "public class "+class_name+" implements ";
pattern = Pattern.compile("[\\w_\\.]+");
match = pattern.matcher(interface_context);
while(match.find()) {
stateMachine(match.group());
}
class_implement += ") {\n\t}\n}";
System.out.println(class_implement);
}
public static void stateMachine(String word) {
switch(status) {
case 0:
if("package".equals(word)) {
status = 1;
} else if("interface".equals(word)) {
status = 2;
}
break;
case 1: // get package name
package_name = word;
class_implement += package_name+".";
status = 0;
break;
case 2: // get interface name
interface_name = word;
class_implement += interface_name + "{\n";
status = 3;
break;
case 3: // start a member
if("public".equals(word) || "private".equals(word) || "protected".equals(word)) {
member_access_type = word;
status = 4;
}
break;
case 4: // get a method that needs to override
if("abstract".equals(word)) {
status = 5;
class_implement += "\t" + member_access_type + " ";
} else {
status = 3; // not a method member
}
break;
case 5: // get member type
member_type = word;
class_implement += member_type + " ";
status = 6;
break;
case 6: // get member name
member_name = word;
class_implement += member_name + "(";
status = 7;
break;
case 7: // get parameter type
if("public".equals(word) || "private".equals(word) || "protected".equals(word)) {
member_access_type = word;
class_implement += ") {\n\t}\n";
status = 4;
} else {
para_type = word;
class_implement += ", " + para_type + " ";
status = 8;
}
break;
case 8: // get parameter name
para_name = word;
class_implement += para_name;
status = 8;
break;
}
}
private static int status;
private static String interface_context;
private static String package_name;
private static String interface_name;
private static String class_name;
private static String class_implement;
private static String member_name;
private static String member_type;
private static String member_access_type;
private static String para_name;
private static String para_type;
private static Pattern pattern;
private static Matcher match;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流