úterý 7. ledna 2025

Windows 11 nefunguje Guest přístup na Samba

 

Povolení nedůvěryhodného přístupu:

  1. Otevřete Editor registru (Win + R → napište regedit).
  2. Přejděte na klíč do:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters
  1. Vytvořte nebo upravte hodnotu DWORD (32bit) s názvem:
AllowInsecureGuestAuth
  1. Nastavte hodnotu na 1.

pátek 3. ledna 2025

Přidání nového modulu do jádra a Device Tree na Raspberry Pi

V tomto článku se podíváme na proces přidání nového modulu do linuxového jádra na Raspberry Pi a jeho konfiguraci pomocí Device Tree (DT). Ukážeme si konkrétní příklad s EEPROM pamětí připojenou přes I2C sběrnici.


1. Stažení a příprava modulu

Nejprve stáhneme zdrojový kód ovladače z repozitáře Linuxu. Použijeme EEPROM ovladač at24:

wget https://raw.githubusercontent.com/torvalds/linux/refs/tags/v6.6/drivers/misc/eeprom/at24.c

Tento ovladač slouží k práci s paměťmi EEPROM přes sběrnici I2C. Zajišťuje správu komunikace mezi jádrem systému a zařízením připojeným přes I2C.


2. Vytvoření Makefile

Makefile definuje pravidla pro kompilaci modulu. Vytvořte soubor s názvem Makefile s následujícím obsahem:

obj-m += at24.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Popis obsahu Makefile:

  • obj-m += at24.o: Určuje, že chceme sestavit modul at24.
  • all: Používá se pro sestavení modulu pomocí Makefile. Spustí se příkaz pro kompilaci modulu ve správném adresáři jádra.
  • clean: Smaže dočasné soubory vytvořené během kompilace.

Pro spuštění kompilace použijte:

make

Výstupem bude soubor at24.ko, což je zkompilovaný modul jádra.


3. Vytvoření Device Tree pro I2C zařízení

Device Tree (DT) je systémová konfigurace, která popisuje hardwarová zařízení. Pro konfiguraci EEPROM pamětí vytvoříme soubor at24.dts s následujícím obsahem:

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835";

    fragment@0 {
        target = <&i2c1>;  // Použití I2C-1
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;

            EEPROM1@50 {  // první EEPROM
                compatible = "at24,24c02";  // Typ EEPROM
                reg = <0x50>;               // Adresa na I2C sběrnici
                pagesize = <16>;            // Velikost stránky
                size = <256>;               // Celková velikost EEPROM
            };
            EEPROM2@57 {  // druhá EEPROM
                compatible = "at24,24c02";
                reg = <0x57>;               // Adresa na I2C sběrnici
                pagesize = <16>;
                size = <256>;
            };
        };
    };
};

Vysvětlení obsahu souboru:

  • compatible = "brcm,bcm2835";: Specifikuje, že konfigurace je určena pro BCM2835 (Raspberry Pi SoC).
  • reg = <0x50>;: Specifikuje skutečnou adresu zařízení na I2C sběrnici, která bude jádrem použita ke komunikaci se zařízením.
  • pagesize a size: Definují parametry paměti EEPROM.

4. Kompilace Device Tree

Pro převedení souboru na binární formát použijeme nástroj:

dtc -I dts -O dtb -o at24.dtbo at24.dts

Tímto příkazem vznikne binární soubor at24.dtbo, který je připraven pro použití.

Nahrání overlay:

Zkopírujeme výsledný soubor do adresáře s DT overlays:

sudo cp at24.dtbo /boot/firmware/overlays/

Přidáme overlay do konfiguračního souboru:

echo 'dtoverlay=at24' | sudo tee -a /boot/firmware/config.txt

5. Testování EEPROM

Zápis dat do EEPROM:

Pro otestování funkce EEPROM můžeme zapsat řetězec do paměti:

echo "Zapis do I2C EEPROM" | sudo dd of=/sys/bus/i2c/devices/1-0057/eeprom bs=1 seek=0

Čtení dat z EEPROM:

Následně ověříme zápis čtením obsahu EEPROM:

sudo hexdump -C /sys/bus/i2c/devices/1-0057/eeprom

Ukázkový výstup:

00000000  5a 61 70 69 73 20 64 6f  20 49 32 43 20 45 45 50  |Zapis do I2C EEP|
00000010  52 4f 4d 0a 01 00 0f 00  00 00 00 14 0f 14 2d 10  |ROM...........-.|

sobota 27. dubna 2024

Lineární regrese

 

import numpy as np from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt x = np.array([0, 1, 2, 3, 4, 5, 6, 7]) y = np.array([1, 3, 5, 7, 9, 11, 13, 15]) model = LinearRegression() model.fit(x[:, np.newaxis], y) koeficienty = model.coef_ print(f"Naučené koeficenty: {koeficienty}") new_x = np.array([8]) y_pred = model.predict(new_x[:, np.newaxis]) print(f"Předpovědi pro x = {new_x}: {y_pred}") plt.scatter(x, y, label="Data") plt.plot(x, model.predict(x[:, np.newaxis]), label="Model") plt.xlabel("X") plt.ylabel("Y") plt.title("Lineární regrese") plt.legend() plt.show()


