Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2011, 15:32   #1
777user777
Пользователь
 
Аватар для 777user777
 
Регистрация: 29.11.2010
Сообщений: 38
Вопрос Чистый ассемблер

Всем доброго времени суток. Решил написать программу на асме под win32 без использования *.lib и *.inc файлов - сделать таблицу импорта вручную,и т.п... ктонибудь знает какие нибудь книги или статьи по этому?
777user777 вне форума Ответить с цитированием
Старый 26.01.2011, 15:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

PEcoff.docx файл называется
да и в фасме пример есть(если на нем пишите)

а вообще, зачем такие выпендроны?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.01.2011, 16:47   #3
777user777
Пользователь
 
Аватар для 777user777
 
Регистрация: 29.11.2010
Сообщений: 38
По умолчанию

Пример на фасме у меня есть. Но я пишу на масме.
777user777 вне форума Ответить с цитированием
Старый 26.01.2011, 18:34   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

(Hiew) or (док по PE-структуре(можно канешн помнить все структуры и смещения по памяти)) or (много времени и желания)
это собственно все, что нужно
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 27.01.2011, 16:18   #5
BVOG
Python,C++,ASM,Php
Пользователь
 
Аватар для BVOG
 
Регистрация: 29.08.2010
Сообщений: 58
По умолчанию

Цитата:
(Hiew) or (док по PE-структуре(можно канешн помнить все структуры и смещения по памяти)) or (много времени и желания)
это собственно все, что нужно
(Hiew) or (док по PE-структуре(можно канешн помнить все структуры и смещения по памяти)) and (много времени и желания)
это собственно все, что нужно)))
Хакер - это не ламер с завышенным самомнением, а программист с заниженной зарплатой.
Нелегка и неказиста жизнь простого программиста.
BVOG вне форума Ответить с цитированием
Старый 02.02.2011, 21:15   #6
blinkapec
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 12
По умолчанию

Такой вопрос по примеру в FASM: в секции ".idata" должно быть именно 3 первых поля? То есть тут импортируется 2 библиотеки, а если мне нужно импортировать 4 и более?

Код:
section '.idata' import data readable writeable

  dd 0,0,0,RVA kernel_name,RVA kernel_table
  dd 0,0,0,RVA user_name,RVA user_table
  dd 0,0,0,0,0
blinkapec вне форума Ответить с цитированием
Старый 02.02.2011, 21:53   #7
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Цитата:
Сообщение от blinkapec Посмотреть сообщение
Такой вопрос по примеру в FASM: в секции ".idata" должно быть именно 3 первых поля? То есть тут импортируется 2 библиотеки, а если мне нужно импортировать 4 и более?

Код:
section '.idata' import data readable writeable

  dd 0,0,0,RVA kernel_name,RVA kernel_table
  dd 0,0,0,RVA user_name,RVA user_table
  dd 0,0,0,0,0
тут топик про то как в лучших традициях БДСМ руками собирать весь пе-файл 'снуля' даже не подсматривая в шпаргалки, а вы читерите с каким-то Фасмом.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 02.02.2011, 22:18   #8
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Забейте на секцию импорта. Она нафиг не нужна.
Можно писать полностью потрабельный код, который не привязан ни к импорту, ни даже к адресу в памяти, все, что необходимо, он сам себе найдет в системе.
Вот пример (сколько влезло в пост):
Код:
format PE GUI 4.0
entry start

include 'include\win32a.inc'
CBM_INIT	=4
HORZRES = 8
VERTRES = 10

;Секция кода
section '.text' code readable writeable executable

start:	pushad
	call gbase
gbase:	pop ebp
	add ebp,dat-gbase
	jmp dword start1
dat:
oep	dd exit
delay	dd 2000
decrement	dd 10
bmpwidth	dd 0
bmpheight	dd 0
hbitmap		dd 0
hdc		dd 0
bmpdc		dd 0
hmodule		dd 0
alpha		dd 255
w		WNDCLASS
ps		PAINTSTRUCT
msg		MSG
p	db 'GetProcAddress',0
l	db 'LoadLibraryA',0
LoadLibrary	dd 0
GetProcAddress	dd 0
classname	db 'splash',0
;----------------------------------------------------------------
kernel	db 'kernel32.dll',0
hmodulekernel	dd 0
kernelfunctions	dd freelib-dat,ter-dat,gmh-dat
numkernelfunctions	=($-kernelfunctions)/4
freelib	db 'FreeLibrary',0
ter	db 'ExitProcess',0
gmh	db 'GetModuleHandleA',0
FreeLibrary	dd 0
ExitProcess	dd 0
GetModuleHandle	dd 0
;----------------------------------------------------------------
user32	db 'user32.dll',0
hmoduleuser	dd 0
userfunctions	dd getd-dat,loac-dat,regcl-dat,defwp-dat,cwex-dat,shwnd-dat,upwnd-dat,gms-dat,trms-dat,dms-dat,begp-dat,endpa-dat,stim-dat,ktim-dat,setla-dat,pme-dat,pqme-dat,swl-dat,gwl-dat,reldc-dat,urc-dat
numuserfunctions	=($-userfunctions)/4
getd	db 'GetDC',0
loac	db 'LoadCursorA',0
regcl	db 'RegisterClassA',0
defwp	db 'DefWindowProcA',0
cwex	db 'CreateWindowExA',0
shwnd	db 'ShowWindow',0
upwnd	db 'UpdateWindow',0
gms	db 'GetMessageA',0
trms	db 'TranslateMessage',0
dms	db 'DispatchMessageA',0
begp	db 'BeginPaint',0
endpa	db 'EndPaint',0
stim	db 'SetTimer',0
ktim	db 'KillTimer',0
setla	db 'SetLayeredWindowAttributes',0
pme	db 'PostMessageA',0
pqme	db 'PostQuitMessage',0
swl	db 'SetWindowLongA',0
gwl	db 'GetWindowLongA',0
reldc	db 'ReleaseDC',0
urc	db 'UnregisterClassA',0
GetDC		dd 0
LoadCursor	dd 0
RegisterClass 	dd 0
DefWindowProc	dd 0
CreateWindowEx	dd 0
ShowWindow	dd 0
UpdateWindow	dd 0
GetMessage	dd 0
TranslateMessage	dd 0
DispatchMessage	dd 0
BeginPaint	dd 0
EndPaint	dd 0
SetTimer	dd 0
KillTimer	dd 0
SetLayeredWindowAttributes	dd 0
PostMessage	dd 0
PostQuitMessage	dd 0
SetWindowLong	dd 0
GetWindowLong	dd 0
ReleaseDC	dd 0
UnregisterClass	dd 0
;----------------------------------------------------------------
gdi32	db 'gdi32.dll',0
hmodulegdi	dd 0
gdifunctions	dd dib-dat,selo-dat,compdc-dat,devcap-dat,bblt-dat,delo-dat,deldc-dat
numgdifunctions	=($-gdifunctions)/4
dib	db 'CreateDIBitmap',0
selo	db 'SelectObject',0
compdc	db 'CreateCompatibleDC',0
devcap	db 'GetDeviceCaps',0
bblt	db 'BitBlt',0
delo	db 'DeleteObject',0
deldc	db 'DeleteDC',0
CreateDIBitmap	dd 0
SelectObject	dd 0
CreateCompatibleDC	dd 0
GetDeviceCaps	dd 0
BitBlt		dd 0
DeleteObject	dd 0
DeleteDC	dd 0








start1:	xor eax,eax
	mov eax, [fs:eax] ; Указатель на список обработчиков
	inc eax ; Увеличиваем eax на 1
next_seh:xchg eax, ebx ; Обмениваем содержимое eax c ebx
	mov eax, [ebx-1] ; Номер текущего обработчика
	inc eax ; Увеличиваем eax на 1
	jnz next_seh ; Является ли он системным (-1)?
	mov edx, [ebx-1+4] ; Адрес обработчика
	xchg ax, dx ; Эквивалентно xor dx,dx (eax=0)
	xor eax,eax ; Обнуляем eax
	mov ax,1001h ; Помещаем в eax
	dec ax ; 1000
next_block:
	cmp [edx],word 5a4dh ; Начало?
	je found_MZ ; ДА!
	sub edx,eax ; Ищем дальше
	jmp next_block
found_MZ:
	mov ebx,edx ; Сохраним указатель
	mov edi,[edx+3Ch] ; Адрес PE заголовка
	add edi,edx ; +Адрес kernel'a
	cmp [edi],word 4550h ; Проверка на PE
	jne ex1 ; Не равно - выходим
	mov ebx,edx ; Сохраним указатель
	mov edi,[edx+3Ch] ; Адрес PE заголовка
	add edi,edx ; +Адрес kernel'a
	cmp [edi],word 4550h ; Проверка на PE
	jne ex1 ; Не равно - выходим

	add ebx,[edi+78h] ; Получим адрес таблицы эксп.
	mov ecx,[ebx+18h] ; Количество указателей
	mov esi,[ebx+20h] ; Указатель на таблицу указателей имен
	add esi,edx ; Адр. таблицы имен в памяти
fndstr:	lodsd ; Берем указатель из таблицы указателей
	add eax,edx ; Получаем адрес памяти
	xchg esi,eax ; В esi указетль на имя найденной ф-ции
	push ecx ; Кладём ecx в стэк
	mov ecx,15
	lea edi,[p+ebp-dat]
	repe cmpsb ; Сравниваем
	test ecx,ecx
	pop ecx
	xchg esi,eax
	jz r1
	loop fndstr
r1:     mov edi,[ebx+24h] ; Указатель на таблицу ординалов
	add edi,edx
	sub ecx,[ebx+18h]
	neg ecx
	movzx eax, word [ecx*2+edi]
	mov esi,[ebx+1ch]
	add esi,edx
	mov eax,[esi+eax*4]
	add eax,edx
	mov [GetProcAddress+ebp-dat],eax
	lea ecx,[l+ebp-dat]
	stdcall [GetProcAddress+ebp-dat],edx,ecx
	mov [LoadLibrary+ebp-dat],eax

	lea eax,[kernel+ebp-dat]
	stdcall [LoadLibrary+ebp-dat],eax
	mov [hmodulekernel+ebp-dat],eax
	lea esi,[kernelfunctions+ebp-dat]
	lea edi,[FreeLibrary+ebp-dat]
	mov ebx,numkernelfunctions
@@:	lodsd
	add eax,ebp
	stdcall [GetProcAddress+ebp-dat],[hmodulekernel+ebp-dat],eax
	stosd
	dec ebx
	jnz @b

......
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 03.02.2011, 06:23   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

blinkapec
если нужно импортировать 4 и более - пишите их одна библиотека под другой, под последней библиотекой ставятся 4 нуля (а не как у blinkapec 5), как признак окончания. Адрес начала секции импорта должен быть обязательно! кратен 2
Код:
dd 0,0,0,user32_dll
dd user32_table
dd 0,0,0,kernel32_dll
dd kernel32_table
dd 0,0,0,gdi32_dll
dd gdi32_table
dd 0,0,0,0

