|
|
| Посл.отвђт | Сообщен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 |