| 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 хорошо скажи где почитать?? я почитаю!!судовольствием!! а пока взгляни на мою програмку где ошибка??? просто чтобы я знал хоть что читать!! ---- я и есть новичек!! будь я продвинутый то непришел бы на форум!! а пиришел сюда за советом или помощью! учиться! а не потому что мне потрещать о жизни охота))))))))))   4131_11.07.2007_CRACKLAB.rU.tgz - min.asm
![]()  | 
| 
 | 
Создано: 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 —› Вопросы новичков —› Как узнать адрес памяти куда писать код??? | 




 


 



 Для печати