Сейчас на форуме: vasilevradislav, rmn, Magister Yoda (+7 невидимых)

 eXeL@B —› Программирование —› UpdateResource & PE-пакеры
Посл.ответ Сообщение

Ранг: 9.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 июля 2008 17:45 · Поправил: juicy_emad
· Личное сообщение · #1

Доброе время!

Я тут столкнулся с проблемой.
В общем, сначала я пакую exe'шник с помощью какого-либо PE-пакера (UPX, WinUPack, PE* ...), затем пытаюсь изменить иконку с помощью функции ReplaceIcon() (см. аттач)
Иногда иконку после такого обновления вообще не видно. Иногда иконку видно, но "приложение не запускается" или приложение вылетает с ошибкой хрен знает на каком адресе (где-то далеко за адресным пространством приложения). Однако, если функцию ReplaceIcon() юзать не на запакованном exe'шнике, то всё замечательно работает.
Т.е. мой вывод таков, что WIN API функция UpdateResource() портит exe'шный файл, если он запакован.

Я пробовал менять настройки пакеров... чтобы они русурсы сжимали или не сжимали... менял степень компрессии - всё без толку.

Что же делать? Как заменить иконку у запакованного файла?
Ну и вообще - какой пакер для этих дел посоветуете?

P.S.: всё собиралось под MS VS 6.5 со след. настройками линкера:
#pragma comment(linker, "/OPT:nowin98")
#pragma comment(linker, "/MERGE:.data=.text")
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/FILEALIGN:512 /SECTION:.text,EWR /IGNORE:4078")
#pragma comment(linker, "/ENTRY:main")


3c77_14.07.2008_CRACKLAB.rU.tgz - rep_icon.h




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 14 июля 2008 17:55 · Поправил: dermatolog
· Личное сообщение · #2

В нормальных пакерах должна быть возможность не только указания того, что секцию ресурсов не надо жать, но и то что эти ресурсы нужно перенести в конец файла (после всех остальных данных). Только в этом случае, винда при UpdateResource не затрет никаких данных.



Ранг: 46.9 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 июля 2008 01:44
· Личное сообщение · #3

В файле как минимум,должна присуствовать секция .rsrc с размером $200 и она должна быть последней,иначе файл просто испортиться т.к BeginUpdateResource создаст пустую сецию с virtuasize = 0 и rawsize = 0 файл просто не запуститься.




Ранг: 213.0 (наставник), 4thx
Активность: 0.220
Статус: Участник
Тот ещё Lamer

Создано: 15 июля 2008 03:27
· Личное сообщение · #4

я вот только не понимаю одного: почему нельзя заменить иконку до упаковки пакером? 8-0

-----
Do Not Get Mad Get Money! ;)




Ранг: 9.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 июля 2008 06:38
· Личное сообщение · #5

dermatolog
Zloy
А какие пакеры позвояют переносить это дело вконец?

Talula
Ну, надо мне так. Я использую слияние с другим exe'шником, помещая свой вначало файла. В этом случае нужно брать иконку другого exe'шника.



Ранг: 46.9 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 июля 2008 06:47
· Личное сообщение · #6

Возми любой pe редактор добавь новую секцию с размером 200h и назови её .rsrc после чего попробуй сменить иконку через твою фунцию




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 15 июля 2008 06:58
· Личное сообщение · #7

juicy_emad пишет:
А какие пакеры позвояют переносить это дело вконец?

VMProtect



Ранг: 9.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 июля 2008 08:05
· Личное сообщение · #8

dermatolog
Довольно странно получилось.VMProtect раздул мой exe'шник с 20 480 до 32 768 байт.
Так и должно быть? =)

Zloy
Ок. Попробую.




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 15 июля 2008 08:16
· Личное сообщение · #9

juicy_emad пишет:
Довольно странно получилось.VMProtect раздул мой exe'шник с 20 480 до 32 768 байт.

Вы бы сразу сказали для чего вам нужен пакер, а то теряете время своё и чужое ) Вам сюда http://www.wasm.ru/forum/viewforum.php?id=6 .



Ранг: 9.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 июля 2008 08:21
· Личное сообщение · #10

