CreepyLink.com je nový zkracovač URL adres, 'díky kterému budou vaše odkazy vypadat tak podezřele, jak je to jen možné'. Například odkaz na abclinuxu.cz tento zkracovač převádí do podoby 'https://netflix.web-safe.link/logger_8oIlgs_free_money.php'. Dle prohlášení autora je CreepyLink alternativou ke zkracovači ShadyURL (repozitář na githubu), který dnes již bohužel není v provozu.
Na blogu Raspberry Pi byla představena rozšiřující deska Raspberry Pi AI HAT+ 2 s akcelerátorem Hailo-10 a 8 GB RAM. Na rozdíl od předchozí Raspberry Pi AI HAT+ podporuje generativní AI. Cena desky je 130 dolarů.
Wikipedie slaví 25. výročí svého založení. Vznikla 15. ledna 2001 jako doplňkový projekt k dnes již neexistující encyklopedii Nupedia. Doména wikipedia.org byla zaregistrována 12. ledna 2001. Zítra proběhne v Praze Večer svobodné kultury, který pořádá spolek Wikimedia ČR.
Po více než dvou letech od vydání předchozí verze 2.12 byla vydána nová stabilní verze 2.14 systémového zavaděče GNU GRUB (GRand Unified Bootloader, Wikipedie). Přehled novinek v souboru NEWS a v aktualizované dokumentaci.
Google Chrome 144 byl prohlášen za stabilní. Nejnovější stabilní verze 144.0.7559.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 10 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře (YouTube).
Microsoft zveřejnil zdrojový kód XAML Studia a uvolnil ho pod MIT licencí. XAML Studio je nástroj ze světa Windows, určený pro tvorbu uživatelského rozhraní aplikací pomocí XAML (Extensible Application Markup Language). Stalo se tak zhruba po osmi letech od prvního prohlášení Microsoftu, že se tento kód chystá zveřejnit.
TimeCapsule, 'časová kapsle', je jazykový model trénovaný výhradně na datech z určitých míst a časových období, aby se tak napodobila autentická slovní zásoba, způsob vyjadřování a názory dané doby. Na Hugging face jsou k dispozici modely natrénované na historických textech dostupných v oblasti Londýna mezi lety 1800 až 1875.
Radicle byl vydán ve verzi 1.6.0 s kódovým jménem Amaryllis. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
Zemřel Scott Adams, tvůrce komiksových stripů Dilbert parodujících pracovní prostředí velké firmy.
Sdružení CZ.NIC vydalo novou verzi Knot Resolveru (6.1.0). Jedná se o první vydanou stabilní verzi 6, která je nyní oficiálně preferovanou a doporučovanou verzí, namísto předešlé verze 5. Více o Knot Resolveru 6 je možné se dočíst přímo v dokumentaci.
Možná také máte nějakou tu svítící blikající USB myš, klávesnici či dokonce tablet. A možná nejen že svítí, ale dají se u ní nastavit parametry typu rozlišení snímání v DPI. A možná, možná vás, stejně jako mě, trochu rozmrzelo, že se tato rozšíření prakticky nedají konfigurovat z Linuxu.
Jestliže patříte do této skupiny lidí, mám pro vás dobrou zprávu. S trochou odposlouchávání, zkoumání a programování lze obvykle relativně snadno řídící příkazy rozluštit za pomoci reverzního inženýrství ovládacích nástrojů pro Windows.
V tomto článku se pokusím vás provést vším, co je zapotřebí k tomu, abyste si nějaký ten vlastní ovládací nástroj dokázali, pokud umíte programovat, napsat sami. Spoustu věcí kvůli rozsahu budu muset opomenout; doufám, že budete stíhat. A i když nebudete, snad si přece jen z článku něco odnesete. Tak hurá do toho!
Nejdříve vám povím něco málo o USB. V základě je to protokol vzdáleně podobný například Ethernetu — data putují po kabelu v takzvaných rámcích. Tyto rámce mají specifikací určenou strukturu a API v operačních systémech vám, podobně jako tomu je u regulérních síťových protokolů, umožňují snadno tuto komunikaci řídit.
Není k tomu tedy nutně potřeba psát ani všelijaké ovladače běžící v režimu jádra. Čemu se však už pravděpodobně nevyhnete, jsou administrátorská oprávnění. To by tak hrálo, aby se kdejaký uživatel mohl hrabat v zařízeních.
Pokud máte zájem se podívat na USB trochu blíže, můžu doporučit například tento dokument (anglicky).
Nás nyní bude zajímat hlavně specifikace USB HID — Human Interface Devices, tedy zařízení zprostředkující komunikaci s uživatelem. Ta standardizuje rozhraní pro veškeré myši, klávesnice… no, obecně pro všechno, na co saháte, aby ten váš počítač dělal, co po něm zrovna chcete.
Abychom mohli odposlouchávat, musíme v první řadě mít co odposlouchávat, to jest nějaký virtualizovaný operační systém, do kterého můžeme pomocí USB passthrough připojit zkoumané zařízení. Já pro virtualizaci používám VirtualBox, nicméně zrovna tak by mělo fungovat i takové QEMU.
Jako první krok tedy připojte své zařízení do hostovaného operačního systému a nainstalujte pro ně ovladače od výrobce, ze kterých chcete vymámit řídící příkazy.
Abychom mohli provoz probíhající na USB sběrnici monitorovat, je nutné zavést
modul usbmon:
$ sudo modprobe usbmon
A nyní už můžeme spustit Wireshark a vesele začít s monitoringem. Takhle
přímočaré to je. Jediný háček může nastat ohledně oprávnění — Wireshark je
nutné spustit pod uživatelem root, což se mu příliš nelíbí:
$ gksu wireshark
Pokud se to dá nějak obejít, můžete se svěřit v komentářích, já jsem na to nepřišel.
Nyní vyvstává otázka, na které z oněch X sběrnic leží vaše zařízení. To lze
zjistit z výstupu lsusb:
Bus 001 Device 002: ID 064e:a101 Suyin Corp. Acer CrystalEye Webcam Bus 006 Device 005: ID 1038:1369 Ideazon, Inc. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ...
Ideazon je zde alias pro SteelSeries, což je právě moje myška.
Kdybyste si u sebe nebyli jistí, můžete zkusit spustit lsusb pod
rootem s přepínačem -v a pobrodit se ve výsledném výpisu.
Bus 006 vypovídá o tom, na jaké sběrnici je zařízení umístěné;
odpovídající rozhraní pro odposlech se nazývá usbmon6. Druhé číslo přijde na
řadu do filtru, pokud máte na dané sběrnici více zařízení a rámce by se vám
pletly mezi sebou — do příslušného vstupního pole stačí zadat něco jako
usb.device_address == 5.
Na následujícím obrázku je zachycený začátek inicializace zařízení ve Windows XP:
Jak si můžete povšimnout, teče těch dat spousta a spousta. Wireshark je naštěstí docela šikovný nástroj a umí podle filtrů dokonce i podbarvovat, takže se v tom nemusíte zas až tak ztrácet. Vyzkoušíme si to v praxi. Spusťte ovládací utilitu pro zařízení a něco v ní změňte tak, aby se změna projevila na zařízení, nejlépe nějak viditelně. Poté se podívejte zpět do Wiresharku. V mém případě tato akce vyprodukuje kopu SET_REPORT requestů.
To není náhoda. Požadavky SET_REPORT a GET_REPORT tvoří mechanismus, jakým se rozšíření specifická pro výrobce v USB HID ovládají. V seznamu rámců je podbarvíte například tak, že si jeden z těchto rámců vyberete, v sekci URB setup kliknete pravým tlačítkem na pole bRequest a pomocí nabídky, kterou mám u sebe pojmenovanou Colorize with Filter, přiřadíte tomuto požadavku některou z barviček.
Takhle už je to lepší — tohle nás skutečně zajímá. Když si nyní prohlédnu, co dané rámce obsahují, dozvím se kromě jiných nepříliš zajímavých informací například to, že wLength, tedy délka přenášených dat, je u mě vždy 32 bajtů.
v URB setup > bmRequestType: 0x21 bRequest: SET_REPORT (0x09) > wValue: 0x0200 wIndex: 0 wLength: 32
A když si prohlédnu těch 32 krát N bajtů připojených na konec všech těch rámců, co se odesílají v rámci jedné „dávky“… ono by to mohlo i dávat nějaký smysl, že?
0040 07 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 05 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 03 01 13 00 00 00 00 00 00 00 00 00 00 00 00 00 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
< A dalších asi 5 rámců… >
Přichází na řadu detektivní práce specifická pro to či ono zařízení: v závislosti na různých parametrech nastavovaných zařízení zjistit, co se mění a v reakci na co. S tím už vám příliš neporadím. Jen bych rád poznamenal, že se mnoho věcí neřeší v hardwaru, ale spíše v ovladačích — u této myši třeba cokoliv spojeného s mapováním tlačítek. Zrovna tak si často ovladače při inicializaci přepínají zařízení do jiného režimu. V závislosti na tom, jak se chování zařízení změní, se tak může hodit vytvořit si na závěr udev event, který pro vás totéž zařídí v Linuxu.
Dejme tomu, že jsem zjistil, že 05 01 XX pravděpodobně mění
intenzitu podsvícení myši — co teď s tím? Nyní je přece nejvhodnější
chvíle si to ověřit!
Pozor, ve vlastním zájmu nikdy neposílejte nic jiného, než co zařízení skutečně dostává během běžného provozu! Někteří výrobci (jako třeba Razer) vyrábí produkty, které se dají velmi snadno bricknout! Všechno děláte na vlastní riziko.
Nejschůdnější způsob, jak si se zařízením pokecat, je skrze multiplatformní knihovnu libusb. Nejlepší to bude ukázat na příkladu. Následuje jednoduchý, extrémně osekaný céčkový program, ve kterém si přes ni svůj jediný příkaz zkusím poslat. Budu zde předpokládat, že jste programátoři a detaily si případně dohledáte v dokumentaci příslušné knihovny. Tučně zvýrazněné části jsou přímo závislé na tom, co a kam se má poslat.
Raději si dopište ošetření chyb, nebo to obšlehněte z mého kódu, na který je uveden odkaz na konci. Pokud Céčko nemáte zrovna dvakrát v lásce, nezoufejte — libusb má podporu i pro spoustu dalších jazyků.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <libusb.h>
libusb_device_handle *find_device (int vendor, int product) {
libusb_device **list, *found = NULL;
libusb_device_handle *handle = NULL;
int err = 0;
ssize_t cnt = libusb_get_device_list (NULL, &list);
if (cnt < 0) goto out;
ssize_t i = 0;
for (i = 0; i < cnt; i++) {
struct libusb_device_descriptor desc;
if (libusb_get_device_descriptor (list[i], &desc))
continue;
if (desc.idVendor == vendor && desc.idProduct == product) {
found = list[i];
break;
}
}
if (found)
err = libusb_open (found, &handle);
libusb_free_device_list (list, 1);
out:
if (err != 0)
fprintf (stderr, "%s\n", libusb_error_name (err));
return handle;
}
int main (int argc, char *argv[]) {
libusb_init (NULL);
libusb_device_handle *device = find_device (0x1038, 0x1369);
if (!device) exit (EXIT_FAILURE);
bool reattach_driver = false;
if (libusb_kernel_driver_active (device, 0) == 1) {
reattach_driver = true;
libusb_detach_kernel_driver (device, 0);
}
libusb_claim_interface (device, 0);
unsigned char data[32] = { 0x05, 0x01, 0x04 };
libusb_control_transfer (device,
0x21, 0x09, 0x0200, 0x0000, data, sizeof data, 0);
libusb_release_interface (device, 0);
if (reattach_driver)
libusb_attach_kernel_driver (device, 0);
libusb_close (device);
libusb_exit (NULL);
return 0;
}
Program zkompilujete následujícím způsobem (je nutné mít nainstalované vývojové balíčky pro libusb 1.0 a kompilátor jazyka C — na Debianu jsou to balíčky build-essential a libusb-1.0-0-dev):
$ cc soubor.c -o binárka $(pkg-config --libs --cflags libusb-1.0)
Z pochopitelných důvodů jej pak spouštějte s oprávněním uživatele
root:
$ sudo ./binárka
Kdyby vám nebylo jasné, co se to tam vlastně postupně děje:
Pokud jste vše přepsali správně, měla by se na zařízení projevit kýžená změna.
Jakmile skončíme s reverzním inženýrstvím, zbývá už jen postavit kolem všech těch příkazů program. V tomhle ohledu vás odkážu na své dva projekty, které vám mohou posloužit jako startovní bod:
Se sensei-raw-ctl jsem si vyloženě vyhrál. Dokonce jsem náhodou zjistil, že se v odpovědích na požadavek GET_REPORT, co myši posílá Linux, vyskytuje aktuální nastavení myši.
Nad konfiguračním programem do příkazové řádky je pak postavené GTK+ GUI,
které na Ubuntu (GNOME upstream tu možnost s argumentem ve stylu byl tam
bordel
odstranil) mohu snadno spustit ze System Settings.
Doufám, že se mi povedlo alespoň někoho z vás pošťouchnout k tvorbě vlastního ovládacího nástroje. Případně se mě nebojte kontaktovat (p.janouch gmail com) nebo zeptat v komentářích.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Nad konfiguračním programem do příkazové řádky je pak postavené GTK+ GUI, které na Ubuntu (GNOME upstream tu možnost s argumentem ve stylu "byl tam bordel" odstranil) mohu snadno spustit ze System Settings.
/usr/bin/dumpcap.
Já wireshark spouštím skriptem, který vypadá takto:
sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap /usr/bin/wiresharkAle jestli to bude fungovat i s USB, to nevím.
dpkg-reconfigure a usermod.
Zkoušel jsem chmod -R o+rwx na debug adresář v sysfs, ale nebylo to ono.
ssh -X root@localhost xwiresharkneni to idealni ale funguje to
Skoro. Aby fungovalo i USB, je třeba tohle:
setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_DAC_OVERRIDE+eip' /usr/local/bin/dumpcap
spis to chce trenink.
Tohle by melo byt pomerne host-system-agnostic.
usbredirserver), můžeš si ho nastavit na qemu cli, v libvirtím xml, ve virt-manager nebo v těch krabicích. Škatule jsem uvedl proto, že je to v nich nejlíp zaintegrované.
/dev/hidraw (mělo by být normálně zapnuté).
) dokaze odchytavat a zaznamenavat i USB komunikaci. Pouzivame to na reverse ingeneering I2C a SPI.
Moc dat se tam neprenasi.Nemusí to přestat fungovat kvůli latenci?