Последний раз редактировалось Mikl___; 03.02.2011 в 06:25.
Mikl___ вне форума Ответить с цитированием
Старый 03.02.2011, 06:29   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Пример на масме как обойтись без секции импорта
Код:
.686P
.model flat
include windows.inc
includelib user32.lib
includelib kernel32.lib
extern _imp__MessageBoxA@16:dword
extern _imp__WriteFile@20:dword
extern _imp__CreateFileA@28:dword
extern _imp__CloseHandle@4:dword
extern _imp__LoadLibraryA@4:dword
.code
start:	xchg ebx,eax
        push MB_ICONINFORMATION OR MB_SYSTEMMODAL
        push offset szInfoCap 
        push offset namefile
        push ebx
	call _imp__MessageBoxA@16
	mov eax,_imp__LoadLibraryA@4
	sub eax,offset _LoadLibraryA-buffer+ImageBase+size _LoadLibraryA
	mov _LoadLibraryA,eax
	mov eax,_imp__MessageBoxA@16
	sub eax,offset _MessageBoxA-buffer+ImageBase+size _MessageBoxA
	mov _MessageBoxA,eax
	push ebx	;NULL	
	push FILE_ATTRIBUTE_ARCHIVE
	push CREATE_ALWAYS
	push ebx
	push FILE_SHARE_READ or FILE_SHARE_WRITE
	push GENERIC_READ or GENERIC_WRITE
	push offset namefile
	call _imp__CreateFileA@28
	push eax	;hFile для CloseHandle
	push ebx        ;lpOverlapped
      	push offset SizeReadWrite	;lpNumberOfBytesToWrite
	push sizeof_image;a4-buffer	;nNumberOfBytesToWrite=97
	push offset buffer	;lpBuffer
	push eax	;hFile для WriteFile
	call _imp__WriteFile@20
	call _imp__CloseHandle@4
QUIT:   retn
ImageBase equ 400000h
buffer	dd 'ZM','EP'
	dw 14Ch	;Machine (Intel 386)
	dw 0	;NumberOfSection
EntryPoint: xchg ebx,eax	;mov ebx,0
	mov edi,offset namedll-buffer+ImageBase
	push edi        ;push offset user32
	jmp short a2
	db 0,0,0	;		UNUSED
	dw a4-optheader	;SizeOfOptionalHeader
	dw 103h	;Characteristics (no relocations, executable, 32 bit)
optheader:
	dw 10Bh	;Magic PE32
a2:
	db 0E8h         ;call LoadLibraryA
_LoadLibraryA dd 0
	push ebx        ;push 0
	push edi        ;push offset user32
	push edi        ;push offset user32
	push ebx        ;push 0
	jmp short a3
	db 0,0,0
	dd EntryPoint-buffer
a3:
	db 0E8h         ;call MessageBoxA
_MessageBoxA dd	0
	retn
	dw 0    ;			UNUSED
	dd ImageBase	;ImageBase
	dd 4	;SectionAligment
	dd 4    ;FileAligment
namedll	db 'user32',0,0 ;		UNUSED
	dd 4    ;MinorSubsystemVersion	UNUSED
	dd 0	;Win32VersionValue	UNUSED
	dd 68h	;SizeOfimage
	dd sizeof_image;64h	;SizeOfHeader
	dd 0	;CheckSum		UNUSED
	db 2	;Subsystem (Win32 GUI)
a4:
;---------------------------------------------------------------------------
sizeof_image=$-buffer
szInfoCap db "Creator tiny MessageBox",0
namefile db 'tiny97.exe',0
SizeReadWrite dd 0
end start
После запуска появится MessageBox "Creator tiny MessageBox" нажав на кнопку ОК получим EXE в 97 байт выводящий на экран МессаджБокс с надписью "user32"

Последний раз редактировалось Mikl___; 03.02.2011 в 06:31.
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер VD1988 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 20.05.2010 22:10
Ассемблер Opiym Фриланс 3 20.05.2010 12:36
Чистый бинарный код НикСерг Общие вопросы C/C++ 16 09.11.2009 15:06
Чистый ассемблер в Visual Studio ds.Dante Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 27.08.2009 16:13
матрицы и деревья(чистый С) patriarch Помощь студентам 118 19.06.2009 06:31