Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

08.08.2008, 01:43
|
|
Banned
Регистрация: 13.09.2006
Сообщений: 523
Провел на форуме: 2869410
Репутация:
925
|
|
Сообщение от Juda
как скрыть вызов АПИ ф-и?
пробовал использовать метод Криса(masm32):
------------------------------------------
пример вызова MessageBox
.data
lib db "user32.dll",0
f db "MessageBoxA",0
.code
invoke LoadLibrary, addr lib
invoke GetProcAddress, eax, addr funk
push MB_OK
push NULL
push NULL
push NULL
push 0E0FFh (опкод jmp eax)
jmp esp
---------------------------------------------
вроде работает, но если после jmp esp идет ret валится на стадии выполнения.
в чем бок?
и какие еще есть способы скрытого вызова АПИ?
Естественно будет падать,так как ты должен занести в стек адрес возврата перед вызовом после чего,после вызова апи сделать ret либо retn в зависимости от апишки,да и на новых процах запрещенно аппаратно исполнение в стеке(могу ошибаться).
Последний раз редактировалось zl0y; 08.08.2008 в 01:46..
|
|
|

08.08.2008, 10:29
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
zl0y об int 2eh
http://z0mbie.daemonlab.org/ntoskrnl.html
Можно использовать адреса API функций:
Код:
mov eax, address_of_API
push argument1
push argument2
....
push argumentn
call eax
|
|
|

08.08.2008, 11:02
|
|
Новичок
Регистрация: 23.07.2008
Сообщений: 28
Провел на форуме: 104504
Репутация:
1
|
|
0verbreak, у тебя случаем инфы по перехвату досовский прерываний нет?)
|
|
|

08.08.2008, 11:41
|
|
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме: 7134052
Репутация:
1204
|
|
0verbreak, у тебя случаем инфы по перехвату досовский прерываний нет?)
если мне не изменяет память, инфа с примерами есть в книге Абашева "ассемблер в задачах защиты информации". как дома буду - гляну точно, у меня бумажный вариант..
|
|
|

08.08.2008, 15:08
|
|
Новичок
Регистрация: 13.06.2008
Сообщений: 24
Провел на форуме: 28814
Репутация:
4
|
|
Это не метод криса. Это стандартный метод применяемый в вирусах. Только с той разницей что в вирусах не используется плейн название ф-ций а их хеш 32. Полиномы не стоит пробовать для хеширования новые подбирать - все нормальные уже посчтитали. Почитай статьи билли из 29а, на васме есть в вирмейкинге.
|
|
|

08.08.2008, 20:01
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
w_2k на сайте калашникова в какомто уроке есть перехват прерывания
Последний раз редактировалось 0verbreaK; 08.08.2008 в 20:17..
|
|
|

08.08.2008, 20:24
|
|
Новичок
Регистрация: 23.07.2008
Сообщений: 28
Провел на форуме: 104504
Репутация:
1
|
|
О! Нашёл:-) Ток не совсем всё понял)
Код:
Init:
mov ah,35h
mov al,21h
int 21h
mov word ptr Int_21h_vect,bx
mov word ptr Int_21h_vect+2,es
mov ax,2521h
mov dx,offset Int_21h_proc
int 21h
mov dx,offset Init
int 27h
Это тоже в памяти будет?
з.ы. Не совсем понял с подменой регистров в основной процедуре,ведь адрес прерывания в переменной, а там регистры в стек/из стека
Последний раз редактировалось w_2k; 08.08.2008 в 20:26..
|
|
|

08.08.2008, 22:21
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
w_2k Справочник Ральфа Брауна + Оля в руки и исследуй )
|
|
|

12.08.2008, 23:30
|
|
Познающий
Регистрация: 02.08.2008
Сообщений: 55
Провел на форуме: 363117
Репутация:
30
|
|
Пробовал все что советовали по скрытию апи, всеравно палится антивирями. Вот только руки не дошли до 29а.
Еще есть способ выташить апи через SEH:
----------------------------------
Код:
.386
.model flat,stdcall
option casemap:none
INCLUDE \masm32\include\windows.inc
INCLUDE \masm32\include\comdlg32.inc
INCLUDELIB \masm32\lib\comdlg32.lib
; ------ STRUCTS ------
sSEH STRUCT
OrgEsp DD ?
OrgEbp DD ?
SaveEip DD ?
sSEH ENDS
; ------ EQU'S ------
MIN_KERNEL_SEARCH_BASE EQU 070000000h
MAX_API_STRING_LENGTH EQU 150
; ------ CONST ------
.CONST
szLoadLibrary DB "LoadLibraryA",0
szGetProcAddress DB "GetProcAddress",0
szExitProcess DB "ExitProcess",0
szUser32 DB "user32",0
szMessageBox DB "MessageBoxA",0
szwsprintf DB "wsprintfA",0
szInfoCap DB "- Kernel -",0
szInfoText DB "The following information were obtained",13,10
DB "without the help of an Import Table !",13,10
DB 13,10
DB "Kernel32.dll ImageBase: 0x%08lX",13,10
DB "User32.dll ImageBase: 0x%08lX",13,10
DB 13,10
DB "API Addresses:",13,10
DB "LoadLibraryA: 0x%08lX",13,10
DB "GetProcAddress: 0x%08lX",13,10
DB "ExitProcess: 0x%08lX",13,10
DB 13,10
DB "MessageBoxA: 0x%08lX",13,10
DB "wsprintfA: 0x%08lX",0
; ------ DATA ------
.DATA
_LoadLibrary DD 0
_GetProcAddress DD 0
_ExitProcess DD 0
_MessageBox DD 0
_wsprintf DD 0
cBuff DB 200 DUP (0)
SEH sSEH <0>
dwKernelBase DD 0
dwUserBase DD 0
; ------ CODE ------
.CODE
main:
ASSUME FS : NOTHING
;INT 3
;---- GET ImageBase of kernel32.dll ----
PUSH [ESP]
CALL GetKernelBase
OR EAX, EAX
JZ QUIT
MOV dwKernelBase, EAX
;---- GET SOME KERNEL API ADDRESSES ----
;-> LoadLibraryA
PUSH OFFSET szLoadLibrary
PUSH dwKernelBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _LoadLibrary, EAX
;-> GetProcAddress
PUSH OFFSET szGetProcAddress
PUSH dwKernelBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _GetProcAddress, EAX
;-> ExitProcess
PUSH OFFSET szExitProcess
PUSH dwKernelBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _ExitProcess, EAX
;---- LOAD USER32.DLL ----
PUSH OFFSET szUser32
CALL _LoadLibrary
OR EAX, EAX
JZ QUIT
MOV dwUserBase, EAX
;---- GET SOME USER API ADDRESSES ----
;-> MessageBoxA
PUSH OFFSET szMessageBox
PUSH dwUserBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _MessageBox, EAX
;-> wsprintfA
PUSH OFFSET szwsprintf
PUSH dwUserBase
CALL GetProcAddr
OR EAX, EAX
JZ QUIT
MOV _wsprintf, EAX
;---- BUILD AND SHOW THE INFORMATION MSG ----
PUSH _wsprintf
PUSH _MessageBox
PUSH _ExitProcess
PUSH _GetProcAddress
PUSH _LoadLibrary
PUSH dwUserBase
PUSH dwKernelBase
PUSH OFFSET szInfoText
PUSH OFFSET cBuff
CALL _wsprintf
ADD ESP, (9 * SIZEOF(DWORD))
PUSH MB_ICONINFORMATION OR MB_SYSTEMMODAL
PUSH OFFSET szInfoCap
PUSH OFFSET cBuff
PUSH 0
CALL _MessageBox
;---- EXIT ----
CALL _ExitProcess ;)
QUIT:
RET ; exit to OS
;---- AN UNUSED IMPORT ----
; The Win32 Loader of Win2k (maybe also of WinNT) won't call the EntryPoint of files which don't
; have an Import Table :(
; So here's an unused Import to make MASM compile an Import Table.
PUSH NULL
CALL GetOpenFileName
; ------ ROUTINES ------
; returns NULL in the case of an error
GetKernelBase PROC USES EDI ESI, dwTopStack : DWORD
; install SEH frame
PUSH OFFSET SehHandler
PUSH FS:[0]
MOV SEH.OrgEsp, ESP
MOV SEH.OrgEbp, EBP
MOV SEH.SaveEip, OFFSET ExceptCont
MOV FS:[0], ESP
; start the search
MOV EDI, dwTopStack
AND EDI, 0FFFF0000h ; wipe the LOWORD !
.WHILE TRUE
.IF WORD PTR [EDI] == IMAGE_DOS_SIGNATURE
MOV ESI, EDI
ADD ESI, [ESI+03Ch]
.IF DWORD PTR [ESI] == IMAGE_NT_SIGNATURE
.BREAK
.ENDIF
.ENDIF
ExceptCont:
SUB EDI, 010000h
.IF EDI < MIN_KERNEL_SEARCH_BASE
MOV EDI, 0BFF70000h
.BREAK
.ENDIF
.ENDW
XCHG EAX, EDI
; shutdown SEH frame
POP FS:[0]
ADD ESP, 4
RET
GetKernelBase ENDP
; returns address or NULL in the case of an error
GetProcAddr PROC USES ESI EDI ECX EBX EDX, dwDllBase : DWORD, szApi : LPSTR
; install SEH frame
PUSH OFFSET SehHandler
PUSH FS:[0]
MOV SEH.OrgEsp, ESP
MOV SEH.OrgEbp, EBP
MOV SEH.SaveEip, OFFSET @@BadExit
MOV FS:[0], ESP
; check PE Signarue
MOV ESI, dwDllBase
CMP WORD PTR [ESI], IMAGE_DOS_SIGNATURE
JNZ @@BadExit
ADD ESI, [ESI+03Ch]
CMP DWORD PTR [ESI], IMAGE_NT_SIGNATURE
JNZ @@BadExit
; get the string length of the target Api
MOV EDI, szApi
MOV ECX, MAX_API_STRING_LENGTH
XOR AL, AL
REPNZ SCASB
MOV ECX, EDI
SUB ECX, szApi ; ECX -> Api string length
; trace the export table
MOV EDX, [ESI+078h] ; EDX -> Export table
ADD EDX, dwDllBase
ASSUME EDX : PTR IMAGE_EXPORT_DIRECTORY
MOV EBX, [EDX].AddressOfNames ; EBX -> AddressOfNames array pointer
ADD EBX, dwDllBase
XOR EAX, EAX ; EAX AddressOfNames Index
.REPEAT
MOV EDI, [EBX]
ADD EDI, dwDllBase
MOV ESI, szApi
PUSH ECX ; save the api string length
REPZ CMPSB
.IF ZERO?
ADD ESP, 4
.BREAK
.ENDIF
POP ECX
ADD EBX, 4
INC EAX
.UNTIL EAX == [EDX].NumberOfNames
; did we found sth ?
.IF EAX == [EDX].NumberOfNames
JMP @@BadExit
.ENDIF
; find the corresponding Ordinal
MOV ESI, [EDX].AddressOfNameOrdinals
ADD ESI, dwDllBase
PUSH EDX ; save the export table pointer
MOV EBX, 2
XOR EDX, EDX
MUL EBX
POP EDX
ADD EAX, ESI
XOR ECX, ECX
MOV WORD PTR CX, [EAX] ; ECX -> Api Ordinal
; get the address of the api
MOV EDI, [EDX].AddressOfFunctions
XOR EDX, EDX
MOV EBX, 4
MOV EAX, ECX
MUL EBX
ADD EAX, dwDllBase
ADD EAX, EDI
MOV EAX, [EAX]
ADD EAX, dwDllBase
JMP @@ExitProc
ASSUME EDX : NOTHING
@@BadExit:
XOR EAX, EAX
@@ExitProc:
; shutdown SEH frame
POP FS:[0]
ADD ESP, 4
RET
GetProcAddr ENDP
SehHandler PROC C pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD
MOV EAX, pContext
ASSUME EAX : PTR CONTEXT
PUSH SEH.SaveEip
POP [EAX].regEip
PUSH SEH.OrgEsp
POP [EAX].regEsp
PUSH SEH.OrgEbp
POP [EAX].regEbp
MOV EAX, ExceptionContinueExecution
RET
SehHandler ENDP
end main
--------------------------
вот только как бы я его не изменял, не упаковывал, не шифровал все равно палится анти вирями. Шифровал XORом. Что посоветуете?
Последний раз редактировалось Juda; 12.08.2008 в 23:42..
|
|
|

18.08.2008, 20:58
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Juda
1) не храни строки в открытом виде
2) можно использовать адреса API
3) контрольные суммы функций
4) измени инструкции на подобные
5) морфи код
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|