![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 26.02.2008
Сообщений: 8
|
![]()
Здравствуйте! Сразу прошу прощения если не туда пишу.
Вот пытаюсь сделать базонезависимую программу для внедрения (курсовой у меня такой), но чет невыходит ![]() Код HTML:
.386 .model flat,stdcall option casemap : none include \TEST\MASM32\include\windows.inc MIN_KERNEL_SEARCH_BASE equ 070000000h MAX_API_STRING_LENGTH equ 150 .code main: pushad call Delta Delta: pop ebp sub ebp, offset Delta push dword ptr [esp + 20h] call GetKernelBase or eax, eax mov [ebp + dwKernelBase], eax lea eax, [ebp + offset szLoadLibrary] push eax push [ebp + dwKernelBase] call GetProcAddr mov [ebp + _LoadLibrary], eax lea eax, [ebp + offset szGetProcAddress] push eax push [ebp + dwKernelBase] call GetProcAddr mov [ebp + _GetProcAddress], eax lea eax, [ebp + offset szKernel32] push eax call [ebp + _LoadLibrary] mov [ebp + dwKernelBase], eax lea eax, [ebp + offset szCF] ;CreateFileA push eax push [ebp + dwKernelBase] call GetProcAddr mov [ebp + _CF], eax lea eax, [ebp + offset szEP] ;ExitProcess push eax push [ebp + dwKernelBase] call GetProcAddr mov [ebp + _EP], eax lea eax, [ebp + offset szRF] ;ReadFile push eax push [ebp + dwKernelBase] call GetProcAddr mov [ebp + _RF], eax lea eax, [ebp + offset szUser32] push eax call [ebp + _LoadLibrary] mov [ebp + dwUserBase], eax lea eax, [ebp + offset szMB] ;MessageBoxA push eax push [ebp + dwUserBase] call GetProcAddr mov [ebp + _MB], eax push NULL push FILE_ATTRIBUTE_NORMAL push OPEN_ALWAYS push NULL push FILE_SHARE_READ OR FILE_SHARE_WRITE push GENERIC_READ lea eax, [ebp + offset FileN] push eax mov eax, [ebp + _CF] call eax mov dFile, edx push NULL lea eax, [ebp + offset num] push eax lea eax, [ebp + 512] push eax lea eax, [ebp + offset buf] push eax lea eax, [ebp + dFile] push eax mov eax, [ebp + _RF] call eax mov edx, dword ptr buf+43h .IF edx == SN push MB_OK lea eax, [ebp + offset _ttl2] push eax lea eax, [ebp + offset _msg2] push eax push NULL mov eax, [ebp + _MB] call eax .ELSE push MB_OK lea eax, [ebp + offset _ttl2] push eax lea eax, [ebp + offset _msg2] push eax push NULL mov eax, [ebp + _MB] call eax .ENDIF push NULL mov eax, [ebp + _EP] call eax GetKernelBase PROC USES edi esi, dwTopStack : dword mov edi, dwTopStack and edi, 0FFFF0000h .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 ret GetKernelBase ENDP GetProcAddr PROC USES esi edi ecx ebx edx, dwDllBase : dword, szApi : LPSTR 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 mov edi, szApi mov ecx, MAX_API_STRING_LENGTH xor al, al repnz SCASB mov ecx, edi sub ecx, szApi mov edx, [esi + 078h] add edx, dwDllBase assume edx : ptr IMAGE_EXPORT_DIRECTORY mov ebx, [edx].AddressOfNames add ebx, dwDllBase xor eax, eax .REPEAT mov edi, [ebx] add edi, dwDllBase mov esi, szApi push ecx repz CMPSB .IF ZERO? .BREAK .ENDIF pop ecx add ebx, 4 inc eax .UNTIL eax == [edx].NumberOfNames mov esi, [edx].AddressOfNameOrdinals add esi, dwDllBase push edx mov ebx, 2 xor edx, edx mul ebx add eax, esi xor ecx, ecx mov word ptr cx, [eax] pop edx 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: ret GetProcAddr ENDP Constants: dFile dd 0 num dd 0 FileN db '\\.\i:', 0 SN dd 0F82FFCFCh buf db 1024 dup (0) _ttl db "Ключ верный!", 0 _msg db "Для продолжения нажмите ''ОК''", 0 _ttl2 db "Неверный ключ!", 0 _msg2 db "Для завершения нажмите ''ОК''", 0 dwKernelBase dd 0 dwUserBase dd 0 szLoadLibrary db "LoadLibraryA", 0 szGetProcAddress db "GetProcAddress", 0 szUser32 db "user32", 0 szKernel32 db "kernel32", 0 _LoadLibrary dd 0 _GetProcAddress dd 0 szMB db "MessageBoxA", 0 szCF db "CreatFileA", 0 szRF db "ReadFile", 0 szEP db "ExitProcess", 0 _MB dd 0 _CF dd 0 _RF dd 0 _EP dd 0 end main |
![]() |
![]() |
![]() |
#2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
под отладчиком запускал? на каком месте ошибка?
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 26.02.2008
Сообщений: 8
|
![]()
Да запускал через OllyDbg.
Код:
Последний раз редактировалось rpy3uH; 24.03.2009 в 08:12. |
![]() |
![]() |
![]() |
#4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
А адрес функции правильный? переход на функцию производится? вообще адрес правильный?
Последний раз редактировалось rpy3uH; 24.03.2009 в 08:41. |
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
![]()
Я конечно мож не в тему, но разве загрузчик винды не предоставляет программе "заглушки", в которых указывается по каким адресам находятся функции? Это помоему называется таблицей IT. Ты получается загрузчик пишешь?
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
он пишет базонезависимый код, т.е. его можно будет загрузать по любому адресу и он будет работать.
P.S. но больше это смахивает на шаблон вируса заражающего exe файлы.. |
![]() |
![]() |
![]() |
#7 |
Регистрация: 26.02.2008
Сообщений: 8
|
![]()
Ой ненаю, я сам то асмом не занимаюсь и не собирался. Просто так получилось что поступил в Унимвер (ну никак не ожидал что он там будет) и доучясь до 4 ого курса получил вот такой курсачь делать. Ну и начал изучать.
В написании пользовался статьями и примерами с сайта www.wasm.ru и vx.org.ua/tpoc/articles.htm Но чет ваще не выходит ![]() Ну скажем что ето не шаблон вируса, но использую их технологии. Для большего понятия опишу что мне надо сделать. Надо внедрить в ехе файл программу которая будет определять номер флешки и при получении положительного ответа передаст управление основной программе. Программу внедрения у меня есть, а вот с программой проверки косяк. Если хотите могу выложить код етой программы (которая проверяет) без дельты, чтобы небыло мнения что я тута вирус пытаюсь навоять. Последний раз редактировалось un07; 24.03.2009 в 09:32. |
![]() |
![]() |
![]() |
#8 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
![]()
А не проще ли так: Сделай стартер, который будет определять флешку, и запускать твою программу. Зачем внедрять свой код который аверами скорее всего запалится?
I'm learning to live...
|
![]() |
![]() |
![]() |
#9 |
Регистрация: 26.02.2008
Сообщений: 8
|
![]()
Проще но, дело в том что задание звучит так что прога проверки флехи должна быть встроена в ехе файл путем расширения последней секции и не иначе
![]() ![]() |
![]() |
![]() |
![]() |
#10 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
un07, посмотри пост #4 в этой теме
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с рамами/Проблема с ЖД | DRAGGER | Компьютерное железо | 6 | 04.01.2009 23:37 |