[Win32] Virus/worm disassemblen *

Pagina: 1
Acties:
  • 151 views sinds 30-01-2008
  • Reageer

  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
Ik kreeg laatst een worm op mijn computer en wil deze nu een beetje gaan onderzoeken. Ik heb de worm nog wel, maar de extensie ontbreekt (zodat ik hem niet per ongeluk weer uit kon voeren)...

Ik heb nu eigenlijk nodig:
- een manier om de executable te identificeren: is het een win32 toepassing?
- een manier om te achterhalen met welke compiler de worm is gemaakt
- de worm disassamblen
- de source tot op redelijk leesbaar niveau krijgen

Dit gehele onderzoek is uiteraard voor zelfstudie, ik wil gewoon eens kijken hoe zoiets opgebouwd is en wat de worm allemaal doet.
Aangezien er geen copywrights op de executable zitten (is tenslotte een virus) zou dit gewoon bespreekbaar moeten zijn hier....

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Het feit dat het een virus is wil niet zeggen dat de originele maker ervan geen copyrights heeft over de code; echter acht ik de kans klein dat de maker daar ooit aanspraak op zal doen ;)

Intentionally left blank


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

executable informatie bestaat binnen windows volgens mij vooral uit het de extensie. Maar onder linux staat het in de header. Dat zal op windows net zo zijn gok ik. Pak eens een hex-editor en bekijk de eerste paar bytes eens?

Doet iets met Cloud (MS/IBM)


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

D2k schreef op 30 januari 2004 @ 19:20:
executable informatie bestaat binnen windows volgens mij vooral uit het de extensie.
Uhm nee hoor, Windows executables en DLL's hebben wel degelijk allemaal een enorme header. Ik weet alleen de layout er zo snel niet van en ik ben vandaag te lui om 'm op te zoeken :P

Professionele website nodig?


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
D2k schreef op 30 januari 2004 @ 19:20:
executable informatie bestaat binnen windows volgens mij vooral uit het de extensie. Maar onder linux staat het in de header. Dat zal op windows net zo zijn gok ik. Pak eens een hex-editor en bekijk de eerste paar bytes eens?
Een exe heeft idd een (niet al te interessante, en anders al jij waarshijnlijk bedoeld) header, maar volgens mij geld dat niet voor ieder bestands type onder windows. Als je een exe renamed naar txt opent hij 'm namelijk gewoon in je default txt editor.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

PrisonerOfPain schreef op 30 januari 2004 @ 19:25:
[...]

Een exe heeft idd een (niet al te interessante, en anders al jij waarshijnlijk bedoeld) header, maar volgens mij geld dat niet voor ieder bestands type onder windows. Als je een exe renamed naar txt opent hij 'm namelijk gewoon in je default txt editor.
En wat bewijst dat? :?

Professionele website nodig?


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

curry684 schreef op 30 januari 2004 @ 19:24:
[...]

Uhm nee hoor, Windows executables en DLL's hebben wel degelijk allemaal een enorme header. Ik weet alleen de layout er zo snel niet van en ik ben vandaag te lui om 'm op te zoeken :P
ok
Afbeeldingslocatie: http://www.xs4all.nl/~dennisvr/got/hex.JPG
zie de overeenkomsten en verschillen. Daar moet op google genoeg over te vinden zijn :)

Doet iets met Cloud (MS/IBM)


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Als windows bestanden aan de extentie zou herkennen zou 'ie de executible toch gewoon uitvoeren. Lijk mij zo

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

PrisonerOfPain schreef op 30 januari 2004 @ 19:30:
[...]


Als windows bestanden aan de extentie zou herkennen zou 'ie de executible toch gewoon uitvoeren. Lijk mij zo
dat bedoelde ik ook met mijn eerste post.
windows kijkt niet naar die header voor het uitvoeren. maar naar de extentie.

Doet iets met Cloud (MS/IBM)


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
D2k schreef op 30 januari 2004 @ 19:32:
[...]

dat bedoelde ik ook met mijn eerste post.
windows kijkt niet naar die header voor het uitvoeren. maar naar de extentie.
Ah, oke dan begrijpen wij elkaar ;)

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

