Pull to refresh

Comments 43

UFO just landed and posted this here
Так я могу себе +100 500 релизов замутить :-) Вот если бы честно признались, что исходники профукали, а не время тянули и «шляпу» подсовывали…
У них весь функционал внутри бинарника web-сервера (goahead), соответственно и различия тоже только там. Он не GPL, поэтому предоставлять вам его исходники они не обязаны (хотя иногда они случайно попадают в архивы).
На исходники goahead я не претендую. При сборке образа прошивки эти не GPL куски попадают в виде бинарников. Так вот возникает вопрос — где патченный и откомпилированный D-Link'ом goahead бинарник с закрытой уязвимостью (сравнение файлов не показывает отличий)?
Бинарника goahead может и не быть — не обязаны. Судя по всему — его там и нет.
Они вообще не обязаны вам выдавать исходники, из которых можно собрать прошивку; только исходники, из которых можно собрать компоненты прошивки, распространяемые по GPL.
То есть в принципе — они могут вам дать отдельно исходники ядра, отдельно библиотек, отдельно всяких разных используемых GPL-утилит.
есть исходники goahead

Листинг goahead-2.1.4
mips-toolchain:/opt/_compare# ls -la 1.08/GPL_Di524up/user/goahead-2.1.4/
итого 976
drwxr-xr-x 12 root root 4096 2014-08-07 12:11.
drwxr-xr-x 32 root root 4096 2014-08-07 12:11…
-rwxr--r-- 1 root root 7102 2014-08-07 12:11 asp.c
-rwxr--r-- 1 root root 25243 2014-08-07 12:11 balloc.c
-rwxr--r-- 1 root root 4415 2014-08-07 12:11 base64.c
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 CE
-rwxr--r-- 1 root root 10437 2014-08-07 12:11 cgi.c
-rwxr--r-- 1 root root 10831 2014-08-07 12:11 default.c
-rwxr--r-- 1 root root 132760 2014-08-07 12:11 DeviceManagementFramework.pdf
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 ECOS
-rwxr--r-- 1 root root 1422 2014-08-07 12:11 ej.h
-rwxr--r-- 1 root root 7277 2014-08-07 12:11 ejIntrn.h
-rwxr--r-- 1 root root 14608 2014-08-07 12:11 ejlex.c
-rwxr--r-- 1 root root 36542 2014-08-07 12:11 ejparse.c
-rwxr--r-- 1 root root 22834 2014-08-07 12:11 emfdb.c
-rwxr--r-- 1 root root 2818 2014-08-07 12:11 emfdb.h
-rwxr--r-- 1 root root 4055 2014-08-07 12:11 form.c
-rwxr--r-- 1 root root 10268 2014-08-07 12:11 handler.c
-rwxr--r-- 1 root root 4278 2014-08-07 12:11 h.c
-rwxr--r-- 1 root root 13605 2014-08-07 12:11 license.txt
drwxr-xr-x 2 root root 4096 2014-09-16 09:41 LINUX
-rwxr--r-- 1 root root 0 2014-08-07 12:11 log
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 LYNX
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 MACOSX
-rwxr--r-- 1 root root 439 2014-08-07 12:11 Makefile
-rwxr--r-- 1 root root 10545 2014-08-07 12:11 md5c.c
-rwxr--r-- 1 root root 1565 2014-08-07 12:11 md5.h
-rwxr--r-- 1 root root 4090 2014-08-07 12:11 mime.c
-rwxr--r-- 1 root root 16791 2014-08-07 12:11 misc.c
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 NW
-rw-r--r-- 1 root root 0 2014-08-07 12:11 original
-rwxr--r-- 1 root root 502 2006-03-17 11:38 original Makefile
-rwxr--r-- 1 root root 145612 2014-08-07 12:11 output.c
-rwxr--r-- 1 root root 3032 2014-08-07 12:11 page.c
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 QNX4
-rwxr--r-- 1 root root 146 2014-08-07 12:11 readme.txt
-rwxr--r-- 1 root root 14560 2014-08-07 12:11 release.htm
-rwxr--r-- 1 root root 13846 2014-08-07 12:11 ringq.c
-rwxr--r-- 1 root root 4161 2014-08-07 12:11 rom.c
-rwxr--r-- 1 root root 6432 2014-08-07 12:11 security.c
-rwxr--r-- 1 root root 17856 2014-08-07 12:11 sock.c
-rwxr--r-- 1 root root 22768 2014-08-07 12:11 sockGen.c
-rwxr--r-- 1 root root 10892 2014-08-07 12:11 sym.c
-rwxr--r-- 1 root root 6046 2014-08-07 12:11 uemf.c
-rwxr--r-- 1 root root 31218 2014-08-07 12:11 uemf.h
-rwxr--r-- 1 root root 31002 2014-08-07 12:11 um.c
-rwxr--r-- 1 root root 4616 2014-08-07 12:11 um.h
-rwxr--r-- 1 root root 16617 2014-08-07 12:11 umui.c
-rwxr--r-- 1 root root 4652 2014-08-07 12:11 url.c
-rwxr--r-- 1 root root 24265 2014-08-07 12:11 value.c
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 VXWORKS
-rwxr--r-- 1 root root 4540 2014-08-07 12:11 webcomp.c
-rwxr--r-- 1 root root 347 2014-08-07 12:11 webrom.c
-rwxr--r-- 1 root root 72378 2014-08-07 12:11 webs.c
-rwxr--r-- 1 root root 5222 2014-08-07 12:11 websda.c
-rwxr--r-- 1 root root 1101 2014-08-07 12:11 websda.h
-rwxr--r-- 1 root root 10208 2014-08-07 12:11 webs.h
-rwxr--r-- 1 root root 14288 2014-08-07 12:11 websSSL.c
-rwxr--r-- 1 root root 1710 2014-08-07 12:11 websSSL.h
-rwxr--r-- 1 root root 4557 2014-08-07 12:11 websuemf.c
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 WIN
-rwxr--r-- 1 root root 8616 2014-08-07 12:11 wsIntrn.h
drwxr-xr-x 2 root root 4096 2014-08-07 12:11 www

О.
grep-ните по ним, есть ли там dlink-специфичные ф-ции. У них бывают исходники одни, а бинарник совсем другой.
Ещё кстати видел когда-то половину исходников.
Поясните пожалуйста, какие вхождения искать?
Попробуйте фрагменты URL.
Если есть информация по уязвимости — попробуйте поискать уязвимый код.
Да, похоже все есть.

less /opt/_compare/1.08/GPL_Di524up/user/goahead-2.1.4/www/upnp.asp

Скрытый текст
UPnP

UPnP Configuration

UPnP Service
<input type=checkbox name=enable value=1 <% asp_upnp(); %> >Enable








Кстати, вполне может лежать старая версия goahead. Формально — всё соблюдено.
У них это нигде не оговорено. Вот тут есть реальный судебный прецедент. Бинарники должны соответствовать исходному коду.
Правильно, исходники GPL-компонентов должны соответствовать бинарникам. Конкретно по ссылке — у них в плеере изменения в ядры были.
Это, увы, не тот случай.
Кстати там не только устранение уязвимости было. Взято из Release Note v1.08b2

Note:
1. This FW update is for solving the reported issue from www.devttys0.com
Problems Resolved:
1. Fixed the potential security issue.
2. Fixed the minor PPPoE dial up issue.

По пункту 2 ничего не нашел. Тоже в их бинарниках?
А если грепнуть именно alpha_auth_check или xmlset_roodkcableoj28840ybtide?
Да, есть! В не вычищенных логах сборки в опциях.

