Прочитал статью, попробовал по ней сделать, не получается. Хочу добавить функционал в прогу WirelessKeyView (скачать можно тут http://www.nirsoft.net/utils/wirelesskeyview.zip) Прога запакована upx, распаковал, распакованная работает. Нужно научить ее брать ключи с удаленного компа. Так как работает с реестром (для хр), то нужно в regopenkeyex вместо hkey_local_machine подсунуть хендл полученный через regconnectregistry. сделал такую прогу void Connect() { HKEY hResult = NULL; long status = RegConnectRegistry("\\\\192.168.1.83", HKEY_LOCAL_MACHINE, &hResult); } void main() { Connect(); } линковщику поставил опцию /BASE:0x4020000, т.к. ImageBase + ImageSize для WirelessKeyView равно 4000000 + 13000 сохранил секции .text, .rdata и .data моей проги на диск и добавил их в WirelessKeyView слдеующим образом: было .text 9ef4 1000 a000 400 .rdata 2440 b000 2600 a400 .data da4 e000 200 ca00 .rsrc 35b4 f000 3600 cc00 добавил .uinc e000 13000 0 10200 .text1 3e00 21000 3c00 10200 .rdata1 1600 25000 1400 13000 .data1 600 27000 400 13000 при попытке запустить получаю ошибку - приложение не win32 что я не так сделал ? посмотрел сейчас, даже если добавить только .uinc e000 13000 0 10200 перестает запускаться
Ради одной-единственной функции такие аццкие замуты?! Может проще: 1. Добавить функцию RegConnectRegistry в импорт, если её там ещё нет 2. Не смотреть итальянскую порнуху, где кричат "си!" си!", а строчку "long status = RegConnectRegistry("\\\\192.168.1.83", HKEY_LOCAL_MACHINE, &hResult);" написать на ассёмблере в конце уже имеющейся секции кода 3. Кинуть туда jmp откуда-нибудь из места, которое заведомо исполняется раньше, чем RegOpenKeyEx. Кстати, а соединение с удалённым реестром без всяких логинов-паролЕй вообще нормально проходит, отлуп не дают? Если да - меня несколько удивляет такая политика администрирования.
хочу разобраться именно с добавлением кода, ну и сполезным соединить чтобы без логинов и паролей надо сначала сказать net use с логином и паролем пардоньте за назойливость, но что я сделал не так при добавлении секций ?
isolp Да кто ж его знает... Может (и скорее всего) просто инструмент для добавления секций оказался кривой и что-то где-то сломал.
еще один вопрос прогу из которой беру секции слинковал с такими опциями #pragma comment(linker,"/ENTRY:main") #pragma comment(linker,"/NODEFAULTLIB") #pragma comment(linker,"/BASE:0x00420000") в результате и размер кода сократился и секций всего две осталось: .text и .rdata если смотреть идой, то секций 3 - еще .idata, такая .idata:00422000 ; Imports from ADVAPI32.dll .idata:00422000 ; Segment type: Externs .idata:00422000 ; _idata .idata:00422000 ; LONG __stdcall RegConnectRegistryA(LPCSTR lpMachineName,HKEY hKey,PHKEY phkResult) .idata:00422000 extrn RegConnectRegistryA:dword ; DATA XREF: start+2Er .idata:00422000 ; Establish a connection to a predefined .idata:00422000 ; registry handle on another computer .idata:00422004 и соответственно в .text .text:0042102E call ds:RegConnectRegistryA ; после добавления секций в целевую прогу и открытия в иде эти адреса выглядят так .rdata1:00422000 _rdata1 segment para public 'CODE' use32 .rdata1:00422000 assume cs:_rdata1 .rdata1:00422000 ;org 422000h .rdata1:00422000 assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing .rdata1:00422000 dword_422000 dd 20AAh ; DATA XREF: .text1:0042102Er .rdata1:00422004 align 8 .text1:0042102E call ds:dword_422000 почему испортились данные в начале секции и как теперь их восстановить, чтобы они ссылались на RegConnectRegistry ? просто вставлять адрес не хочется, интересно сделать правильную секцию, чтобы адрес прописывал загрузчик
Почитай про таблицу импорта А чем не нравится метод предложенный в статье? Можно попробовать сшить струю таблицу импорта с новой...