A co je "pod kapotou"?

Hledáme parametry rovnice přímky y = a * x + b
  • Směrový koeficient (a): a = Σ((xi - x̄)(yi - ȳ)) / Σ(xi - x̄)²
  • Úsekový koeficient (b): b = ȳ - b * x̄

Kde:

  • a reprezentují průměrnou hodnotu x a y
  • xi a yi reprezentují jednotlivé hodnoty x a y

import numpy as np y = np.array([1, 3, 5, 7, 9, 11, 13, 15]) noise = np.random.normal(0, 0.1, len(y)) # Standardní odchylka 0.1 y_with_noise = y + noise model = LinearRegression() model.fit(x[:, np.newaxis], y_with_noise) koeficienty = model.coef_ print(f"Naučené koeficenty: {koeficienty}") new_x = np.array([8]) y_pred = model.predict(new_x[:, np.newaxis]) print(f"Předpovědi pro x = {new_x}: {y_pred}") plt.scatter(x, y_with_noise, label="Data") plt.plot(x, model.predict(x[:, np.newaxis]), label="Model") plt.xlabel("X") plt.ylabel("Y_noyse") plt.title("Lineární regrese") plt.legend() plt.show()



 

středa 13. března 2024

Zjištění jaké šifry server podporuje

 Na openwrt je nutné nainstalovat nmap-full, který podporuje scriptování a TLS. A stáhnout script ssl-enum-ciphers

root@MB:~# nmap --script ssl-enum-ciphers.nse -p 443 server.cz
Starting Nmap 7.80 ( https://nmap.org ) at 2024-03-13 18:19 CET
Nmap scan report for server.cz (152.184.162.111)
Host is up (0.041s latency).

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   TLSv1.0:
|     ciphers:
|       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|     compressors:
|       NULL
|     cipher preference: server
|   TLSv1.1:
|     ciphers:
|       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|     compressors:
|       NULL
|     cipher preference: server
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - unknown
|       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - unknown
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (secp256r1) - A
|     compressors:
|       NULL
|     cipher preference: server
|_  least strength: unknown

Nmap done: 1 IP address (1 host up) scanned in 4.07 seconds

Windows 11

 "Normální" kontextová nabídka u souboru

reg add HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /ve /d "" /f

čtvrtek 11. ledna 2024

Nastavení síťového připojení Ubuntu

sudo ip addr add 192.168.1.245/24 dev eth0

sudo ip route add default via 192.168.1.1


/etc/resolv.conf

nameserver 8.8.8.8

nameserver 8.8.4.4

čtvrtek 7. prosince 2023

Jak funguje base64?

Všichni to používají ale zda vůbec vědí jak se tato textová reprezentace binárních dat v ASCII vlastně převádí?

Binární data převedeme na 24 bitové číslo a to rozdělíme na skupiny o 6 bitech. Níže uvedená tabulka nám pomůže při kódování.

Máme binární data 01 02 03, 24 bit číslo bude 0x010203, to binárně zapsané vypadá 00000001 00000010 00000011. Nyní si data rozdělíme na šesti bitové skupiny, 000000 010000 001000 000011 (desítkové soustavě 1 16 8 3). Podle tabulky získáme AQID.

Pro data nesoudělná čtyřmi to funguje takto:

01 02, bude číslo 0x0102, tedy 00000001 00000010 binárně. Rozdělíme na šesti bitové skupiny, 000000 010000 0010, zprava přidáme nuly a vyjde nám AQI. Aby bylo možné detekovat padding, tak se doplní za každé dva bity znak =.


Příklad 01 02 03 04.

000000 010000 001000 000011 000001 000000

AQIDBA==

Dekódování se provádí opačně, jen se podle počtu znaků = data od konce oříznou. AA== je tedy 000000 00 0000 což je 00.

HexBinaryDecimalBase64
000000000A
010000011B
020000102C
030000113D
040001004E
050001015F
060001106G
070001117H
080010008I
090010019J
0A00101010K
0B00101111L
0C00110012M
0D00110113N
0E00111014O
0F00111115P
1001000016Q
1101000117R
1201001018S
1301001119T
1401010020U
1501010121V
1601011022W
1701011123X
1801100024Y
1901100125Z
1A01101026a
1B01101127b
1C01110028c
1D01110129d
1E01111030e
1F01111131f
2010000032g
2110000133h
2210001034i
2310001135j
2410010036k
2510010137l
2610011038m
2710011139n
2810100040o
2910100141p
2A10101042q
2B10101143r
2C10110044s
2D10110145t
2E10111046u
2F10111147v
3011000048w
3111000149x
3211001050y
3311001151z
34110100520
35110101531
36110110542
37110111553
38111000564
39111001575
3A111010586
3B111011597
3C111100608
3D111101619
3E11111062+
3F11111163/

Za vygenerování tabulky děkuji AI.