Лог сборки
/opt/_compare/1.08/GPL_Di524up/user/xsupplicant-1.2.2/config.log:ac_cv_env_CFLAGS_value='-Os -mips1 -msoft-float -fPIC -Dlinux -D__linux__ -Dunix -DEMBED -I/opt/20051017/RealTek865x_062/include -nostdinc -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062 -idirafter /opt/toolchain_mips_nofpu/usr/bin/../lib/gcc-lib/mips-linux-uclibc/3.3.3//include -I/opt/20051017/RealTek865x_062/linux-2.4.x/include -DPRODUCT_NAME="\«DI-724UP+A\»" -DUSB_LED_GPIO_A5 -DDI524UP=1 -DUSER_DEFINE_DAYLIGHT_SAVING=1 -DDONT_TOUCH_TTL -DALOG_NOTICE=224 -DALOG_DROP=216 -DALOG_ATTACK=208 -DALOG_DEBUG=200 -DALOG_SYSACT=192 -DXMLSETC_SEP_CHAR=0x07 -DCONFIG_WIRELESS_CARD_REALTEK=1 -DCONFIG_ALPHA_SMRTNTKY=1 -DUSB_DEVICE=1 -DUSE_PRINTER=1 -DCONFIG_WAN_BIGPOND=1 -I/opt/20051017/RealTek865x_062/user/goahead-2.1.4/LINUX -I/opt/20051017/RealTek865x_062/user/alpha_websrv -I/opt/20051017/RealTek865x_062/user/alpha_websrv/RealTek -I/opt/20051017/RealTek865x_062/user/alpha_websrv/alpha_configapi -DALPHA=1 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_INT64T=1 -DWIRELESS=1 -DPRODUCT_SIGNATURE=0x60420010 -DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»" -I.'
/opt/_compare/1.08/GPL_Di524up/user/xsupplicant-1.2.2/config.log:CFLAGS=' -Os -mips1 -msoft-float -fPIC -Dlinux -D__linux__ -Dunix -DEMBED -I/opt/20051017/RealTek865x_062/include -nostdinc -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062 -idirafter /opt/toolchain_mips_nofpu/usr/bin/../lib/gcc-lib/mips-linux-uclibc/3.3.3//include -I/opt/20051017/RealTek865x_062/linux-2.4.x/include -DPRODUCT_NAME="\«DI-724UP+A\»" -DUSB_LED_GPIO_A5 -DDI524UP=1 -DUSER_DEFINE_DAYLIGHT_SAVING=1 -DDONT_TOUCH_TTL -DALOG_NOTICE=224 -DALOG_DROP=216 -DALOG_ATTACK=208 -DALOG_DEBUG=200 -DALOG_SYSACT=192 -DXMLSETC_SEP_CHAR=0x07 -DCONFIG_WIRELESS_CARD_REALTEK=1 -DCONFIG_ALPHA_SMRTNTKY=1 -DUSB_DEVICE=1 -DUSE_PRINTER=1 -DCONFIG_WAN_BIGPOND=1 -I/opt/20051017/RealTek865x_062/user/goahead-2.1.4/LINUX -I/opt/20051017/RealTek865x_062/user/alpha_websrv -I/opt/20051017/RealTek865x_062/user/alpha_websrv/RealTek -I/opt/20051017/RealTek865x_062/user/alpha_websrv/alpha_configapi -DALPHA=1 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_INT64T=1 -DWIRELESS=1 -DPRODUCT_SIGNATURE=0x60420010 -DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»" -I. -Wall '
/opt/_compare/1.08/GPL_Di524up/user/xsupplicant-1.2.2/drivers/Makefile:CFLAGS = -Os -mips1 -msoft-float -fPIC -Dlinux -D__linux__ -Dunix -DEMBED -I/opt/20051017/RealTek865x_062/include -nostdinc -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062 -idirafter /opt/toolchain_mips_nofpu/usr/bin/../lib/gcc-lib/mips-linux-uclibc/3.3.3//include -I/opt/20051017/RealTek865x_062/linux-2.4.x/include -DPRODUCT_NAME="\«DI-724UP+A\»" -DUSB_LED_GPIO_A5 -DDI524UP=1 -DUSER_DEFINE_DAYLIGHT_SAVING=1 -DDONT_TOUCH_TTL -DALOG_NOTICE=224 -DALOG_DROP=216 -DALOG_ATTACK=208 -DALOG_DEBUG=200 -DALOG_SYSACT=192 -DXMLSETC_SEP_CHAR=0x07 -DCONFIG_WIRELESS_CARD_REALTEK=1 -DCONFIG_ALPHA_SMRTNTKY=1 -DUSB_DEVICE=1 -DUSE_PRINTER=1 -DCONFIG_WAN_BIGPOND=1 -I/opt/20051017/RealTek865x_062/user/goahead-2.1.4/LINUX -I/opt/20051017/RealTek865x_062/user/alpha_websrv -I/opt/20051017/RealTek865x_062/user/alpha_websrv/RealTek -I/opt/20051017/RealTek865x_062/user/alpha_websrv/alpha_configapi -DALPHA=1 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_INT64T=1 -DWIRELESS=1 -DPRODUCT_SIGNATURE=0x60420010 -DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»" -I. -Wall

Вот это меня окончательно убеждает в том, что это не исходники версии 1.08b2 и имеет место подлог.
-DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»"
Красота, прямым текстом…
Если бы для des-3526 сделали открытую прошивку — вот это было бы интересно, но это фантастика :)

Дело даже не в том, что можно добавить функционал — у меня например лежит несколько таких устройств — они при включении загружают прошивку до 100% и висят.

Ну ясное дело, отправлял их в сервис — не ремонтопригодны, правда, пожизненная гарантия, может быть заменили бы… ну в общем разговор не о том.

Можно было бы сделать «отладочную» прошивку и смотреть в логах, на каком этапе происходит сбой запуска свитча.
Разбирали сам аппарат? Внутри что-то наподобие UART интерфейса присутствует?
Консоль торчит прямо наружу, отдельного UART нет. Это же свитч.
кондеры проверили? заменили?
каэшн, и на блоке питания и на плате :)
не могу понять автора — в чем принципиальная сложность пересборки ядра альтернативной прошивки против стоковой?
Да, было такое дело в далеком прошлом (сейчас, в основном, домашним железом занимаюсь по-знакомым в виде «распаковал-включил-сделал настройки из web-ui — пошли на кухню на обмывку», а железок старше 3х лет практически и в глаза не вижу)

Насчет патчей — тут надо смотреть детальнее, почему не собирается как надо… скорее всего просто патчи под очень древнее ядро были заточены (учитывая их дату), а Вы собираете с более новыми.

