修改jar包中的class,并重新打包签名

项目需要,需要通过一台公网服务器让客户端访问内网中的服务器。方案是让内网中的服务器与公网中的服务器建立长连接,然后客户端需要访问内网中的服务器时,公网中的服务器通过该连接转发客户端和内网服务器之间的数据。其中有一个是惠普的服务器,要访问其中的ILO(独立的维护系统数据卡,方便系统维护用)控制台,该控制台终端是applet小程序。开始想得很简单,就是纯粹转发TCP数据包。但是后来发现有两个问题。

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


完成


附上工具连接:点击打开链接



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值