![]() |
eXeL@B —› Вопросы новичков —› Как узнать адрес памяти куда писать код??? |
Посл.ответ | Сообщение |
|
Создано: 11 июля 2007 09:38 · Личное сообщение · #1 пишу кряк, такие проблемы: программу взломал открываю файл записываю файл в память! знаю адрес начала кода в памяти! как теперь мне узнать адрес того места куда нужно писать код?? знаю смещение в файле также(ну того места куда нужно править байты) я так думаю что от нужного мне смещения нужно вычисть смещение начала файла и все ето дело добавить к адресу программы в памяти! но вот не задача гдето неполучаеться! кто что думает по етому поводу???? просто я раньше нечего подобного не делал! а очень хочеться! ![]() |
|
Создано: 11 июля 2007 09:48 · Личное сообщение · #2 |
|
Создано: 11 июля 2007 09:53 · Личное сообщение · #3 |
|
Создано: 11 июля 2007 09:57 · Личное сообщение · #4 Да уж! есть адрес например 00432232h начиная с етого адреса записан екзешник есть начало программы как говорят оффсет 00000600h и есть то место куда код нужно записать например 00044832h я делаю чтото типа mov ecx, 00432232h mov eax, 0044832h add ecx, eax mov eax, 00000600h sub ecx,eax mov ecx, OFFSET xxxxxx ; где -ххххх 6 байт которые нам нужно записать я так понимаю что я гдето туплю с адресом так как к остальному не придерешься ![]() |
|
Создано: 11 июля 2007 10:00 · Личное сообщение · #5 |
|
Создано: 11 июля 2007 10:09 · Личное сообщение · #6 хорошо скажи где почитать?? я почитаю!!судовольствием!! а пока взгляни на мою програмку где ошибка??? просто чтобы я знал хоть что читать!! ---- я и есть новичек!! будь я продвинутый то непришел бы на форум!! а пиришел сюда за советом или помощью! учиться! а не потому что мне потрещать о жизни охота)))))))))) ![]() ![]() |
|
Создано: 11 июля 2007 10:14 · Личное сообщение · #7 ИМХО, super_man86 наверное, имеет в виду, как ему посчитать смещение в отладчике, соответствующее найденному значению в HEX-редакторе. Хотя я тоже не совсем понял, если ты уже знаешь hex-смещение в файле, то зачем тебе RVA-значение? ![]() super_man86 пишет: знаю смещение в файле также(ну того места куда нужно править байты) Ну да ладно. Посчитать значение RVA по RawOffset из HEX-редактора можно по формуле: RVA = RawOffsetForPatch - RawOffsetOfSection + VirtualOffset + ImageBase, где RawOffsetForPatch - адрес из HEX-редактора интересующего участка памяти для патча, RawOffsetOfSection - смещение секции, VirtualOffsetOfSection - виртуальное смещение секции, ImageBase - адрес размещения в памяти. Пример (все числа в 16-ричном формате). RawOffsetForPatch = 1756(h) RawOffsetOfSection = 400 (h) VirtualOffsetOfSection = 1000 (h) ImageBase = 400000 (h) Нужное смещение для патча в памяти RVA = 1756 - 400 + 1000 + 400000 = 402356 ((h) ----- Программист SkyNet ![]() |
|
Создано: 11 июля 2007 10:39 · Поправил: Ara · Личное сообщение · #8 super_man86 Непонятен и смысл исходника. 1. Открываешь два файла 2. Читаешь первый в память 3. Переходишь на смещение 42222h от начала 4. Пишешь первый файл во второй. Я так понимаю, что ты хочешь пропатчить файл? Ну нафик тогда два файла открывать? Пиши сразу в первый: invoke WriteFile ,hf1,ххх,6,OFFSET nBytesWrite,NULL ![]() |
|
Создано: 11 июля 2007 10:41 · Личное сообщение · #9 |
|
Создано: 11 июля 2007 10:45 · Личное сообщение · #10 я пишу во второй дабы по пять раз не переписывать оригинал так как после неудачной записи он портится!! приходится его снова обновлять! вот я и зделал второй как временный! посмотри что я неправильно пишу в память?? где ошибка! допустим я адрес нахожу правильно а тогда как нужно писать в память? да вообще в етом месте пробел у меня сильный и никак немогу понять в чем дело! уже и гнижки пролистал и инет прошарил и все равно не догоняю! понять то хочеться!! если убрать часть кода где патчиться файл в памяти то он записывает второй файл идентичным первому! тоесть из памяти на диск нормально! я именно в памяти пропатчить немогу! ![]() |
|
Создано: 11 июля 2007 10:48 · Личное сообщение · #11 если ты нашел смещение в файле и оно у тебя 42222h - пиши в файл как я написал выше. Исходник сокаращается примерно до такого (нету асма под рукой, не компилил)
![]() |
|
Создано: 11 июля 2007 10:48 · Личное сообщение · #12 |
|
Создано: 11 июля 2007 10:48 · Личное сообщение · #13 |
|
Создано: 11 июля 2007 10:51 · Личное сообщение · #14 |
|
Создано: 11 июля 2007 11:09 · Личное сообщение · #15 |
|
Создано: 11 июля 2007 11:21 · Личное сообщение · #16 |
|
Создано: 11 июля 2007 11:23 · Личное сообщение · #17 |
|
Создано: 11 июля 2007 13:09 · Личное сообщение · #18 |
|
Создано: 11 июля 2007 13:11 · Личное сообщение · #19 |
|
Создано: 11 июля 2007 17:15 · Личное сообщение · #20 |
|
Создано: 13 июля 2007 11:54 · Личное сообщение · #21 |
|
Создано: 13 июля 2007 13:46 · Личное сообщение · #22 |
![]() |
eXeL@B —› Вопросы новичков —› Как узнать адрес памяти куда писать код??? |