· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.HELHEIM —› импорт

Посл.отвђт Сообщенiе


Дата: Июн 7, 2004 22:45:05

public main
main proc near
push 0
push offset Caption ; "Evil`s Interrupt"
push offset Text ; "Binary digit !!!"
push 0
а1 call j_MessageBoxA
push 0
а2 call $+5
jmp ds:ExitProcess
main endp
; _______________ S U B R O U T I N E __________________________
j_MessageBoxA proc near ; CODE XREF: main+Ep
jmp ds:MessageBoxA
j_MessageBoxA endp
Чо то не врублюсь: при а1 передается в какую то функцию, а потом
на ... Хрен знает куда. Читаю Юрова там .idata за импорт ответс-
венность несет, а ИДа какую то .rdata показывает. S)
В а2 вообще какая то хнень не проще вместо call ExitProcess какой
то call $+5 ;(
Ладно, если верить Юрову то в Импорте есть массив с именами исполь-
зуемых делеле, 2 массива с адресами демонов етих делеле и массив
с именами демонов. На кой икс имена нужны если уже Адреса есть?
И ваще как это все работает, а то чем больше доки читаешь тем боль-
ше не понимаешь. ;(


Дата: Июн 7, 2004 22:47:25

Ух ты! Да ты не ламер даже, ты ЛАМЗОР. Самое бешеное оскорбление из всех, что знаю. Какой же я тебе сенсей, позорище ты мое. Ты б хоть не при всех говорил. Иди, читай упаковщики первую часть. Там как раз для таких как ты все и расписано. А сие я в HELHEIM отправляю. Там, кстати, изначально это создавать и стоило.


Дата: Июн 8, 2004 20:26:04

EvilsInterrupt

В дополнение к инфе по формату PE попробуй всё же скачать FASM.
И изучи как с его помощью можно делать экзешники: Create PE from scratch


ЗЫ: У тебя есть очень хорошее качество - стремление к получению знаний.
Но дельта 9 тебе в этом не помошник. Без обид.


Дата: Июн 8, 2004 21:56:09

Да чувствуется русский скоро забудут! Придется учить заинев буржуйский :( Но тебе спасибо Стас за помощь я скачал и буду сидеть со словарем. Да и что такое дельта 9, хочу узнать правилен ли мой ход мыслей!


Дата: Июн 8, 2004 22:15:10

Дык, зачем там словарь - сплошной листинг и пара слов всего.
Файл разложен по косточкам через dd - видно зачем каждый байт.

Про ход мыслей я не знаю, потому что читать их не умею.
http://www.google.com/search?hl=ru&ie=UTF-8&q=%D0%B4%D0%B5%D0%BB%D1%8C%D1%82%D0%B0+9&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=


Дата: Июн 8, 2004 23:27:37

S_T_A_S_
Скачал упаковщики, Hook Development Kit, потом еще что от этого сайта про PE, но слишком много терминов и как правило между собой мнения расходятся или это токо мне кажется ;(


Дата: Июн 9, 2004 01:05:12

EvilsInterrupt

Возьми исходник по линку и попробуй сам написать комментарии к каждой строчке.
Доки используй как справку. Тогда станет понятно, расходятся ли мнения в доках, или просто формат такой :)


Дата: Июн 9, 2004 10:32:43

дельта 9
;-) Теперь я знаю еще один синоним %-)


Дата: Июн 9, 2004 22:46:29

Глянул я на user32.dll через dumppe и увидел imagebase & impaddr, если их сложить то именно этот адрес и всплывает при перехватывании в отладчике! Но до конца не понимаю что такое образ базы? И на кой икс нужен? Читаю упаковщики, а там видать токо для продвинутых ни хрена не понимаю, но упорствую!


Дата: Июн 10, 2004 02:42:30 · Поправил: Oleg_SK

На кой икс имена нужны если уже Адреса есть?
А ты к функциям как обычно обращаешся: по именам или по адресам? Во первых, это нужно для удобства! Во вторых, ты слышал что нибудь о понятии: 'манглинг' (по мойму, написал правильно)? Некоторые (если не все) языки высокого уровня в имя функции добавляют дополнительную инфу.


Дата: Июн 10, 2004 19:50:43 · Поправил: S_T_A_S_

imagebase - предпочтительный адрес, по которому будет загружен PE файл.
(Если тот адрес занят, то dll будет грузиться по дрегому адресу)

Загрузчик ОСи грузит экзешник по его imagebase (обычно 400000h), потом смотрит что у него в импорте написано.
Загружает соответствующие dll, и прописывает адреса функций (имена которых лежат в импорте exe) в соответствующие им DWORD'ы.
Потом запускает exe.
На этот момент файлы уже динамически слинкованы в памяти.
В твоём примере вызов ф-ции из dll идёт через заглушку jmp fun, а по-хорошему - делается сразу косвенный call [fun].


Дата: Июн 10, 2004 23:55:06

S_T_A_S_
А IAT entry что такое, а то dumppe мне его кажет, а я все не соображу!


Дата: Июн 11, 2004 09:17:45 · Поправил: S_T_A_S_

[ EvilsInterrupt : А IAT entry что такое, а то dumppe мне его кажет ]

Ну давай посмотрим.
Беру исходник, компилирую:
;----------------------------------------------------------------
DOS_Header:
   .e_magic     dw "MZ"      ;IMAGE_DOS_SIGNATURE
   .e_cblp      dw 0x0080
   .e_cp        dw 0x0001
   .e_crlc      dw 0x0000
   .e_cparhdr   dw 0x0004
   .e_minalloc  dw 0x0010
   .e_maxalloc  dw 0xFFFF
   .e_ss        dw 0x0000
   .e_sp        dw 0x0140
   .e_csum      dw 0x0000
   .e_ip        dw 0x0000
   .e_cs        dw 0x0000
   .e_lfarlc    dw 0x0040
   .e_ovno      dw 0x0000
   .e_res       rw 4
   .e_oemid     dw 0x0000
   .e_oeminfo   dw 0x0000
   .e_res2      rw 10
   .e_lfanew    dd PE_header  ;PE header Offset

DOS_Stub:
org 0
use16
   push cs
   pop ds
   mov dx,msg
   mov ah,9h
   int 21h
   mov ax,4C01h
   int 21h
   msg:
   db "this program cannot be run in DOS mode.",13,10,"$"
org $+DOS_Stub

rb 0x80 - $   ;$ equal to curent offset

Parameters:
NS = 3         ;NumberOfSections
BA = 0x400000  ;Base Address
SA = 0x1000    ;SectionAlignment
FA = 0x0200    ;FileAlignment

PE_header:
   .Signature              dd "PE"
   FileHeader:
     .Machine              dw 0x014C             ;i386
     .NumberOfSections     dw NS
     .TimeDateStamp        dd %t
     .PointerToSymbolTable dd 0
     .NumberOfSymbols      dd 0
     .SizeOfOptionalHeader dw SectionTable-OptionalHeader
     .Characteristics      dw 0x818F             ;
   OptionalHeader:                               ;OptionalHeader has 31 fields
     .Magic                    dw 0x010B             ;PE32
     .MajorLinkerVersion       db 1                  ;1.51
     .MinerLinkerVersion       db 51
     .SizeOfCode               dd 0
     .SizeOfInitializedData    dd 0
     .SizeOfUnInitializedData  dd 0
     .AddressOfEntryPoint      dd CodeSection
     .BaseOfCode               dd 0
     .BaseOfData               dd 0
     .ImageBase                dd BA
     .SectionAlignment         dd SA
     .FileAlignment            dd FA
     .MajorOSVersion           dw 1                  ;1.0
     .MinorOSVersion           dw 0
     .MajorImageVersion        dw 0                  ;0.0
     .MinorImageVersion        dw 0
     .MajorSubSystemVerion     dw 4                  ;4.0
     .MinorSubSystemVerion     dw 0
     .Win32VersionValue        dd 0                  ;Reserved
     .SizeOfImage              dd SA*(NS+1)             ;16384 bytes
     .SizeOfHeaders            dd SizeOfHeaders
     .CheckSum                 dd 0x6B94
     .SubSystem                dw 2                  ;Win32 GUI
     .DllCharacteristics       dw 0
     .SizeOfStackReserve       dd 0x1000
     .SizeOfStackCommit        dd 0x1000
     .SizeOfHeapReserve        dd 0x10000
     .SizeOfHeapRCommit        dd 0
     .LoaderFlags              dd 0                  ;Obsolete
     .NumberOfDataDirectories  dd 16

     Data_Directories:
       .Export_Table          dd 0,0              ; Rva,Size
       .Import_Table          dd ImportSection,0x80      ; Rva,Size
       .Resource_Table        dd 0,0              ; Rva,Size
       .Exception_Table       dd 0,0  ; Rva,Size
       .Certificate_Table     dd 0,0  ; Rva,Size
       .Relocation_Table      dd 0,0  ; Rva,Size
       .Debug_Data            dd 0,0  ; Rva,Size
       .Architecture          dd 0,0  ; Rva,Size
       .Global_PTR            dd 0,0  ; Rva,Size
       .TLS_Table             dd 0,0  ; Rva,Size
       .Load_Config_Table     dd 0,0  ; Rva,Size
       .BoundImportTable      dd 0,0  ; Rva,Size
       .ImportAddressTable    dd 0,0  ; Rva,Size
       .DelayImportDescriptor dd 0,0  ; Rva,Size
       .COMplusRuntimeHeader  dd 0,0  ; Rva,Size
       .Reserved              dd 0,0  ; Rva,Size

SectionTable:
  Section1:
    .Name                   dq ".data"
    .VirtualSize            dd 0x33
    .VirtaulAddress         dd DataSection
    .SizeOfRawData          dd SizeOfData
    .PointerToRawData       dd PointerToData
    .PointerToRelocations   dd 0
    .PointerToLinenumbers   dd 0
    .NumberOfRelocations    dw 0
    .NumberOfLinenumbers    dw 0
    .Characteristics        dd 0xC0000040        ;INITIALIZED_DATA+MEM_READ+MEM_WRITE
  Section2:
    .Name                   dq ".code"
    .VirtualSize            dd 0x1C
    .VirtaulAddress         dd CodeSection
    .SizeOfRawData          dd SizeOfCode
    .PointerToRawData       dd PointerToCode
    .PointerToRelocations   dd 0
    .PointerToLinenumbers   dd 0
    .NumberOfRelocations    dw 0
    .NumberOfLinenumbers    dw 0
    .Characteristics        dd 0x60000020        ;CODE+MEM_READ+MEM_EXECUTE
  Section3:
    .Name                   dq ".idata"
    .VirtualSize            dd 0x80
    .VirtaulAddress         dd ImportSection
    .SizeOfRawData          dd SizeOfImport
    .PointerToRawData       dd PointerToImport
    .PointerToRelocations   dd 0
    .PointerToLinenumbers   dd 0
    .NumberOfRelocations    dw 0
    .NumberOfLinenumbers    dw 0
    .Characteristics        dd 0xC0000040        ;INITIALIZED_DATA+MEM_READ+MEM_WRITE

SizeOfHeaders = 0x200
rb SizeOfHeaders - $
RawData:

PointerToData:
org  SA
DataSection:

.MsgCaption db "Iczelion's tutorial no. 2",0
.MsgBoxText db "Win32 Assembly is Great!",0

SizeOfData = FA
rb  SizeOfData - ($-DataSection)

PointerToCode = PointerToData + SizeOfData
org  SA*2
CodeSection:

use32
push 0x40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
push dword DataSection.MsgCaption+BA       ; |Title = "Iczelion's tutorial no. 2"
push dword DataSection.MsgBoxText+BA       ; |Text = "Win32 Assembly is Great!"
push 0                                     ; |hOwner = NULL
call dword [DS:ImageImportByName2+BA]      ; \MessageBoxA
push 0                                     ; /ExitCode = 0
call dword [DS:ImageImportByName1+BA]      ; \ExitProcess

SizeOfCode = FA
rb SizeOfCode - ($-CodeSection)

PointerToImport = PointerToCode + SizeOfCode
org  SA*3
ImportSection:

  ImageImportDescriptor1:
    .OriginalFirstThunk  dd  0x00000000
    .TimeDateStamp       dd  0x00000000  ;(GMT: Thu Jan 01 00:00:00 1970)
    .ForwarderChain      dd  0x00000000
    .Name                dd  DllNames.DllName1  ;=0x0000303C RVA to "KERNEL32.DLL"
    .FirstThunk          dd  ImageImportByName1 ;=0x00003054
                                                       ;pointer(RVA)to an IMAGE_IMPORT_BY_NAME struct
ImageImportDescriptor2:
    .OriginalFirstThunk  dd  0x00000000
    .TimeDateStamp       dd  0x00000000  ;(GMT: Thu Jan 01 00:00:00 1970)
    .ForwarderChain      dd  0x00000000
    .Name                dd  DllNames.DllName2  ;=0x00003049 RVA to "USER32.DLL"
    .FirstThunk          dd  ImageImportByName2 ;=0x0000306A
                                                       ;pointer(RVA)to an IMAGE_IMPORT_BY_NAME struct
ImageImportDescriptor3:   ;end of ImageImportDescriptor array by all NULL values
    .OriginalFirstThunk  dd 0
    .TimeDateStamp       dd 0
    .ForwarderChain      dd 0
    .Name                dd 0
    .FirstThunk          dd 0

  DllNames:
    .DllName1            db "KERNEL32.DLL",0
    .DllName2            db "USER32.DLL",0
  ImageImportByName1:
    .ThunkValue          dd .Hint, 0
    .Hint    dw    0x0000
    .Name    db    "ExitProcess",0
  ImageImportByName2:
    .ThunkValue          dd .Hint, 0
    .Hint    dw    0x0000
    .Name    db    "MessageBoxA",0

SizeOfImport = FA
rb SizeOfImport - ($-ImportSection) - 1
db 0
;----------------------------------------------------------------


Прогоняю экзешник через dumppe, получаю:
pe.exe                             (hex)           (dec)

.EXE size (bytes)                     80             128
Minimum load size (bytes)            140             320
Overlay number                         0               0
Initial CS:IP                  0000:0000
Initial SS:SP                  0000:0140             320
Minimum allocation (para)             10              16
Maximum allocation (para)           FFFF           65535
Header size (para)                     4               4
Relocation table offset               40              64
Relocation entries                     0               0

Portable Executable starts at                 80
Signature                               00004550 (PE)
Machine                                     014C (Intel 386)
Sections                                    0003
Time Date Stamp                         40C8EB19 Fri Jun 11 10:13:29 2004
Symbol Table                            00000000
Number of Symbols                       00000000
Optional header size                        00E0
Characteristics                             818F
	Relocation information stripped
	Executable Image
	Line numbers stripped
	Local symbols stripped
	Bytes of machine word are reversed
	32 bit word machine
	Bytes of machine word are reversed
Magic                                       010B
Linker Version                              1.51
Size of Code                            00000000
Size of Initialized Data                00000000
Size of Uninitialized Data              00000000
Address of Entry Point                  00002000
Base of Code                            00000000
Base of Data                            00000000
Image Base                              00400000
Section Alignment                       00001000
File Alignment                          00000200
Operating System Version                    1.00
Image Version                               0.00
Subsystem Version                           4.00
reserved                                00000000
Image Size                              00004000
Header Size                             00000200
Checksum                                00006B94
Subsystem                                   0002 (Windows)
DLL Characteristics                         0000
Size Of Stack Reserve                   00001000
Size Of Stack Commit                    00001000
Size Of Heap Reserve                    00010000
Size Of Heap Commit                     00000000
Loader Flags                            00000000
Number of Directories                   00000010

Directory Name                          VirtAddr  VirtSize
--------------------------------------  --------  --------
Export                                  00000000  00000000
Import                                  00003000  00000080
Resource                                00000000  00000000
Exception                               00000000  00000000
Security                                00000000  00000000
Base Relocation                         00000000  00000000
Debug                                   00000000  00000000
Decription/Architecture                 00000000  00000000
Machine Value (MIPS GP)                 00000000  00000000
Thread Storage                          00000000  00000000
Load Configuration                      00000000  00000000
Bound Import                            00000000  00000000
Import Address Table                    00000000  00000000
Delay Import                            00000000  00000000
COM Runtime Descriptor                  00000000  00000000
(reserved)                              00000000  00000000

Section Table
-------------
01  .data   	Virtual Address         00001000
		Virtual Size            00000033
		Raw Data Offset         00000200
		Raw Data Size           00000200
		Relocation Offset       00000000
		Relocation Count        0000
		Line Number Offset      00000000
		Line Number Count       0000
		Characteristics         C0000040
			Initialized Data
			Readable
			Writeable

02  .code   	Virtual Address         00002000
		Virtual Size            0000001C
		Raw Data Offset         00000400
		Raw Data Size           00000200
		Relocation Offset       00000000
		Relocation Count        0000
		Line Number Offset      00000000
		Line Number Count       0000
		Characteristics         60000020
			Code
			Executable
			Readable

03  .idata  	Virtual Address         00003000
		Virtual Size            00000080
		Raw Data Offset         00000600
		Raw Data Size           00000200
		Relocation Offset       00000000
		Relocation Count        0000
		Line Number Offset      00000000
		Line Number Count       0000
		Characteristics         C0000040
			Initialized Data
			Readable
			Writeable


 Imp Addr Hint Import Name from KERNEL32.DLL - Not Bound
 -------- ---- ---------------------------------------------------------------
 00003054    0 ExitProcess

 Imp Addr Hint Import Name from USER32.DLL - Not Bound
 -------- ---- ---------------------------------------------------------------
 0000306A    0 MessageBoxA

Теперь вопрос.
Где в логе dumppe ^^ упоминается то что ты спрашиваешь?

Импорт - штука хитрая - вариантов создания его несколько.
В элементе Import Directory Table лежат RVA 1й или 2х таблиц импорта и ещё RVA ascii строки с имени dll.
Есть Import Lookup Table (Import Name Table) и Import Address Table.
Эти 2 таблицы могут находиться раздельно, но их содержимое одинаково.
Могут быть в одном и том же месте. А может быть только 2я таблица.

Вот тулза поудобнее, медитируй с .idata в приведённом выше экзешнике - это imho самый простой пример. Не начинай со сложного.
Ещё на сайте есть Уроки Iczelion'а PE. Урок 6. Таблица импорта

_1348397566__PEview.zip


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.120