ida腳本編寫
Ⅰ 怎麼列印 ida的gdb 命令
GDB是一個強大的命令行調試工具。雖然X Window提供了GDB的圖形版DDD,但是我仍然更鍾愛在命令行模式下使用GDB。大家知道命令行的強大就是在於,其可以形成執行序列,形成腳本。UNIX下的軟體全是命令行的,這給程序開發提代供了極大的便利
Ⅱ 誰能幫我寫個ida腳本實現把指令var
你的意思是這樣的?
_text:01007487 lea eax, [ebp+var_2C]
_text:0100748A push eax
_text:0100748B lea eax, [ebp+var_30]
_text:0100748E push eax
_text:0100748F lea eax, [ebp+var_34]
----->>>>>
_text:01007487 lea eax, [ebp-2Ch]
_text:0100748A push eax
_text:0100748B lea eax, [ebp-30h]
_text:0100748E push eax
_text:0100748F lea eax, [ebp-34h]
idapython寫的比較拙。。
代碼:
from idautils import *
ea = ScreenEA()
address_start = SegStart(ea)
address_end = SegEnd(ea)
i = address_start
while 1:
if i<address_end:
OpHex(i,-1)
print "%X" % i
i = i+1
else:
break
Ⅲ IDA Pro權威指南的內容簡介
《IDA Pro權威指南》內容簡介:IDA Pro(互動式反匯編器專業版)是應用最廣泛的靜態反匯編工具,在IT領域有著舉足輕重的地位,但其文檔資料一直都不夠完善。在IDA Pr0創建者Ilfak的協助下問世的這《IDA Pro權威指南》,完美地彌補了這一缺憾。C卜¨1s的理論被業界公認為是權威且令人信服的。而他的模擬器也是公開發布的IDA插件中最棒的一款。
《IDA Pro權威指南》首先描述反匯編理論、逆向工程的基本信息}111DA Pro的背景知識,然後系統地介紹IDA的基本布局和功能、復雜數據結構的處理、交叉引用與繪圖功能,以及如何在非Wiridows平台上運行IDA。書中由淺入深地介紹了IDA的配置、F LlRT技術、IDA類型庫的擴展以及一些IDA限制。難得的是。《IDA Pro權威指南》還探討了IDA的可擴展性。涉及IDA腳本、SDK、插件、載入器模塊和處理器模塊。最後闡述了IDA在逆向工程中的實際用法,討論了各種編譯器的區別、模糊代碼分析和漏洞分析、IDA插件以及IDA調試器。
Ⅳ IDA插件編寫中如何添加註釋
工具: Eclipse 方法如下: 通過菜單 Window->Preference 打開參數設置面板,然後選擇:Java -> Code Style -> Code Templates 在右側選擇Comments,將其中的Files項,然後選右邊的"Edit",進入編輯模式: 進入編輯模式後就可以自定義注釋了。
Ⅳ IDA Pro代碼破解揭秘的編輯推薦
《IDA Pro代碼破解揭秘》:如果你想掌握IDA Pro,如果你想掌握逆向工程編碼的科學和藝術,如果你想進行更高效的安全研發和軟體調試,《IDA Pro代碼破解揭秘》正適合你!
《IDA Pro代碼破解揭秘》是安全領域內的權威著作,也是少有的一本面向逆向工程編碼的書籍!
書中闡述了IDA Pro逆向工程代碼破解的精髓,細致而全面地講述了利用IDA Pro挖掘並分析軟體中的漏洞、逆向工程惡意代碼、使用IDC腳本語言自動執行各項任務,指導讀者在理解PE文件和ELF文件的基礎上分析逆向工程的基本組件,使用IDA Pro調試軟體和修改堆和棧的數據,利用反逆向功能終止他人對應用的逆向,還介紹了如何跟蹤執行流、確定協議結構、分析協議中是否仍有未文檔化的消息,以及如何編寫IDC腳本和插件來自動執行復雜任務等內容。《IDA Pro代碼破解揭秘》注重實踐,提供了大量圖示和示例代碼供大家參考使用,可讀性和可操作性極強。
安全編程修煉之道!看雪學院等著名安全論壇強烈推薦,安全專家兼IOActive公司滲透測試總監Dan Kaminsky經典力作。
Ⅵ Windows未成功關閉。如果這是由於系統無響應,或者是為保護數據而關閉系統...這怎麼辦
適用於 Linux 的 Windows 子系統中的 Visual Studio Code 伺服器使用本地 WebSocket WebSocket 連接與遠程 WSL 擴展進行通信。網站中的 JavaScript 可以連接到該伺服器並在目標系統上執行任意命令。目前該漏洞被命名為CVE-2021-43907。
這些漏洞可以被用於:
本地 WebSocket 伺服器正在監控所有介面。如果允許通過 Windows 防火牆,外部應用程序可能會連接到此伺服器。
本地 WebSocket 伺服器不檢查 WebSocket 握手中的 Origin 標頭或具有任何身份驗證模式。瀏覽器中的 JavaScript 可以連接到該伺服器。即使伺服器正在監控本地主機,也是如此。
我們可以在特定埠上生成一個Node Inspector示例,它還監控所有介面。外部應用程序可以連接到它。
如果外部應用程序或本地網站可以連接到這些伺服器中的任何一個,它們就可以在目標計算機上運行任意代碼。
Visual Studio Code 庫是不斷更新的。我將使用一個特定的提交 ()。
$ git clone https://github.com/microsoft/vscode $ git reset --hard
我們可以使用 Code (lol) 來導航源代碼。事實上,我已經在 WSL 中為這個漏洞創建了具有相同擴展名的概念驗證。
Visual Studio Code在 WSL 內以伺服器模式運行,並與 Windows 上的代碼示例對話(我稱之為代碼客戶端)。這使我們可以在 WSL 中編輯文件和運行應用程序,而不需要運行其中的所有內容。
遠程開發架構
可以通過 SSH 和容器在遠程計算機上進行遠程開發。GitHub Codespaces 使用相同的技術(很可能通過容器)。
在 Windows 上使用它的方法:
1.打開一個WSL終端示例,在Windows上的代碼中應該可以看到遠程WSL擴展;
2.在 WSL 中運行code /path/to/something;
3.如果未安裝代碼伺服器或已過時,則會下載它;
4.VS Code 在 Windows 上運行;
5.你可能會收到一個 Windows 防火牆彈出窗口,用於執行如下所示的可執行文件:
伺服器的防火牆對話框
這個防火牆對話框是我執行失敗的原因。出現該對話框是因為 VS Code 伺服器想要監控所有介面。
從我信任的Process Monitor開始:
1.運行進程監控器;
2.在WSL中運行code .;
3.Tools > Process Tree;
4.我運行代碼(例如,Windows Terminal.exe)的終端示例中運行Add process and children to Include filte。
Procmon 的進程樹
經過一番挖掘,我發現了 VSCODE_WSL_DEBUG_INFO 環境變數。我只是在 WSL 中將 export VSCODE_WSL_DEBUG_INFO=true 添加到 ~/.profile 。運行伺服器後我們會得到額外的信息。
VSCODE_WSL_DEBUG_INFO=true
輸出被清理。
檢查命令行參數。
可以看到出現了WebSocket詞彙。
運行 Wireshark 並捕獲loopback介面上的流量。然後我再次在 WSL 中運行代碼。這次可以看到兩個 WebSocket 握手。
在 Wireshark 中捕獲的 WebSocket 連接
該運行中的伺服器埠是63574,我們也可以從日誌中看到。在 Windows 上的代碼客戶端中打開命令面板 (ctrl+shift+p) 並運行 > Remote-WSL: Show Log。
遠程 WSL:顯示日誌
最後一行有埠:在 http://127.0.0.1:63574/version 上打開本地瀏覽器。我們還可以看到從 Windows 上的 Code 客戶端到伺服器的兩個單獨的 WebSocket 連接。
伺服器是位於 /src/vs/server/.ts#L207 的 的一個示例。
它被 createServer 在同一個文件中使用,我們可以使用 Code (lol) 找到它的引用並追蹤到 remoteExtensionHostAgent.ts(同一目錄)。
可以根據注釋查看 main.js 內部。
打開文件,看到伺服器可以從傳遞給main.js的參數中獲得主機和埠。
main.js 被 server.sh 調用:
沒有 IP 地址傳遞給腳本,我認為這就是為什麼伺服器監控所有有趣的事情。port=0 可能告訴伺服器使用臨時埠,此信息來自同一目錄中的 wslServer.sh。
每次看到本地 WebSocket 伺服器時,都應該檢查誰可以連接到它。
WebSocket 連接不受同源策略約束,瀏覽器中的 JavaScript 可以連接到本地伺服器。
WebSockets 從握手開始,在跨源資源共享或 CORS 的上下文中它始終是一個「簡單」的GET 請求,因此瀏覽器不需要預先請求就可以發送它。
可以快速創建一個嘗試連接到特定埠上的本地WebSocket伺服器的測試頁面,將它託管在某個遠程位置(例如,S3 存儲桶)並在計算機上打開它。如果連接成功,就可以繼續操作了。
我還檢查了 Burp,在 Burp Repeater 中創建了 WebSocket 握手。將 Origin 標頭修改為 https://example.net。如果響應具有 HTTP/1.1 101 交換協議,那麼就可以繼續了。
在 Burp 中測試
注意,這只對本地主機伺服器有影響。這里的伺服器也對外公開,攻擊者不受瀏覽器約束。它們可以直接連接到伺服器並提供任何 Origin 標頭。
接下來是查看 Wireshark 中的流量,右鍵點擊之前的WebSocket握手GET請求,然後選擇 Follow > TCP Stream。我們將看到一個帶有一些可讀文本的屏幕。關閉它,只會看到這個進程的數據包,這允許我們只關注這個進程。
你可能會問為什麼我關閉了僅包含消息內容的彈出窗口,因為沒有用。根據 RFC6455,從客戶端到伺服器的消息必須被屏蔽。這意味著它們與一個 4 位元組的密鑰(也隨消息一起提供)進行了異或運算。Wireshark 在選擇時取消屏蔽每個數據包,但有效載荷在初始進程彈出窗口中顯示為屏蔽。所以我們將看到純文本的伺服器消息,而客戶端消息被屏蔽並出現亂碼。如果你點擊單個消息,Wireshark 就會顯示有效載荷。
我花了幾天時間對協議進行逆向工程。後來,我意識到只能在/src/vs/base/parts/ipc/common/ipc.net.ts 中看到協議的源代碼。
來自伺服器的第一條消息是 KeepAlive 消息。
在協議定義中,我們可以看到不同的消息類型。
在 /src/vs/platform/remote/common/remoteAgentConnection.ts 中,它在代碼的其他部分被稱為 OKMessage 和heartbeat。
客戶端在/src/vs/platform/remote/common/remoteAgentConnection.ts的中處理此問題。客戶端(Windows上的代碼)發送這個包,它是一個KeepAlive和一個單獨的認證消息。
最初,我認為長度欄位是 12 個位元組而不是 4 個位元組,因為其餘的位元組總是空的。然後我意識到只有常規消息使用消息 ID 和 ACK 欄位,而且我只看到了不規則的握手消息。
在修復之前,沒有勾選此選項。
注意:在 2021-11-09 更新之前(commit )客戶端沒有發送數據。但是,使用此提交,我們仍然可以在沒有此密鑰的情況下發送消息並且它會起作用。這是我們給伺服器簽名的內容,以檢查連接到正確的伺服器。
伺服器響應一個簽名請求。
另一個 JSON 對象:
伺服器已經簽名了我們在前一條消息中發送的數據,並用它自己的數據請求進行了響應。
客戶端驗證簽名的數據,以檢查它是否是受支持的伺服器。當創建我們的客戶端時,可以簡單地跳過。
使用options.signService.validate 方法,然後就會得到/src/vs/platform/sign/node/signService.ts。
vsda 是一個用 C++ 編寫的 Node 原生插件,將 Node 原生插件視為共享庫或 DLL。該插件位於 https://github.com/microsoft/vsda 的私有存儲庫中,根據https://libraries.io/npm/vsda/的說法,直到2019年左右,它都是一個NPM包。
它與 VS Code 客戶端和伺服器捆綁在一起:
Windows系統:
C:\Program Files\Microsoft VS Code\resources\app\node_moles.asar.unpacked\vsda\build\Release\vsda.node
伺服器(WSL):~/.vscode-server/bin/{commit}/node_moles/vsda/build/Release/vsda.node。
我找到了https://github.com/kieferrm/vsda-example,並通過一些實驗找到了如何使用它創建和簽名消息。
1.用msg1 = validator.createNewMessage("1234")創建一個新消息,輸入至少4個字元。
2.使用signed1 = signer.sign(msg1)進行簽名。
3.使用 validator.validate(signed1) 對其進行驗證,響應為「ok」。
需要注意的是,如果你創建了新消息,則無法再驗證舊消息。在源代碼中,每條消息都有自己的驗證器。
Linux 版本有符號,大小約為 40 KB。把它放到 IDA/Ghidra 中,應該就可以開始了。
我花了一些時間,想出了這個偽代碼。可能不太正確,但可以讓你大致了解此簽名的工作原理。
1.用當前時間 + 2*(msg[0]) 初始化 srand,它只會創建 0 到 9(含)之間的隨機數;
2.從許可證數組中附加兩個隨機字元;
3.從 salt 數組中附加一個隨機字元;
4.SHA256;
5.Base64;
6.???;
7.Profit。
僅從許可證數組中選擇前 10 個位置的字元,它總是 rand() % 10 ,但salt 數組翻了一番。
許可證數組的字元串如下所示:
salt 數組的前 32 個位元組(查找 Handshake::CHandshakeImpl::s_saltArray)是:
我從來沒有真正檢查過我的分析是否正確,不過這無關緊要,知道如何使用插件簽名消息,這就足夠了。
接下來,客戶端需要簽名來自伺服器的數據並將其發送回來,以顯示它是一個「合法」的代碼客戶端。
伺服器響應如下:
客戶端發送了如下消息:
提交應該匹配伺服器的提交哈希。這不是秘密。這可能是最後一個穩定版本提交(或最後幾個之一)。這只是檢查客戶端和伺服器是否在同一版本上。它也可以在 http://localhost:{port}/version 上找到,你的瀏覽器 JavaScript 可能無法看到它,但外部客戶端沒有這樣的限制。
signedData是對我們在前面消息中從伺服器獲得的數據進行簽名的結果。
Args是此消息中最重要的部分,它可以告訴伺服器在特定埠上啟動一個 Node Inspector 示例。
break: 啟動 Inspector 示例後中斷。
埠:檢查器示例的埠。
Env:傳遞給檢查器示例進程的環境變數及其值的列表。
Node Inspector 示例可用於調試 Node 應用程序。如果攻擊者可以連接到你計算機上的此類示例,那麼攻擊就成功了。2019 年,Tavis 發現 VS Code 默認啟用了遠程調試器。
整個設置旨在允許 Windows 上的代碼客戶端在 WSL、容器或 GitHub 代碼空間中進行遠程開發。這意味著它可以在遠程計算機上做任何想做的事情。
因此,如果網站可以連接到你本地的 WebSocket 伺服器並繞過 DRM,它就可以模擬代碼客戶端。它可以在你的系統上遠程執行代碼,並且不需要 Node Inspector 示例。
到目前為止,我們已經找到了兩種利用該系統的方法:
生成並連接到 Node Inspector 示例;
模擬代碼客戶端並使用自定義協議與遠程計算機交互;
Node Inspector示例
讓我們看看前面消息中的參數, /src/vs/server/.ts 在伺服器上處理它們。
介面類似於我們之前看到的 JSON 對象:
_updateWithFreeDebugPort檢查埠是否空閑,如果沒有,它將嘗試接下來的10個埠。最後一個空閑埠存儲在startParams.port中。
選擇的埠被發送回客戶端,所以我們知道去哪裡:
最後,它在 /src/vs/server/extensionHostConnection.ts 中調用con.start(startParams);。
這看起來很復雜,讓我們來分析一下:
1.Node Inspector 示例將監聽 0.0.0.0:debugPort,這很危險,如果用戶接受 Windows 防火牆對話框,它將在外部可用;
2.我們也可以注入 Inspector 的環境變數;
3.removeDangerousEnvVariables 方法不是安全過濾器,只是刪除 DEBUG、DYLD_LIBRARY_PATH 和 LD_PRELOAD 環境變數(如果存在)以防止崩潰。
什麼是Node Inspector?
它可以用來調試Node進程。有一些客戶端和庫支持這一點,但通常,我使用Chromium內置的專用節點DevTools (chrome|edge://inspect)。
連接到 Inspector 示例後,我們可以打開控制台並運行 require('child_process').exec('calc.exe');。盡管我們使用的是wsdl,但它仍然有效。
瀏覽器中的 JavaScript 無法連接到 Inspector 示例,客戶端使用另一個 WebSocket 連接與示例對話。但是,我們需要知道調試器會話 ID。
/json/列表
瀏覽器中的 JavaScript 可以發送此 GET 請求,但由於 SOP(響應沒有 Access-Control-Allow-Origin 標頭)而無法看到響應。其他客戶端則沒有這個限制,因為檢查器在外部可用,我們可以從外部連接到它。
現在,我創建了一個簡單的概念驗證:
1.打開一個網站並輸入埠(我們可以掃描它,但手動輸入它會更快)。
2.網站中的 JavaScript 完成握手。
3.我使用 /sign API 創建了一個 Node 應用程序,這樣就可以使用 vsda 插件。
4.一旦生成Node Inspector 示例,第二個 API 就會被 debugPort 調用。
5.使用 chrome-remote-interface 庫的 Node 應用程序連接到 Inspector 示例並運行 calc。
你可以通過以下鏈接看到源代碼:
https://github.com/parsiya/code-wsl-rce https://github.com/parsiya/Parsia-Code/tree/master/code-wsl-rce
模擬代碼客戶端
創建客戶端並使用協議連接到伺服器的代碼位於 VS Code GitHub 存儲庫中,這需要大量的復制/粘貼和解析,我只花了幾個小時。
如果要創建一個快速的概念驗證,應該滿足一些假設:
1.找到本地的 WebSocket 埠;
2.從外部連接到Node Inspector示例;
查找本地 WebSocket 埠並不難,從瀏覽器掃描本地伺服器並不是什麼新鮮事。伺服器也可以從外部使用,因此我們不受那裡的瀏覽器約束。
Chrome 限制不起作用,因為 WebSocket 伺服器需要一個網路伺服器來處理握手。我也很好奇 WebSocket 節流是 Chrome 特定的保護還是 Chromium 的一部分。
有趣的是,Chrome 瀏覽器有一個保護機制,可以防止惡意行為者暴力破解 WebSocket 埠,它在第 10 次嘗試後開始節流。不幸的是,這種保護很容易被繞過,因為擴展的 HTTP 和 WebSocket 伺服器都在同一個埠上啟動。這可用於通過向 img 標簽添加 onload 處理程序來檢查特定本地主機埠上的圖片是否存在來強制所有可能的本地埠。
也就是說,這是一個開發環境,用戶可能整天都在 WSL 中開發並且從不關閉他們的瀏覽器選項卡,因此如果他們打開我們的網站,我們就有可能找到它。
連接到Node Inspector示例是另一回事,我們無法從瀏覽器執行此操作,因此我們需要我們的伺服器可以訪問受害者的計算機。
第二種利用方法(模擬代碼客戶端)沒有這些限制,因為瀏覽器可以與本地伺服器通信並執行所有操作。它只需要我們對協議進行逆向工程並找出要發送的正確消息。
當你收到 WebSocket 升級請求時,請根據許可名單檢查 Origin 標頭。代碼客戶端在該標頭中發送 vscode-file://vscode-app,以便我們可以使用它來操作。
參考及來源:https://parsiya.net/blog/2021-12-20-rce-in-visual-studio-codes-remote-wsl-for-fun-and-negative-profit/
Ⅶ 黑客與逆向工程師的python編程之道 怎麼樣
Python是一款非常流行的腳本編程語言。特別是在黑客圈子裡,你不會Python就幾乎無法與國外的那些大牛們溝通。這一點我在2008年的XCon,以及2009年的idefense高級逆向工程師培訓中感觸頗深。前一次是因為我落伍,幾乎還不怎麼會Python,而後一次……記得當時我、海平和Michael Ligh(他最近出版的Malware Analyst's Cookbook and DVD: Tools and Techniques for Fighting Malicious Code)一書在Amazon上得了7顆五星!)討論一些惡意軟體分析技術時經常會用到Python,從Immunity Debugger的PyCommand、IDA的IDAPython到純用Python編寫的Volatility工具(這是一款內存分析工具,用於發現rootkit之類的惡意軟體)。Python幾乎無處不在!我也嘗試過對Volatility進行了一些改進,在電子工業出版社舉辦的「在線安全」Open Party上海站活動中,我以《利用內存分析的方法快速分析惡意軟體》為題進行了演講。
遺憾的是,之前市面上還沒有一本關於如何利用黑客工具中提供的Python(由於必須使用許多黑客工具中提供的庫函數,所以這時你更像在用一種Python的方言編程)的書籍。故而,在進行相關編程時,我們總是要穿行於各種文檔、資料之中,個中甘苦只自知。
本書的出版滿足了這方面的需求,它會是我手頭常備的一本書,啊不!是兩本,一本備用,另一本因為經常翻看用不了多久就肯定會破爛不堪。
說到這本書的好處也許還不僅於此,它不僅是一本Python黑客編程方面的極佳參考書,同時也是一本軟體調試和漏洞發掘方面很好的入門教材。這本書的作者從調試器的底層工作原理講起,一路帶你領略了Python在調試器、鉤子、代碼注入、fuzzing、反匯編器和模擬器中的應用,涵蓋了軟體調試和漏洞發掘中的各個方面,使你在循序漸進中了解這一研究領域目前最新研究成果的大略。
本書譯者的翻譯也很到位。不客氣地說,不少好書是被糟糕的翻譯耽誤掉的。比如我在讀大學時的一本中文版的參考書,我看了三遍沒明白是怎麼回事,後來想起老師推薦時用的是英文版,於是試著去圖書館借了本英文版,結果看一遍就明白了。不過這本書顯然不屬於此例。譯者丁贇卿本來就是從事這一領域研究的,對原文意思的理解非常到位,中文用詞也十分貼切。特別是這本書的英文版中原本是存在一些錯誤的(包括一些代碼),譯者在中文版中竟然已經一一予以糾正了,從這一點上也可以看出譯者在翻譯過程中的認真細致。
我已經啰啰嗦嗦地講了不少了,你還在等什麼?還不快去賬台付錢?
Ⅷ ida pro 6.4怎樣漢化
可保存結果的最終版來了
1 解除時間限制
2 解除每30分鍾跳出提示的限制
3 解除復制粘貼的限制
4 解除批處理限制。。。
5 增加插件支持和F5功能
6 增加保存idc功能Shift+s (實現保存分析可以根據時間保存多個快照)
7 增加各種加密狗的sig
8 增加各種iphone系統庫的sig識別
9 增加ida直接修改文件功能插件
10增加調試器隱藏反反調試插件
11增加演算法識別插件
12增加ida_sync同步分析插件
13增加arm code 插件快捷鍵I K鍵
14增加2進制數據復制粘貼插件
15增加資源導出插件
16增加UniCodeString和Unicode Convert插件來增強字元解析
測試環境winxp正常 win7x64會有一些功能不正常比方close功能
關於保存功能:
我寫了個插件保存用shift+s把當前資料庫保存成idc檔!這個功能類似於快照功能!下次用的時候先反
編譯程序完成後再用load腳本功能把你保存的idc腳本載入!分析的注釋啥的就都恢復了
Ⅸ IDA調試器反匯編的代碼和我自己寫的不一致是什麼原因
你編寫的代碼有邏輯問題,cmp後面緊接著就jmp finish ,就是ret ,直接返回了,後面的add 和ja都無效了,編譯器會直接把這兩個刪掉,反匯編的時候自然就不現顯示了