Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Программирование —› чтение массива из ресурсов |
Посл.ответ | Сообщение |
|
Создано: 24 июля 2007 01:43 · Личное сообщение · #1 Всем доброго времени суток. У меня возникла идея написания одной проги о которой я создам топик чуть позже. но в её написании возникли сложности. Вообщем в одном месте мне понадобилось прочитать программой (из самой себя) из ресурсов массив byte или dword разница будет видна дальше, тоестья в следующем посте. ща я покажу кусок кода, который по идее должон читать весь массив, а читает, только первую запись, а остальные елементы забивает значениями $0. помогите сегодня третья ночь работы, хотя там ничего сверхестественного нету, жду советов. |
|
Создано: 24 июля 2007 01:45 · Личное сообщение · #2 var resource:HWND; size_of_resource:cardinal; data,flock:pointer; nb:array[1..65355]of byte; ... resource:=FindResource(hinstance,'NBYTES',RT_RCDATA); size_of_resource:=SizeOfResource(hinstance,resource); resource:=LoadResource(hinstance,resource); flock:=LockResource(resource); getmem(data,size_of_resource); copymemory(data,flock,size_of_resource); flock:=@nb; for count:=1 to bts2ptc do asm push eax push edx push ebx mov eax,data mov edx,flock mov bl,byte ptr[eax] (mov ebx,dword ptr[eax]) //эта и слудующие строки необходимы mov byte ptr[edx],bl (dword ptr[edx],ebx) //надо если nb inc eax (add eax,4) //является array [..] of dword inc edx (add eax,4) //вот так сделал я pop ebx pop edx pop eax end; freeresource(resource); freemem(data); |
|
Создано: 24 июля 2007 02:16 · Личное сообщение · #3 Пример из книги --> книга <-- http://books.rootkits.ru/books/Greg%20Hoglund,%20James%20Butler%20Rootkits,%20Subverting%20the%20Windows%20Kernel.7z.zip . Пробуй модифицировать под свою задачу. //---------------------------------------------------------------- // build a .sys file on disk from a resource //---------------------------------------------------------------- bool _util_decompress_sysfile(char *theResourceName) { HRSRC aResourceH; HGLOBAL aResourceHGlobal; unsigned char * aFilePtr; unsigned long aFileSize; HANDLE file_handle; The subsequent FindResource API call is used to obtain a handle to the embedded file. A resource has a type, in this case BINARY, and a name. ////////////////////////////////////////////////////////// // locate a named resource in the current binary EXE ////////////////////////////////////////////////////////// aResourceH = FindResource(NULL, theResourceName, "BINARY"); if(!aResourceH) { return false; } The next step is to call LoadResource. This returns a handle that we use in subsequent calls. aResourceHGlobal = LoadResource(NULL, aResourceH); if(!aResourceHGlobal) { return false; } Using the SizeOfResource call, the length of the embedded file is obtained: aFileSize = SizeofResource(NULL, aResourceH); aFilePtr = (unsigned char *)LockResource(aResourceHGlobal); if(!aFilePtr) { return false; } The next loop simply copies the embedded file into a file on the hard drive, using the resource's name as the file name. For example, if the resource were named "test," then the resulting file would be called test.sys. In this way, an embedded resource can be made into a driver file. char _filename[64]; snprintf(_filename, 62, "%s.sys", theResourceName); file_handle = CreateFile(filename, FILE_ALL_ACCESS, 0, NULL, CREATE_ALWAYS,0, NULL); if(INVALID_HANDLE_VALUE == file_handle) { int err = GetLastError(); if( (ERROR_ALREADY_EXISTS == err) || (32 == err)) { // no worries, file exists and may be locked // due to exe return true; } printf("%s decompress error %d\n", _filename, err); return false; } // While loop to write resource to disk while(aFileSize--) { unsigned long numWritten; WriteFile(file_handle, aFilePtr, 1, &numWritten, NULL); aFilePtr++; } CloseHandle(file_handle); return true; } After a .sys file has been decompressed to disk, it can be loaded using one of the rootkit loading methods we have already outlined. We now discuss some strategies to get your rootkit to load at boot time. ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... |
|
Создано: 24 июля 2007 03:12 · Личное сообщение · #4 |
|
Создано: 24 июля 2007 03:54 · Личное сообщение · #5 |
|
Создано: 24 июля 2007 05:50 · Личное сообщение · #6 |
|
Создано: 24 июля 2007 06:17 · Личное сообщение · #7 |
|
Создано: 24 июля 2007 08:39 · Личное сообщение · #8 NicknamES пишет: for count:=1 to bts2ptc do mov eax,data mov edx,flock mov bl,byte ptr[eax] (mov ebx,dword ptr[eax]) //эта и слудующие строки необходимы mov byte ptr[edx],bl (dword ptr[edx],ebx) //надо если nb inc eax (add eax,4) //является array [..] of dword inc edx (add eax,4) //вот так сделал я Тут нет смысла увеличивать eax, edx, ибо и так дальше pop-это раз. А второе-цикл у тебя идёт по count, а в асм вставке это не учитывается. Либо юзай цикл во вставке, либо прибавляй count к eax, edx. А вообще хороший вариант, если чо-то не пашет, ставить int 3 и грузить в Ольку, сразу понятно станет. |
|
Создано: 24 июля 2007 11:28 · Личное сообщение · #9 |
|
Создано: 24 июля 2007 11:29 · Личное сообщение · #10 |
|
Создано: 25 июля 2007 01:28 · Личное сообщение · #11 |
eXeL@B —› Программирование —› чтение массива из ресурсов |
Эта тема закрыта. Ответы больше не принимаются. |