Сейчас на форуме: vsv1, _MBK_ (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Как узнать адрес памяти куда писать код???
Посл.ответ Сообщение

Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 09:38
· Личное сообщение · #1

пишу кряк, такие проблемы:
программу взломал
открываю файл
записываю файл в память!
знаю адрес начала кода в памяти!
как теперь мне узнать адрес того места куда нужно писать код??
знаю смещение в файле также(ну того места куда нужно править байты)
я так думаю что от нужного мне смещения нужно вычисть смещение начала файла и все ето дело добавить к адресу программы в памяти! но вот не задача гдето неполучаеться!
кто что думает по етому поводу???? просто я раньше нечего подобного не делал! а очень хочеться!




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 09:48
· Личное сообщение · #2

Ничего не понял

super_man86 пишет:
знаю смещение в файле также(ну того места куда нужно править байты)

Вот здесь и правь.




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 11 июля 2007 09:53
· Личное сообщение · #3

super_man86
ИМХО, вам сюда http://exelab.ru/kid.php

-----
Nulla aetas ad discendum sera




Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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 байт которые нам нужно записать
я так понимаю что я гдето туплю с адресом так как к остальному не придерешься




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 10:00
· Личное сообщение · #5

В новички унес. Читай теорию, ты путаешься во всем, начиная от смещений, и заканчивая попыткой впихнуть в ЕСХ 6 байт.



Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 10:09
· Личное сообщение · #6

хорошо скажи где почитать?? я почитаю!!судовольствием!! а пока взгляни на мою програмку где ошибка??? просто чтобы я знал хоть что читать!!
----
я и есть новичек!! будь я продвинутый то непришел бы на форум!! а пиришел сюда за советом или помощью! учиться! а не потому что мне потрещать о жизни охота))))))))))

4131_11.07.2007_CRACKLAB.rU.tgz - min.asm




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 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





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 10:39 · Поправил: Ara
· Личное сообщение · #8

super_man86
Непонятен и смысл исходника.

1. Открываешь два файла
2. Читаешь первый в память
3. Переходишь на смещение 42222h от начала
4. Пишешь первый файл во второй.

Я так понимаю, что ты хочешь пропатчить файл?
Ну нафик тогда два файла открывать? Пиши сразу в первый:
invoke WriteFile ,hf1,ххх,6,OFFSET nBytesWrite,NULL



Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 10:41
· Личное сообщение · #9

я знаю смещение в файле
знаю ажрес размещения в памяти
вот мне нудно найти место куда записать мой код! вот ето и не получаеться!
что такое виртуальное смещение секции???
посмотри программу и что там неправильно в том моменте где я считаю место куда писать код



Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 10:45
· Личное сообщение · #10

я пишу во второй дабы по пять раз не переписывать оригинал так как после неудачной записи он портится!! приходится его снова обновлять! вот я и зделал второй как временный!
посмотри что я неправильно пишу в память?? где ошибка! допустим я адрес нахожу правильно а тогда как нужно писать в память? да вообще в етом месте пробел у меня сильный и никак немогу понять в чем дело! уже и гнижки пролистал и инет прошарил и все равно не догоняю! понять то хочеться!! если убрать часть кода где патчиться файл в памяти то он записывает второй файл идентичным первому! тоесть из памяти на диск нормально! я именно в памяти пропатчить немогу!




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 10:48
· Личное сообщение · #11

если ты нашел смещение в файле и оно у тебя 42222h - пиши в файл как я написал выше.

Исходник сокаращается примерно до такого (нету асма под рукой, не компилил)

.386
.model flat,stdcall
option casemap:none
includelib kernel32.lib
include \masm32\include\kernel32.inc
include \masm32\include\windows.inc
.data
fname db "tttt.exe",0
xxx db 0E9h,8Ch, 00h,00h,00h,90h
.data?
hf dd ?
nBytesWrite dd ?

.code
WinMain PROC
invoke CreateFile, addr fname,GENERIC_READ or GENERIC_WRITE ,
FILE_SHARE_READ or FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
mov hf, eax
invoke SetFilePointer,hf,42222h,NULL,FILE_BEGIN
invoke WriteFile ,hf,OFFSET xxx,6,OFFSET nBytesWrite,NULL
invoke CloseHandle,hf
invoke ExitProcess,0
WinMain ENDP
end WinMain




Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 10:48
· Личное сообщение · #12

тоесть ты предлагаешь не читать файл в память а сразу писать в него?? так я понял??? ктото мне сказал что так нельзя! нужно его читать в память! или можно прямо на диске патчить????




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 10:48
· Личное сообщение · #13

super_man86 пишет:
посмотри что я неправильно пишу в память??

Не надо писать в память - пиши прямо в файл.



Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 10:51
· Личное сообщение · #14

слушай если так все просто!!! то ето хорошо!! я тока за!
но вот все равно интерестно как пропатчить файл в памяти??? может ето и геморойно но лучше разобраться сейчас пока есть такая возможность потому что потом ета проблема у меня опять выплывет!!??? что ты думаешь по етому поводу?




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 11:09
· Личное сообщение · #15

Дык.
Вот ты правильно к началу файла в памяти прибавляешь смещение

mov ecx, pMemory
add ecx, 42222h

А дальше зачем-то делаешь mov ecx,OFFSET xxx

Тут просто надо занести массив байт ххх в память.

MOV ESI,xxx
MOV EDI,ECX
MOV ECX, 6
REP MOVS byte ptr [EDI], byte ptr [ESI]

Типа того.



Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 11:21
· Личное сообщение · #16

ну как!! просто я неопытный! и незнающий! вот и пишу неграмотно! ошибки ето называеться! вот видишь благодаря тебе таких больше не будет!
------
спасибо! Ara. просвятил однозначно!




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 11:23
· Личное сообщение · #17

Ну ты проверь всё, а то мож я с ошибками написал.



Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 13:09
· Личное сообщение · #18

маленькая неточность есть!!
MOV ESI, OFFSET xxx
а так все правильно!! спасибо!



Ранг: 14.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 13:11
· Личное сообщение · #19

А да еще! вот что я делал ето геморойно! и если бы изначально делал как ты предложил! сразу в файл писать то ошибок былобы меньше! а то в память с памяти! ну и понеслось! твой способ лучше! он занимает меньше места! а чем меньше программа тем меньше она глючит! закон всесвиту!




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 11 июля 2007 17:15
· Личное сообщение · #20

Это не мой способ. Это единственно правильный...



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

Создано: 13 июля 2007 11:54
· Личное сообщение · #21

super_man86
совет. поищи исходники лоадеров (можно и трейнеров), если хошь сделать патч в памяти, там думаю найдёшь ответы...



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 13 июля 2007 13:46
· Личное сообщение · #22

super_man86 пишет:
все равно интерестно как пропатчить файл в памяти???


Вот тут почитай cracklab.narod.ru/doc/m_crk.htm


 eXeL@B —› Вопросы новичков —› Как узнать адрес памяти куда писать код???
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати