環境:系統:macos
工具:idea 2021.3;jclasslib
問渠那得清如許,為有源頭活水。哪個小夥伴不想知道程式驗證的原理呢?那我們就嘗試反編譯程式看看他是怎麼加密的。最佳反編譯實踐可以看我這篇
反編譯可以看出其實**是有混淆的,但不打緊,關鍵字串是沒混淆的。咱們可以從ui上的提示文案入手。
校驗按鈕validate and s**e就是咱們的入手點,簡單在**中全域性搜尋下
在com.squaretest.c.l下這個按鈕被引用了。
這裡面包含了3個關鍵方法createactions() dookaction() dovalidate()
大致我們可以知道乙個是建立組建的方法,乙個是點選ok時的**,乙個是驗證方法
到此咱們主要關心,乙個是dovalidate中this.a.b(var1)到底做了啥邏輯
第二是dookaction做了啥
咱們看this.a.b(var1)到底在幹啥
absolutely 就是咱們的驗密邏輯,返回var6.verify(var7) 就是var6就是a公鑰+var5簽名訊息進行驗密,正確返回true,錯誤返回false。這個咱們先不急先接下裡看
既然dovalidate已經完成驗密工作,那麼我們自然而然會想到是不是要快取許可證書了!畢竟不能每次啟動idea都得重新驗證吧
咱們可以看到var1被set了,按照業務開發邏輯,只是乙個簡單的物件set操作,但實際到**中咱們看看
實際是實現了乙個idea提供的持久化儲存介面,所以咱們就懂了,在dovalidate通過公鑰對文字和簽名就行核驗,核驗通過後太多doactions就行證書的持久化倉儲!
到目前為止原理咱們都知道的了,常規咱們能想到2種破解方法
第一種是通過j**a agent對**就行增強,增強證書校驗方法,令其直接返回true。測試發現在idea中通過custom vm進行j**a agent進行配置後,idea啟動直接崩潰了!後來發現可能是idea的一種啟動保護措施,防止進行位元組碼增強。
第二種是直接修改位元組碼,通過修改位元組碼常量池中的公鑰串,實現生產證書。咱們來實驗下!
通過反編譯**我們得知,公鑰串位於com.squaretest.c包的r物件下
將class檔案通過jclasslib開啟
咱們輕鬆找到了公鑰的存放位址,現在問題來了,怎麼生產公鑰和證書呢
先放生成**
keypairgenerator keypairgenerator = keypairgenerator.getinstance("dsa");keypair keys = keypairgenerator.generatekeypair();
publickey publickey = keys.getpublic();
system.out.printf("pub:"+base64.getencoder().encodetostring(publickey.getencoded()));
privatekey privatekey = keys.getprivate();
system.out.println("\n");
system.out.println("priv:"+base64.getencoder().encodetostring(privatekey.getencoded()));
signature sig = signature.getinstance("sha256withdsa", "sun");
sig.initsign(privatekey);
string cleartext = "sqt1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" +
"sqt1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" +
"sqt1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n";
sig.update(cleartext.getbytes(standardcharsets.utf_8));
byte signature = sig.sign();
system.out.println("sign:"+base64.getencoder().encodetostring(signature));
sig.initverify(publickey);
sig.update(cleartext.getbytes(standardcharsets.utf_8));
boolean verify = sig.verify(signature);
system.out.println("verify:"+verify);
逆向初步學習記錄
ascii是乙個7位編碼標準,包括26小寫字母,26大寫字母,10個數字,32個符號,33個控制 和乙個空格,共計128個 由於計算機通常採用 位元組 為單位儲存和交換資料資訊,因此很多計算機廠家對ascii碼進行了擴充,在原來的基礎上又增加了128個附加字元,如ansi,unicode,symbo...
Squaretest 自動生成Mock單元測試
今天來介紹一款工具squaretest,它是一款自動生成單元測試的外掛程式,為什麼會用到它也是因為最近公司上了 質量管控的指標,會考評各個專案的單元測試覆蓋率,以及sonar掃瞄出來的各種問題,很多老專案老 或者著急交付的專案,單元測試嚴重缺失,覆蓋率只有5 不到,所以幾個小夥伴這幾天就在瘋狂的堆單...
逆向工程學習記錄
od基本指令 指令快捷鍵 含義restart ctrl f2 重新開始除錯 step info 單步步入 f7執行一句op code 操作碼 若遇到呼叫命令 call 將進入函式 內部 step over 單步步過 f8執行一句op code 操作碼 若遇到呼叫命令 call 將進入函式自身,不跟隨...