Spørsmål:
Visual Basic intern struktur
ubnix
2016-04-07 12:30:15 UTC
view on stackexchange narkive permalink

Jeg analyserer noen Visual Basic 6.0-skadelig programvare (før .NET), og jeg har flere spørsmål angående den interne strukturen i formatet. Prøvene jeg har er både p-code eller native code kompilert (avhenger av malwareversjonen). I løpet av de siste par dagene har jeg lest Alex Ionescus papir, samt et annet papir om emnet, og jeg har et par spørsmål angående formatet. Hvis du har flere ressurser der jeg kan få ytterligere informasjon om Visual Basic-strukturen, kan du legge dem ut her.

Så spørsmålene er:

  1. I ProjectInformation strukturen er det et felt ved offset 0x20 kalt lpNativeCode . Basert på Alexs papir sier beskrivelsen Pointer to .DATA seksjon . Da jeg analyserte prøvene mine, la jeg merke til at følgende felt er 0x0 for p-code kompilerte prøver og inneholder en adresse for native code kompilerte prøver. Så spørsmålet mitt er: Er det trygt å bruke følgende felt for å avgjøre om prøven er p-code eller native-code kompilert?

  2. Inne i ObjectInfo strukturen er det felt med forskyvninger 0x20 og 0x24 kalt wMethodCount og lpMethods . For p-code kompilerte prøver la jeg merke til at lpMethods -feltet peker på en rekke metoder for det objektet. Det jeg ikke forstår er nullbyte som vises før selve metoden adresserer i matrisen. For å gjøre det mer tydelig inkluderte jeg følgende bilder:

    ObjectInfo structure of a p-code sample

    Methods array from ObjectInfo

Det første bildet er en dumpvisning av en ObjectInfo -struktur, mens det andre bildet er metodefeltet som lpMethods -feltet peker på. Legg merke til 8 null byte før den faktiske metoden adresserer (på noen andre eksempler er det mer enn 8 null byte, så det er ikke alltid det tallet). Det jeg vil vite er hva er disse null byte?

  1. Og til slutt mitt siste spørsmål. I PublicObjectDescriptor strukturen er det et felt ved offset 0x1C kalt dwMethodCount med en beskrivelse av Antall metoder i Object . I strukturen ObjectInfo er det også et felt kalt wMethodCount , og i OptionalObjectInfo er det felt som heter wEventCount og dwControlCount . Det jeg ønsker å vite er hva forholdet er mellom disse feltene.

    Jeg la merke til at for p-kode kompilerte prøver er PublicObjectDescriptor.dwMethodCount lik ObjectInfo.wMethodCount , mens for native-code kompilerte prøver følgende forhold står ikke.

Prøvde du [VB Decompiler] (https://www.vb-decompiler.org/)? Her er to eksempler på endring av VB-kjørbare filer: - https://www.remkoweijnen.nl/blog/2013/01/02/change-tab-order-in-an-executable/ - https://www.remkoweijnen.nl / blogg / 2012/08/04 / modify-vb-executable-to-force-taskbar-button /
En svar:
NirIzr
2018-06-10 06:24:36 UTC
view on stackexchange narkive permalink

ansvarsfraskrivelse: Siden VB-filstrukturen fremdeles er papirløst, kan vi ikke gi garanterte svar uten å fullstendig reversere formatet. Dette har blitt forsøkt til en viss suksess av Ionescu og andre, som du og andre har nevnt.

Jeg vil prøve å svare på spørsmålene dine etter beste evne uten å åpne noen reverse engineering-verktøy. Hvis du vil spørre hvordan noen vil gå omvendt med å konstruere VB-filformatet og relaterte kjørbare filer, foreslår jeg at du åpner et annet spørsmål om emnet spesifikt.

Nå, uten videre, svarene mine (les: utdannet gjetninger):

  1. Som et papirløst format kan vi ikke bare tilby et garantert "ja", formatet og / eller antagelsene kan potensielt endres i fremtidige versjoner. Det er usannsynlig at det noen gang vil skje for et format så gammelt som VB6, ekstremt siden det ble forlatt. Dette virker som en god antagelse å gjøre i dette tilfellet.

  2. Siden strukturene ObjectInfo og PublicObjectDescriptor er separate, kan anta null verdier i en ObjectInfo.lpMethods matrise skal indikere at en metode (definert av navn i PublicObjectDescriptor ) ikke er implementert av ObjectInfo . Dette er igjen en utdannet gjetning og videre reversering bør gjøres for å validere det.

  3. Jeg tror at siden PublicObjectDescriptor tar rollen som en eksternt motstående objektbeskrivelse, brukes den til å beskrive objektet i sin helhet. ObjectInfo er noe mer eksternt og spesifikt for p-code -delene av objektet. Derfor, og objekt som er fullt implementert i p-kode vil ha det ObjectInfo.wMethodCount lik det PublicObjectDescriptor.dwMethodCount mens et objekt som er delvis (eller fullt ut) implementert innfødt vil ha en høyere PublicObjectDescriptor.dwMethodCount enn ObjectInfo.wMethodCount.



Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...