На самом деле мой вопрос был более риторический — неужели компиляция (если есть из чего) стоковой прошивки устройства проще чем компиляция альтернативной? Я не могу сравнивать, т.к. ни для одной фирменной железки не сталкивался с открытым firmware. Но имел дело с написанием модулей для opensource решений с нуля (от разработки железа)

Кстати, на Хабре есть цикл статей от уважаемого Ariman под названием Миникомпьютер из роутера с OpenWRT, где детально описывается путь от железа до написания драйвера ядра. Немного не по теме, но может будет интересно.

P.S. это задача just for fun или для серьезного применения в рабочем процессе компании? от меня — за рвение к новым знаниям конечно же плюс, но если это для рабочего процесса, то некрофилизм к железу конечно огорчает…
Спасибо за ссылки на посты, почитаю.
Ядро там версии 2.4, патчи для него. А вот это патчи для 2.6, их тоже пробовал — ошибки при компиляции. Пришлось искать на какую ревизию OpenWRT их накладывать, ибо авторы этого не указывают.
Компиляция стоковой прошивки проще в том смысле, что там кухню для всего этого собирать не надо — есть в комплекте, к тому же какие никакие конфиги ядра и софта прилагаются, не надо их с нуля делать.
По поводу вопроса для чего я это делаю — есть небольшой проект по устройству видео наблюдения на загородном доме, с помощью этого железа хочу реализовать.
Есть набор патчей от энтузиастов, добавляющих поддержку железа в OpenWRT, в ветку их не добавили и оно не компилируется так как надо.
UFO just landed and posted this here
Вот кстати интересно, каким образом это все в «правовое русло» вливается? Были же выигранные судебные дела, штрафы, исходники открывали в конечном итоге… Чье внимание на эти проблемы можно обращать?
UFO just landed and posted this here
GPL v.2, под которой распространяется Linux, не запрещает подобную TiVo`изацию… И более того, Linux`овское исключение разрешает несвободные модули в ядре. А GPL в целом, в свою очередь, ЕМНИП, разрешает линкование с несвободными системными библиотеками…
Драйвера, если это модули ядра, обязаны быть под GPL.
Поэтому, кстати, у nvidia, например, драйвер делится на модуль ядра (который по сути «переходник») и закрытый блоб.
Альтернативные, более функциональные и современные прошивки, такие как OpenWRT или DD-WRT существуют для устройств на таком же процессоре как и у DI-524UP — Realtek RTL8650B

Подскажите, где это дело можно достать. Имеется роутер dlink DIR120 на том-же чипе, но без wifi. Прошивки от DI524UP подходят.
Вот здесь он вроде присутствует в списке поддерживаемых…
У DIR-120 очень много всяких offload-ов в железе. На альтернативных прошивках в плане производительности всё очень грустно.
Спасибо, почитал) Похоже, что pcduino8 и похожие платы будут с blob прошивками на старых linux ядрах и скорее всего без аппаратного ускорения декодирования видео, OpenGL и т.п.
к слову, pcduino8 это optimusboard с другим цветом pcb/silkscreen, там, кажется, никаких отличий нет.
Ну, такой способ апить версии софта очень давно уже известен.

/*Windows '98 source code.*/

/*
TOP SECRET Microsoft© Code
Project: Chicago(tm)
Projected release-date: Summer 1998
*/

#include «win31.h»
#include «win95.h»
#include «evenmore.h»
#include «oldstuff.h»
#include «billrulz.h»
#define INSTALL_HARD

char make_prog_look_big 1600000;

void main()
{
while(!CRASHED)
{
display_copyright_message();
display_bill_rules_message();
do_nothing_loop();

if (first_time_installation)
{
make_50_megabyte_swapfile();
do_nothing_loop();
totally_screw_up_HPFS_file_system();
search_and_destroy_the_rest_of_OS/2();
hang_system();
}

write_something(anything);
display_copyright_message();
do_nothing_loop();
do_some_stuff();
if (still_not_crashed)
{
display_copyright_message();
do_nothing_loop();
basically_run_windows_3.1();
do_nothing_loop();
do_nothing_loop();
}
}

if (detect_cache())
disable_cache();

if (fast_cpu())
{
set_wait_states(lots);
set_mouse(speed, very_slow);
set_mouse(action, jumpy);
set_mouse(reaction, sometimes);
}

/* printf(«Welcome to Windows 3.11»); */
/* printf(«Welcome to Windows 95»); */
printf(«Welcome to Windows 98»);

if (system_ok())
crash(to_dos_prompt);
else
system_memory = open(«a:\swp0001.swp», O_CREATE);

while(something)
{
sleep(5);
get_user_input();
sleep(5);
act_on_user_input();
sleep(5);
}
create_general_protection_fault();

}
Sign up to leave a comment.

Articles