Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Вопрос для тех кто считает себя хакером. Добавлено: 15.09.05 16:50  

Автор вопроса:  костик

Ответить

  Ответы Всего ответов: 48  

Номер ответа: 16
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #16 Добавлено: 16.09.05 21:41
от ненаю, но мне чё-то кажеться из вб это не осуществимо... все подобные вещи писались на асме, ну может на Си... но опять же вставлялся асм.

Ответить

Номер ответа: 17
Автор ответа:
 Barsik



Разработчик Offline Client

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #17
Добавлено: 16.09.05 22:36
нда. геморная задача, юзай Joiner

Ответить

Номер ответа: 18
Автор ответа:
 nicolai



ICQ: 197368786 

Вопросов: 6
Ответов: 91
 Профиль | | #18 Добавлено: 17.09.05 06:48
где то в нете есть пример как спарить 2 экзешника но он не доработан (можно взять за основу)
кароче ищи в нете

Ответить

Номер ответа: 19
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #19
Добавлено: 17.09.05 06:58
 Всё таки секцию можно вставить. Там у VB-шного экзешника подгулявшее устройство оказалось. Сразу за последней таблицей секции идёт ссылка на MSVBVM60.DLL и если её сдвинуть на одну позицию вниз (конечно если выравнивание позволяет, а это в 99.99% случаев так), то можно на её место скопировать новую таблицу секции. С таблицами хорошо получилось, а вот сами секции я пока не пробовал.

Ответить

Номер ответа: 20
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #20
Добавлено: 18.09.05 15:22
Сколько нудно байт для своего кода? В конце секции кода практически в любой программе имеется от нескольких десятков до нескольких сотен свободных байт...

00457BC0 00 DB 00
00457BC1 00 DB 00
00457BC2 00 DB 00
00457BC3 00 DB 00
00457BC4 00 DB 00

Вот туда можешь втыкнуть свой код! Только втыкать надо шестнадцатиричный дамп кода, как его получить? Написать программу, которая будет делать, то что нужно втыкнуть в ехе, скомпилить её, потом дизасмить и скопировать оттуда коды команд.
Дальше на точке входа пишешь jmp 00457BC0, а на месте 00457BC0(следующий код вызовет MessageBox):

00457BC0 6A 00 PUSH 0
00457BC1 50 PUSH EAX
00457BC2 50 PUSH EAX
00457BC3 6A 00 PUSH 0
00457BC4 E8 03360000 CALL <&user32.MessageBoxA>

Т.е. тебе надо записать вместо нулей: 6A 00 50 50 6A 00 E8 03 36 00 00

Ну есесно адрес вызова этой апи будет у тебя другим... короче принцип я думаю понятен :)

А вообще, на wasm.ru, есть отличная статья посвящнная этой теме, даже помойму не одна статья!

Ну и возврат на точку входа сделать не забудь.

Ответить

Номер ответа: 21
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #21 Добавлено: 18.09.05 21:30
и как же средствами ВБ дезасмить прогу чтобы искать точки входа, изменять их итп... ???

Ответить

Номер ответа: 22
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #22
Добавлено: 19.09.05 04:14
Для того чтобы узнать точку входа ничего дизассемблировать не нужно. Она находится в PE-заголовке и определяет смещение относительно Image Base.

Ответить

Номер ответа: 23
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #23
Добавлено: 19.09.05 15:19
IMAGE_NT_HEADERS.IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint


Это RVA, получаешь из него внутривайловый offset, по формуле:

offset = RVA - IMAGE_SECTION_HEADER.VirtualAddress + IMAGE_SECTION_HEADER.PointerToRawData


Потом получаешь размер секции кода:

IMAGE_NT_HEADERS.IMAGE_OPTIONAL_HEADER.SizeOfCode


Потом начало секции кода:

IMAGE_NT_HEADERS.IMAGE_OPTIONAL_HEADER.BaseOfCode


Переводишь в offset.
И пошёл работать уже с самим файлом!!!!

Ответить

Номер ответа: 24
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #24 Добавлено: 19.09.05 18:39
хм... ну незнаю, вообще интерестная тема, как время будет обязательно что-то почитаю и попробую что-то реализовать.

Ответить

Номер ответа: 25
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #25
Добавлено: 20.09.05 04:47
скомпилить её, потом дизасмить и скопировать оттуда коды команд.

А если в целовой нет <&user32.MessageBoxA> или адрес другой? Тот адрес, который тебе показывает дизассемблер, расчитывается загрузчиком автоматически (если по ординалу), в противном случае должна быть указана версия/подверсия операционки.

Ответить

Номер ответа: 26
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #26
Добавлено: 20.09.05 05:36
Про ординал я прогнал, он тут не причём. Загрузчиком расчитываются адреса тех импортируемых функций, которые имеют нулевое значение.

Ответить

Номер ответа: 27
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #27
Добавлено: 21.09.05 13:37
А если в целовой нет <&user32.MessageBoxA> или адрес другой?


Ну я же пример просто показал, я не знаю ведь, что должен делать код...
Получаем указатель на директорию импорта:
IMAGE_NT_HEADERS.IMAGE_OPTIONAL_HEADER.DataDirectory(1)
Парсим её и ищем вызов этой функции... Если нашли читаем адрес и записываем его в наш дамп. Если же такой функции нет, то придётся править таблицу импорта, только в таком случае придётся править и таблицу секций и параметры самой директории импорта изменять, ГЕМОР... Короче это уже полиморфный движок получается... поэтому связываться я бы не советовал :)

Ответить

Номер ответа: 28
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #28
Добавлено: 22.09.05 05:47
Парсим её и ищем вызов этой функции... Если нашли читаем адрес и записываем его в наш дамп.

 Ну эт кому как. По моему достаточно адресов LoadRibrary и GetProcAddress. Имея эти два адреса можно пользоваться любой Win32 API.

это уже полиморфный движок получается

 Вряд ли это можно назвать полиморфным движком. Полиморфный - это скорее тот, который не даёт обнаружить последовательность кодов (типа сигнатуры) вируса.

Ответить

Номер ответа: 29
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #29
Добавлено: 22.09.05 14:35
да вообще ниче не надо :) Эти две функции вполне мона вытащить из kernel32 вручную :) доказательством этого служит существование примеров от yoda кажись :)

Ответить

Номер ответа: 30
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #30
Добавлено: 22.09.05 16:40
Ну хорошо, вытащили из кернела, это действительно не проблема, IDA пока ещё никто не отменял :) А что дальше? Если я не ошибаюсь kernel32.dll user32.dll и подобные, все они вызывают native функции... ты хочешь ещё и native декомпилить? :) ИМХО проще уж табличку импорта подправить...

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам