Fråga:
Hur är IDAPython API strukturerat?
Holmes.Sherlock
2017-01-18 04:03:16 UTC
view on stackexchange narkive permalink

I IDA: s dokumentation finns referenser till moduler med namnet ida_ * samt idc , idaapi och idautils kod>. De tidigare modulerna verkar vara de lägre nivåerna. Nästan alltid står det att IDA Plugin SDK API wrapper: <some_module> .

Jag har några specifika frågor om dokumentationen och IDAPython:

  1. Vad är detta IDA-plugin-SDK? Är det C-liknande API tillgängligt i IDC?
  2. Tillåter API på högre nivå åtkomst till alla lägre nivåfunktioner?
  3. Vad verkar jag inte ladda lägre moduler? (När jag försöker importera ida_lines , säger IDA ImportError: Ingen modul som heter ida_lines )
Ett svar:
NirIzr
2017-01-18 04:32:19 UTC
view on stackexchange narkive permalink

Lite historia: (aka en åldrande kille som pratar om)

Förr hade vi inte python i IDA och när en individ ville utvecklas ett IDA-plugin han var tvungen att implementera det i C och använda SDK som är tillgängligt från hex-ray nedladdningscenter med referenser som erhållits när du köper en IDA-licens. Vi hade dock IDC. IDC är IDA: s gamla, proprietära och något föråldrade skriptspråk, detta är inte relaterat till C men det finns tydlig ansträngning med en C-liknande syntax. Det användes ofta tidigare men IDAPython ersatte det nästan helt. Den enda anledningen till att se IDC nu är för gammal kod, som föregår IDAPython.

Sedan dess har IDAPython utvecklats (ursprungligen som ett plugin med ovan nämnda SDK, och sedan antogs av hex-strålar och gjordes en del av IDA). Fram till den senaste IDA 6.95 hade vi bara en enda modul som exponerade alla IDA: s C SDK i python. Den modulen var idaapi . idc implementerar funktioner på högre nivå som migrerades från IDC till IDAPython. idautils implementerar några fler funktioner på hög nivå som inte fanns tidigare. det är grova indelningar och inte helt korrekta. Den viktiga punkten här är att det fanns en enda (lång) pythonfil som exponerade alla SDK-funktioner (som exponeras för python med SWIG).

I IDA 6.95 har vi fortfarande det , men det var också den första versionen som inkluderade flera ida_ * -moduler som ska ersätta den breda idaapi . idaapi ingår endast i 6.95 för bakåtkompatibilitet och bör förväntas släppas i IDA 7. Generellt är namnen på modulerna (vad som följer ida_ prefixet) namn på rubrikfilerna där dessa funktioner är definierade. Till exempel ida_lines exponerar funktioner som definierats i lines.h.

Faktiska svar :

  1. IDA-plugin SDK är en samling C-huvudfiler och binära bibliotek som tillåter en tredje part att utveckla IDA-plugins med det tillhandahållna API: et. Den kan laddas ner från nedladdningscenter och dokumentationen finns tillgänglig här.
  2. Även om C SDK är ganska väldokumenterad är IDAPython inte så mycket . Jag tycker ofta att det är bra att surfa på SDK när jag utvecklar IDAPython-plugins, eftersom funktioner vanligtvis utsätts för python men inte dokumenteras eller beskrivs så väl som de finns i SDK. i princip motsvarar de flesta funktionerna och du kommer att hitta samma funktioner med samma namn i både IDAPython och SDK (eftersom detta oftast genereras automatiskt kod av / för SWIG).
  3. Första gissningen är att du använder en äldre version av IDA, där ida_ * -moduler ännu inte finns. i allmänhet går det bra att använda idaapi istället för alla andra moduler.

Utveckla för IDA:

En person som är intresserad av att utveckla för IDA har tre alternativ:

  • Skriva C-kod med IDA SDK och sammanställa den, ha en plw eller en p64 kod> binär som utdata.
  • Skriv IDC-kod. Detta är ett anständigt skriptspråk som liknar en förenklad C i syntax. output skulle vara en textfil. Detta var skriptspråket som valts för IDA innan IDAPython blev populärt och äganderätten överfördes till hexrays.
  • Skrivning av IDAPython-kod. Detta är mestadels python med de ytterligare modulerna som är tillgängliga när du kör från IDA, plus ett enkelt IDA-plugin-gränssnitt som krävs för att registrera som ett plugin.
"idc implementerar funktioner på högre nivå som migrerades från IDC till IDAPython" - vad är "IDC" i (CAPITAL) här? Kan du redigera ditt ursprungliga svar för att göra det tydligare?
Kan plugins skrivas i både 'C' och 'Python'?
(Redigerad) Se andra halvan av första stycket för vad som är IDC. Ja, du kan utveckla IDA-plugins i C. Plugin-utvecklare verkar dock föredra python framför C.
Är IDC annorlunda än IDAs C-baserade SDK? Jag frågar eftersom dokumentationen säger att IDC är "C-liknande" (vilket skiljer sig från språket som "C" i sig). Kan IDC användas för att skriva plugins? I så fall kan man teoretiskt skriva ett plugin på något av de tre språken: IDC, IDA C-baserad SDK, IDAPython. Uppdatera ditt svar ovan. Det är redan så exakt, rent och till punkten att jag bara vill att det ska vara bättre för framtida läsare.
Se ytterligare redigering.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...