Вопрос № 40761: Здравствуйте уважаемые эксперты.
У меня возникла проблема. Сразу хочу сказать что ни вирусов ни троянов(в данный момент ;)) я не пишу.
так вот в чём проблемма.
Есть к примеру у меня процедура
################################
NaN P...Вопрос № 40779: добрай вечер, у меня возникла трудность в описании алгоритма перевода чисел в символы, на приведеные мною варианты ответили что не верно, немогли бы вы мне обьяснить алгоритм, заранее очень признательна....
Вопрос № 40.761
Здравствуйте уважаемые эксперты.
У меня возникла проблема. Сразу хочу сказать что ни вирусов ни троянов(в данный момент ;)) я не пишу.
так вот в чём проблемма.
Есть к примеру у меня процедура
################################
NaN PROC
; Здесь какой-то код.
; После компиляции я открою HIEW и найдя этот код зашифрую его
; байты по 66h.
; Найти код не составит труда так как до процедуры и после
; я напишу DB 'ABCABC', хотя текст ФИСФИС можно заменить и на ;другой
NaN ENDP
################################
Так вот. Как мне в коде программы до вызова NaN через
################################
call NaN
################################
расшифровать процедуру?
Я пробовал делать следующее.
Читал байты из этого пространства и делал им xor по 66h
Но когда пытался писать назад в память с помощью mov
то управление переходило к ntdll вроде... Ну вообщем винда подала признак того что типа нельзя писать туда... Так вот... Прочитал... Типа надо писать
перед записью вызов процедуры VirtualProtect так чтоб этот сегмент становился как для чтения так и для записи, а после записи выполнять функцию так чтоб делалось опять только для чтения.
Сделал я так... Но программа опять вылетает при записи данных назад.
Потом читаю дальше.. Оказываеться на этапе линка надо его выполнять со спец командами чтоб он делал так чтоб мона было писать в область программы с кодом... Слинковал так.. ВСё заработало.. Ошибок нету... НО!!! При считывании байтов из этого пространства они всегда равны 0!(При этом до такой линковки они считывались нормально)
Помогите пожалуйста. Что сделать мона... Если можно то дайте пожалуйста полный листнг программы которая это делает. Заранее благодарен.
Отправлен: 19.04.2006, 18:34
Вопрос задал: k0r@l (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: mix_mix
Здравствуйте, k0r@l!
Вся причина заключается в том, что секцию кода нельзя писать, поэтому код необходимо распологать в секции данных (ну и соотв. линковать с опцией /SECTION:.data,EWR). Естественно первым делом нужно будет найти дельта-смещение кода:
.data
start:
call delta
delta:
pop ebp
sub ebp, offset delta
...
Ну и все переменные придется использовать подобным образом (только так):
mix dd 12345h
НЕПРАВИЛЬНО mov eax, mix
ПРАВИЛЬНО mov eax, dword ptr[ebp+mix]
Ответ отправил: mix_mix (статус: 2-ой класс)
Ответ отправлен: 19.04.2006, 20:57
Вопрос № 40.779
добрай вечер, у меня возникла трудность в описании алгоритма перевода чисел в символы, на приведеные мною варианты ответили что не верно, немогли бы вы мне обьяснить алгоритм, заранее очень признательна.
Приложение:
Отправлен: 19.04.2006, 21:54
Вопрос задала: Виктория (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Пан Павел Константинович
Здравствуйте, Виктория!
> добрай вечер, у меня возникла трудность в описании алгоритма.
>> Я понел ваш вопрос двояко вам надо описать или написать алгоритм.
Допустим вам надо описать алгоритм перевода чисел в символы тогда попробуйте так:
1. Мы имеем число 5, это число кодируется в двоичном представлении как 0000 0101.
2. Мы имеем так назыв. таблицу символов типа ASCII, в которой символ N кодируется тоже битовой последовательностью 0000 0101, а тоже самое число 5 кодируется последовательностью YYYY YYYY, где Y = 1 или 0.
3. Следовательно функция вывода на экран символа которая "завязана" с кодовой табл. ASCII будет отожевствлять число с сиволом. Так как символ предсталяется 1-м байтом, то максимум число которое будет отожевствляться это 255 (0-255), и того 256 сиволов.
Пример:
CSEG segment
assume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEG
org 100h
Begin:
mov al,3 ;3 - число или номер сивола в ASCII табл. т.е. символ !сердечко!
int 29h ;вывод символа
ret ;Exit
CSEG ends
end Begin
Продолжим....
Теперь задача такова у нас имеется число 15 нам надо преобразовать его в два символа т.е. размер 15 будет не один байт а два байта так как два сивола 1 и 5.
Пример:
CSEG segment
assume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEG
org 100h
Begin:
mov ax,15 ;Наше число
aam ;корекция кода т.е. число 15 будет как 0105h
or ax,3030h ;или так add ax,3030h
xchg ah,al ;меняем местами
int 29h ;вывод
xchg ah,al ;меняем местами
int 29h ;вывод
ret ;Exit
CSEG ends
end Begin
Т.е. чтобы число 3 представить в симовльном виде надо 3 + 30h = 33h, а это и есть позиция символа 3 в табл. ASCII.
P.S. Правдо этот прмер работает только с любым двухзначным десятичным числом.
С, Уважением MnEm0n!C.
--------- Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: 6-ой класс)
Ответ отправлен: 20.04.2006, 00:46