Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 28 января!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

АРХИВ ФОРУМА eXeL@B
https://exelab.ru/f/

   

Skyer Передвинуть кусочек кода. Вот код из IDA:


Skyer Передвинуть кусочек кода. Вот код из IDA:

cseg01:000939C9 sub_939C9 proc near ; CODE XREF: sub_93974+45p
cseg01:000939C9 C7 05 8D 14 0F 00 2F 07 18 00 mov dword_F148D, offset unk_18072F
cseg01:000939D3 E8 58 01 00 00 call sub_93B30
cseg01:000939D8 75 23 jnz short locret_939FD
cseg01:000939DA C7 05 A1 14 0F 00 C2 07 18 00 mov dword_F14A1, offset unk_1807C2
cseg01:000939E4 8B 35 A1 14 0F 00 mov esi, dword_F14A1
cseg01:000939EA 66 8B 06 mov ax, [esi]
cseg01:000939ED 66 A3 6D 14 0F 00 mov word ptr dword_F146D, ax
cseg01:000939F3 E8 D6 01 00 00 call sub_93BCE
cseg01:000939F8 E8 1C 02 00 00 call sub_93C19
cseg01:000939FD
cseg01:000939FD locret_939FD: ; CODE XREF: sub_939C9+Fj
cseg01:000939FD C3 retn
cseg01:000939FD sub_939C9 endp

Этот код вызывается одной строчкой: call sub_939C9

Что я хочу - переставить этот код в какое-то другое место файла. Чтобы при этом функциональность осталась та же. Я делаю копипейст, и копирую всё это на другое свободное место. Затем в HIEW изменяю все call’ы и джамперы, чтобы они вызывали то, что первоначально. Затем изменяю строчку call sub_939C9 на «call ‹новое место›»

Однако, когда я это сделал, и снова прогнал весь файл в IDA(много времени, мля, занимает), оказалось, что код совсем по-другому воспринимался. Инструкции почему-то интерпретировались по-другому(хотя код практически тот же), и получилась полная чушь.

Поэтому вопрос - что нужно делать, чтобы участок кода перенести в другое место файла, и при этом сохранить его работу неизменной?
nice :: Skyer
Э, брат, какой хитрый да?
:) Когда в hiew сохраняешь кусок кода использую не win и не dos кодировку, а используй опцию заветную As iS

Skyer :: nice
Я попробовал найти в хелпе то, что ты говоришь, но не нашёл:)

Что за кодировка, и как активизируется?

nice :: Skyer
Открыл, например, файл. Нажал *, выделил кол-во нужных байт, опять * (что бы появилась возможность манипулировать блоками).
теперь F2(если в файл хочешь сохранить). Пишешь имя файла, смещение указваешь, и выбираешь таблицу символов, вот здесь тебе и надо выставить «As IS»

Skyer :: Так я не в отдельный файл хочу код переместить, а в свободное место того же файла, где код находится.

KLAUS :: Попробуй по call попрыгай, была такая фигня, так вроде в call вбит нужный адрес а скачет он совсем в другое место.

Skyer :: KLAUS

Да, была такая фигня, но с call’ом разобрался - он ведёт туда, куда надо. А вот сам кусочек кода в этом месте интерпретируется совсем не так как надо. Один и тот же код интерпретируется в совсем другие инструкции.

Самое галимое, что IDA очень долго файл грузит(двухмеговый файл). И каждый раз когда делаешь какие-то изменения, приходится очень долго ждать. Толком не поэксперементируешь.

[RU].Ban0K! :: Skyer
Попробуй сделать некий инкубатор кода в маленькой проге... и там поэХсперементируй. Я так делал когда писал защиту на CD...

WELL :: Skyer
А ты в какое место код перемещаешь? Может ты не совсем правильно место для вставки выбрал.

Skyer :: [RU].Ban0K!

цитата:
Попробуй сделать некий инкубатор кода в маленькой проге...


Отдалённо понял, но поясни, что ты имеешь в виду.

WELL
Я в разные перемещал. Сейчас попробую изменённый код привести.

KLAUS :: ВОт то место от куда ты переместил кусок, во время выполняния туда ничего не обращается/свирят?

Skyer ::
цитата:
ВОт то место от куда ты переместил кусок, во время выполняния туда ничего не обращается/свирят?


Нет.

Skyer :: Блин, я даже примеров привести не могу. ИДА лопатит код просто как хочет. Откуда она взяла те хекс-символы, которые она отображает после переноса конкретного кода, я понять не могу:)

Skyer :: Help!:)

SeDoYHg :: Skyer

Почитай топик про ИДу, там даны ссылки на полезную информацию... Почитай...

WELL :: Skyer
Так а сама прога-то пашет?

KLAUS :: Да не будет она пахать, смещение адресов в памяти происходит и всё данные сбиваются!
Здесь нужно call’ы jmp заменять

[RU].Ban0K! :: KLAUS
Delta на что спрашивается...?

KLAUS :: [RU].Ban0K!

Чё за Delta?

[RU].Ban0K! :: KLAUS
Блин, дельта смещение... типа:

call DELTA
DELTA:
pop ebx
sub ebx,DELTA

..............
call PROC+ebx ; тут я так для виду написал... надо на mov разложить
.............

ebx контролирует отход от реальности, компилируешь его на первичном месте, а потом переноси куда хошь
Это гиморно, но работает всегда... эта штука восновном используется в FlyCode’ах

ufo_bird :: Уважаемые!
а не надо ли в этом случае FixUp’ы пофиксить, или я ошибаюсь?
секция reloc в программе-то есть, или нет?
и очень было бы интересно все-таки увидеть, как IDA показывает этот новый кусок кода.






   
Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS