1. 程式人生 > >利用javassist修改.class檔案,並重新打包

利用javassist修改.class檔案,並重新打包

問題:想修改jar包中的原始碼,修改後重新打成jar包

剛開始想用反編譯軟體jd-gui,反編譯之後就可以愉快的修改原始碼了。但是又遇到一個問題,反編譯之後,修改完成,再次編譯的時候需要依賴的jar包。

然而我還沒有全部依賴的jar包。所以想直接修改.class檔案試試。於是乎,在度娘上找到了一些方法,嘗試後總結如下。

1.引入javassist包,可以去網上下載(我是從老專案裡面找的,貌似用框架整合的專案裡都會有這個包)

2.引入要修改的jar包

3.開始修改!!!!!

public static void main(String[] args) throws Exception {
ClassPool cp = ClassPool.getDefault();
// 獲得類檔名
CtClass cc = cp.get("com.cdeledu.exportJar.TestJar");
// 獲得要修改的方法名
CtMethod m = cc.getDeclaredMethod("getContent");
// 這裡是將返回結果改成true
m.setBody("{String url= \"test\";url=\"test1\";System.out.println(\"ttteeesssttt\");}");
cc.writeFile("F:/test2");
System.out.println("ok");
}


以上程式碼就是把方法體中的內容修改成setBody中的內容。

4.修改之後重新打成jar包,這又是一個蛋疼的問題,正常手段還是需要依賴包。但是無意中發現個捷徑。

將以前的jar包解壓,解壓後將改好的class檔案覆蓋原來的,然後在將所有檔案打成zip包

然後再將zip重新命名成jar就好了。雖然這樣不是很科學,但是親測好用!!!!

以上方法希望對遇到相同問題的小夥伴有幫助!!

相關推薦

利用javassist修改.class檔案重新打包

問題:想修改jar包中的原始碼,修改後重新打成jar包 剛開始想用反編譯軟體jd-gui,反編譯之後就可以愉快的修改原始碼了。但是又遇到一個問題,反編譯之後,修改完成,再次編譯的時候需要依賴的jar包。 然而我還沒有全部依賴的jar包。所以想直接修改.class檔案試試。於

如何利用JClassLib修改.class檔案

最近在學習逆向分析和反編譯,無意之中瞭解到了JClassLib。JClassLib不但是一個位元組碼閱讀器而且還包含一個類庫允許開發者讀取,修改,寫入Java Class檔案與位元組碼。其他的用途我就

純手寫利用poi讀取xls檔案通過JDBC存入MySQL資料庫

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019

Mac 終端 命令 批量重新命名檔案修改後綴

