修改jar包中的class,并重新打包签名
2016-09-16 23:42
1856 查看
项目需要,需要通过一台公网服务器让客户端访问内网中的服务器。方案是让内网中的服务器与公网中的服务器建立长连接,然后客户端需要访问内网中的服务器时,公网中的服务器通过该连接转发客户端和内网服务器之间的数据。其中有一个是惠普的服务器,要访问其中的ILO(独立的维护系统数据卡,方便系统维护用)控制台,该控制台终端是applet小程序。开始想得很简单,就是纯粹转发TCP数据包。但是后来发现有两个问题。
1.多个客户端通过公网服务器访问内网服务器如何区分不同的客户端(客户端没有源码,后来通过监听不同端口区分,不细说这个没有源码的方案)
2.建立的TCP代理服务有问题,一个是一建立连接窗口就缩小,一个是远程关机状态下开机,画面不同步(后来发现是一个更新线程异常退出),开始认为是时机的问题,但无论怎么改代理程序,都无法解决问题。折磨了几天终于受不了了,决定将jar包反编译出来,不能修改,至少知道哪里出问题,最终还是通过修改解决,这个也不详细说明。现在讨论的是如何反编译,如果重新签名(很多破解android的apk基本是这个流程)。
--------------------------------------------------------------性感分割线-------------------------------------------------------------------------------
一开始就想到了著名的jd-gui,网上下了,用法很简单,基本傻瓜操作。但是反编译出来的源码,一个是不能立即编译回去的,因为有很多语法错误,一个反编译出来的代码比较难看,不要说注释,逻辑结构,变量命名那些基本风格都是有问题的,看起来都是挺折磨人的,还如何理清逻辑,更别提如何修改。大概修改一些语法错误半天,觉得不是办法,太耗费时间了。于是又去找找,找到一款叫“小颖Java源代码反编译专家”的软件,将jar包反编译出来,同样有错误,修改也不好修改。但是,我发现两个反编译软件反编译出来的代码出错的地方不一样,可以将两份代码何在一起,于是就行动了,在eclipse建了两个项目,已jd-gui反编译出来的源码为基础,发现有错的地方,就去看“小颖Java源代码反编译专家”反编译出来的源码有没有错,如果没错,就直接拷贝过去,就这样下去,结果最后只剩下一个文件,真是神速,而且最后这个文件语法错误不多,很好修改。
下面说下,如何编译回去。先上我写的一个自动化脚本:
cm.sh
签名脚本signer.sh:
基本意思就是已原来的jar文件为库,一个一个文件编译出来,然后重新打包,签名。这里一个需要注意的地方是签名。使用官方提供的签名工具
接着很关键,看下MANIFEST.MF,删掉Codebase: *以下的所有东西,剩下如下东西
然后将文件和编译出来的额class按原来jar中的文件结构放在一起,打包
jar cvf /root/hp/intgapp_225.jar *
接着是签名
spawn jarsigner -verbose -keystore x.keystore -signedjar intgapp_225.jar intgapp_225.jar x.keystore
完成
附上工具连接:点击打开链接
1.多个客户端通过公网服务器访问内网服务器如何区分不同的客户端(客户端没有源码,后来通过监听不同端口区分,不细说这个没有源码的方案)
2.建立的TCP代理服务有问题,一个是一建立连接窗口就缩小,一个是远程关机状态下开机,画面不同步(后来发现是一个更新线程异常退出),开始认为是时机的问题,但无论怎么改代理程序,都无法解决问题。折磨了几天终于受不了了,决定将jar包反编译出来,不能修改,至少知道哪里出问题,最终还是通过修改解决,这个也不详细说明。现在讨论的是如何反编译,如果重新签名(很多破解android的apk基本是这个流程)。
--------------------------------------------------------------性感分割线-------------------------------------------------------------------------------
一开始就想到了著名的jd-gui,网上下了,用法很简单,基本傻瓜操作。但是反编译出来的源码,一个是不能立即编译回去的,因为有很多语法错误,一个反编译出来的代码比较难看,不要说注释,逻辑结构,变量命名那些基本风格都是有问题的,看起来都是挺折磨人的,还如何理清逻辑,更别提如何修改。大概修改一些语法错误半天,觉得不是办法,太耗费时间了。于是又去找找,找到一款叫“小颖Java源代码反编译专家”的软件,将jar包反编译出来,同样有错误,修改也不好修改。但是,我发现两个反编译软件反编译出来的代码出错的地方不一样,可以将两份代码何在一起,于是就行动了,在eclipse建了两个项目,已jd-gui反编译出来的源码为基础,发现有错的地方,就去看“小颖Java源代码反编译专家”反编译出来的源码有没有错,如果没错,就直接拷贝过去,就这样下去,结果最后只剩下一个文件,真是神速,而且最后这个文件语法错误不多,很好修改。
下面说下,如何编译回去。先上我写的一个自动化脚本:
cm.sh
#!/bin/sh # Define some constants PROJECT_PATH=/root/hp JAR_PATH=$PROJECT_PATH/lib BIN_PATH=$PROJECT_PATH/bin SRC_PATH=$PROJECT_PATH/ocm rm -f $SRC_PATH/sources find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list rm -rf $BIN_PATH/com mkdir $BIN_PATH/com cp /root/hp/hp /root/hp/bin/com -r # Compile the project javac -d $BIN_PATH -classpath $JAR_PATH/intgapp_225.jar @$SRC_PATH/sources.list cd /root/hp/bin/ && jar cvf /root/hp/intgapp_225.jar * cd /root/hp ./signer.sh cp -f intgapp_225.jar /root/goc/views/vncterm/
签名脚本signer.sh:
#!/usr/bin/expect spawn jarsigner -verbose -keystore x.keystore -signedjar intgapp_225.jar intgapp_225.jar x.keystore expect "*:" send "123456\r" expect eof.
基本意思就是已原来的jar文件为库,一个一个文件编译出来,然后重新打包,签名。这里一个需要注意的地方是签名。使用官方提供的签名工具
keytool -genkey -v -keystore x.keystore -alias x.keystore -keyalg RSA -validity 20000看下jar文件结构,一个是com,里面基本一些class文件和资源文件,还有一个是META-INF,删除com中的class文件,和META-INF中的证书文件。
接着很关键,看下MANIFEST.MF,删掉Codebase: *以下的所有东西,剩下如下东西
Manifest-Version: 1.0 Application-Name: Java Integrated Remote Console Permissions: all-permissions Created-By: 1.4.2_19 (Sun Microsystems Inc.) Codebase: *
然后将文件和编译出来的额class按原来jar中的文件结构放在一起,打包
jar cvf /root/hp/intgapp_225.jar *
接着是签名
spawn jarsigner -verbose -keystore x.keystore -signedjar intgapp_225.jar intgapp_225.jar x.keystore
完成
附上工具连接:点击打开链接
相关文章推荐
- Android对apk源码的修改--反编译+源码修改+重新打包+签名【附HelloWorld的修改实例】
- 将JAR包反编译,修改后重新打包
- 系统级别Apk文件反编译,修改后重新打包签名过程
- jar文件内容修改重新打包
- Android hibeaver修改jar源码,重新打包,备注,防忘记
- Android 反编译,修改,重新打包,签名
- 安卓apk反编译、修改、重新打包、签名全过程
- 命令行生成并运行jar包 续(命令行打包多个.class文件、修改清单文件)
- 修改jar包源码,然后重新打包.jar文件
- jar反编译修改重新打包 安卓androidStudio或者eclipse
- 将JAR包反编译,修改后重新打包(转)
- jar包修改后重新打包
- 【转】Java-----jar反编译修改重新打包
- 修改部分jar代码,并快速重新打包jar。
- java 修改jar中的menifest.mf文件后重新打包过程中遇到的中文问题解决
- Java-----jar反编译修改重新打包
- Java 服务器端修改apk并重新打包签名
- Java 服务器端修改apk并重新打包签名
- jar包修改并重新打包
- Java-----jar反编译修改重新打包