• XSS.stack #1 – первый литературный журнал от юзеров форума

XP 2 win7 x64

Izg0y

HDD-drive
Пользователь
Регистрация
28.01.2008
Сообщения
44
Реакции
17
Приятного времени суток - соратники.
Не могу осознать какого члена не работает кодес ( на хр и ниже работал на ура )

Код:
.686
.model flat, stdcall
option casemap :none

include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\shell32.inc

includelib c:\masm32\lib\masm32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\shell32.lib
includelib c:\masm32\lib\user32.lib

IMAGE_OPTIONAL_HEADER64 STRUCT
  Magic                         WORD       ?
  MajorLinkerVersion            BYTE       ?
  MinorLinkerVersion            BYTE       ?
  SizeOfCode                    DWORD      ?
  SizeOfInitializedData         DWORD      ?
  SizeOfUninitializedData       DWORD      ?
  AddressOfEntryPoint           DWORD      ?
  BaseOfCode                    DWORD      ?
  ImageBase                     QWORD      ?
  SectionAlignment              DWORD      ?
  FileAlignment                 DWORD      ?
  MajorOperatingSystemVersion   WORD       ?
  MinorOperatingSystemVersion   WORD       ?
  MajorImageVersion             WORD       ?
  MinorImageVersion             WORD       ?
  MajorSubsystemVersion         WORD       ?
  MinorSubsystemVersion         WORD       ?
  Win32VersionValue             DWORD      ?
  SizeOfImage                   DWORD      ?
  SizeOfHeaders                 DWORD      ?
  CheckSum                      DWORD      ?
  Subsystem                     WORD       ?
  DllCharacteristics            WORD       ?
  SizeOfStackReserve            QWORD      ?
  SizeOfStackCommit             QWORD      ?
  SizeOfHeapReserve             QWORD      ?
  SizeOfHeapCommit              QWORD      ?
  LoaderFlags                   DWORD      ?
  NumberOfRvaAndSizes           DWORD      ?
  DataDirectory                 IMAGE_DATA_DIRECTORY IMAGE_NUMBEROF_DIRECTORY_ENTRIES dup(<>)
IMAGE_OPTIONAL_HEADER64 ENDS

IMAGE_NT_HEADERS64 STRUCT
  Signature         DWORD                   ?
  FileHeader        IMAGE_FILE_HEADER       <>
  OptionalHeader    IMAGE_OPTIONAL_HEADER64 <>
IMAGE_NT_HEADERS64 ENDS

.data
	ConsoleTitle  db "CRC32import calculator for PE32 and PE+ Win32 NTx86 ASCII       (c) Izg0y 2011", 0
	help db 0Dh, 0Ah, "Usage:", 0Dh, 0Ah, "       name.exe C:\WINDOWS\system32\ntdll.dll", 0Dh, 0Ah,  0
	Menu db 0Dh, 0Ah, " CRC32-hash       APi-name", 0Dh, 0Ah, " --------------------------", 0Dh, 0Ah, 0Dh, 0Ah, 0
	template db " 0x%08X       %s",0Dh,0Ah, 0
	Final db " --------------------------", 0Dh, 0Ah, " Total: %d", 0Dh, 0Ah, 0

.data?
	hFile dd ?
	argc	dd	?
	ConsoleHandle dd ?
	hMapping dd ?
	hMap dd ?

.code

CalcHash proc uses edx ecx ebx
    mov edx, edi
    mov ecx, eax
	xor eax, eax

	.IF ecx != 0 
  dec eax 
	@1:
  xor al,byte ptr [edx]
  inc edx
  push 08
  pop ebx
	@2:
  shr eax, 1
  jnc @3
  xor eax, 0EDB88320h
	@3:
  dec ebx 
  jnz @2
  loop @1
  not eax
	.ENDIF

    ret  
CalcHash endp