新建一個指令碼檔案:reanme.sh 開啟檔案,使用以下程式碼: for i in ./1/*/*.jpg; do mv "$i" "${i%.jpg}.png"; done 作用:

C#:讀取html模板檔案替換修改檔案中指定值儲存為修改後的檔案

1.準備html模板檔案:Pages/Device/DeviceModel8.html   2 using System.IO:讀取檔案內容,並替換指定內容                  &nbs

Java讀取1G以上的txt檔案對內容進行解析,利用BufferedReader設定快取大小

讀取檔案路徑 ,讀入 使用帶緩衝的輸入輸出流,效率更高,速度更快。建立一個內部緩衝區陣列並將其儲存在 buf 中,該buf的大小預設為8192。 File file = new File(filepath);    BufferedInputStream fis = ne

【複製指定目錄下的指定型別檔案修改後綴名】

package com.companyname.common.test; import java.io.*; /** * @Description * @Author Created by shusheng. * @Email [email protected] * @Date 2

利用boost遍歷路徑下所有檔案判斷檔案是否是資料夾

#include<boost/filesystem.hpp> void GetFileNameFromDir(const char* rootPath) {     boost::filesystem::path dir(rootPath);     if (b

利用keras載入訓練好的.H5檔案預測圖片

import matplotlib matplotlib.use('Agg') import os from keras.models import load_model import numpy as np from PIL import Image import cv2

如何在客戶端上傳shell指令碼檔案利用PHP呼叫執行指令碼

題目中的上傳包含兩部分,一部分是上傳檔案,一部分是利用PHP執行指令碼 上傳檔案到指定資料夾 所謂檔案上傳是指將本地文字檔案,圖片視訊或者音訊等檔案上傳到伺服器上,以供後續操作的過程。 上傳檔案有幾種方式,包括: - 單純的form表單上傳提交 使

利用WGET下載檔案儲存到指定目錄

wget是Linux上一個非常不錯的下載指令,而其指令的內容雖然說是非常簡單,但內藏許多的引數,也算是Linux工作者常用的指令之一。 而這個指令我想在各大系統都預設有提供,包括了Ubuntu、Fedora等,而一般來說,要使用wget下載檔案,只需要打以下的

java 利用輸入輸出流處理txt檔案生成新txt檔案

直接上程式碼: import java.io.*; import java.util.Calendar; public class TestTxt { @org.junit.Test public void test2(){ long starttime=System.curre

C++讀取txt檔案利用ROS將其作為資料流輸出

#include "ros/ros.h" #include "std_msgs/String.h" #include <sstream> #include <iostream> #include <vector> #include <

從Matlab .fig檔案中讀取資料重新繪圖

Matlab提供了強大的函式集合,可以從.fig檔案中讀取圖中的資料,並重新繪製圖形。如果原始資料丟失,我們可以從.fig檔案中恢復原始資料,並基於原始資料做進一步的處理。 以下是一個從兩個不同檔案

利用ffmpeg修改MP4檔案頭資訊使其支援流式載入及播放

最近在用AS3寫一個Flash的播放器,發現同樣都是H264編碼的mp4檔案,有的可以載入一點就開始播放,有的就必須全部載入完才能播。用本地播放器(potplayer,暴風影音等)開啟檢視,發現編碼什麼的也都是一樣的:左邊這個必須是全部載入完成才能播,右邊這個是一載入就能播。

曹工雜談:Linux伺服器上Spring Boot 原地修改 jar 包配置檔案/替換class檔案免去重複上傳的麻煩

一、前言 相信很多同學有這樣的需求,現在很多公司都有多地的研發中心,經常需要跨地區部署,比如,博主人在成都,但是伺服器是北京的。一般城市間網路都不怎麼好,上傳一個幾十兆的jar包那是真的慢,別說現在微服務架構下,動輒兩位數的fat jar。這裡說的jar,就是spring boot專案打出來的fat jar

簡單的反編譯class文件重新編譯的方法

編譯報錯 令行 技術 ssp .cn lib cnblogs ron 系統 在沒有.java源碼的情況下,如果想修改一個.class文件。可以通過以下步驟實現: 修改前的class文件: 一、反編譯.class文件成.java文件。   1、可以使用Java Decomp

瀏覽器利用Webcam+Flash啟用攝像頭完成拍照

ner 理想 異常 tmp subst images 找到 ffffff llb 大家都比較喜歡談論高考,然而筆者就不願意提及,因為筆者高考很不理想,以致於意誌消沈。後來吧,就迷戀上了遊戲一直到上個月,可以說是不學無術已經很久了。火爆的脾氣也是隨之而來,雖時光不再,脾氣尚存

Windows遍歷全盤所搜檔案通過多執行緒顯示搜尋進度(C++/C)

程式設計軟體,系統 軟體:VS2017 工程屬性:MFC對話方塊(其他工程屬性稍作修改也適用) 系統:windows10家庭版 主要思想 1、利用CFileFind實現查詢檔案 2、利用遞迴實現全盤搜尋 3、多執行緒實現父對話方塊搜尋檔案時,子對話方塊顯示搜尋進度 軟體執行效

Linux下Java執行.class檔案報錯找不到或無法載入主類

classpath配置的錯誤,所以找不到.class檔案。 原先的etc/profile中的classpath配置 export CLASSPATH=$JAVA_HOME/lib/tools.jar   更改後的: export CLASSPATH=.:$JAVA_HOME