請(qǐng)勿利用文章內(nèi)的相關(guān)技術(shù)從事非法滲透測(cè)試,由于傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負(fù)責(zé),作者不為此承擔(dān)任何責(zé)任。工具和內(nèi)容均來自網(wǎng)絡(luò),僅做學(xué)習(xí)和記錄使用,安全性自測(cè),如有侵權(quán)請(qǐng)聯(lián)系刪除。
項(xiàng)目地址在文章底部哦
功能介紹
代碼檢查
CodeAuditAssistant 是一個(gè)代碼審計(jì)輔助插件,其包含三部分功能:Decompiler、Code Analysis和SinkFinder,三個(gè)部分共同配合來實(shí)現(xiàn)強(qiáng)大的代碼審計(jì)輔助。
SinkFinder
SinkFinder 內(nèi)置了常見的Java 代碼Web漏洞sink 點(diǎn),高危組件調(diào)用sink 點(diǎn),通過Idea 自身的Problem 模塊進(jìn)入,通過此模塊你可以快速收集項(xiàng)目中的Sink 點(diǎn):

Sink 收集完畢后,雙擊即可跳轉(zhuǎn)到代碼所在位置:

反編譯
反編譯模塊和原來目前沒有更改,在列表中選擇要反編譯的jar 包后,點(diǎn)擊Run 即可反編譯回源代碼(目前沒有做任何優(yōu)化、失敗率高)。

代碼分析
本次更新的最大內(nèi)容是代碼分析模塊,通過此模塊你可以快速查找一個(gè)方法的調(diào)用路徑,下面逐步介紹功能:

首先是功能區(qū),Generate CallGraph 按鈕用于生成項(xiàng)目的調(diào)用圖,旁邊的下拉菜單用來選取調(diào)用圖的構(gòu)建范圍,如果你選擇了Entire 則會(huì)對(duì)整個(gè)項(xiàng)目進(jìn)行構(gòu)建,如果你選擇了Selected Module 那么在你點(diǎn)擊Generate CallGraph 的時(shí)候就會(huì)彈出一個(gè)窗口用來選擇構(gòu)建范圍。


在構(gòu)建圖之前,你應(yīng)該看到了界面上的兩個(gè)復(fù)選框,這兩個(gè)框分別代表:
Info:收集全部方法相關(guān)信息(用于按條件查找特定的方法)
Path:構(gòu)建圖時(shí)包含方法的調(diào)用路徑(用于構(gòu)建方法的調(diào)用關(guān)系)
一般情況下,如果你的代碼量不是很大并且電腦內(nèi)存充足,建議全都選上。

隱藏窗口:
點(diǎn)擊此按鈕可喚出一個(gè)隱藏窗口,如果在上一步構(gòu)件圖的時(shí)候你勾選了Info 就可以在這里快速按照條件查找想要的方法:
其中的ParamType 輸入框需要使用全限定類名,用英文逗號(hào)分隔,并支持使用* 作為通配符,示例如下:
java.lang.String,* 用這個(gè)參數(shù)可以查找到所有第一個(gè)參數(shù)是String 類型,第二個(gè)參數(shù)是任意類型的方法。
其中Annotations 字段同樣是用英文逗號(hào)分隔,但是不用寫全限定類名,示例如下:
@Override,@xxx 用這個(gè)參數(shù)可以查找到所有擁有Override注解和xxx注解的方法。

使用示例:

搜索路徑:
當(dāng)你完成了圖的構(gòu)建之后(進(jìn)度條可能會(huì)因?yàn)槟愕墓ぞ叽翱谔鵁o法顯示,你可以選擇將工具窗口拖出來作為一個(gè)獨(dú)立的窗口使用),就可以使用搜索功能進(jìn)行搜索:
搜索有三種方式,第一種是如果你想要查找指定兩個(gè)方法的調(diào)用路徑,只需要將起始方法作為ROOT,將結(jié)束方法作為SINK然后點(diǎn)擊Search 就可以快速搜索,搜索結(jié)果進(jìn)行雙擊就能跳轉(zhuǎn)到代碼對(duì)應(yīng)的位置(有可能不準(zhǔn)確):

第二種方式是如果你不知道起點(diǎn),只想找到某一個(gè)方法的調(diào)用鏈/位置的時(shí)候,單獨(dú)輸入SINK 也可以進(jìn)行查找:

第三種方法是,當(dāng)你在程序中發(fā)現(xiàn)了一個(gè)有趣的方法,并想查找所有能夠調(diào)用到該方法的路徑時(shí),可以通過右鍵菜單中的Search as sink 進(jìn)行搜索,點(diǎn)擊后會(huì)自動(dòng)將你選中的方法名填寫到SINK搜索框中并自動(dòng)運(yùn)行搜索:

所有的結(jié)果折疊可以用回車 展開或重新折疊,所有的節(jié)點(diǎn)都可以雙擊跳轉(zhuǎn)到指定的位置。
log4j檢測(cè)示例:

展示界面
當(dāng)你沒有進(jìn)行任何操作的時(shí)候,會(huì)看到如下界面:
其中Root Methods中用來展示所有的沒有被其他人調(diào)用的方法。
Info 中用來展示一些提示信息,它會(huì)識(shí)別你的系統(tǒng)平臺(tái)(方便提交ISSUE的時(shí)候進(jìn)行識(shí)別),在沒有構(gòu)建圖的時(shí)候CallGraph 的狀態(tài)是Not Ready,只有當(dāng)你成功構(gòu)建圖之后狀態(tài)才會(huì)變成Ready。
MethodNode用來展示當(dāng)前的調(diào)用圖中有多少節(jié)點(diǎn),以及下方會(huì)展示使用了多少內(nèi)存,是否有提示信息或者報(bào)錯(cuò)信息等內(nèi)容。
