Spørgsmål:
reverse engineering-metode
Othman
2016-05-17 21:31:50 UTC
view on stackexchange narkive permalink

Jeg er ny inden for reverse engineering, og jeg følger online kurset fra webstedet opensecurity.info.
Forfatteren giver en metode til reverse engineering. Han anbefaler at finde en funktion af interesse og pseudokode den.
Fra den anvendte ordlyd lyder det som om jeg skal vende hele funktionen fra dens start til slutningen.
Er dette virkelig den anbefalede praksis?
Hvis mit spørgsmål ikke er klart nok, her er en hypotetisk sag: Lad os sige, at jeg vil forstå kommunikationsprotokollen, der bruges til at udveksle data mellem en malware og kommando- og kontrolserveren. Lad os sige, at jeg fandt recv-opkaldet, og dette opkald er midt i en ukendt funktion.
Skal jeg virkelig vende denne ukendte funktion fra starten, eller skal jeg fokusere på det område af koden inde i denne funktion, der kalder "recv" og gå derfra?

To svar:
joxeankoret
2016-05-18 19:20:55 UTC
view on stackexchange narkive permalink

Skal jeg virkelig vende denne ukendte funktion fra starten

Ansvarsfraskrivelse : Dette er bare min mening. Når det er sagt, er mit svar: nej , gør det ikke, medmindre du virkelig har brug for det. En af de første ting, jeg altid siger til mine studerende, når jeg underviser i reverse engineering, er faktisk det: prøv aldrig at reverse engineer en funktion linje for linje, medmindre du virkelig har brug for det (og min erfaring siger, at du for det meste behøver ikke at gøre det).

Min anbefaling er lidt anderledes:

  • Find "artefakter" end der kan give dig en abstrakt idé om, hvad en funktion gør: kaldte / refererede funktionsnavne (dvs. API'er), konstanter osv ...
  • Når du har en abstrakt idé om, hvad funktionen gør, skal du afgøre, om du har brug for at få mere information fra den.
  • Hvis ja, prøv at bestemme gruppering af grundlæggende blokke, men uden at analysere linje for linje, hvad et sæt grundlæggende blokke gør, og prøv at fokusere på det, du ikke forstår, eller hvad du har brug for at svare på.
  • Hvis du stadig har brug for flere detaljer, eller noget stadig er uklart, skal du gøre det grundlæggende blok pr. grundlæggende blok efter strømmen fra det punkt, der ikke er klart, eller fra det punkt, hvor du begynder at passe.
  • Hvis , stadig, du n eed mere information, eller hvis det stadig er uklart, skal du gøre det instruktioner ved at instruere og prøve at fokusere specifikt på det, du ikke forstår, eller hvad du har brug for at svare på, og kun hvis du stadig ikke kan besvare dine spørgsmål, skal du vende hele funktionen linje for linje.

Forsøg på at gå instruktion ved instruktion eller vende hele funktionen, når vi virkelig ikke har brug for det, det er lettere at gå vild / forvirret, fordi vi vil fokusere på, hvad en uklar instruktion gør, eller som markerer den ændrer i stedet for med fokus på at besvare de rigtige spørgsmål. Det vil dog stort set afhænge af, hvorfor du reverse engineering den ting. Forsøger du at efterligne / kopiere / udvide en algoritme (dvs. en dekrypteringsalgoritme) eller gendanne kildekoden til en binær? Så ja, du bliver nødt til at gå instruktion efter instruktion. Gør du reverse engineering af et stykke software / funktion for at bestemme, hvad det gør? Generelt nej, du behøver ikke at gå instruktion efter instruktion.

Mine 2 cent.

Der er ingen "metode", der er kun imaginære konstruktioner skrevet af tilfældige mennesker. Hvis der var en softwareudviklingsmetode, ville du bare anvende den i omvendt: D Der er dog god praksis, og det, som Joxean beskriver, er en af ​​dem.
Chris Tsiakoulas
2016-05-18 18:35:29 UTC
view on stackexchange narkive permalink

Jeg foreslår, at du også kiggede på hvilekoden. At finde noget specifikt kan helt sikkert være et gennembrud, men en linje kode - især i samling - kan ikke gøre meget alene. Se på det eksempel, du gav. Du fandt, hvordan din malware kommunikerer. Er det nok? Sikkert ikke. Hvad er karakteren af ​​denne kommunikation? Er det en omvendt skal? Bruges det til at overføre filer? Der er mange forskellige spørgsmål, der skal besvares, og - tro mig - du vil være meget heldig, hvis du kan finde dem alle på samme punkt i koden. Se altid på koden omkring det interesseområde, du har. Du kan muligvis finde funktioner, der kalder andre funktioner, der gør interessante ting ved hjælp af kommunikationskanalen. Den ene ting bringer den anden, og i slutningen af ​​dagen vil den give dig den fulde struktur og funktionalitet af malware.

P.S. Brug altid breakpoints, når du går fra funktion til funktion.

Glad jagt!



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...