Jeg har ikke NT4 vm
Også lenken din peker på flere eksempler
Gir nøyaktig MD5 / SHA / noen kontrollerbar kontrollsum
av prøven kan eliminere uklarheter mens du svarer
her er en liten gjennomgang ved hjelp av grunnleggende hekseditor og en grunnleggende demonterer av hvorfor det kan være mulig for dette unntaket å bli generert.
ved hjelp av winxp sp3 vm hxd hexeditor og ollydbg 1.10 i en grunnleggende dis-aaseembler-modus
lastet ned den første prøven i openmalware
MD5: f40547d521818f7c34754710f8603d5aSHA1: f9e3c0e824dda984046b4eedeef06f938805983bSHA256: a9beda469c835abbf416ea8da5462170eafdef215b96ac68523045600883855bOCID: 245478739Original Filnavn: Virus.Win32.Bolzano.5572
drag falt til vpc 2007 XP SP3 vm
pakket ut med angitt passord infisert
dra falt i hxd hexeditor og verifiserte sjekksummer
MD-5: F40547D521818F7C34754710F8603D5ASHA-1: F9E3C0E824DDA984046B4EED80 -256: A9BEDA469C835ABBF416EA8DA5462170EAFDEF215B96AC68523045600883855B
alle tre kontrollsummen samsvarer ok
WORD MajorSubsystemVersion WORD MinorSubsystemVersion Inneholder den minste driftssystemversjonen som kreves. En typisk verdi for dette feltet er 3.10 (som betyr Windows NT 3.1).
http://msdn.microsoft.com/en-us/library/ms809762.aspx
bruker ollydbg som demonterer
view -> file -> malware.exe -> høyreklikk -> speacial -> pe header
ctrl + g 100
pe header shows
00000148 0300 DW 0003; MajorSubsystemVersion = 30000014A 0A00 DW 000A; MinorSubsystemVersion = A (10.) 00000200 00100000 DD 00001000; VirtualSize = 1000 (4096.)
00000204 00100000 DD 00001000; VirtualAddress = 1000 < ----- 00000208 00020000 DD 00000200; SizeOfRawData = 200 (512.) 0000020C 00060000 DD 00000600; PointerToRawData = 600 00000228 00200000 DD 00002000; VirtualSize = 2000 (8192.) 0000022C 00200000 DD 00002000; VirtualAddress = 200000000230 00200000 DD 00002000; SizeOfRawData = 2000 (8192.) 00000234 00080000 DD 00000800; PointerToRawData = 800 < ------ 00000128 00100000 DD 00001000; AddressOfEntryPoint = 1000
slik at vi kan begynne å demontere ved 0x600
ctrl + g 600 høyreklikk -> demontere
demontering
1. 00000600 60 PUSHAD 2. 00000601 E9 FA0F0000 JMP 00001600
virtuell størrelse på seksjonen er 1000 som vi så tidligere
så det hopper til neste seksjon
neste seksjon starter ved 0x800 som vi så tidligere
ctrl + g 800 demontere
demontering
00000800 E8 D50E0000 RING 000016DA (402eda) 400000 +2000 + (16da-800)
følger
000016DA E8 00000000 RING 000016DF $ + 5 (402edf) 400000+ 2000+ (16df-800) 000016DF 5D POP EBP ebp vil være 402edf 000016E0 81ED DF0E0000 SUB EBP, 0EDF ebp vil være 402000000016E6 C3 RETN vil gå tilbake til 805 eller 402005
ctrl + g 805 demontere
00000805 BF 000C0100 MOV EDI, 10C000000 080A B9 00010000 MOV ECX, 1000000080F 33C0 XOR EAX, EAX00000811 F3: AE REPE SCAS BYTE PTR ES: [EDI] skanner alle byte fra 10c00 til 10d00 for 0 00000813 75 0C JNZ KORT 00000821 hvis alt ikke null går til win95 / 9800000815 BE 2D MOV ESI, 112D win nt0000081A BF 0000F077 MOV EDI, 77F00000 k32 base
0000081F EB 0A JMP SHORT 0000082B00000821 BE 25110000 MOV ESI, 1125 win 95/9800000826 BF 0000F7BF MOV EDI, BFF70000 k32 base
setter basen til kernel32.dll til edi
for byte-skanning av pupiller
ser ut om alle 100 byte som starter ved 10c00 er null
hvis de er null sett kjerne base til 77f00000
(vinn nt k32 base no aslr fixed)
annet til bff70000
(vinn 95/98 kernel32 base no aslr fixed)
esi til noen offset
(esi = 1125 eller 112d) (ebp = 402000) 40312d / 25 1925 eller 192d (800 + 1125 eller 112d) 0000082B 03F5 ADD ESI, EBP (så esi blir enten 403125 eller 40312d) 0000082D 89BD C8170000 MOV DWORD PTR SS: [EBP + 17C8], EDI sparer pekerkjernebasen gjett hvorfor ?? 00000833 BA 00000400 MOV EDX, 4000000000838 FC CLD00000839 B9 08000000 MOV ECX, 80000083E 56 PUSH ESI0000083F 57 PUSH EDI00000840 F3: A6 REPE CMPS BYTE PTR ES: [EDI], BYTE PTR>00000800000F42 PF43 sammenligner byte mønster
i k32 dll
for 95/98
dette mønsteret
00001925 C2 0400 RETN 400001928 57 PUSH EDI00001929 6A 22 PUSH 220000192B 2BD2 SUB EDX, EDX
for win nt
dette mønsteret
0000192D C2 0400 RETN 400001930 55 PUSH EBP00001931 8B4C24 0C MOV ECX, DWORD PTR SS: [ESP + C]
hopper til ok eller ikke ok
00000844 74 0A JE SHORT 00000850 `høyre bruker med høyre os hopp`00000846 47 I NC EDI00000847 4A DEC EDX00000848 0F84 CD000000 JE 0000091B `feil bruker med feil os hopp`
0000084E ^ EB E9 JMP KORT 00000839
hvis den finner at mønsteret vil gå til 850
annet 91b
ved 91b er det
0000091B E8 BA0D0000 CALL 000016DA
så dette vil gå tilbake til 920 (se ovenfor retn til 402005)
00000920 8B5424 20 MOV EDX, DWORD PTR SS: [ESP + 20] 00000924 B9 40000000 MOV ECX, 4000000929 83EA 05 SUB EDX, 50000092C BE 4F180000 MOV ESI, 184F
Dette vil returnere til kjernen eller avslutte trådadressen (pushad == 0x20)
alt annet er søppel
exe inneholder ingenting ved 204f til 224f vil bare gå ut via retn
(184f + 800 ecx = 40 to lodsd = 80 dwords = 200 byte = 224f)
hvis regionen sammenlignet ok med retn-verdi - 5 (se sub edx, 5)
appen vil krasje og ollydbg kan gi den advarselen
00000931 03F5 ADD ESI , EBP 00000933 AD LODS DWORD PTR DS: [ESI] 00000934 3BC2 CMP EAX, ED X00000936 AD LODS DWORD PTR DS: [ESI] 00000937 74 04 JE KORT 0000093D00000939 ^ E2 F8 LOOPD KORT 000009330000093B 61 POPAD0000093C C3 RETN0000093D 8985 47010000 MOV DWORD PTR SS: [EBP + 14743] 6100 00009300 0 < ---- applikasjon vil krasje 0000094B C3 RETN eip er ikke gyldig eller 0
ollydbg vil vise ikke vet hvordan du skal gå fordi minne på adresse 0 ikke er lesbart, prøv å endre Eip eller pass unntak til programmet hvis det når hit
demontering ved 850 eller 402050
00000850 83C7 03 ADD EDI, 3 legg til 3 til bytepattern adresse 00000853 BE E70E0000 MOV ESI, 0EE7 00000858 03F5 ADD ESI, EBP 402ee7 = 16e7 (ee7 -800 + 1000) 0000085A 8BC6 MOV EAX, ESI
0000085C 83C0 07 ADD EAX, 7 16e7 + 7 = 16ee
byte mønster ved 16ee
000016EE 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E CreateFileMappin000016FE 67 41 gA
demontering videre
0000085F 50 PUSH EAX ** skyver streng CreateFileMapping ** 00000860 8B85 C8170000 MOV EAX, DWORD PTR SS: [EBP + 17C ** 8] 00000866 50 PUSH EAX ** skyver kjernebasen 00000867 FFD7 CALL NEAR EDI (kan du gjette ?? hva api ??)
prøv å gå fremover en bit :)