PrisonerOfPain schreef op 30 januari 2004 @ 19:33:
[...]

Ah, oke dan begrijpen wij elkaar ;)
overigens heb ik al laten zien dat de header er _wel_ is. das dan weer wel boeiend :)

Doet iets met Cloud (MS/IBM)


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

PrisonerOfPain schreef op 30 januari 2004 @ 19:30:
[...]
Als windows bestanden aan de extentie zou herkennen zou 'ie de executible toch gewoon uitvoeren. Lijk mij zo
Lijkt mij toch niet. Zoals je in D2k's screenshots kunt zien zijn de eerste 2 bytes van een Bitmap file altijd BM. Maar als 'm renamed naar .jpeg opent ie 'm niet meer hoor :z

Kijk eens in je registry onder HKEY_CLASSES_ROOT en neus voor de lol eens door wat bekende extensies, dan snap je wellicht hoe Windows Explorer werkt :)

Voor topicstarter: lees dit artikel eens op MSDN door, inclusief demo-code om PE (Portable Executable) headers te dumpen :)

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op 30 januari 2004 @ 19:24:
[...]

Uhm nee hoor, Windows executables en DLL's hebben wel degelijk allemaal een enorme header. Ik weet alleen de layout er zo snel niet van en ik ben vandaag te lui om 'm op te zoeken :P
[google=win32 pe], eerste hit :Y)

modbreak: lees de draad, of minstens de post boven je, voordat je blaat :P

De post boven me wordt pas de post boven me als ik zelf heb gepost, dus dat wordt wat moeilijk :Y)

[ Voor 29% gewijzigd door .oisyn op 30-01-2004 19:44 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
curry684 schreef op 30 januari 2004 @ 19:35:
[...]

Lijkt mij toch niet. Zoals je in D2k's screenshots kunt zien zijn de eerste 2 bytes van een Bitmap file altijd BM. Maar als 'm renamed naar .jpeg opent ie 'm niet meer hoor :z

Kijk eens in je registry onder HKEY_CLASSES_ROOT en neus voor de lol eens door wat bekende extensies, dan snap je wellicht hoe Windows Explorer werkt :)

Voor topicstarter: lees dit artikel eens op MSDN door, inclusief demo-code om PE (Portable Executable) headers te dumpen :)
Ik ben bekend met het registry en hoe windows zijn extenties afhandeld, vandaar dat er ook stond Als :)

  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
Okay, het is een win32 executable... nu het volgende, hoe kan ik checken met welke compiler het ding is gecompileerd... zoeken op gcc en bcc in de hex source leverde nog geen bevredigend resultaat...

Dit heb ik uiteraard nodig om te kunnen weten door welke decompiler/disassambler ik het ding moet halen

[ Voor 22% gewijzigd door djteddy op 30-01-2004 19:51 ]

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

djteddy schreef op 30 januari 2004 @ 19:50:
Okay, het is een win32 executable... nu het volgende, hoe kan ik checken met welke compiler het ding is gecompileerd... zoeken op gcc en bcc in de hex source leverde nog geen bevredigend resultaat...

Dit heb ik uiteraard nodig om te kunnen weten door welke decompiler/disassambler ik het ding moet halen
Je hebt echt geen idee wat je aan het doen bent he?

Professionele website nodig?


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
djteddy schreef op 30 januari 2004 @ 19:50:
Dit heb ik uiteraard nodig om te kunnen weten door welke decompiler/disassambler ik het ding moet halen
Dit heb je dus niet nodig, je hebt gewoon een dissambler nodig, haal hem daar doorheen en je hebt de assembly code (of jij daar wat mee kunt heb ik geen idee van ;))

edit:


Om te kijken of 'iets' met vb is gemaakt moet je kijken naar dingen als:
code:
1
2
3
4
5
MSVBVM60._CItan
MSVBVM60.__vbaVarForNext
MSVBVM60._CIexp
MSVBVM60.__vbaFreeStr
MSVBVM60.__vbaFreeObj

[ Voor 23% gewijzigd door PrisonerOfPain op 30-01-2004 19:57 ]


  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
curry684 schreef op 30 januari 2004 @ 19:51:
[...]

Je hebt echt geen idee wat je aan het doen bent he?
Verklaar je nader? Ik gebruikte decompiler in de zin van disassambler.. misschien beetje verkeerde woordkeus, maar als ik weet dat ik asm terug krijg, dan zou ik toch wel een beetje weten wat ik aan het doen ben toch? :)

neem aan dat de gem. n00b geen i386 asm kan lezen :)

[ Voor 7% gewijzigd door djteddy op 30-01-2004 20:03 ]

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 17-11-2025
djteddy schreef op 30 januari 2004 @ 20:03:
[...]


Verklaar je nader? Ik gebruikte decompiler in de zin van disassambler.. misschien beetje verkeerde woordkeus, maar als ik weet dat ik asm terug krijg, dan zou ik toch wel een beetje weten wat ik aan het doen ben toch? :)

neem aan dat de gem. n00b geen i386 asm kan lezen :)
/offtopic: als het met goede commentaar is wel ;)

/ontopic:
Misschien is het makkelijker om een klein oud dos virusje van een paar kB groot te proberen te begrijpen.
Ik heb jaren geleden erg veel daarvan geleert weet ik nog :)

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
dat klopt, maar dit virus had de mogelijk zich telkens aan te passen... was hier met name in geïnteresseerd...

standaard shit als geheugen resident runnen, tcp verbindingen maken, etc snap ik allemaal wel en kan ik in c zo nabouwen, het zijn de polymorfe eigenschappen waarover ik meer wil weten

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


Verwijderd

windows bestanden zijn te herkennen aan mz in de header van de file..
en een goed virus in moeilijk te disassemblen / tracen ivm debug traps
enz. heeel vroeger ook wel eens van die dingen getest

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
djteddy schreef op 30 januari 2004 @ 20:16:
dat klopt, maar dit virus had de mogelijk zich telkens aan te passen... was hier met name in geïnteresseerd...

standaard shit als geheugen resident runnen, tcp verbindingen maken, etc snap ik allemaal wel en kan ik in c zo nabouwen, het zijn de polymorfe eigenschappen waarover ik meer wil weten
zelf modificerende code != polymorfie, google dan eens naar self modifying code, zou genoeg op moeten leveren :)

  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
PrisonerOfPain schreef op 30 januari 2004 @ 20:19:
[...]

zelf modificerende code != polymorfie, google dan eens naar self modifying code, zou genoeg op moeten leveren :)
hmm wat is het dan volgens jou, ff van populaire website trokken:

In de viruswereld houdt polymorf in dat het virus kan muteren, waarbij een volledig nieuwe viruscode ontstaat.

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


Verwijderd

http://daonline.tripod.com/Vir.htm

is een site met een paar virusjes inc source....
btw is alleen voor test doeleinden natuurlijk...

  • Osiris
  • Registratie: Januari 2000
  • Niet online
't Is wel een beetje offtopic, maar als je kloot met viri, dan raad ik je aan om dat binnen een beschermde omgeving zoals VMWare (zonder netwerkverbindingen) te doen.. Just to be sure :)

Mocht er iets mis gaan tijdens 't onderzoek, dan hoef je maar 1 file te verwijderen en je virtuele harde schijf is pleitos inc je virus :)

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Misschien een loze post, maar ik kreeg het ook maar te horen...
Iemand vertelde me een paar dagen geleden, dat je als je bijvoorbeeld een programma hebt gemaakt in Delphi, dat je dat niet kan deassemblen... Ja het kan wel, maar dan krijg je een nog grotere code dan waarmee het gemaakt is...

Om om me post dan (misschien) nog een beetje zin te geven:
Stel, het virus is gemaakt, in Delphi, dan zou je dus dat virus niet kunnen deassemblen...
Osiris schreef op 30 januari 2004 @ 20:36:
't Is wel een beetje offtopic, maar als je kloot met viri, dan raad ik je aan om dat binnen een beschermde omgeving zoals VMWare (zonder netwerkverbindingen) te doen.. Just to be sure :)

Mocht er iets mis gaan tijdens 't onderzoek, dan hoef je maar 1 file te verwijderen en je virtuele harde schijf is pleitos inc je virus :)
Of je maakt een image, voor je gaat spelen met je virus :/ En haalt de kabel uit je netwerkkaart... ;)

[ Voor 38% gewijzigd door CH4OS op 30-01-2004 20:39 ]


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
djteddy schreef op 30 januari 2004 @ 20:26:
[...]


hmm wat is het dan volgens jou, ff van populaire website trokken:

In de viruswereld houdt polymorf in dat het virus kan muteren, waarbij een volledig nieuwe viruscode ontstaat.
Ah, dat betekend het in de 'echte' wereld ook, al dus vandale. Maar volgens mij heeft het in de 'programmeer wereld' een iets andere betekenis, daar houd het namelijk bijvoorbeeld inclusion of overloading in. Iets wat volgens mij weinig met self modifying code te maken heeft ;)
edit:
de betekenis blijft natuurlijk hetzelfde, alleen word er iets anders bedoeld ;)
ThePerfectCell schreef op 30 januari 2004 @ 20:37:
Misschien een loze post, maar ik kreeg het ook maar te horen...
Iemand vertelde me een paar dagen geleden, dat je als je bijvoorbeeld een programma hebt gemaakt in Delphi, dat je dat niet kan deassemblen... Ja het kan wel, maar dan krijg je een nog grotere code dan waarmee het gemaakt is...

Om om me post dan (misschien) nog een beetje zin te geven:
Stel, het virus is gemaakt, in Delphi, dan zou je dus dat virus niet kunnen deassemblen...
dissamblen wil zeggen dat je van een uitvoerbaar bestand een assembler (human readable cpu instructies), decompilen wil zeggen dat je de originele source achterhaald, en ik denk dat die gene die dat jou heeft verteld dat ook bedoelde :)

BTW met die *lange lap code* kun je nog wel een hoop doen hoor ;)

[ Voor 49% gewijzigd door PrisonerOfPain op 30-01-2004 20:48 ]


  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
Ten eerste mensen, ik bekijk alleen source code, ik heb geen zin om executables van virii te gaan uitvoeren, dus zou er niets stuk moeten gaan...
PrisonerOfPain schreef op 30 januari 2004 @ 20:37:
[...]


Ah, dat betekend het in de 'echte' wereld ook, al dus vandale. Maar volgens mij heeft het in de 'programmeer wereld' een iets andere betekenis, daar houd het namelijk bijvoorbeeld inclusion of overloading in. Iets wat volgens mij weinig met self modifying code te maken heeft ;)
Gaat misschien ook wel wat ver hoor, maar als je iets over theorie van virussen wilt lezen: http://virusinfo.doven-online.nl/virus/index.php
Je kunt hier perfect lezen wat een polymorfie virus is en waarom deze 'zo lastig zijn op te sporen'...

(bij OOP betekend het inderdaad iets geheel anders, alle classes van één basis class laten afleiden of iets, weet het niet meer helemaal zeker :))

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
heb nu met disassambler wat asm gekregen... vannavond even kijken of ik er iets uit kan opmaken...

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 05-03 19:51
maar wat ik nog niet uit deze thread kan afleiden: heb je dat virus nou al gedisassembled? Zo nee: heb ik hier een linkje voor je naar een goeie Shareware disassembler: W32dASM ;)

edit:
te laat :(

[ Voor 6% gewijzigd door BezurK op 30-01-2004 20:56 ]

Rookworst zonder R is ook worst.


  • djteddy
  • Registratie: Juli 2002
  • Laatst online: 27-01 14:25

djteddy

We're going streaking!

Topicstarter
heb dezelfde gebruikt :)

Als ik nix eruit op kan maken kan ik altijd proberen op een afgesloten systeem een debugsessie te doen met bv SoftICE :) Ik ben alleen niet echt zo bekend met deze debugger, en werken met virus executables is altijd link (zelfs op een systeem zonder lan met goede backup-image)

"Honey, you think KFC is still open?" - Frank the tank / old school the movie


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Kijk ook eens op www.eeye.com, die hebben vaak virus analyses met assembler code + commentaar. Bijvoorbeeld hier (blaster).

www.madwizard.org


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Verwijderd schreef op 30 januari 2004 @ 20:18:
windows bestanden zijn te herkennen aan mz in de header van de file..
Triviantvraag van de dag: waar komen de letters MZ (en in latere versies van het executable formaat ZM) vandaan?

  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Verwijderd schreef op 30 januari 2004 @ 20:18:
windows bestanden zijn te herkennen aan mz in de header van de file..
en een goed virus in moeilijk te disassemblen / tracen ivm debug traps
enz. heeel vroeger ook wel eens van die dingen getest
MZ is de header van DOS executables, het hoeft dus nog geen windows programma te zijn. Andersom geldt wel, dat windows programma's altijd een DOS header hebben, maar daarnaast ook een PE header. De DOS header is onderdeel van de DOS stub die uitgevoerd wordt als je een windows programma onder (puur) DOS probeert te draaien.

www.madwizard.org


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Soultaker schreef op 30 januari 2004 @ 21:48:
[...]

Triviantvraag van de dag: waar komen de letters MZ (en in latere versies van het executable formaat ZM) vandaan?
Mark Zbikowski. Een programmeur van MS.

We adore chaos because we like to restore order - M.C. Escher


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 17-11-2025
De eenvoudige polymorfe virussen vervangen nutteloze instructies voor andere nutteloze instructies, zoals:

nop ; No OPeration
or ax,ax ; ax blijft hier dezelfde waarde houden
or bx,bx ; kan je met elk register dus doen
jmp $+2 ; een jmp naar de instructie na de jmp dus eigenlijk geen jmp
clc ; clear carry flag als die ff niet van belang is (kan dus met elk flaggetje)
mov ax,[randomadres] ; als ax ff niet van belang is

De wat ingewikkelde virussen vervangen niet x bytes door x andere bytes maar door een ander aantal bytes en veranderen eventueel de call's en jmp's tussen de 2 stukken code die nu op een andere afstand van elkaar liggen.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Zijn er nog polymorfe virri? Ik zie alleen maar worms geschreven in VB die zich alleen maar kopieeren via internet. Vroeger had je nog echte virri die in bootsector gingen zitten en moesten wachten op een floppy. Dan moest ie ongemerkt op het floppy komen en daarbij niet teveel van de al schaarse ruimte bezetten. Ik meen zelfs te herinneren dat er een virus was dat in je bios ging zitten.

We adore chaos because we like to restore order - M.C. Escher


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Over het meervoud van 'virus'...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

djteddy schreef op 30 januari 2004 @ 20:03:
[...]
Verklaar je nader? Ik gebruikte decompiler in de zin van disassambler.. misschien beetje verkeerde woordkeus, maar als ik weet dat ik asm terug krijg, dan zou ik toch wel een beetje weten wat ik aan het doen ben toch? :)

neem aan dat de gem. n00b geen i386 asm kan lezen :)
Daarentegen gaat de gemiddelde kenner niet op 'bcc' of 'gcc' zoeken in de hexcode van een executable :)

Over alle decompilevragen: je hebt dus een decompiler nodig om 'recompilable' sourcecode te kunnen genereren uit een executable. Met een disassembler kun je alleen door de asm scrollen, maar dat is realistisch redelijk onbegonnen werk tenzij je je echt verveelt.

Decompilers kunnen Delphi, C, C++ e.d. 'redelijk' reconstrueren uit een executable, door het afleiden van standaard optimizer patterns en gegenereerde code-structuren. Nadeel is wel dat je alles wat dat soort code juist manageable maakt kwijt bent: al je labels en functienamen worden gerenamed naar offsetbased random termen, commentaar kun je helemaal vergeten, en je moet er niet vreemd van opkijken als C++ classes als losse functies terugkomen. Oh en in general krijg je maar 1 file.

Ik vond in de C-64 en Amiga tijd het disassemblen en uitspittsen van software nog een leuke bezigheid: kon je lekker mee hacken, trainers aanbrengen e.d. Tegenwoordig is het imho gewoon een veels te tijdrovend en bovenal nutteloos karwei: leer MSDN uit je kop en je bent 3 keer zo snel in staat om een verwoestend virus te schrijven, vooral eentje zo stupide als MyDoom of zo die gewoon misbruik maakt van idiote gebruikers die alle attachments openen die ze tegenkomen.

Professionele website nodig?

Pagina: 1