Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› чтение массива из ресурсов
Посл.ответ Сообщение


Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 июля 2007 01:43
· Личное сообщение · #1

Всем доброго времени суток.
У меня возникла идея написания одной
проги о которой я создам топик чуть позже.
но в её написании возникли сложности.
Вообщем в одном месте мне понадобилось
прочитать программой (из самой себя)
из ресурсов массив byte или dword разница
будет видна дальше, тоестья в следующем посте.
ща я покажу кусок кода, который по идее
должон читать весь массив, а читает, только
первую запись, а остальные елементы забивает
значениями $0. помогите сегодня третья ночь
работы, хотя там ничего сверхестественного
нету, жду советов.




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 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);




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 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.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 июля 2007 03:12
· Личное сообщение · #4

спасибо и за это.
но я как особо не знаю С++,
но всё равно нельзя не заметить
последовательности действий
FindResource
LoadResource
LockResource,
но всё же я думаю что моя ошибка в асм вставке




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 июля 2007 03:54
· Личное сообщение · #5

пleaze help



Ранг: 54.0 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 24 июля 2007 05:50
· Личное сообщение · #6

Тебе их обязательно в ресурсах хранить? Мне кажется проще использовать константы в таких случаях: const myarray: array[0...255] of cardinal;




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 24 июля 2007 06:17
· Личное сообщение · #7

NicknamES а что отладчик говорит? Потрейси и все на свои места встанет. Асм-вставки в ООП лучше отлаживать сторонним отладчиком.

-----
radio uno in ibisa ...





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 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 и грузить в Ольку, сразу понятно станет.




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 июля 2007 11:28
· Личное сообщение · #9

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




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 июля 2007 11:29
· Личное сообщение · #10

Pro100ya мне массив обязательно хранить в ресурсах




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 25 июля 2007 01:28
· Личное сообщение · #11

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


 eXeL@B —› Программирование —› чтение массива из ресурсов
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати