Посл.ответ |
Сообщение |
Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник bytecode!
|
Создано: 19 мая 2006 15:44 · Личное сообщение · #1
Никто не сталкивался?
Нужно заменить некоторые ресурсы в проге по их именам, сам написал алго, он работает под XP, а под 2K ны выходе получается битый EXE'шник
Уже как только не пробовал, все равно бытый получается.
Причем те же действия (на апи пишу) из-под сей нормально прокатывают, ресурсы и под 2k заменяются...
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. | Сообщение посчитали полезным: |
|
Ранг: 78.6 (постоянный) Активность: 0.03↘0 Статус: Участник
|
Создано: 19 мая 2006 16:13 · Личное сообщение · #2
замена на какой стадии компиляции, выполнения? непонятно
| Сообщение посчитали полезным: |
Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник bytecode!
|
Создано: 19 мая 2006 16:23 · Личное сообщение · #3
В чужом EXE'шнике, не в своем.
Во время выполнения моей проги, из нее же.
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. | Сообщение посчитали полезным: |
Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник bytecode!
|
Создано: 31 мая 2006 13:35 · Личное сообщение · #4
Все, разобрался, написал алго на апях из-под сей и в dllку это все заколбасил, а юзаю дллку из делфей при необходимости
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. | Сообщение посчитали полезным: |
Ранг: 9.5 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 31 мая 2006 17:11 · Личное сообщение · #5
Интересно а кто нибудь изменял ресурсы к примеру в чужейном дельфовом ехешнике, что бы после "сохранения" подправленных ресурсов он работал ? если кто делал расскажите, интересно было бы узнать как подобное провернуть!
| Сообщение посчитали полезным: |
Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник bytecode!
|
Создано: 31 мая 2006 18:11 · Личное сообщение · #6
Я это и сделал, все работает.
Все делается апёвскими методами.
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 01 июня 2006 05:55 · Личное сообщение · #7
[DR] пишет:
чужейном
4kusNick пишет:
апёвскими
где берете такую траву? ;)
| Сообщение посчитали полезным: |
Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник bytecode!
|
Создано: 01 июня 2006 10:03 · Личное сообщение · #8
Если подробнее, то делал так:
На сях писал либу.
Вот ее исходник:
// ResDll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
extern "C" bool CALLBACK ReplaceResource(PCHAR sSource,PCHAR sDest,PCHAR sType,PCHAR sName)
{
// Переменные для чтения и добавления ресурса
HANDLE hFile;
DWORD dwFileSize,
dwBytesRead;
LPBYTE lpBuffer;
// Открываем файл для дальнейшего чтения
hFile = CreateFile(sSource,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NO RMAL,NULL);
// Если открыть не удалось, то выходим
if(hFile == INVALID_HANDLE_VALUE) return FALSE;
// Сохраняем его размер
dwFileSize = GetFileSize(hFile, NULL);
// Если не удалось получить размер, то выходим
if(dwFileSize <= NULL)
{
// Закрываем хендл файла
CloseHandle(hFile);
return FALSE;
}
// Создаём массив для чтения файла
lpBuffer = new BYTE[dwFileSize];
if (ReadFile(hFile,lpBuffer,dwFileSize,&dwBytesRead,NULL) != FALSE)
{
HANDLE hResource;
hResource = BeginUpdateResource(sDest,FALSE);
if (NULL != hResource)
{
if (UpdateResource(hResource,sType,sName,0,(LPVOID)lpBuffer,dwFileSize)!= FALSE)
{
EndUpdateResource(hResource, FALSE);
}
}
}
delete [] lpBuffer;
CloseHandle(hFile);
return true;
}
//ResDll.h
#define EXPORT extern "C" __declspec (dllexport)
EXPORT bool CALLBACK ReplaceResource(PCHAR sSource,PCHAR sDest,PCHAR sType,PCHAR sName);
//ResDll.def
LIBRARY ResDll
EXPORTS
ReplaceResource @1
Затем юзал эту дллку из-под делфей:
unit xxx...
...
// объявил
function ReplaceResource(sSource,sDest,sType,sName: PChar): Boolean; cdecl; far; external 'ResDll.dll';
...
//и потом юзал
ReplaceResource(PChar('C:\data.dat'),PChar(sTempPath + '1.tmp'),RT_RCDATA,'MAINDATA');
// это заменит в файле 1.tmp (он должен быть валидным PE файлом, кажись) ресурс с именем MAINDATA /////(вместо того, что было, появится содержимое файла data.dat в ресурсе MAINDATA в файле 1.tmp)
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 01 июня 2006 17:13 · Личное сообщение · #9
4kusNick пишет:
Затем юзал эту дллку из-под делфей
а что на делфи нельзя написать и обойтись без ДЛЛ?
| Сообщение посчитали полезным: |
Ранг: 42.4 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 04 июня 2006 07:55 · Личное сообщение · #10
А нельзя использовать прогу вроде ResHacker? Или обязательно автоматически надо?
| Сообщение посчитали полезным: |
Ранг: 5.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 07 июня 2006 06:51 · Личное сообщение · #11
У меня где-то был исходник проги типа Restorator, как найду выложу
| Сообщение посчитали полезным: |
Ранг: 81.2 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 08 июня 2006 02:08 · Личное сообщение · #12
было бы интеересно на это глянуть, я про исходники
| Сообщение посчитали полезным: |
Ранг: 111.1 (ветеран) Активность: 0.04↘0 Статус: Участник
|
Создано: 08 июня 2006 16:53 · Личное сообщение · #13
У меня есть исходник по работе с ресурсами (показывает их и сохраняет). Могу выложить. Правда написан он на Visual Basic 6.0, но там работа с ресурсами идет на чистом API, так что разобраться будет несложно.
----- The truth is out of there... | Сообщение посчитали полезным: |
Ранг: 54.9 (постоянный) Активность: 0.02↘0 Статус: Участник
|
Создано: 08 июня 2006 18:07 · Личное сообщение · #14
4kusNick
На делфи тоже можно менять ресурсы. Ниже код который использовал для замены иконки, переделать не сложно.
...;
var
hModule : Cardinal;
hResFind : Cardinal;
hResLoad : Cardinal;
pResLock : PChar;
hResUpdate: Cardinal;
begin
Result := false;
hModule := LoadLibrary(PChar(FSourceFile));
if hModule = 0 then
Exit;
try
hResFind := FindResource(hModule, MakeIntResource(SourceIndex+1), RT_ICON);
if hResFind = 0 then Exit;
hResLoad := LoadResource(hModule, hResFind);
if hResLoad = 0 then Exit;
pResLock := LockResource(hResLoad);
if pResLock = nil then Exit;
hResUpdate := BeginUpdateResource(PChar(FDestFile), false);
if hResUpdate = 0 then Exit;
if not UpdateResource(hResUpdate,
RT_ICON,
MakeIntResource(DestIndex + 1),
0, //local language
pResLock,
SizeofResource(hModule, hResFind)) then Exit;
if not EndUpdateResource(hResUpdate, false) then Exit;
finally
FreeLibrary(hModule);
end;
Result := true;
end;
| Сообщение посчитали полезным: |
Ранг: 516.1 (!), 39thx Активность: 0.28↘0 Статус: Участник
|
Создано: 08 июня 2006 21:32 · Личное сообщение · #15
на radasm заходите и качаете ResEd (редактор ресурсов), он с исходниками, правда на асме
| Сообщение посчитали полезным: |
Ранг: 5.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 09 июня 2006 08:50 · Личное сообщение · #16
Вот примерчик на Delphi, ксати взят из демок. Сохранять не умеет, но может допрет кто-нить
69ba_09.06.2006_CRACKLAB.rU.tgz - ResXplor.rar
| Сообщение посчитали полезным: |
Ранг: 793.4 (! !), 568thx Активность: 0.74↘0 Статус: Участник Шаман
|
Создано: 09 июня 2006 13:25 · Личное сообщение · #17
На нем ResHacker сделан.
----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: |