eXTracted INternals

eXTracted INternals
 
ФорумФорум  ЧаВоЧаВо  ПоискПоиск  РегистрацияРегистрация  ПользователиПользователи  ГруппыГруппы  Вход  

Поделиться | 
 

 Расширить секцию кода?

Предыдущая тема Следующая тема Перейти вниз 
АвторСообщение
oott

avatar

Количество сообщений : 11
Дата регистрации : 2008-02-01

СообщениеТема: Расширить секцию кода?   Ср 12 Мар - 12:14

Заранее извиняюсь если тема уже рассматривалась.
Но, возможно ли?
Вот например у меня код(c иды):
LDR R0, [SP,#0x30+var_18]
LDR R3, [R0]
MOV R1, #1
LDR R12, [R3,#0x40]
MOV LR, PC
BX R12
LDR R3, [SP,#0x30+var_18]
LDR R3, [R3]
STR R5, [SP,#0x30+var_28]
LDR R0, [SP,#0x30+var_18]
ADD R1, SP, #0x30+var_28
LDR R12, [R3,#0x3C]
MOV LR, PC
BX R12
LDR R3, [SP,#0x30+var_18]
LDR R12, [R3]
MOV R2, SP
MOV R3, #5
MOV R1, #0xCB
STR R3, [SP,#0x30+var_30]
STR R1, [R2,#4]
LDR R0, [SP,#0x30+var_18]
LDR R1, =dword_1000079C
LDR R12, [R12,#0xA4]
MOV LR, PC
BX R12
MOV R0, R4
BL Update__16CFbsScreenDevice
Как мне его вставить в приложение, без замены ненужного кода? Притом не абы где, из выше приведенного кода видно, что его разумно всатвить гденить в начале запуска кода.
Вернуться к началу Перейти вниз
Посмотреть профиль
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Re: Расширить секцию кода?   Чт 13 Мар - 0:39

Пачтить без замены существующего кода - нонсенс. Ты затираешь какую-то инструкцию командой прыжка на свой код, а в своем коде должен будешь выполнить затертую команду чтобы все стало на свои места.

Судя по твоему коду, вызов его можно вставить только в весьма специфическое место. Потому что у тебя тут дофига всяких регистров должно правильно передаться.
Вернуться к началу Перейти вниз
Посмотреть профиль
oott

avatar

Количество сообщений : 11
Дата регистрации : 2008-02-01

СообщениеТема: Re: Расширить секцию кода?   Чт 13 Мар - 2:27

Hex пишет:

...
А если мусорные места короткие, т.е. код свой туда не втулить, разбросать прыжками его возможно? Притом чтобы из-за своих регистров код не валился за ними следить надо, знать где можно их пустить в дело, где нельзя. А это я не могу себе представить...
Вернуться к началу Перейти вниз
Посмотреть профиль
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Re: Расширить секцию кода?   Чт 13 Мар - 6:06

oott пишет:

А если мусорные места короткие, т.е. код свой туда не втулить, разбросать прыжками его возможно?
Возможно.

oott пишет:

Притом чтобы из-за своих регистров код не валился за ними следить надо, знать где можно их пустить в дело, где нельзя. А это я не могу себе представить...
А ты подумай как патч уменьшить, уже очень он у тебя большой.
Ну или выкинь часть кода программы, который ты считаешь не нужным Smile Например какой-нить там about триста лет не нужен Smile Его можно затереть.
Вернуться к началу Перейти вниз
Посмотреть профиль
wl



Количество сообщений : 127
Дата регистрации : 2007-02-15

СообщениеТема: Re: Расширить секцию кода?   Чт 13 Мар - 6:42

код не полный - явно используется какой-то класс, если он не App/Doc/View - тогда придется еще пихать конструктор и деструктор класса, таблицу виртуальных функций. Но это так, лирика.

по поводу места - судя по коду, это 6-8 симбиан, там со свободным местом не очень жирно, лучший выход - это переписать одну из импортируемых длл - лучше всего для этого подходят те, из которых импортируются 1-2 функции (например, HAL или PLPVARIANT). Далее различаешь параметры вызова, в зависимости от них либо выполняешь оригинальный код, либо свой. Преимущества данного метода - можно использовать asm-код из ida при компиляции, а также не заботиться об отсутствующих в приложении импортов, которые тебе нужны, и не париться с релоками.
Можно также расширить секцию импорта и вообще воткнуть свою длл, но инструментов для этого нет, по крайней мере на 6-8, а на 9 у меня есть в крайне альфа-версии, писал для своих нужд, если допишу когда нибудь, выложу.

Лишнего места в exe для 9-ой симбиан обычно очень много - например, ненужная инфа после виртуальной таблицы каждого класса (некоторые правда как-то умудряются её стрипать, тут уж ничего не поделаешь).
Плюс еще на каждый класс обычно по 2 конструктора, на первый ссылок нет, я так подозреваю, что если даже он и используется, то можно просто первой командой сделать джамп на 2-й конструктор, а остальное место - себе. Но опять же, если вдруг понадобятся релоки, которых нет в доступных пределах (хотя если есть хотя бы один, то можно нужный получить из него путем сложения со смещением до нужных нам данных), тогда придется менять секцию релоков, а это геморрой еще тот, так как нет готовых программ для этих целей. В этом случае также лучше использовать свою длл с переходниками к оригинальным функциям.
Вернуться к началу Перейти вниз
Посмотреть профиль
wl



Количество сообщений : 127
Дата регистрации : 2007-02-15

СообщениеТема: Re: Расширить секцию кода?   Чт 13 Мар - 6:53

во, еще один способ добраться до данных - к PC прибавить смещение до нужных данных - константные данные у нас в одном сегменте с кодом. тогда вообще можно творить чудеса
Вернуться к началу Перейти вниз
Посмотреть профиль
oott

avatar

Количество сообщений : 11
Дата регистрации : 2008-02-01

СообщениеТема: Re: Расширить секцию кода?   Чт 13 Мар - 15:50

Спасибо hex и особено wl за советы...
Вобщем решил я тут попрактиковаться в этом деле, начал использовать(как мне показалось самый легкий способ), способ с прыжками, вобщем прыжок и выполнение подтёртой строчки вроди работает(там всё занопил и выполняю тока подтёртую строку), но как тока я там же пытаюсь выполнить свою функцию, код валится, я то понимаю почему валится, потому что не выполняются должные условия функции, с которыми надо войти в вызываемую функцию. Я пытался выполнить всё это по примеру с этой функцией из другого кода, но блин в хекс кодах, это трудно подстроить под нужный тебе код. И это при том что с импортом мне повезло, заветная функция была исследуемом коде. Вот собствено как в иде происходит вызов нужной мне функции с некоторыми её параметрами:
Update__16CFbsScreenDevice
10000634 LDR R12, =__imp_Update__16CFbsScreenDevice
10000638 LDR R12, [R12]
1000063C BX R12
Как мне правильно её вызвать в хекс коде? Как ни пробовал -валится.
Или всёже мне будет легче написать это в карбиде, а потом вызвать написанное из кода, со всем вытикающим, как писал wl...&?
Вобщем на практике у меня не оч получилось реализовать задумку...
Вернуться к началу Перейти вниз
Посмотреть профиль
wl



Количество сообщений : 127
Дата регистрации : 2007-02-15

СообщениеТема: Re: Расширить секцию кода?   Чт 13 Мар - 18:08

у этой функции (Update_...) один параметр CFbsScreenDevice* this в регистре R0. Если этот указатель не валидный, валиться будет. Функция вызывается обычно - BL offset. Если есть переходы между ARM и THUMB, там свои особенности. Также нужно проследить, не различаются ли режимы перед вызовом твоего патча, и в самом патче и также принять соответствующие меры.

Вообще, если перевести код на С++, будет примерно следующее:
Код:

var_18->Method_0x40(1); // CAnyClass* var_18
var_18->Method_0x3C((TInt&)var_28); // var_28 = R5;
var_18->Method_0xA4(dword_1000079C, SP); // int SP[2] = {5, 0xCB}, возможно TSize
R4->Update(); // CFbsScreenDevice* R4
Вернуться к началу Перейти вниз
Посмотреть профиль
oott

avatar

Количество сообщений : 11
Дата регистрации : 2008-02-01

СообщениеТема: Re: Расширить секцию кода?   Пн 17 Мар - 3:51

Спасибо за си код, как один из вариантов. В хекс коде можно это выполнить? Переходов между режимами вроди нет, там все в арм. Если выполнить один парметр R0 и вызвать эту функцию, то функция всеравно не работает. В R0 я так понял должен быть текст вывода, но пойдей, как параметры входа в эту функцию должны быть еще и коордиоты расположения текста на экране. Тока где это там.... ?
P.S. С Д.Р. еще раз, удачи Wink
Вернуться к началу Перейти вниз
Посмотреть профиль
wl



Количество сообщений : 127
Дата регистрации : 2007-02-15

СообщениеТема: Re: Расширить секцию кода?   Пн 17 Мар - 5:55

функция не вся
Вернуться к началу Перейти вниз
Посмотреть профиль
Спонсируемый контент




СообщениеТема: Re: Расширить секцию кода?   

Вернуться к началу Перейти вниз
 
Расширить секцию кода?
Предыдущая тема Следующая тема Вернуться к началу 
Страница 1 из 1

Права доступа к этому форуму:Вы не можете отвечать на сообщения
eXTracted INternals :: Вопросы и ответы :: Общий форум-
Перейти: