Re: gdb и elf

2007-11-12 Пенетрантность mitrohin a.s.
On Sat, Nov 10, 2007 at 12:43:11AM +0300, Dmitry E. Oboukhov wrote:
  есть libconnect в портах freebsd - там перехватывается connect(2), дабы 
  сделать
  bind(2) на локальную сторону сокета (bind адрес берется из переменной 
  окружения
  CONN_ADDR). используется так:
 
 набросал такой тестик, но почему-то не раотает
 что-то я делаю не так?
 
 $ cat main.c
 #include stdio.h
 
 void foo(void)
 {
   printf(This is foo() from main\n);
 }
 
 int main(void)
 {
   foo();
   return 0;
 }
 
 $ cat test_lib.c
 #include stdio.h
 
 void foo(void)
 {
   printf(This is foo() from library\n);
 }
 
 $ make clean all
 rm -f library.so program
 gcc  -shared -o library.so test_lib.c
 gcc  main.c -o program
 
 nb:[/home/dimka/test]$ LD_PRELOAD=/home/dimka/test/library.so ./program
 This is foo() from main
 
 или из простого бинарника функции не перехватить?
 

похоже только библиотечную функцию -- сам не знал -- причем она должна 
иметь __attribute__((weak)). чтобы довести тему до конца проиллюстрируем
примером.

foo.c
int foo() 
{ 
printf(%s - %s()\n, __FILE__, __func__); 
return 0; 
}

gcc -shared foo.c -o foo.so


mainfoo.c
int __attribute__((weak)) foo() 
{ 
printf(%s - %s()\n, __FILE__, __func__); 
return 0; 
}

gcc -shared mainfoo.c -o mainfoo.so


main.c
main()
{
foo();
return 0;
}

gcc main.c mainfoo.so -o main


LD_LIBRARY_PATH=. ./main
mainfoo.c - foo()

LD_LIBRARY_PATH=. LD_PRELOAD=foo.so ./main
foo.c - foo()


если статически линковать - то уже не работает. т.е.

gcc main.c mainfoo.c -o main

LD_PRELOAD=./foo.so ./main
mainfoo.c - foo()

селяви... :(

/swp


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: gdb и elf

2007-11-12 Пенетрантность Alexander GQ Gerasiov
На Sat, 10 Nov 2007 00:43:11 +0300
Dmitry E. Oboukhov [EMAIL PROTECTED] записано:


 или из простого бинарника функции не перехватить?
Да, естественно, LD_PRELOAD - это хак на уровне shared библиотек.
Обычно библиотека подгружается при первом использовании функции, а этот
хак заставляет заранее загрузить функции.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: gdb и elf

2007-11-09 Пенетрантность Покотиленко Костик
В Птн, 09/11/2007 в 12:56 +0300, Dmitry E. Oboukhov пишет:
 как адрес функции который выдает gdb преобразовать в смещение от начала
 elf-файла?

Судя по всему никак. То ж адрес в памяти, который зависим от состояния
памяти на момент выделения. Может капнуть в сторону man dlopen:

...
   int dladdr(void *addr, Dl_info *info);

   The  function  dladdr()  takes  a function pointer and tries to
resolve
   name and file where it is located. Information is stored in the
Dl_info
   structure:

   typedef struct {
 const char *dli_fname;/* Filename of defining object */
 void *dli_fbase;  /* Load address of that object */
 const char *dli_sname;/* Name of nearest lower symbol */
 void *dli_saddr;  /* Exact value of nearest symbol */
   } Dl_info;
...

Но, не уверен. Если чё получится, отпишитесь.

-- 
Покотиленко Костик [EMAIL PROTECTED]


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: gdb и elf

2007-11-09 Пенетрантность Покотиленко Костик
В Птн, 09/11/2007 в 16:38 +0300, Dmitry E. Oboukhov пишет:
  как адрес функции который выдает gdb преобразовать в смещение от начала
  elf-файла?
 
  Судя по всему никак. То ж адрес в памяти, который зависим от состояния
  памяти на момент выделения. Может капнуть в сторону man dlopen:
 насколько я понимаю все программы с одного адреса и грузятся?
 
 то есть если взять и сделать что-то вроде 
 
 #include stdio.h
 void foo(void)
 {
 }
 
 void main(void)
 {
   printf(%d\n, (int)foo);
 }
 
 то как ни вызывай всегда вернет одно и тоже число

На сколько я знаю это не правда. Тот эффект, который вы наблюдаете - это
либо между вызовами Вашей программы состояние памяти не сильно меняется
и Ваша программа грузится в одно и то же место, либо это результат
работы файлового кэша. Попробуйте запомнить адрес, перегрузиться,
запустить несколько ресурсоёмких программ и повторить попытку.

 соответственно существует прямая зависимость - смещение от начала elf и
 адрес в памяти.

На сколько я знаю такой зависимости не существует.

-- 
Покотиленко Костик [EMAIL PROTECTED]


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: gdb и elf

2007-11-09 Пенетрантность Dmitry Fedorov
09.11.07, Dmitry E. Oboukhov[EMAIL PROTECTED] написал(а):
  как адрес функции который выдает gdb преобразовать в смещение от начала
  elf-файла?
 
  Нет. Разбирать структуру elf-файла (bfd) и искать там функцию по имени.
 есть ли тулзы делающие что-то подобное?
 то есть зная имя функции получить ее смещение от начала elf?

Готовых нет. Написать самому, используя libbfd.
Но лучше переформулировать задачу.


Re: gdb и elf

2007-11-09 Пенетрантность Alexey Pechnikov
 задача стоит в том что надо пропатчить бинарник.
 исходника нет :)
 необходимая функция gdb находится а вот дальше как перейти к файлу elf?

Вспоминая про российские и международные законы, лучше на самом деле 
переформулировать задачу. А то статья светит.



Re: gdb и elf

2007-11-09 Пенетрантность Alexey Boyko
В сообщении от п'ятниця, 09-лис-2007 Dmitry E. Oboukhov написал(a):

 задача стоит в том что надо пропатчить бинарник.
 исходника нет :)
 необходимая функция gdb находится а вот дальше как перейти к файлу elf?

Помучай readelf.

А поиском кода по файлу не проще будет?



Re: gdb и elf

2007-11-09 Пенетрантность mitrohin a.s.
On Fri, Nov 09, 2007 at 05:42:08PM +0300, Dmitry E. Oboukhov wrote:
  Нет. Разбирать структуру elf-файла (bfd) и искать там функцию по имени.
  есть ли тулзы делающие что-то подобное?
  то есть зная имя функции получить ее смещение от начала elf?
 
  Готовых нет. Написать самому, используя libbfd.
  Но лучше переформулировать задачу.
 задача стоит в том что надо пропатчить бинарник.
 исходника нет :)
 необходимая функция gdb находится а вот дальше как перейти к файлу elf?
 

возможно на это посмотреть иначе. это не совсем то, что вам хочется, но
при определенных условиях может решить вашу проблему.

RTLD(1) FreeBSD General Commands ManualRTLD(1)

NAME
 ld-elf.so.1, ld.so, rtld -- run-time link-editor

DESCRIPTION
 The ld-elf.so.1 utility is a self-contained shared object providing run-
 time support for loading and link-editing shared objects into a process'
 address space.  It is also commonly known as the dynamic linker.  It uses
 the data structures contained within dynamically linked programs to
 determine which shared libraries are needed and loads them using the
 mmap(2) system call.

...
LD_PRELOAD  A list of shared libraries, separated by colons and/or
white space, to be linked in before any other shared
libraries.  If the directory is not specified then the
directories specified by LD_LIBRARY_PATH will be
searched first followed by the set of built-in stan-
dard directories.  This variable is unset for set-
user-ID and set-group-ID programs.
...


есть libconnect в портах freebsd - там перехватывается connect(2), дабы сделать 
bind(2) на локальную сторону сокета (bind адрес берется из переменной окружения 
CONN_ADDR). используется так: 

export LD_PRELOAD=/usr/local/lib/libconnect.so 
export CONN_ADDR=1.2.3.4
./program --op1 --op2

попробуйте переписать и перегрузить нужную вам функцию по аналогии. ;)

/swp


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: gdb и elf

2007-11-09 Пенетрантность Alexander GQ Gerasiov
На Fri, 9 Nov 2007 17:46:17 +0300
Alexey Pechnikov [EMAIL PROTECTED] записано:

  задача стоит в том что надо пропатчить бинарник.
  исходника нет :)
  необходимая функция gdb находится а вот дальше как перейти к файлу
  elf?
 
 Вспоминая про российские и международные законы, лучше на самом деле 
 переформулировать задачу. А то статья светит.
Если у тебя есть лицензия на использование этого бинарника, то как раз
в том, чтобы пропатчить что-то ничего противозаконного нет. Именно с
точки зрения российского законодательства. Да и с точки зрения
американского - тоже (если это в рамках fair use). До тех пор, пока ты
не нарушаешь DMCA.

-- 
Best regards,
 Alexander GQ Gerasiov

 Contacts:
 e-mail: [EMAIL PROTECTED]
 Homepage: http://gq.net.ru


signature.asc
Description: PGP signature


Re: gdb и elf

2007-11-09 Пенетрантность Alexey Pechnikov
В сообщении от Friday 09 November 2007 20:36:13 Alexander GQ Gerasiov 
написал(а):
 На Fri, 9 Nov 2007 17:46:17 +0300

 Alexey Pechnikov [EMAIL PROTECTED] записано:
   задача стоит в том что надо пропатчить бинарник.
   исходника нет :)
   необходимая функция gdb находится а вот дальше как перейти к файлу
   elf?
 
  Вспоминая про российские и международные законы, лучше на самом деле
  переформулировать задачу. А то статья светит.

 Если у тебя есть лицензия на использование этого бинарника, то как раз
 в том, чтобы пропатчить что-то ничего противозаконного нет. Именно с
 точки зрения российского законодательства. Да и с точки зрения
 американского - тоже (если это в рамках fair use). До тех пор, пока ты
 не нарушаешь DMCA.

