修改jar包中class文件

需求:银行跑批任务执行时要调用行方自己的短信平台给科技部人员发送短信,行方提供一个jar文件,通过shell脚本传参调用即可。

问题点:shell脚本调用jar包没太大问题,关键在于,需要在jar包中的某个类中配置短信平台的用户名、密码。

解决方案:将jar反编译—>保存为.java文件—>修改文件内容—>重新编译—>将原来jar包解压—>替换class文件—>压缩为jar包。


是时候表演真正的技术啦!


首先,看一下我的msg.jar包的结构,直接解压是这样式的~

修改jar包中class文件_第1张图片

我要修改的代码就是这个T.class,但是class文件没办法直接修改

所以我们需要反编译工具,我使用的是jd-gui。

链接:https://pan.baidu.com/s/1qP4N8Uvss8lRbWp_1h91Fg 
提取码:i6mk

修改jar包中class文件_第2张图片

打开后:

修改jar包中class文件_第3张图片

反编译还是没办法直接修改的,Ctrl+S将其保存为.java文件

修改jar包中class文件_第4张图片

保存之后就可以通过编辑工具进行修改了,因为我的这个类是依赖了其他很多类的,修改完直接javac编译该文件会报错

所以,我们要建一个项目,为这个java文件配置相同的目录结构,把这个类所依赖的jar包(其实就是本jar包,但是要先解压,然后把该类的class文件删掉,再压缩为jar文件即可,压缩为jar包的方式见后边)导入,将项目打成jar包,再将jar包解压,将修改的类的class文件拿出来就可以了。

为了简便,我用idea直接建了一个spring boot项目,

修改jar包中class文件_第5张图片

因为我要改的class文件就在jar包根目录下,所以我直接保存后的java文件放到启动类同目录就行了,如果不是的话,根据class文件所在jar包的目录结构在项目中创建对应目录结构即可。

这时候,其实是会报错的,因为依赖的很多类都没有,但我已经引入jar包了,所以不会报错。

引入剔除该class文件的jar包

修改jar包中class文件_第6张图片

 

修改jar包中class文件_第7张图片

还有修改一下jdk之类的操作不细说了,pom文件加一下本地jar包依赖、jdk版本、和编译打包的一些依赖配置。


        1.8
    

    

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        
            com.jugan.util
            com.jugan.util
            1.0
            system
            ${project.basedir}/lib/msg.jar
        
    

    

        
            
                lib

                
                    F:/workspace/msg/lib/msg.jar
                
            
        

        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

然后,修改代码

修改jar包中class文件_第8张图片

maven 编译打包

修改jar包中class文件_第9张图片

编译打包成功,去把打好的jar包中的class文件拿出来,替换掉原始jar包中的class文件,

然后将其压缩为jar包。

修改jar包中class文件_第10张图片

注意,在解压缩的jar包的文件夹里边选中所有文件进行压缩,直接压缩文件夹的话,会多出一层。

大功告成。

 

 

你可能感兴趣的:(反编译,jar,intellij,idea,spring,boot,class)