Zloy
Хм... я тут посмотрел - секция ресурсов и так находится в самом конце после упаковки UPX'ом (см. аттач).
В моей ситуации, нужно удалить текущую секцию и добавить пустую, размером 200h ? Я правильно понял?

5c6a_14.07.2008_CRACKLAB.rU.tgz - upx.png



Ранг: 46.9 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 июля 2008 13:42 · Поправил: Zloy
· Личное сообщение · #11

function szUpdateResource(hModule: THandle; lpszType: PChar;lpszName: PChar;hUpdate: Cardinal): BOOL; stdcall;
var hRes,hResLoaded,nSizeOfRes : dword; pData : pointer;
begin
hRes:=FindResource(hModule,lpszName,lpszType);
hResLoaded:=LoadResource(hModule,hRes);
pData:=LockResource(hResLoaded);
nSizeOfRes:=SizeofResource(hModule,hRes);
UpdateResource(hUpdate,lpszType,lpszName,0,pData,nSizeOfRes);
FreeResource(hResLoaded);
result:=true;
end;

и.т.д,упаковал upx тот что в peid,сменил иконку на файле - работоспособность сохранилась,скажи вобщем зачем менять иконку на уже упакованном файле почему нельзя к примеру сменить а после этого упаковать?


Удалять ничего не нужно,просто может быть(что мало вероятно) секция ресурсов идет не последней в этоге m$ добавляет секцию с va=0 и прога падает (Приложение не может быть запущено или не являеться win32 программой..вобщем,что то в этом роде.




Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 15 июля 2008 16:22
· Личное сообщение · #12

> В нормальных пакерах должна быть возможность не только указания того,
> что секцию ресурсов не надо жать, но и то что эти ресурсы нужно перенести в конец файла

Не для всех "несжимаемых" ресурсов прокатыват. Даже в висте бестолковые индусы ищут TYPELIB простым добавлением смещения к raw-offset'у секции .rsrc, так что если данные оказываются в дургой секции, обычно они промахиваются, и как следствие контрол не регистрируется. Зачем читать данные из файла, когда библиотека уже замплена в память для меня тоже загадка. Видимо так повелели индусские боги




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 15 июля 2008 17:07
· Личное сообщение · #13

DrGolova пишет:
Не для всех "несжимаемых" ресурсов прокатыват.

Здесь топикстартер про проблемы апдейта упакованных ресурсов. Если ресурсы будут упакованы либо если после секции будут лежать какие-либо данные (либо другая секция), то винда при апдейте тупо затирает все что лежит в файле после секции ресурсов.
DrGolova пишет:
Даже в висте бестолковые индусы ищут TYPELIB простым добавлением смещения к raw-offset'у секции .rsrc, так что если данные оказываются в дургой секции, обычно они промахиваются, и как следствие контрол не регистрируется.

С багами висты пока не знаком, а вот на 9х с ресурсами еще интересней - дерево ресурсов где-то кешируется и винда работает исключительно с кешем, даже если реальная секция ресурсов (в том числе и дерево) в памяти уже давно поменялась.



Ранг: 9.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 июля 2008 18:01
· Личное сообщение · #14

Zloy
В общем, =) если у exe'шника есть секция ресурсов, то upx пихает таблицу в с ресурсами (.rsrc). Если у exe'шника нет ресурсов, то upx создаёт секцию upx2 и походу пихает импорт туда.

Так что моя проблема решилась просто удалением ресурсов из exe'шника.
Кстати, у тебя какая версия upx?

P.S. мне это всё нужно вот для чего... короче, сначала я сжимаю exe'шник, чтоб мало весил и антивирями не палился. Потом, чтоб слить этот exe'шник с другим, я добавляю его вначало файла, при этом беру иконку и другого файла. Т.е. и получается что мне нужно сменить иконку у запакованного файла. И не хочу я таскать с собой депаковщик и что-то там ещё делать и программировать это, чтобы автоматом это делалось.




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

Создано: 15 июля 2008 21:43
· Личное сообщение · #15

Форум этот не одобряет распространение малвары и посему не очень здесь поощряется скрытие вредоносов, топик поэтому я прикрою, инфы тут уже достаточно есть.


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