Про лицензию ничего не упоминалось, да и понятия лицензии на ПО в законах я 
не встречал, только экземпляр программы для ЭВМ или базы данных. Потом, 
возникает вопрос намерений - входит ли требуемое изменение в 
понятие адаптация или нет. пропатчить что-то ничего противозаконного 
нет - в общем случае утверждение не верное. Например, пропатчить оффтопик 
для запуска на всех машиных организации дело как раз подсудное. 



Re: gdb и elf

2007-11-09 Пенетрантность Yuri Kozlov
09.11.07, Dmitry E. Oboukhov[EMAIL PROTECTED] написал(а):
  задача стоит в том что надо пропатчить бинарник.
  исходника нет :)
  необходимая функция gdb находится а вот дальше как перейти к файлу elf?

  Помучай readelf.

 спасибо посмотрю

  А поиском кода по файлу не проще будет?
 поиском находится несколько мест, а функция одна

objdump -x ./a.out

00400478 foo:
  400478:   55  push   %rbp
  400479:   48 89 e5mov%rsp,%rbp
  40047c:   c9  leaveq
  40047d:   c3  retq

В общем если посмотреть в файле по адресу 0x478, то
там эти самые байтики и есть.

-- 
Regards,
Yuri Kozlov


Re: gdb и elf

2007-11-09 Пенетрантность Alexey Pechnikov
 тут никаких противозаконных действий: имеетс софтина которая писалась
 наемным программером, тот уволился, исходники потом потерялись т.к. были
 никому неинтересны

Для меня это достаточное объяснение, а вот с точки зрения закона авторские 
права _всегда_ принадлежат разработчику (имущественные - работодателю, но это 
еще надо доказать). Это создает множество потенциальных проблем.

Лицо, правомерно владеющее экземпляром программы для ЭВМ или базы данных, 
вправе без получения дополнительного разрешения правообладателя осуществлять 
любые действия, связанные с функционированием программы для ЭВМ или базы 
данных в соответствии с ее назначением, в том числе запись и хранение в 
памяти ЭВМ, а также исправление явных ошибок. Запись и хранение в памяти ЭВМ 
допускаются в отношении одной ЭВМ или одного пользователя в сети, если иное 
не предусмотрено договором с правообладателем.

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


Имущественные права на программу для ЭВМ или базу данных, созданные в порядке 
выполнения служебных обязанностей или по заданию работодателя, принадлежат 
работодателю, если в договоре между ним и автором не предусмотрено иное.

Если запустите на двух компах, а оформленного договора нет, возможны коллизии. 
Ибо количество экземпляров, которые принадлежат работодателю,  может зависеть 
от назначения программы и принципиально допустимо утверждать, что обладатель 
имущественных прав имеет их в отношении одного экземпляра. Прецедентов 
подобного рода я лично не встречал, но допускаю их существование. 


 теперь вдруг стала задача:

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

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

 ну в общем враппер попробую с перехватом функции, либо просто целиком
 заново перепишу

Ай-яй-яй, а как же

информация, полученная в результате этого декомпилирования, может 
использоваться лишь для организации взаимодействия независимо разработанной 
данным лицом программы для ЭВМ с другими программами, а не для составления 
новой программы для ЭВМ, по своему виду существенно схожей с декомпилируемой 
программой для ЭВМ или для осуществления любого другого действия, нарушающего 
авторское право; 

Если поковыряете эту программу, то создавать по виду существенно схожую уже 
не имеете права.


Почитайте

ЗАКОН от 23 сентября 1992 г. N 3523-I
О правовой охране программ для электронных вычислительных машин и баз данных
http://www.relcom.ru/Archive/1997/ComputerLaw/RussiaLaws/Zak_soft.htm



Re: gdb и elf

2007-11-09 Пенетрантность Alexey Pechnikov
Интересный вы вопрос подняли. С юридической точки зрения, разумеется. В 
результате халатности работодателя и работника потеряны исходные коды 
программы, закон такую ситуацию ну никак не предусматривает. Собственно, 
программу следует ставить на баланс предприятия, тогда и вопросов не будет, 
вот бы услышать success story об этом. Отечественные юристы являются 
специалистами по промышленному праву, но не по авторскому, посему вопрос не 
тривиален.



Re: gdb и elf

2007-11-09 Пенетрантность Dmitry Fedorov
09.11.07, Dmitry E. Oboukhov[EMAIL PROTECTED] написал(а):
 чтоб это все потребовалось доказывать нужна пострадавшая сторона которая
 иски учинять будет :)

По слухам из интернета (ссылку потерял, найти не смог :)
в этой области это уже не так - пострадавшая сторона не нужна.


Re: gdb и elf

2007-11-09 Пенетрантность Mikhail Gusarov
Dmitry E. Oboukhov [EMAIL PROTECTED] writes:

 чтоб это все потребовалось доказывать нужна пострадавшая сторона
 которая иски учинять будет :)

Российские госструктуры взяли на себя расширенные и углубленные
обязательства: покарать виновного, не дожидаясь заявления пострадавшей
стороны. Видать, IT-рэкет оказался прибыльным делом.

-- 
JID: [EMAIL PROTECTED]