RVAToFileMap PROC uses edi esi edx ecx RVA:DWORD
	mov esi, hMap
	assume esi:ptr IMAGE_DOS_HEADER
	add esi, [esi].e_lfanew
	assume esi:ptr IMAGE_NT_HEADERS64
	mov edi, RVA
	mov edx, esi
	.IF [esi].OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC
  add edx, sizeof IMAGE_NT_HEADERS32
	.ELSEIF [esi].OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC
  add edx, sizeof IMAGE_NT_HEADERS64
	.ENDIF
	movzx ecx, cx
	assume edx:ptr IMAGE_SECTION_HEADER
	.while ecx > 0
  .if edi >= [edx].VirtualAddress
  	mov eax, [edx].VirtualAddress
  	add eax, [edx].SizeOfRawData
  	.if edi < eax
    mov eax, [edx].VirtualAddress
    sub edi, eax
    mov eax, [edx].PointerToRawData
    add eax, edi
    add eax, hMap
    ret
  	.endif
  .endif
  add edx,sizeof IMAGE_SECTION_HEADER
  dec ecx
	.endw
	assume edx:nothing
	assume esi:nothing
	mov eax,edi
	ret
RVAToFileMap endp

FindImport proc
	LOCAL temp[512]:BYTE
	LOCAL i:DWORD

	mov i, 0
	mov esi, hMap
	assume esi:ptr IMAGE_DOS_HEADER
	.IF [esi].e_magic == IMAGE_DOS_SIGNATURE
  add esi, [esi].e_lfanew
  assume  esi:ptr IMAGE_NT_HEADERS
  .IF [esi].Signature == IMAGE_NT_SIGNATURE
  	.IF [esi].OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC
    mov edi, [esi].OptionalHeader.DataDirectory.VirtualAddress
  	.ELSEIF [esi].OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC
    assume esi: ptr IMAGE_NT_HEADERS64
    mov edi, [esi].OptionalHeader.DataDirectory.VirtualAddress
  	.ENDIF
  	invoke RVAToFileMap, edi
  	mov edi, eax
  	assume edi:ptr IMAGE_EXPORT_DIRECTORY
  	mov ebx, [edi].NumberOfNames
  	invoke RVAToFileMap, [edi].AddressOfNames
  	push eax
  	invoke WriteFile, ConsoleHandle, addr Menu, 59, addr help, 0
  	pop esi
  	.while ebx > 0    
    invoke RVAToFileMap, dword ptr [esi]
    mov edi, eax
    invoke lstrlenA, eax
    call CalcHash
    invoke wsprintf, addr temp, addr template, eax, edi
    invoke lstrlenA, addr temp
    invoke WriteFile, ConsoleHandle, addr temp, eax, addr help, 0
    dec ebx
    add esi, 4
    inc i
  	.endw
  	invoke wsprintf, addr temp, addr Final, i
  	invoke WriteFile, ConsoleHandle, addr temp, eax, addr help, 0
  .ENDIF
	.ENDIF
	ret
FindImport endp

start:
	invoke GetStdHandle, STD_OUTPUT_HANDLE
	mov ConsoleHandle, eax
    invoke SetConsoleTitleA, addr ConsoleTitle
	invoke GetCommandLineW
	invoke CommandLineToArgvW, eax, addr argc
	.IF argc != 1
  add eax, 4
  invoke CreateFileW, [eax], GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
  .IF eax != INVALID_HANDLE_VALUE
  	mov hFile, eax
  	invoke CreateFileMapping, hFile, 0, PAGE_READONLY, 0, 0, 0
  	.IF eax != 0
    mov hMapping, eax
    invoke MapViewOfFile, hMapping, FILE_MAP_READ, 0, 0, 0
    .IF eax != 0
    	mov hMap, eax
    	invoke FindImport 
    .ENDIF
    invoke CloseHandle, hMapping
  	.ENDIF
  	invoke CloseHandle, hFile
  .ENDIF
	.ELSE
  invoke WriteFile, ConsoleHandle, addr help, 60, 0, 0
	.ENDIF

	ret
end start

Какое таинство несёт переход и какая очередная MS шиза принесла погибель?
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх