Nuvoton ile Yazılım Koruma
Projelerinizi güvende tutun
UCID ile Koruma
UCID, Nuvoton mikrodenetleyicilerde kullanılan bir yazılım koruma yöntemidir. UCID, "Unique Chip ID" (Benzersiz Yonga Kimliği) kısaltmasıdır ve her bir mikrodenetleyiciye özgü bir kimlik numarasını temsil eder.
UCID, mikrodenetleyiciyi sahtecilere veya yetkisiz kullanıcılara karşı korumak için tasarlanmış bir güvenlik önlemidir. Mikrodenetleyicinin içinde yerleşik bir donanım modülü bulunur ve bu modül, yongaya özgü bir kimlik numarası oluşturur. Bu kimlik numarası, mikrodenetleyicinin üretim sürecinde kalıcı olarak programlanır ve her bir yonga için benzersizdir.
UCID, yazılımın yonga üzerinde çalıştırılması sırasında kimlik doğrulama işlemlerinde kullanılabilir. Bu sayede, yalnızca geçerli ve yetkilendirilmiş yonga kimlikleriyle çalışan yazılımın yürütülmesi sağlanır. UCID, yonga üzerindeki güvenlik önlemlerini artırmaya yardımcı olur ve yasadışı kopyalama, sahtecilik veya yetkisiz kullanım gibi tehditleri azaltır.

Yukarda UCID ile koruma yönteminin akış diyagramı bulunmaktadır. Bu akışa göre öncelikle mikrodenetleyicimizin UCID kodunu okumalıyız. Bunun için aşağıdaki kodu kullanabilirsiniz.
//------------UCID Read------------------------ #include #include "NuMicro.h" void UART_Open(UART_T *uart, uint32_t u32baudrate); // Sistem Baslangic Ayarlari void SYS_Init(void) { /* Korumali regleri ac */ SYS_UnlockReg(); /* Enable HIRC clock (Internal RC 48MHz) */ // HIRC -> High Speed Internal RC osilator CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk); /* HIRC osilator hazir olana kadar bekle */ CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); /* Hıgh Speed clock HCLK ve HIRC divided 1 */ CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1)); /* Enable UART0 clock */ CLK_EnableModuleClock(UART0_MODULE); CLK_EnableSysTick(CLK_CLKSEL0_STCLKSEL_HCLK, 0); /* UART0 saat kaynağını HIRC'e değiştir kenetle */ CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1)); /* Update System Core Clock */ SystemCoreClockUpdate(); /* UART0 RXD=PB.12 ve TXD=PB.13 için PB multi-fonksiyon pinlerini ayarla */ SYS->GPB_MFPH = (SYS->GPB_MFPH & ~(SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk)) | \ (SYS_GPB_MFPH_PB12MFP_UART0_RXD | SYS_GPB_MFPH_PB13MFP_UART0_TXD); /* Lock protected registers */ SYS_LockReg(); } int main() { SYS_Init(); /* UART0'u 115200-8n1 kullanarak mesaj yazdırmak için başlat */ UART_Open(UART0, 115200); SYS_UnlockReg(); FMC_Open(); FMC_ReadUID(2); while(1){ printf("your ID ---> %d\n"); } }

Kullanacağız ID'leri elde ettikten sonra basit bir koruma algoritması işimizi görecektir. Eğer kod tanımlı ID'lerin haricinde bir ID'ye gömülmeye çalışılıyorsa burada yazılımı sonsuz loop'a düşüreceğiz.

ICP Tools ile Koruma
Nuvoton ICP (In-Circuit Programming) Tools, Nuvoton mikrodenetleyicileri için yazılım koruması sağlamak için kullanılan bir araç setidir. ICP Tools, yazılımı mikrodenetleyici üzerine programlamak, yazılımı korumak ve hata ayıklamak için kullanılan bir dizi yazılım ve donanım aracı içerir.


ICP Tools ile mikrodenetleyici bağlantısı sağlayın. Eğer koruma yoksa Flash'taki verilerinizi okuyabileceksiniz. Flash'taki verilerin okunmasını istemiyoruz bu yüzden aşağıdaki bir dizi işlemi gerçekleştirelim:



