информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСтрашный баг в WindowsЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Это действительно компильнет функцию в data_seg, но 20.11.02 16:32  Число просмотров: 1444
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Хотя компилер и матюкнется на несоответствие флагов секций
Насколько я понял, запустить нужно именно уже созданную функцию (шеллкод например), которая находится в переменной например. В общем то запустить - не проблема: и code_seg и data_seg - flat сегменты. Проблема как раз в том, чтоб эта самая функция была правильно написана: об chkesp я уже говорил - ее быть не должно любыми путями, кроме того если нужно использовать вызовы C-шной RTL, следует иметь в виду, что call на них генерится с относительной адресацией (относительно текущей инструкции - переместится call - все вызовы пойдут по левым адресам), код должен быть релоцируемым (если фиксапы нужны - их нужно выполнить самому до вызова функции), а так далее
<programming>
[Win32] функции в сегменте кода 18.11.02 19:02  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
киньте плиз исходник по сабжу. Помню, пару месяцев назад проходил он по форуму, вроде =)) поискал в history, но не нашел ...
спасиб!
[Win32] А они все там и есть 19.11.02 13:33  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Если в сегменте данных, то главное не компиль Debug-версию, в ней все вызовы сопровождаются _chkesp() - а если ты переместишь функцию с таким вызовом куда нить в кучу или в переменную, или на стек - вызов останется, но будет указывать незнамо куда
[Win32] А они все там и есть 19.11.02 22:25  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> Если в сегменте данных, то главное не компиль Debug-версию,
> в ней все вызовы сопровождаются _chkesp() - а если ты
> переместишь функцию с таким вызовом куда нить в кучу или в
> переменную, или на стек - вызов останется, но будет
> указывать незнамо куда

_chkesp() mozhno otkluchit` v _DEBUG
опечатался =) , конечно я про сенгмент данных спрашивал)))... 19.11.02 22:13  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
опечатался =) , конечно я про сенгмент данных спрашивал)))... 20.11.02 13:59  
Автор: Green Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я делаю так:

#pragma comment(linker,"/MERGE:.text2=.data")
#pragma comment(linker,"/SECTION:.data,EWRX")

#pragma code_seg(".text2")
void func(...)
{
..........
}
Это действительно компильнет функцию в data_seg, но 20.11.02 16:32  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Хотя компилер и матюкнется на несоответствие флагов секций
Насколько я понял, запустить нужно именно уже созданную функцию (шеллкод например), которая находится в переменной например. В общем то запустить - не проблема: и code_seg и data_seg - flat сегменты. Проблема как раз в том, чтоб эта самая функция была правильно написана: об chkesp я уже говорил - ее быть не должно любыми путями, кроме того если нужно использовать вызовы C-шной RTL, следует иметь в виду, что call на них генерится с относительной адресацией (относительно текущей инструкции - переместится call - все вызовы пойдут по левым адресам), код должен быть релоцируемым (если фиксапы нужны - их нужно выполнить самому до вызова функции), а так далее
[Win32] функции в сегменте кода 18.11.02 22:36  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> киньте плиз исходник по сабжу. Помню, пару месяцев назад
> проходил он по форуму, вроде =)) поискал в history, но не
> нашел ...
> спасиб!
dlia VC:
tolko v Release build optimizaciu vykluchi ( ili poigraisia s nei )
void* alloc_foo(void *pFoo,void *pFooNext)
{
	long *p1, *p2;
#ifdef _DEBUG
	p2 = (long*)(long*)&((charpFooNext)[1] + (long)pFooNext + 5);
	p1 = (long*)(long*)&((charpFoo)[1] + (long)pFoo + 5);
#else
	p2 = (long*)pFooNext;
	p1 = (long*)pFoo;
#endif
	int size_of_function;
	size_of_function  = (int)p2 - (int)p1;

	char *p = new char[size_of_function];
	memcpy(p, p1, size_of_function);
	return p;
};

void  free_foo(void *pFoo)
{
	delete []pFoo;
}


void FooInDataSec(void *p)
{
	void*  pmemcpy)(voidconst void*, size_t) = &memcpy;
	pmemcpy(p, "test\0", 5);
}

void FooInDataSec_0(void *p){}

void main()
{
	void pFooInDataSec)(void;
	pFooInDataSec = alloc_foo(FooInDataSec, FooInDataSec_0);
	char sz[5];
	pFooInDataSec(sz);
	free_foo( pFooInDataSec );
	printf("%s", sz);
}

---
[Win32] сенк, есть над чем подумать! есть еще неясность! 18.11.02 23:22  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
а нельзя так:
/*
* тут собсно-функция
*/
char func="\xZZ\xZZ...\xZZZ";

void (*f)(void);

int main(void)
{
f = (void*)func;
(*f)();
return 0;
}

я слышал, что можно так, но MSVC не компилит ( f = (void*)func; ) , говорит мол '=' can't convert (void*) to void (__cdecl * )(void)
:(
[Win32] сенк, есть над чем подумать! есть еще неясность! 19.11.02 01:20  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> а нельзя так:
> /*
> * тут собсно-функция
> */
> char func="\xZZ\xZZ...\xZZZ";

char *func = "...";

>
> void (*f)(void);
>
> int main(void)
> {
> f = (void*)func;

f = (void (__cdecl *)(void))func;

> (*f)();

f();

> return 0;
> }
>
> я слышал, что можно так, но MSVC не компилит ( f =
> (void*)func; ) , говорит мол '=' can't convert (void*) to
> void (__cdecl * )(void)
> :(
[Win32] сенк, есть над чем подумать! есть еще неясность! 19.11.02 22:20  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > void (*f)(void);
....
> > (*f)();
>
> f();
здесь все-таки (*f)();
т.к определен указатель на функцию =)

Cенк за помощь.
Всего!
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach