檢視與修改位元組碼,從而實現替換他人jar包中class檔案的目的
一、檢視二進位制位元組碼檔案的方式:
1.通過cmd命令:javap -v ClassA
2.通過jclasslib工具
二、將Android的apk中的dex反編成smail檔案,直接修改smail檔案後再回編成dex;
三、修改二進位制位元組碼檔案的方式:
1.反編譯後,修改java檔案,然後在javac 編譯成class,替換原來的class(但這個方法有人試驗了不成功);
2.通過jclasslib、eclipse實現修改:
2.1 修改class中的變數值:
比如我想要修改 不能連結資料庫的提示資訊 為 "芝麻不開門!"
步驟如下:
1)用jd-gui開啟該jar 怎麼開啟不用我說了吧?
開啟之後找到 要修改提示資訊 的class檔案 這裡找到的是GenEntity
找到對應需要修改的程式碼所在的方法名
我這裡包含提示資訊的這段程式碼在方法 getAllDataBase() 如下圖:
2)用jd-gui或者winrar把GenEntity.class 解壓出來到C盤 (目錄無所謂)
3)雙擊桌面上安裝好了的 jclasslib bytecode viewer ,點選軟體的 File -- Open Class File 開啟你剛解壓出來的class檔案
4)點選methods--getAllDataBase--Code
methods是表示方法不用說吧
getAllDataBase是剛在jd-gui裡面找到的方法名
Code包含了getAllDataBase方法裡所有的資訊
找到"不能開啟資料庫連線,請檢查!"
這裡這個工具沒有提供搜尋功能
如果這裡很多內容 那麼你可以點選 copy to clipboard把這裡的內容複製到一個文字檔案裡面然後再搜尋
這裡找到的是第82行
5)點選第 82行後面的 #34 會跳轉到Constant Pool常量池的第34個常量
6)再點右邊的 cp info #362 會跳轉到第362個常量
這裡能看到String: 不能開啟資料庫連線,請檢查! 也就是最後輸出的資訊
7)找到GenEntity.class的關鍵常量了現在就該修改它了
在eclipse裡面新建一個Test來處理GenEntity.class
- import java.io.*;
- import org.gjt.jclasslib.io.ClassFileWriter;
- import org.gjt.jclasslib.structures.CPInfo;
- import org.gjt.jclasslib.structures.ClassFile;
- import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
- publicclass Test {
- publicstaticvoid main(String[] args) throws Exception {
- String filePath = "C:\\GenEntity.class";
- FileInputStream fis = new FileInputStream(filePath);
- DataInput di = new DataInputStream(fis);
- ClassFile cf = new ClassFile();
- cf.read(di);
- CPInfo[] infos = cf.getConstantPool();
- int count = infos.length;
- for (int i = 0; i < count; i++) {
- if (infos[i] != null) {
- System.out.print(i);
- System.out.print(" = ");
- System.out.print(infos[i].getVerbose());
- System.out.print(" = ");
- System.out.println(infos[i].getTagVerbose());
- if(i == 362){
- ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];
- uInfo.setBytes("芝麻不開門!".getBytes());
- infos[i]=uInfo;
- }
- }
- }
- cf.setConstantPool(infos);
- fis.close();
- File f = new File(filePath);
- ClassFileWriter.writeToFile(f, cf);
- }
- }
這裡需要注意"C:\\GenEntity.class"是我存放class的目錄
if(i == 362) 這裡是剛我在第七步找到的常量序號
"芝麻不開門!"這裡是我想修改的文字資訊!
執行Test.java 會有如下提示資訊 沒有報錯就證明正常的 如果報錯那麼就有問題
9)把C盤剛修改後的GenEntity.class替換掉原來的GenEntity.class
怎麼替換不用我說了吧..
用winrar開啟.jar 然後把GenEntity.class拖進去覆蓋就行了
10)執行效果..
大功告成
2.2 修改class中的操作語句:
例如修改if 語句跳轉
Jclasslib 觀測到jvm op code 如下
現在想更改>= 為<,怎麼辦?
查詢Opcode Mnemonics by Opcode
並查到 >= 的操作碼為 0xA1
所以只要用Ultraedit 修改 0xA1 為 0xA2 就可以了。
再次用jclasslib載入 .class 可以看到僅僅變更了比較的操作碼
相關推薦
檢視與修改位元組碼,從而實現替換他人jar包中class檔案的目的
一、檢視二進位制位元組碼檔案的方式: 1.通過cmd命令:javap -v ClassA 2.通過jclasslib工具 二、將Android的apk中的dex反編成smail檔案,直接修改smail檔案後再回編成dex; 三、修改二進位制位元組碼檔案的方式: 1.反編
修改jar包中class檔案
某日,想要更改jar包中的某個class檔案,有無rar無法解壓jar檔案,故找到如下方式進行操作 1、解壓某個jar包:在需要解壓的jar包目錄下,開啟命令列(cmd),輸入如下命令,輸入:C:\jar>jar xf lm.jar 沒有任何反應就表示解壓成功。 2、反編譯class檔案,相同路徑新
java實現:對jar包中的配置檔案修改
注:只修改檔案,其他會被清空 package com.mtpc.admin.util; import java.io.*; import java.util.*; import java.util.jar.JarEntry; import java.util.jar.J
【maven】排除maven中jar包依賴的解決過程 例子:spring cloud啟動zipkin,報錯maven依賴jar包衝突 Class path contains multiple SLF4J bindings.
一直對於maven中解決jar包依賴問題的解決方法糾結不清: 下面這個例子可以說明一個很簡單的解決方法: 專案啟動報錯: Connected to the target VM, address: '127.0.0.1:59412', transport: 'sock
maven打包依賴第三方包,但不打進jar包中
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m
使用 javassist 修改位元組碼實現 eureka-client 監聽服務啟動
專案中一些服務需要監聽其他微服務的啟動資訊,需要監聽到啟動後主動向其發請求拉取一些配置等。 可是eureka-client並未提供監聽其他服務啟動的事件,eureka-server倒是提供了事件, 可以在自己的eureka-server中監聽服務啟動,監聽後傳送服務啟動資訊到kafka這些訊息佇列,服務監聽k
使用JVM TI技術插裝位元組碼,實現Java程式碼執行控監Agent
JVM TI技術是JAVA5以後的版本推出的技術,即JVM程式設計介面,該技術廣泛應用於各種開發工具,例如Eclipse等。使用JVM TI可以開發JAVA除錯工具,JAVA程式碼執行監控工具等。同時,瞭解JVM TI技術也有助於JAVA程式設計師深入瞭解J
C# 鼠標點擊移動窗體代碼,可以實現無邊框窗體的拖動
點擊 obj cat += tar sender see sed false private static bool IsDrag = false; private int enterX; private int enterY;
企業微信與微信打通,會實現工作生活分離嗎?馬化騰這樣回答!江西德迅為你分解
分享 用戶 用戶數 通過 F12 中國 版本更新 數字 信任 4月12日,2018年中國“互聯網+”數字經濟峰會舉行,此次峰會迎來了騰訊、京東等眾多互聯網大企。在本次峰會上馬化騰發表演講,就早前企業微信與私人微信打通的話題,提出了自己的看法。此前內測版企業微信將與私人微信打
[轉帖]Oracle字符集的檢視與修改 --- 還未嘗試 找個週六 試試. Oracle 字符集的檢視和修改
Oracle 字符集的檢視和修改 感謝原作者 改天試試 https://www.cnblogs.com/rootq/articles/2049324.html 一、什麼是Oracle字符集 Or
Mysql基礎教程-Mysql的字符集檢視與修改
Show variables like “%char%”修改mysql的字符集----資料庫級1)臨時的修改Set global character-set_server=utf82)永久修改Alter database commany set utf8 collate utf8_general_ci; -
gparted燒錄到U盤,使其成為live usb,從而實現U盤啟動,並啟動gparted
1.把zip包中的檔案解壓縮到U盤中,並且保持原目錄結構不變!也就是說,解壓縮到U盤根目錄中!自己不要增加目錄! 2.執行你U盤中utils/linux/目錄中的makeboot.bat檔案!(特別注意,此檔案一定要在U盤中執行,絕不允許在你的硬碟上執行!) 以上操作完畢後,即可用
Mysql的字符集檢視與修改
Show variables like “%char%” 修改mysql的字符集 ----資料庫級 1)臨時的修改 Set global character-set_server=utf8 2)永久修改 Alter database commany set utf8 collate utf8
Instrumentation與ClassFileTransformer--位元組碼轉換工具
一個代理實現ClassFileTransformer介面用於改變執行時的位元組碼(class File),這個改變發生在jvm載入這個類之前。對所有的類載入器有效。 class File這個術語定義於虛擬機器規範3.1,指的是位元組碼的byte陣列,而不是檔案系統中的class檔案。
MySQL之檢視與修改資料庫編碼
MySQL之檢視與修改資料庫編碼 Windows下修改mysql資料庫編碼 (1)管理員身份進入cmd,輸入:mysql -h伺服器地址 -u使用者名稱 -p密碼 ,最後按回車就行 2. 輸入show variables like ‘%character%’;
生成二維碼,返回檔案位元組碼,或將檔案轉成base64返回
@PostMapping("/admin/get/qrcode") public ResponseEntity<byte[]> getQrcode(Long id,boolean need
class檔案結構與jvm位元組碼指令
https://blog.csdn.net/luckydog1991/article/details/51654964這篇文章詳細的介紹了class檔案和位元組碼指令 Class檔案結構 https://blog.csdn.net/tyrone1979/article/details/9
Intellij idea快速檢視Java類位元組碼(轉載)
原文地址 最近在研究JVM類載入、JVM位元組碼相關的東西,需要經常檢視位元組碼。之前都是用一些外部工具例如bytecoder、JD或者直接cmd使用javap的方式檢視位元組碼。但是使用起來比較麻煩,畢竟不如直接在IDE中直接檢視方便。於是在網上搜索,Intellij idea是否支援檢視位元
shell命令以及執行原理、檢視或修改掩碼(umask)、Linux許可權管理、Linux設定檔案訪問許可權(chmod)、粘滯位、修改檔案的擁有者(chown)、修改檔案的所屬組(chgrp)
shell命令以及執行原理: Linux嚴格意義上說的是一個作業系統,我們稱之為”核心”,但是我們普通使用者,不能直接使用核心,而是通過核心的”外殼”程式,也就是所謂的shell,來與核心溝通。 Linux中的命令大多數都是可執行程式。但其實捕捉我們
使用 Maven 外掛將 class(位元組碼檔案),resource(資原始檔),lib(依賴的jar包)分開打包
1. 在pom檔案中對各個外掛進行配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20