HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 08.08.2008, 15:08
Ryu
Новичок
Регистрация: 13.06.2008
Сообщений: 24
С нами: 9426701

Репутация: 4
По умолчанию

Это не метод криса. Это стандартный метод применяемый в вирусах. Только с той разницей что в вирусах не используется плейн название ф-ций а их хеш 32. Полиномы не стоит пробовать для хеширования новые подбирать - все нормальные уже посчтитали. Почитай статьи билли из 29а, на васме есть в вирмейкинге.
 
Ответить с цитированием

  #2  
Старый 08.08.2008, 20:01
0verbreaK
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
С нами: 9489537

Репутация: 136
По умолчанию

w_2k на сайте калашникова в какомто уроке есть перехват прерывания

Последний раз редактировалось 0verbreaK; 08.08.2008 в 20:17..
 
Ответить с цитированием

  #3  
Старый 08.08.2008, 20:24
w_2k
Новичок
Регистрация: 23.07.2008
Сообщений: 28
С нами: 9369687

Репутация: 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..
 
Ответить с цитированием

  #4  
Старый 08.08.2008, 22:21
0verbreaK
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
С нами: 9489537

Репутация: 136
По умолчанию

w_2k Справочник Ральфа Брауна + Оля в руки и исследуй )
 
Ответить с цитированием

  #5  
Старый 12.08.2008, 23:30
Juda
Познающий
Регистрация: 02.08.2008
Сообщений: 55
С нами: 9354619

Репутация: 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..
 
Ответить с цитированием

  #6  
Старый 18.08.2008, 20:58
0verbreaK
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
С нами: 9489537

Репутация: 136
По умолчанию

Juda

1) не храни строки в открытом виде
2) можно использовать адреса API
3) контрольные суммы функций
4) измени инструкции на подобные
5) морфи код
 
Ответить с цитированием

  #7  
Старый 23.08.2008, 13:10
0verbreaK
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
С нами: 9489537

Репутация: 136
По умолчанию

Также есть вариант (может уже был озвучен, но приведу все равно) получение базы кернела (kernel32.dll) через адрес возврата, после загрузки программы в отладчик
на верхушке стека лежита адрес возврата на kernel32.dll

Следующая картина:

Код:
0012FFC4   77E7EB69  RETURN to kernel32.77E7EB69
0012FFC8   00000007
0012FFCC   00566ED0
0012FFD0   7FFDF000
0012FFD4   F4262CF4
0012FFD8   0012FFC8
0012FFDC   80536A0E
0012FFE0   FFFFFFFF  End of SEH chain
0012FFE4   77E9BB86  SE handler
Используем следующий код для получения базы

Код:
start:
    	pop	ebp	;Return to kernel32.dll
                                    ; (ошибка) адрес внутри кернела
Используя таблицу экспорта можно искать API функции по ординалу, просмотри в иде
таблицу экспорта, в ней можно получить адреса API функций и их ординалы, достаточно дизассемблировать kernel32.dll

Последний раз редактировалось 0verbreaK; 23.08.2008 в 16:28..
 
Ответить с цитированием

  #8  
Старый 23.08.2008, 13:45
FrMn
Познающий
Регистрация: 08.08.2008
Сообщений: 55
С нами: 9346084

Репутация: 54
По умолчанию

Цитата:
после загрузки программы в отладчик на верхушке стека лежита адрес возврата на kernel32.dll
не обязательно в отладчик
Цитата:
; т.е. мы извлекаем базу кернела
не базу, а какойто адрес внутри kernel32.dll
Цитата:
можно искать API функции по ординалу
ненадежно, ординал может отличатся в зависимости от весии библиотеки, лучше по хешу от имени
 
Ответить с цитированием

  #9  
Старый 26.08.2008, 23:41
w_2k
Новичок
Регистрация: 23.07.2008
Сообщений: 28
С нами: 9369687

Репутация: 1
По умолчанию

Народ, кто нить подскажите плиз простейший генератор чисел в 16 битах? Пытался использовать миллисекунды, но функция 2c прерывания 21 ничего не возвращает
 
Ответить с цитированием

  #10  
Старый 26.08.2008, 23:53
z01b
Постоянный
Регистрация: 05.01.2007
Сообщений: 508
С нами: 10182506

Репутация: 1393


По умолчанию

Цитата:
Сообщение от w_2k  
Народ, кто нить подскажите плиз простейший генератор чисел в 16 битах? Пытался использовать миллисекунды, но функция 2c прерывания 21 ничего не возвращает
тебе нужен код генерации псевдо-случайных чисел для дос?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы для новичков! (faq) PEPSICOLA С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 92 14.05.2010 17:59
ОС с нуля z01b С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 36 03.07.2008 15:30



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.