Официальный сайт студ.городка НГТУ
Программирование и БД » [ASM] изменение процедуры на лету... 

#1  18.04.06 22:41

[ASM] изменение процедуры на лету...

Вот значит вопрос.
Пишу след.код

Код::

...................................
NaN PROC
    push ...
    push ....
    push ....
    call ...
NaN EndP

Main:
    ........
call Nan
End Main

Что можно написать в Main в место ...... чтоб к примеру всё байты в NaN заменить на 90(NOP)?

Offline

#2  19.04.06 10:33

Re: [ASM] изменение процедуры на лету...

Боюсь, что через компилятор это будет сложно реализовать. Проще сделать com файл, потому что в нём не будет заголовка exe и относительно его высчитывать байты.
Хотя решение далеко не идеальное и простое.

Offline

#3  19.04.06 12:13

Re: [ASM] изменение процедуры на лету...

а зачем?

Offline

#4  19.04.06 12:22

Re: [ASM] изменение процедуры на лету...

Самомодифицирующийся код - потенциально вирусное действие. Любой сторож завоет. А зачем оно надо, действилельно?

Offline

#5  19.04.06 17:09

Re: [ASM] изменение процедуры на лету...

Спроси лучше, как в Windpws NT\2000\XP выйти на нулевое кольцо привилегий, а иначе, только модификация кода в стеке, Хотя, чем это хуже? Если не знаешь как записать в память простой байтик (90h), та какая речь о нулевом кольце привилегий?

Исправлено Calypso (19.04.06 17:12)

Offline

#7  19.04.06 17:26

Re: [ASM] изменение процедуры на лету...

Всё получилось... Могу дать код, но немного другой.. В котором пытался изменить байты переменной...
Вот

Код::

.386
.model flat, stdcall
include kernel32.inc
.data
	Mass DB '1', '2', '3', '4', '5'
	i DB ?	
.code
Main:
    mov i, 0 ; Сначала смещение равно 0
    start:    
    	xor eax, eax ; Зачишаем регистр EAX    
    	LEA ebx, DWORD PTR Mass ; Получаем адресс с которого начинаеться размещение массива Mass
    	mov edi, DWORD PTR i ; Заносим значение i в регистр edi
    	mov al, [ebx+edi] ; Заносим в 1 байт регистра eax(al) байт из ebx(массив Mass) который находиться в нём по смещению edi(i) 
    	mov cl, al	; Сохраняем значение al в cl
    	add al, 1 ; Увеличиваем значение al на 1
    	mov [ebx+edi], al ; Заносим значение al назад в массив
    	mov al, cl ; Восстанавливаем исходное значение al
    	inc i ; Увеличиваем смешение для следующего шага
    	cmp al, '5' ; Проверяем не конец ли это масива
    	jne start ; Идём на старт если не конец
    
    push 0
    call ExitProcess
end Main

otaku, __Rush__.
Вот вы спрашиваете зачем.
Да всё просто... Для написания хорошей защиты ShareWare программы.
Хотя это не единственное что там будет.
Да и вообще для самообучения.

Offline

#8  19.04.06 17:28

Re: [ASM] изменение процедуры на лету...

Его немного переделать и получиться изменение процедуры

Offline

#9  19.04.06 17:37

Re: [ASM] изменение процедуры на лету...

это ты изменял сегмент данных, а тебе надо для модификиции кода изменять сегмент кода, Это две больших разницы

Offline

#10  19.04.06 18:17

Re: [ASM] изменение процедуры на лету...

Calypso,  я тебе уже сегодня в институте говорил!

Код::

The VirtualProtect function changes the access protection on a region of committed pages in the virtual address space of the calling process. This function differs from VirtualProtectEx, which changes the access protection of any process.

BOOL VirtualProtect(

    LPVOID lpAddress,	// address of region of committed pages 
    DWORD dwSize,	// size of the region 
    DWORD flNewProtect,	// desired access protection 
    PDWORD lpflOldProtect 	// address of variable to get old protection  
   );

API - функция VirtualProtect позволяет манипулировать атрибутами страниц по нашему усмотрени.
(Журнал ][акер спец №11(48))

Offline

#11  19.04.06 18:46

