информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медSpanning Tree Protocol: недокументированное применениеГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
ptrTest=(TEST) &ptrTest; - Это что такое ? 27.05.02 13:41  Число просмотров: 896
Автор: PS <PS> Статус: Elderman
Отредактировано 27.05.02 13:48  Количество правок: 1
<"чистая" ссылка>
Но работать все равно не будет. Хоят бы из за read, write, executable - есть такие нехорошие слова связанные с памятью.
<programming>
[Win32] Как вызвать мою функцию? 27.05.02 09:44  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Каким способом мне вызывать функцию (точнее кусок кода) который я токо что записал в буфер?
Вот что я сделал:

// заказал памяти
hMem=LocalAlloc(...)
preMem=LocalLock(hMem);
// скопирил код
memmove(ptrMem,&Test,Length);
// беру указатель
typedef DWORD TEST)(char;
TEST ptrTest;
ptrTest=(TEST) &ptrTest;
ptrTest("TEST");
-------------------
// вот эту ф-цию я копирую
DWORD Test(char *str){
MessageBox(0,str...);
}

В чем тут ошибка? у меня комп сразу вылетает... (((
в чем тут проблема? как это правильно сделать? плииииззззззззз
[Win32] Как вызвать мою функцию? 27.05.02 14:30  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
...
> memmove(ptrMem,&Test,Length);

variant 1
typedef int _cdecl tratata(char*);
(tratataptrMem)("test");

variant 2
typedef int _cdecl lp_tratata)(char;
(*(lp_tratata)ptrMem)("test");
ptrTest=(TEST) &ptrTest; - Это что такое ? 27.05.02 13:41  
Автор: PS <PS> Статус: Elderman
Отредактировано 27.05.02 13:48  Количество правок: 1
<"чистая" ссылка>
Но работать все равно не будет. Хоят бы из за read, write, executable - есть такие нехорошие слова связанные с памятью.
[Win32] спасибо ukv за прототип вызова. все пашет с writeprocessmemory 27.05.02 17:26  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
если юзать просто memmove - то у меня машина летала...
я не стал возица с этим и посчитался с execute write & read.
я подумал что вся эта лажа будет сама собой правильно выставляца в WriteProcessMemory.
вот и готовая версия (если кому интересно)


DWORD Test1(char *str);
DWORD Test2(char *str);

void TestEnd1();
void TestEnd2();


HANDLE hProcess,hMem;
void *ptrMem;
void *Addr;
DWORD Bytes;


int WINAPI WinMain(HINSTANCE Instance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){

int count;


if((hProcess=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_SET_INFORMATION,
TRUE,GetCurrentProcessId()))==0){
MessageBox(0,"х тебе...","",MB_OK);
return 0;
}

if((hMem=LocalAlloc(LHND,(PBYTE)&TestEnd1 - (PBYTE)&Test1))==0){
MessageBox(0,"LocalAlloc error","",MB_OK);
return 0;
}
ptrMem=(void*)LocalLock(hMem);

Addr=(void*)(PBYTE)&Test1;

if(!WriteProcessMemory(hProcess,&ptrMem,&Addr,(PBYTE)&TestEnd1-(PBYTE)&Test1,&Bytes)){
MessageBox(0, "облом", "",MB_OK);
//free mem & shit
ExitProcess(0);
}

typedef DWORD _cdecl TEST(char*);
(TESTptrMem)("new location");

LocalUnlock(hMem);
LocalFree(hMem);
CloseHandle(hProcess);
ExitProcess(0);
return 0;
}

DWORD Test1(char *str){
MessageBox(0,str,"test1",MB_OK);
return 0;
}

void TestEnd1(){
return;
}

DWORD Test2(char *str){
MessageBox(0,str,"test2",MB_OK);
return 0;
}

void TestEnd2(){
return;
}

1




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


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