Otázka:
Jak je strukturováno IDAPython API?
Holmes.Sherlock
2017-01-18 04:03:16 UTC
view on stackexchange narkive permalink

V dokumentaci IDA jsou odkazy na moduly s názvem ida_ * a idc , idaapi a idautils kód>. Dřívější moduly se zdají být moduly nižší úrovně. Téměř vždy se říká, že IDA Plugin SDK API wrapper: <some_module> .

Mám několik konkrétních otázek ohledně dokumentace a IDAPythonu:

  1. Co je to SDK IDA pluginu? Je to API typu C dostupné v IDC?
  2. Umožňuje rozhraní API vyšší úrovně přístup ke všem funkcím nižší úrovně?
  3. Co nemohu načíst moduly nižší úrovně? (Když se pokusím importovat ida_lines , IDA říká ImportError: Žádný modul s názvem ida_lines )
Jeden odpovědět:
NirIzr
2017-01-18 04:32:19 UTC
view on stackexchange narkive permalink

Trochu historie: (aka stárnoucí chlap blábolící kolem)

Za starých časů jsme v IDA neměli python a když se jednotlivec chtěl rozvíjet plugin IDA musel implementovat v jazyce C a použít sadu SDK dostupnou v centru pro stahování hex-ray pomocí přihlašovacích údajů získaných při nákupu licence IDA. Měli jsme však IDC. IDC je starý, proprietární a poněkud zastaralý skriptovací jazyk IDA, to nesouvisí s C, nicméně existuje evidentní úsilí s použitím syntaxe typu C. V minulosti se běžně používalo, ale IDAPython jej téměř úplně nahradil. Jediným důvodem, proč nyní vidět IDC, je starý kód, který předchází IDAPython.

Od té doby byl vyvinut IDAPython (původně jako plugin využívající výše zmíněnou SDK, poté byl přijat hex-paprsky a byl součástí IDA). Až do nedávného IDA 6.95 jsme měli pouze jeden modul vystavující všechny C SDK IDA v pythonu. Tento modul byl idaapi . idc implementuje funkce vyšší úrovně, které byly migrovány z IDC do IDAPython. idautils implementuje některé další funkce na vysoké úrovni, které tam dříve nebyly. to jsou hrubá rozdělení a nejsou úplně přesná. Důležité je zde to, že existoval jeden (dlouhý) soubor pythonu vystavující všechny funkce SDK (které jsou vystaveny pythonu pomocí SWIG).

V IDA 6.95 to stále máme , ale byla to také první verze, která obsahovala více modulů ida_ * , které mají nahradit široké idaapi . idaapi je zahrnut pouze v 6.95 kvůli zpětné kompatibilitě a mělo by se očekávat, že bude zrušen v IDA 7. Obecně jsou názvy modulů (následující za předponou ida_ ) názvy hlavičkových souborů, ve kterých jsou tyto funkce definovány. Například ida_lines vystaví funkce definované v lines.h.

Aktuální odpovědi :

  1. Sada IDA plugin SDK je kolekce hlavičkových souborů C a binárních knihoven, které umožňují třetí straně vyvíjet doplňky IDA pomocí poskytovaného API. Lze jej stáhnout z centra pro stahování a jeho dokumentace je k dispozici zde.
  2. Zatímco C SDK je docela dobře zdokumentována, IDAPython ne tolik . Často považuji procházení SDK za užitečné při vývoji pluginů IDAPython, protože funkce jsou obvykle vystaveny pythonu, ale nejsou zdokumentovány ani popsány, stejně jako v SDK. v zásadě většina funkcí odpovídá a v IDAPythonu i SDK najdete stejné funkce se stejným názvem (většinou jde o automaticky generovaný kód pomocí / for SWIG).
  3. Nejprve byste hádali, že používáte starší verzi IDA, kde moduly ida_ * dosud neexistují. Obecně platí, že použití idaapi namísto všech ostatních modulů bude v pořádku.

Vývoj pro IDA:

Zájemce o vývoj pro IDA má tři možnosti:

  • Psaní kódu C pomocí sady IDA SDK a jeho kompilace, plw nebo p64 kód> binární jako výstup.
  • Psaní kódu IDC. Jedná se o slušný skriptovací jazyk připomínající zjednodušenou C v syntaxi. výstupem by byl textový soubor. Toto byl skriptovací jazyk volby pro IDA, než se IDAPython stal populárním a vlastnictví bylo převedeno na hexrays.
  • Psaní kódu IDAPython. Většinou se jedná o python využívající další dostupné moduly při spuštění z IDA, plus jednoduché rozhraní pluginu IDA vyžadované pro registraci jako plugin.
„idc implementuje funkce vyšší úrovně, které byly migrovány z IDC do IDAPython“ - co je to „IDC“ v (CAPITAL) zde? Můžete prosím upravit svou původní odpověď, aby byla jasnější?
Mohou být pluginy zapsány jak v C, tak v Pythonu?
(Upraveno) Co je IDC, viz druhá polovina prvního odstavce. Ano, můžete vyvíjet IDA pluginy v C. Zdá se však, že vývojáři pluginů upřednostňují python před C.
Liší se IDC od SDK založeného na IDA C? Ptám se, protože dokumentace říká, že IDC má být „C“ (což se liší od samotného jazyka „C“). Lze IDC použít pro psaní pluginů? V takovém případě lze teoreticky napsat plugin v jednom ze tří jazyků: IDC, SDK založené na IDA C, IDAPython. Aktualizujte prosím svou odpověď výše. Je to již tak přesné, čisté a přesné, že chci, aby to bylo lepší pro budoucí čtenáře.
Zobrazit další úpravy.


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...