Re: [ASM] изменение процедуры на лету...

Гы-Гы, а ты сам то пробовал ею дать дать доступ на сегмент кода?

Offline

#12  19.04.06 19:25

Re: [ASM] изменение процедуры на лету...

Да... И ВСЁ работает!
Вот ещё одна вещь которая нужна
link.exe 1.obj /FIXED /SEXTION:.rdata,ERW
ВОТВОТ... ЭТО САМОЕ ГЛАВНОЕ!!!
Так компонуем для того чтоб исполн.файл имел отключение защиты кодовой секции!!

Offline

#13  20.04.06 11:36

Re: [ASM] изменение процедуры на лету...

мда. прошло то доброе время, когда на асме писали под ДОС ;)

Offline

#14  20.04.06 16:33

Re: [ASM] изменение процедуры на лету...

да под дос проще было!!!!

Исправлено Calypso (20.04.06 16:33)

Offline

#15  20.04.06 16:34

Re: [ASM] изменение процедуры на лету...

да и под Win95/98 тоже....

Offline

#16  22.04.06 01:04

Re: [ASM] изменение процедуры на лету...

решил напейсать немного сплоета а значит и шеллкодеса?)) езиносов бехоце курить нада акуратней))

Offline

#17  22.04.06 01:13

Re: [ASM] изменение процедуры на лету...

мдя, не сразу я ваш "код" прочел. вы на каком сударь мать вашу так курсе? 88 года.. ето значит 2ой курс. вы миня извините, но такую хуйню выносить на публику постремались бы. вам топор поможет в репу, определенно. советую остацо в универе, тут таких талантов не хватает. будите визуал басик преподавать инвалидам.

Offline

#18  22.04.06 01:16

Re: [ASM] изменение процедуры на лету...

2rmir: вы не песали на асме под дос)

Offline

#19  22.04.06 08:24

Re: [ASM] изменение процедуры на лету...

2mota: как раз ошибаешься. только под него и писал.

Offline

#20  22.04.06 16:13

Re: [ASM] изменение процедуры на лету...

mota,  так! Значит будем говорить с вами так же сударь.
Во первых я на 1 курсе.
Во вторых чё вам в моём коде нах не нравиться!??!
В третьих знание ассмблера 1 месяц не даёт возможности писать идеальный код.

Offline

#21  22.04.06 16:16

Re: [ASM] изменение процедуры на лету...

Кстати кому интересно... Вот рабочий код самомодифицирующийся.
В процедуру NaN чё-нить написать
Перед запуском проги стоит зайти в HIEW и сделать байтам от  ->-> до <-<- xor по 41h
А потом уж запускать.

Код::

.386
.model flat, stdcall
include kernel32.inc
include user32.inc
.data

.code

IT PROC
	DB '->->'
IT ENDP

NaN PROC
	push 1
	push 2556732 ; Сюда HANDLE проги которой надо мигать ;)
	call FlashWindow
	ret
NaN ENDP

DO PROC			
	DB '<-<-'
DO ENDP

Main:
    mov ebx, offset NaN
    	; Установим права для кучи данных на запись
    	push offset old
    	push 4
    	push 1024
    	push offset NaN
    	call VirtualProtect
    	; ###############################
    	JMP Proverka
	    Cikl:
	    XOR BYTE PTR DS:[EBX],41h
		INC EBX
		Proverka:
		CMP EBX, offset DO
		JNZ Cikl
		; Установим права для кучи данных на чтение
    	push offset old
    	push 2
    	push 1024
    	push offset NaN
    	call VirtualProtect
    	; #########################################
    call NaN
    ret
end Main

Offline

#22  25.04.06 00:09

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

Повеселили старца, спасибо.
Чтобы все байты в процедуре NaN заменить на 90h не надо страдать тем, чем вы пытаетесь страдать.

Код::

NaN:
    ...
    ret

Main:
    mov edi,NaN ; берем адрес начала процедуры
    mov ecx,Main-NaN ; в ecx суем размер процедуры NaN (при условии, что она идет ровно перед Main и между ними нет ничего другого)
    mov al,90h ; в al байт, на который хотим все заменить
    rep stosb

Вышеприведенный код написан в стиле диалекта ассемблера FASM, т.к. масмом не пользовался уже года три и не помню как там и чего, но по идее в масме также.

Offline

#23  25.04.06 00:25

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

Про модификацию в секции кода. Во-первых, понятие "сегмент" осталось в досе с сегментной моделью памяти, а в венде мы имеем плоскую память.
Во-вторых, eхе в венде имеет заголовок PE, в котором описаны секции, а сразу за заголовком идут непосредственно эти секции. Секции друг от друга отличаются установленными флагами. Для секции кода это флаги code, readable, executable (по дефолту). Чтобы писать в такую секцию нужно всего лишь добавить флаг writeable в заголовке PE, сделать это можно тем же Hiew или более узконаправленными утилитами вроде PE-Tools.

Не знаю позволяет ли масм на этапе линковки выставить флаги, но нормальные ассемблеры это позволяют, так что городить огород с VirtualProtect смысла нет, да и нестабильный это метод.

Offline

#24  25.04.06 13:33

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

Anonimizer_me написал(а):

Всё получилось... Могу дать код, но немного другой.. В котором пытался изменить байты переменной...
Вот

Это если писать на паскале с использованием ассемблера. Если писать на ассемблере, то код получится примерно такой:

Код::

.386
.model flat, stdcall
include kernel32.inc
.data
Mass DB '1', '2', '3', '4', '5'
.code
Main:
    lea eax,dword ptr Mass   ; Получаем адресс с которого начинаеться размещение массива Mass
  start:                     ; Начало цикла инкремента
    cmp byte ptr [eax],35h   ; Сравниваем текущий байт с последним байтом массива
    jz  finish               ; Прыгаем на выход, если достигли конца массива
    inc byte ptr [eax]       ; Увеличиваем цифру в массиве
    inc eax                  ; Передвигаемся к следующему байту
    jmp start                ; Идём на старт если не конец
  finish:                    ; Окончание цикла инкремента
    inc byte ptr [eax]       ; Увеличиваем последний элемент массива
    
    push 0
    call ExitProcess
end Main

Хотя это далеко не лучший вариант. Не ясно почему надо проверять именно на совпадение с последним байтом массива, если размер массива изначально известен. Более логично было бы сделать так:

Код::

.386
.model flat, stdcall
include kernel32.inc
.data
Mass DB '1', '2', '3', '4', '5'
.code
Main:
    lea  eax,dword ptr Mass   ; Получаем адресс с которого начинаеться размещение массива Mass
    push 4                    ; Суем в стек длинну массива в байтах без единицы (т.к. счет идет от нуля)
    pop  ecx                  ; Достаем число из стека и пихаем его в регистр-счетчик
  start:                      ; Начало цикла инкремента
    inc  byte ptr [eax+ecx]   ; Увеличиваем цифру в массиве
    dec  ecx                  ; Передвигаемся к предыдущему байту
    jns  start                ; Идём на старт, если не достигли начала массива
    
    push 0
    call ExitProcess
end Main

Таким образом, весь цикл обработки массива вместе с проверкой умещается в 6 байт. Считать сколько было в первоначальном коде даже как-то не возьмусь :)

Исправлено n0p (25.04.06 13:46)

Offline

#25  26.04.06 02:34

Re: [ASM] изменение процедуры на лету...

муахаха. нопка по что ты подписалсо расталковывать им ето?)) одэй грядет, скоро каждому воздастсо по иго заслугам. пусть покаюца грешники пока не поздно, встанут на путь богоугодный и тогда не сразит их меч правосудия, и тогда встанут они после чистилища и начнут песать код новый, небаговый, нешароварный, и наступит тогда просветление в мозгу их, и дела их будут святы. а коли не покаюца - не достигнут они дзена, и будут ставить венды с битых дестрибов на мертвые винты вечность и кода песать никогда не смогут во искупление грехов своих. вступайте и компелируйте! в месте мы сила! аминь!

Offline

#26  26.04.06 12:28

Re: [ASM] изменение процедуры на лету...

n0p, линкует то не масм а линковщик. У меня к примеру мелкомягкий LINK.exe
У него есть параметры позволяющие задавать как-раз то чтоб устанавливать права на запись, вывполнение и чтение

Offline

#27  26.04.06 12:29

Re: [ASM] изменение процедуры на лету...

mota, слышь, а ты заткнуться не хочешь?
Критиковать всегда легче, а следовательно ума мног не нада. Тебе прямая дорога в болтовню или литературу.

Offline

#28  26.04.06 12:30

Re: [ASM] изменение процедуры на лету...

Вопрос. А если линковщик позволяет выставлять права доступа, то зачем всё это извращение с VirtualProtect?

Offline

#29  26.04.06 13:44

Re: [ASM] изменение процедуры на лету...

а по лбу не хатишь? ну а если серьезно, то ноп и правда не знает как флаги на секции выставить, а делаецо ето так:
link /section:<name>, [e][r][w][s][d][k][l][p][x][,align=#]
вкуривайте
а то уже всем мосх прозозохали

Offline

#30  26.04.06 13:48

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

Anonimizer_me написал(а):

линкует то не масм а линковщик. У меня к примеру мелкомягкий LINK.exe
У него есть параметры позволяющие задавать как-раз то чтоб устанавливать права на запись, вывполнение и чтение

Ну ясен хобот, что линковщик линкует. Только прошлый век это. Современные ассемблеры не используют линковщик, не используют объектник, следовательно, им не нужны либы. Красота да и только. А чего стоит полный контроль кода, никакой отсебятины компилятора (масм этим страдает очень сильно, поэтому он уже продолжительное время умирает).. Короче, переходите на Фасм и не будет большей радости в жизни.

Кстати, а что сподвигло вас писать собственную защиту для проги? Это дело потянет на докторскую по безопасности, если делать защиту нормального уровня. И я сильно сомневаюсь, что кому-то в одиночку удастся затмить такие протекторы как Armadillo, Execryptor и пр.

Offline

#31  27.04.06 14:40

Re: [ASM] изменение процедуры на лету...

Ну как это прошлый век :),а если нужно два объектника слепить шо делать :),а если отладочная инфа нужна,а если нужно позднее  связывание импорта? Фасм рулит как ассемблер но до линкера ему далековато :)
Кстати то что фасм не могёт отладочную инфу генерить пожалуй его единственный минус.
А насчет протекторов.... да один хер всеравно взломают :)
Вот.Увидел пост нопа и тоже захотелось поумничать :).

Offline

#32  27.04.06 20:06

Re: [ASM] изменение процедуры на лету...

n0p, а я и не собираюсь их затмевать. Просто очень интересная тема

Offline

#33  27.04.06 20:07

Re: [ASM] изменение процедуры на лету...

MiraclE, [А насчет протекторов.... да один хер всеравно взломают :)] В этом ты точно прав

Offline

#34  27.04.06 20:08

Re: [ASM] изменение процедуры на лету...

MiraclE, Просто можно увеличиь время затрачиваемое на взлом :)

Offline

#35  27.04.06 23:41

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

MiraclE, неправда. Фасм умеет делать объектники, а если уж так нужна отладочная инфа, то где-то на форуме фасма я видел соответствующие макросы под стандартный pdb. Правда, линковать придется, конечно, отдельной утилью, это да.
И вапсче, я сторонник динамических библиотек. Миллионы дллок - это наше все.

А протекторы.. Время взлома, конечно, увеличить можно. С пары минут (большинство протов) до пары дней (элитные, только ручной взлом). Я, конечно, не спец в этой теме, но со спецами знаком и после общения с ними в протекторы не верю. :)

Для получения базовых знаний, имхо, лучше освоить азы вирьмакерского искусства (простой инфектор) - инфы много, а знания РE формата даются основательные. Дальше можно шагать в реверсинг и параллельно можно заниматься ядерными драйверами, сервисами и прочей низкоуровщиной. После постижения всего этого можно гордо называть себя Мастером и демонстрировать желающим свой красный лазерный меч.

Offline

#36  28.04.06 17:45

Re: [ASM] изменение процедуры на лету...

Пара дней хехе...ExeCryptor,или Armadillo за пару дней,навряд ли..
Подразумевается что человек все реверсит сам,без всяких туторов расчписывающих по шагам куда ставить брейкпоинт и сколько раз нажать ф5.

Исправлено MiraclE (28.04.06 17:48)

Offline

#37  28.04.06 18:11

Re: [ASM] изменение процедуры на лету...

MiraclE, согласен.
Реальную защито поломать трудно.. .Особенно если программа настолько полиморфна что в ней даже расшифровщик на ходу собираеться. Я видел такие примеры.
Такие программы тяжко ломать.

Offline

#38  28.04.06 20:14

Re: [ASM] изменение процедуры на лету...

да вас я тут сматрю и вправду нада галапиридольчиком подколоть.. я ж грил курите акуратней езиносов всяких)

Offline

#39  28.04.06 20:20

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

Да-да. Под сложные крипторы типа армадиллы и хпрота есть специальные люди, остальные за них не берутся. Лично разговаривал с человеком, который армадиллу снимает за два дня. При том, что автоматических распаковшиков для нее еще не существует. В ротекторах смысла не больше, чем в весенних мухах. Они есть, ими кормится большое число народа, но нафига они - никто толком объяснить не может.

Offline

#40  29.04.06 13:34

Re: [ASM] изменение процедуры на лету...

n0p, не разу не видел прогу которая зщищена каким либо чужим софтом типа ASP и т.п.
Производителю лучше писать свою защиту тем более если он такой гигант как Macromedia или т.п.

Offline

#41  30.04.06 00:25

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

Anonimizer_me, а я видел. Например, ReGet, версия 2.0 была запакована АсПротектом, что там с другими версиями не в курсе.
Возьмем искусственную ситуацию. Вот есть контора, которая 10 лет на рынке успешно торгует своим софтом. Пусть она выпускает файловый менеджер. Люди 10 лет писали файловые менеджеры. Они знают все о гуе, они знают все о технологии плагинов, они еще много чего важного знают. И надо им свою прогу защитить, дабы не доставалась она гражданам на холяву. При этом в конторе никто не шарит в защите и вообще персонал очень далек от всей этой темы. А защиту надо. И тут два варианта.
1. Контора нанимает специалиста по протекторам, который за нереальные деньги пишет им сказочную защиту, которую ломают за неделю.
2. Контора за скромные гроши покупает лицензию х-протектора или при желании более серьезные вещи типа стар-форса.
Вариант, когда контора без малейшего представления о защите пишет свой прот, не рассматриваем как нереальный.
Имхо, с экономической точки зрения выгоднее пойти по второму пути. При этом следует понимать, что абсолютного протектора не существует по дефолту, а все существующие ломаются в сроки не больше недели.
Внимание, вопрос: зачем все это? Ведь вполне очевидно, что для крупного проекта достаточно вынести часть функций в длл и не поставлять ее в бесплатной версии. Как только человек проплатил, так сразу ему выслать недостающую библиотеку, дабы все функции заработали. Реализация элементарная, требования к знаниям нулевые. И все крякеры отсекаются, потому что защиты как таковой нет в принципе.
Это самый простой и очевидный способ, а есть и более навернутые.

Вывод: собственный протектор - это как вирусология. Пользы никакой, кроме углубленного понимания определенных вещей.

Offline

#42  30.04.06 00:40

Re: [ASM] изменение процедуры на лету...

n0p написал(а):

Как только человек проплатил, так сразу ему выслать недостающую библиотеку

а что мешает этому человеку выпустить сию библиотеку в свободное плавание по инету?

Offline

#43  30.04.06 02:31

Re: [ASM] изменение процедуры на лету...

Fatboy, жадность :)

Offline

#44  30.04.06 10:49

n0p
Профиль

Re: [ASM] изменение процедуры на лету...

Не только жадность, но и наказание. В длл можно встроить уникальную информацию на основе личных данных покупателя, тогда при появлении ее в сети сразу станет известно кто ее туда выложил и дальше заводится дело о нарушении лицензионного соглашения.
И опять же, вариантов разных масса.

Offline

#45  30.04.06 13:14

Re: [ASM] изменение процедуры на лету...

Теоретически и такую инфу можно вычистить. В этом случае можно делать частично уникальные программы, что весьма трудоёмко, и не всегда оправдано

Offline

Программирование и БД » [ASM] изменение процедуры на лету... 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.547 сек.
Выполнено 14 запросов.