Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: z - 26 Nisan 2014, 14:40:16

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 26 Nisan 2014, 14:40:16
1. Amac: Uzaktaki bir kart ustundeki islemciye yukletecegim programi gizlemek.
2. Amac: Bu karta bir baskasinin kod yuklemesini engellemek.

Asagida adi gecen ZIOS'un ARM konusunda bahsedilen ZIOS ile alakasi yoktur.

Ozgur yazilim felsefesinin tam zitti olan Tutsak yazilim felsefesinde asagidaki ipuclari bile cok gizli olmalidir.
Fakat bunlari aciklamayi sorun olarak gormuyor ve sizlerle bu konuda fikir cimlastigi yapmak istiyorum.


ZIOS, STM32F103C8 icine yuklenmis mini isletim sistemidir.

ZIOS;

Power on asamasinda  OSC, SD kart ve LCD ayarlamalarini yapar ve SD kartda
PROGRAM.ARM uzantili dosyayi arastirir.

Eger adigecen dosya bulunursa bunu LCD ekranda, cipe yuklemeyi isteyip istemediginizi sorar,
YUKLE cevabi verilmisse programi cipe yukler.

------------------------

Cip korumalidir. ZIOS isletim sistemine ait kodlar cok gizlidir ve cip JTAG ile
izlenemez. "PROGRAM.ARM" adindaki dosya Keil ile uretilen CPU kodlarinin, PC de ozel
bir program tarafindan kriptolanarak elde edilmesiyle olusturulur.

ZIOS bu dosyayi okur ve hata testinden gecirir. Boylece dosyanin bozulup bozulmadigini
anlar. Bozuk ise yukleme islemini sonlandirir ve LCD ekranda hata mesaji verir.

Eger dosya saglam ise kripto acilir ve cipe yuklenir ve ardindan yuklenen program
kodlari kosturulur.

Eger yukleme yapilmayacaksa cip uzerindeki mevcut eski program isletilir.

------------------------

Program.Arm dosyasi gizli değildir. Internetten vs dagitilabilir.

Brute force yapmak amaciyla karta sahte "Program.Arm" dosyasi yuklenmeye calisilirsa
LCD den verilecek uyari mesaji icin acele edilmez. Boylece pes pese yapilacak ataklarin
suresi uzatilir.

Bu esnada kodlarin yapacagi RF yayilimin ip ucu vermemesi icin ZIOS kodlarinda TEMPEST
konusuna dikkat edilmistir.

------------------------

Bu onlemler sayesinde kartin uzerinde istegim disinda kod kosturulmasi engellenmis olur.
Ayrica internetten dagittigim kodlarin kopya kartlarda islemesi engellenmis olur.


Bu konu ile ilgili olarak daha once hic kullanmadigim MPU unitesini de isleri zorlastirmak adina devreye almam ve yazilimi privileged ve user parcalarina ayirmam gerektigini dusunuyorum. Su anda tum yazilimin privileged seviyesinde olmasi beni korkutuyor. SD karttan yukleyecegim kodlarin kesinlikle user seviyesinde kalmasi gerekiyor.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: t2 - 26 Nisan 2014, 15:01:26
Lcd de bilgi vermesin. Yapilan işlem dogru da olsa yanlis da olsa hemen belli olmasin. Zor kirilan programlar boyle olur.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 26 Nisan 2014, 15:05:47
Bir sekilde bilgilendirme yapmak zorundayim. Aksi takdirde kartin bana ulastirilmasi yada benim kartin yanima gitmem gerekebilir. LCD'de bahsettigin bilgi verme meselesini astim.

Islem basladiktan sonra sabit olarak 10 sn sonra program yuklendi yada yuklenmedi mesaji verirsem yeterince zorluk cikartmis olurum.

Bu 10 sn yi islemcinin hangi komutlarini calistirarak doldurdugum konusuna ise ozellikle dikkat ediyorum.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: kimlenbu - 26 Nisan 2014, 15:10:17
RF olayına nasıl dikkat edeceğiz ? Adamlar vga sinyallerini bile alıp ekran görüntünü oluşturabiliyorlar.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 26 Nisan 2014, 15:14:13
Sahte bir program yuklenmeye calisiliyorsa sende iceride sahte bir flash programlama kodu isleteceksin.

Eger boyle yapmaz da 1,2,3,4.... diye sayi sayarak 10 sn yi doldurmaya calisirsan yada benzeri gecikmeler yaparsan cipten yapilan RF yayilim, yuklenmeye calisilan programin uyusmadigini 10 sn den cok daha once zaten soyleyecektir.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Klein - 26 Nisan 2014, 16:09:59
RF yayınıma bile önlem aldığınıza göre , amatörlerin yanında  tersine mühendislik uzmanlarına karşı da önlem almaya çalıştığınızı düşünüyorum.
Amatörlerde işe yarar. ama kartınızı ve yazılımınızı kafaya koymuş biri için işe yarayacağını düşünmüyorum.
ARM'da durum nedir bilmiyorum ama Atmega ve PIC'i  Çin'e gönderip  içindeki korumalı kodları elde eden birini tanıyorum.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 26 Nisan 2014, 16:25:23
Bahsettiğin durum için boynumuz kıldan ince.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: OG - 26 Nisan 2014, 19:59:50
Ben bu işi teorik bazda ancak şöyle düşündüm (denemiş değilim). Hatta bootloaderla çalışmış da değilim. Yükleme sonrası yüklediği alanın sigortalarını okumaya kapatabiliyormu onuda bilmiyorum.

İşlemci içine 2 adet program yüklü. Birisi bootloader birisi decrypt. Veya ikisinin bütünleşmiş hali.

Botloader malum, dışarıdan gelecek hexi ilgili yedek alana atacak ama decrypt ederek. Bu şifreleme gerek adres gerek data şifrelemesi veya her ikisinide içerir. Bunları çözerek cipe yazar.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Analyzer - 26 Nisan 2014, 20:12:04
Selam,

İlk mesajı okuduğumda Asprotect yazılımı aklıma geldi. Envelope->Decrypting->Self Checking->Depacking işlemlerini
sırasıyla yaptırmak lazım. PE korumaların unpack tutoriallerine bakmak lazım kurguyu anlamak için. Sonuçta istenen
koruma işi win32 programlarında yıllardır yapılıyor.

Analyzer
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: t2 - 26 Nisan 2014, 20:52:47
Alıntı yapılan: z - 26 Nisan 2014, 15:05:47
Bir sekilde bilgilendirme yapmak zorundayim. Aksi takdirde kartin bana ulastirilmasi yada benim kartin yanima gitmem gerekebilir.
Ekranda durum kod = 6546 gibi kodlar çıkacak. uzaktan telefonla sorulacak.
- ekranda ne çıktı?
-durum kod 2569
- Tamam ozaman işlem kod 6598 girin.

denecek. her müşteride başka başka kod çıkacak. belki de bu kodların anlamı hiç olmayacak. adam kodu girse de girmese de program bildiğini okuyacak kafa karıştırılacak. her kullanımda ayrı kod çıksın durum koda göre ne işlem gerekiyor deyip tabloya bakar veya uyduracağınız bir işlem kodu girebilirsiniz. bu yapılanlar hiç biri anlamlı olmaz. hedef şaşırtırsınız.

Benim başımdan geçen  bir olay anlatayım. Windows 8 yeni çıkmıştı. kampanya vardı 75 TL ye mi ne aldım kurdum. korsan windows7 yi update ettim windows 8 oldu.

pc bozuldu o diski çıkardım  başka pcye taktım etkinleştime gerekiyor dedi internetten kendi kendine etkinleştirdi.

iyiymiş bu dedim sonra o pcyi sattım aynı diski başka pcye taktım. yine aynı durum fakat bu sefer etkinleştirme sunucusu sayıyı aştınız size artık etkinleştirme yok dedi.  Sonra ilaçlama yaptım. 1000 tane daha etkinleştirme hakkınız var size full dedi.


BUnunla ne alakası var bilemiyorum bir şekilde uzaktan kontrol etmeniz anahtar sizde olması lazım. Sistem ara sıra sunucuya bağlanıp bilgi aktarmaz ise kendini kilitlesin veya imha etsin denebilir.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: camby - 26 Nisan 2014, 23:30:45
i.mx datasheet'lerini karıştırırken şöyle bir özellik gördüm :

Alıntı Yap— Secure boot using 128-bit AES hardware decryption

Boot kripto'lu heralde dedim ve biraz daha karıştım şu tabloyu gördüm :

i.MX28 Boot Modes:
Alıntı YapPORT BOOT MODE
USB Encrypted/unencrypted USB slave boot mode
I2C Encrypted/unencrypted I2C0 master—boots from 1.8 V and 3.3 V EEPROM
SPI2 Encrypted/unencrypted SPI2 master from SSP2—boots from 1.8 V and 3.3 V Flash memory
SPI3 Encrypted/unencrypted SPI3 master from SSP3—boots from 1.8 V and 3.3 V Flash and EEPROM
SSP0 Encrypted/unencrypted SD/MMC master from SSP1—boots from 1.8 V and 3.3 V 1-bit, 4-bit, and 8-bit
SD/MMC/eSD/eMMC cards
SSP1 Encrypted/unencrypted SD/MMC master from SSP2—boots from 1.8 V and 3.3 V 1-bit, 4-bit, and 8-bit
SD/MMC/eSD/eMMC cards
GPMI Encrypted/unencrypted NAND, 1.8 V and 3.3 V, 8-bit wide, BCH2 to BCH20
JTAG Wait JTAG connection

Hocam herhalde anladığım kadarıyla OTP'nin içine , 128-bit AES key'ini bırakıyorsun , sonra kodu kriptolu atabiliyorsun CPU'ya USB'den. Key'de zaten okuma korumalı olması yeter sanırım.

Herhalde diğerlerinde de vardır diyerek F4'ün kriptolu modellerini inceledim fakat böyle bir donanımsal secure boot özelliği göremedim. Diğer markalarda nasıl bilemiyorum.

Yazılımsal boot yazamaya kalkışırsan olabilir tabi.

Kaynak: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=i.MX287&fpsp=1&tab=Documentation_Tab (http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=i.MX287&fpsp=1&tab=Documentation_Tab)

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 28 Nisan 2014, 04:18:10
CM3 islemcilerde asagidaki soruna cozum getiremedim. Getirebilmeyi isterdim.

ZIOS tamamen gizli bir mini isletim sistemi. Cipe bunu ben yerlestiriyorum ve ardindan cipi/ karti piyasaya veriyorum.

ZIOS,  kriptolanmis harici programlarimi da okuyor cozuyor ve cipe yukluyor. Yani isletim sistemi calistirilabilir program parcaciklarini disaridan (USB, SD card vs) okuyup Flash'a yukleyebiliyor.

Bu harici programlari da mecburen ben yaziyorum.

Peki baskalarinin da program yazmasina izin verebilirmiyim? Evet baskalari da yazabilsin istiyorum.

Ben kriptolanmis program yazar ve internetten dagitirim. Kimse benim kodlarimi goremez ama kartima yukleyebilir. (Bu ozellikle istedigim bir sey)

Musterim ise kendi programini yazip kriptolamadan cipe yukleyebilir. ZIOS buna aracilik edebilir.

Sorun:

Fakat musterim iceriye (Flasha) kod koydugu anda ZIOS'u kendi programina okutup disariya sizdirabilir. Bu da benim icerideki kripto algoritmalarimin ve kritik rutinlerimin su yuzune cikmasi demek.

L,  CM2,  CM4 serilerinde buna engel olacak mekanizma cip icinde donanimsal olarak kurulmus vaziyette. Gel gelelim CM3 icin bu mekanizmayi yapmamislar.

Sizin cozum oneriniz varmi?

Aslinda bu soruna bir cozumum var gibi. Fakat MPU unitesiyle hic ilgilenmedigim ve hakkinda detayli bilgim olmadigi icin cozumumden emin değilim.

Eger, MPU unitesi sayesinde kullanicinin RAM'dan kod isletmesine engel olunabilirse musterimin kodlari icerideki programlarimi asla calamaz. Daha dogrusu musterimin boyle bir niyeti oldugunu anlarim ve kodlari cipe yukletmem.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: hgs - 28 Nisan 2014, 08:37:16
Bu kadar korunan kartın fiyatı nedir? Ve satış adedi nedir?
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: muhittin_kaplan - 28 Nisan 2014, 09:10:09
hgs, hocam bazen fiyat ve satış adedi önemsizdir. birtane ve bedava (mesai ve adam/saat ücretidir) yaparsınız.
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: hgs - 28 Nisan 2014, 09:27:48
Askeri bir iş yapıyor olsanız anlıyacagım. Yada cok spesifik bir iş olsa anlıyacağım. Teknoloji saklamak gerektiriyordur vs... 

Burada z nin ugrastıgı motor sürücü kartı için bu kadar evhamlanmaya gerek yok. Birine verilirse belli bir para ve kartın bir tane örneği yenisi tasarlanabilir.
Koruma için 3. 4. 5. önlemler çok gereklimi diye düşünmek gerek. Basit adamlara ilk 1-2 koruma adımı yeterli gelir zaten.  Yoksa biri kartı kopyalayacaksa kopyalar. Sadece devreyi görmesi ve cihazın özelliklerini broşürden okumak bile yeterli olabilir.

Devreyi epoksiye yatırmak bile baya araştırıldı. Bunlara bu kadar zaman harcanacağına cihazın daha yeni modelleri, yazılım desteğinin sürdürülmesi, ürünün arkasında yılları aşacak şekilde durmak daha etkin bir yöntemdir.

Baya üstün bir teknolojinin üretildiğini de düşünmüyorum.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 28 Nisan 2014, 10:01:00
@ghs

Dedim ya bazi bilesenleri gizli. Merak eden sistemimi yaptigimda kirabiliyorsa kirar yada kirdirir.

Bu gizliliğe ragmen  devre semalarimi yayinlayacagim.

Neyse onemli olan bu değil. Soruma odaklanalim. Sonucta ortalikta ciddi bir teknik problem var.

Ustelik ne demistim?

ST firmasi L,  CM2,  CM4 serilerinde buna engel olacak mekanizmayi cip icinde donanimsal olarak kurmus.

Yani bu sorun sadece benim karsilastigim bir sorun değil. Bazi musterilerine cozum olsun diye bu cozumu sunmus.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: X-Fi - 28 Nisan 2014, 10:27:17
Hocam ZIOS kurulu olan sistemde kullanıcının debug yapabilme imkanı olacak mı?

Not: L serisini cortex serilerinden ayırmayınız. CM3 veya CM0 işlemcisini kullanıyor.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 28 Nisan 2014, 11:22:16
Evet CM3 serisinin L tipinde bu koruma varken L serisi olmayan CM3lere  bu özellik konmamış. O yüzden ayırıma gittim.

ZIOS kurulu sistemlerde malesef JTAG vs üzerinden debug yapılamıyor. ST bunu engelliyor.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 28 Nisan 2014, 11:41:51
Askeri cihazların korunmaya ihtiyacı hem var hem yok.

Askeri cihazlar askeri bir bölgede zaten. Her isteyen elini kolunu sallayarak içeri giremez bu sistemlere erişemez. Her isteyen de kartlarını incelemk için askeri cihazı satın alamaz. Neyse boşverin askeri işleri.

Benim yapmak istediğim iş belli.

Çipime benim uzaktan yerleştireceğim kodlarımı kimse bilmesin.
Çipime isteyen kendi programını yükleyebilsin.
Çipime program yükleyen çipin içindeki gizli alanlara ulaşamasın.

Bu teknik sorunu tartışmak istiyorum. Boş verin gerisini.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: t2 - 28 Nisan 2014, 12:34:15

Belki fikir verir, benzerini yapabilirsiniz.
http://www.tracesystemsinc.com/sums/sums-overview.html (http://www.tracesystemsinc.com/sums/sums-overview.html)

Alıntı Yap

       
  • No programming needed - ready to use
  • No need to recompile your own Main App code to work with our bootloader - use it as is!
  • Simple, automated mode for your non-technical End Users
  • Powerful Developer Mode for you & your technical and factory users
  • BRAND it yourself - customize company name and logo image with NO PC Programming At All.
  • Sends your firmware in an encrypted file that protects your intellectual property

       
  • Protects against programming your firmware into the wrong device, or an unauthorized device

       
  • Automatically collects files together, zips them up into a WinZip archive, customizes a cover letter, and emails it all to your customer!  All in about 20 seconds.
  • The system grows with your product line - when you develop a product with a different processor, just buy a new bootloader from us for that processor and connectivity type.  Your new bootloader installs right into the SUMS system, ready to work for just those of your products that need it.
  • Serial Number (known to both Bootloader Firmware and your Main App Firmware) allows you to charge your customers for new versions or new firmware "personalities" that work in your product. Opens up whole new revenue streams for your company!
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 28 Nisan 2014, 21:56:54
Ext Ram kullanmak istemiyorum zaten islemcim de buna musait degil. MPU unitesinden nasil yararlanabilirim?

Bugune kadar hic MPU kullanmadim. Neler yapilabilir bilmiyorum.

Amacimi sadelestirip anlatayim.

Flashin ilk 2K lik bolumu CPU tarafindan sadece kod isletmek amaciyla okunsun ama bir islemci komutu ile bu alandaki herhangi bir adres okunamasin. MPU bana bu konuda yardimci olabilirmi?
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 29 Nisan 2014, 00:55:39
Incelemek gerekecek

/******************** (C) COPYRIGHT 2011 xx Design House ***********************
* File Name          : serial_comms.h
* Author             : LGE
* Version            : V1.0.0
* Date               : 8/2/2011
* Description        : Header for serial_comms.c module
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MEMPROT_H
#define __MEMPROT_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void InitMemProt(void);
void SimulateMemoryViolation(void);
/* Exported interrupt handlers ---------------------------------------------- */
void EH_MemoryViolation(void);
void SetupMemoryViolationCommandPending(void);
bool IsMemoryViolationCommandPending(void);

#endif /* __MEMPROT_H */

/******************* (C) xx Design House *****END OF FILE****/


memprot.c

/******************** (C) xx Design House **************************************
* File Name          : memprot.c
* Author             : LGE
* Version            : V1.0.0
* Date               : 8/2/2011
* Description        : Demonstrate MPU (Memory Protection Unit) feature
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "core_cm3.h"
#include "stm32f10x_mpu.h"
#include "memprot.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
//The size (in bytes of the protected buffer).
#define SIZEOF_PROTMEM        0x4000            //16kB; min 256, must be a power of 2

/* Private variables ---------------------------------------------------------*/
static bool bMemoryViolationCommandPending = FALSE;

#define ADDRESS_OF_PROTECTED_SRAM   (SRAM_BASE + 0x14000)
volatile __root __no_init u32 au32MyProtectedBuffer[SIZEOF_PROTMEM/sizeof(u32)] @ ADDRESS_OF_PROTECTED_SRAM;

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/*******************************************************************************
* Function Name  : InitMemProt
* Description    : Initialise memory-protection demonstration.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void InitMemProt(void)
{
#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1)
      MPU_RegionInit_TypeDef sMPUInit;

      //Disable MPU
      MPU_Disable();

      //Turn off all regions - the reset states for the ENA bits are undefined.
     for(u32 u32Rgn=0 ; u32Rgn < ((MPU->TYPE&MPU_TYPE_DREGION_Msk) >> MPU_TYPE_DREGION_Pos) ; u32Rgn++)
      {
            MPU->RNR  = MPU_RNR_REGION_Msk & (u32Rgn << MPU_RNR_REGION_Pos);
            MPU->RASR = 0;
      };

#if 0  //Not tested.
      //
    // Configure an executable, read-only MPU region for flash.  It is a 1MB
    // region. This region is needed so that the program can execute from
    // flash.
    //
      sMPUInit.regionEnable = TRUE;
      sMPUInit.regionNo = 0;
      sMPUInit.baseAddress = FLASH_BASE;
      sMPUInit.size = mpuRegionSize1Mb;
      sMPUInit.accessPermission = mpuRegionApPRo_URo;
      sMPUInit.disableExec = FALSE;
      sMPUInit.shareable = FALSE;
      sMPUInit.cacheable = TRUE;
      sMPUInit.bufferable = TRUE;
      sMPUInit.srd = 0x00;
      sMPUInit.tex = 0;
      MPU_ConfigureRegion(&sMPUInit);

    //
    // Configure a read-write MPU region for RAM.  It is a 128kB KB region.  There
    // are the two top 16kB sub-regions disabled to achieve the 96kB of RAM
      // which is available in the microcontroller.  We are also going to disable
      // top top region of the 96kB, to demonstrate illegal access in the application.
    //
      sMPUInit.regionEnable = TRUE;
      sMPUInit.regionNo = 1;
      sMPUInit.baseAddress = SRAM_BASE;
      sMPUInit.size = mpuRegionSize128Kb;
      sMPUInit.accessPermission = mpuRegionApFullAccess;
      sMPUInit.disableExec = TRUE;
      sMPUInit.shareable = FALSE;
      sMPUInit.cacheable = TRUE;
      sMPUInit.bufferable = TRUE;
      sMPUInit.srd = 0xC0 + 0x20;         //only 96kB RAM, not 128kB.
      sMPUInit.tex = 0;
      MPU_ConfigureRegion(&sMPUInit);
#endif
     
      //
    // Configure a read-only MPU region for the 16 KB of RAM that is disabled in
    // the previous region.  This region is used for demonstrating read-only
    // permissions.
    //
      sMPUInit.regionEnable = TRUE;
      sMPUInit.regionNo = 2;
      sMPUInit.baseAddress = ADDRESS_OF_PROTECTED_SRAM;
      sMPUInit.size = mpuRegionSize16Kb;
      sMPUInit.accessPermission = mpuRegionNoAccess;
      sMPUInit.disableExec = TRUE;
      sMPUInit.shareable = FALSE;
      sMPUInit.cacheable = TRUE;
      sMPUInit.bufferable = TRUE;
      sMPUInit.srd = 0x00;
      sMPUInit.tex = 0;
      MPU_ConfigureRegion(&sMPUInit);

#if 0 //Not tested.
    //
    // Configure a read-write MPU region for peripherals.  The region is 512 kB
    // total size, with several sub-regions disabled to prevent access to areas
    // where there are no peripherals.  This region is needed because the
    // program needs access to some peripherals.
    //
      sMPUInit.regionEnable = TRUE;
      sMPUInit.regionNo = 3;
      sMPUInit.baseAddress = PERIPH_BASE;
      sMPUInit.size = mpuRegionSize512Mb;
      sMPUInit.accessPermission = mpuRegionApFullAccess;
      sMPUInit.disableExec = TRUE;
      sMPUInit.shareable = TRUE;
      sMPUInit.cacheable = FALSE;
      sMPUInit.bufferable = TRUE;
      sMPUInit.srd = 0x00;
      sMPUInit.tex = 0;
      MPU_ConfigureRegion(&sMPUInit);

    //
    // Configure a read-write MPU region for access to the NVIC.  The region is
    // 4 KB in size.  This region is needed because NVIC registers are needed
    // in order to control the MPU.
    //
      sMPUInit.regionEnable = TRUE;
      sMPUInit.regionNo = 4;
      sMPUInit.baseAddress = ITM_BASE;
      sMPUInit.size = mpuRegionSize1Mb;
      sMPUInit.accessPermission = mpuRegionApFullAccess;
      sMPUInit.disableExec = TRUE;
      sMPUInit.shareable = TRUE;
      sMPUInit.cacheable = FALSE;
      sMPUInit.bufferable = TRUE;
      sMPUInit.srd = 0x00;
      sMPUInit.tex = 0;
      MPU_ConfigureRegion(&sMPUInit);
#endif
     
      //Enable the Memory Manage Handler */
      NVIC_SystemHandlerPriorityConfig(SystemHandler_MemoryManage, 2, 8);   
      NVIC_SystemHandlerConfig(SystemHandler_MemoryManage, ENABLE);
     
      //Enable memory protection and mem fault exceptions
      MPU_Enable(MPU_CTRL_ENABLE_Msk | MPU_CTRL_PRIVDEFENA_Msk);

#endif //defined (__MPU_PRESENT) && (__MPU_PRESENT == 1)
}

/*******************************************************************************
* Function Name  : SetupMemoryViolationCommandPending
*     This is required, since the command parser is handled in interrupt time,
*     but the MPU must be tripped from the mainline, otherwise a 'hard fault'
*     is generated.
* Description    : Sets up to trip the MPU.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void SetupMemoryViolationCommandPending(void)
{
      bMemoryViolationCommandPending = TRUE;
}

/*******************************************************************************
* Function Name  : IsMemoryViolationCommandPending
* Description    : Returns true is there was a command to trip the MPU.
* Input          : None.
* Output         : None
* Return         : Bool - true if an MPU trip command received.
*******************************************************************************/
bool IsMemoryViolationCommandPending(void)
{
      return bMemoryViolationCommandPending;
}

/*******************************************************************************
* Function Name  : SimulateMemoryViolation
* Description    : Write something to a protected memory area.
* Input          : None.
* Output         : None
* Return         : None
*******************************************************************************/
void SimulateMemoryViolation(void)
{
      //DO NOT CHANGE THIS FUNCTION UNLESS YOU ALSO CHANGE THE EH_MemoryViolation()
      //EXCEPTION HANDLER.
      bMemoryViolationCommandPending = FALSE;

      //Access the forbidden memory!
      au32MyProtectedBuffer[0] = 0x12345678;
}

/******************************************************************************/
/*                 Memory Protection Exception Handlers                  */
/*  See Interrupt Handler stubs in system_stm32f10x.c.  These functions are   */
/*  interrupt-time handlers called by the interrupt stub.                             */
/******************************************************************************/

/*******************************************************************************
* Function Name  : EH_MemoryViolation - EXCEPTION HANDLER - KEEP SHORT
* Description    : This function handles MPU exceptions.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EH_MemoryViolation(void)
{
      volatile auto u16 au16Stack[1];
     
      //WARNING! THIS FUNCTION PERFORMS A WRITE ON AN OUT_OF_ARRAY LOCATION.
      //IT MODIFIES THE STACK POP VALUE FOR PC, SO PC SKIPS THE INSTRUCTION
      //WHICH CAUSES THE MPU VIOLATION.  Otherwise application endlessly loops
      //at MPU violation/re-do violation instruction.  The stack modification
      //increments the PC by 2 to skip the violating instruction ("STR R1, [R0]").
      //If changing the SimulateMemoryViolation() function body, then be sure to
      //update this handler to skip the MPU violation instruction(s).
      au16Stack[16] += 2;
     
      //Write a 1 to the MEM FAULT flag to clear it
      SCB->SHCSR |= SCB_SHCSR_MEMFAULTACT;     

      //Go to infinite loop when Memory Manage exception occurs
      SetScreen_MPU_Error();
}

/******************* (C) COPYRIGHT 2011 xx Design House ********END OF FILE****/


stm32f10x_mpu.h


/******************** (C) xx Design House **************************************
* File Name          : stm32f10x_MPU.h
* Author             : LGE
*     ported from http://cdn.energymicro.com/dl/documentation/doxygen/efm32__mpu_8h-source.html
* Version            : V1.0.0
* Date               : 8/2/2011
* Description        : MPU Access library
*******************************************************************************/

/***************************************************************************/
#ifndef __STM32F10X_MPU_H
#define __STM32F10X_MPU_H

#include "intrinsics.h"
#include "stm32f10x.h"
#include "cortexm3_macro.h"

#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1)

#ifdef __cplusplus
extern "C" {
#endif

/***************************************************************************/
/***************************************************************************/
#define MPU_CTRL_PRIVDEFENA    MPU_CTRL_PRIVDEFENA_Msk

#define MPU_CTRL_HFNMIENA      MPU_CTRL_HFNMIENA_Msk

/*******************************************************************************
********************************   ENUMS   ************************************
******************************************************************************/

typedef enum
{
      mpuRegionSize32b   = 4,
      mpuRegionSize64b   = 5,
      mpuRegionSize128b  = 6,
      mpuRegionSize256b  = 7,
      mpuRegionSize512b  = 8,
      mpuRegionSize1Kb   = 9,
      mpuRegionSize2Kb   = 10,
      mpuRegionSize4Kb   = 11,
      mpuRegionSize8Kb   = 12,
      mpuRegionSize16Kb  = 13,
      mpuRegionSize32Kb  = 14,
      mpuRegionSize64Kb  = 15,
      mpuRegionSize128Kb = 16,
      mpuRegionSize256Kb = 17,
      mpuRegionSize512Kb = 18,
      mpuRegionSize1Mb   = 19,
      mpuRegionSize2Mb   = 20,
      mpuRegionSize4Mb   = 21,
      mpuRegionSize8Mb   = 22,
      mpuRegionSize16Mb  = 23,
      mpuRegionSize32Mb  = 24,
      mpuRegionSize64Mb  = 25,
      mpuRegionSize128Mb = 26,
      mpuRegionSize256Mb = 27,
      mpuRegionSize512Mb = 28,
      mpuRegionSize1Gb   = 29,
      mpuRegionSize2Gb   = 30,
      mpuRegionSize4Gb   = 31
} MPU_RegionSize_TypeDef;

typedef enum
{
      mpuRegionNoAccess     = 0,
      mpuRegionApPRw        = 1,
      mpuRegionApPRwURo     = 2,
      mpuRegionApFullAccess = 3,
      mpuRegionApPRo        = 5,
      mpuRegionApPRo_URo    = 6
} MPU_RegionAp_TypeDef;


/*******************************************************************************
*******************************   STRUCTS   ***********************************
******************************************************************************/

typedef struct
{
      bool                   regionEnable;
      uint8_t                regionNo;
      uint32_t               baseAddress;
      MPU_RegionSize_TypeDef size;
      MPU_RegionAp_TypeDef   accessPermission;
      bool                   disableExec;
      bool                   shareable;
      bool                   cacheable;
      bool                   bufferable;
      uint8_t                srd;
      uint8_t                tex;
} MPU_RegionInit_TypeDef;

#define MPU_INIT_FLASH_DEFAULT                                  \
{                                                             \
      true,                   /* Enable MPU region.            */ \
      0,                      /* MPU Region number.            */ \
      FLASH_MEM_BASE,         /* Flash base address.           */ \
      mpuRegionSize1Mb,       /* Size - Set to max for XL device */ \
      mpuRegionApFullAccess,  /* Access permissions.           */ \
      false,                  /* Execution allowed.            */ \
      false,                  /* Not shareable.                */ \
      true,                   /* Cacheable.                    */ \
      false,                  /* Not bufferable.               */ \
      0,                      /* No subregions.                */ \
      0                       /* No TEX attributes.            */ \
}


#define MPU_INIT_SRAM_DEFAULT                                 \
{                                                             \
      true,                   /* Enable MPU region.            */ \
      1,                      /* MPU Region number.            */ \
      RAM_MEM_BASE,           /* SRAM base address.            */ \
      mpuRegionSize128Kb,     /* Size - Set to max. for XL devices. */ \
      mpuRegionApFullAccess,  /* Access permissions.           */ \
      false,                  /* Execution allowed.            */ \
      true,                   /* Shareable.                    */ \
      true,                   /* Cacheable.                    */ \
      false,                  /* Not bufferable.               */ \
      0,                      /* No subregions.                */ \
      0                       /* No TEX attributes.            */ \
}


#define MPU_INIT_PERIPHERAL_DEFAULT                             \
{                                                             \
      true,                   /* Enable MPU region.            */ \
      0,                      /* MPU Region number.            */ \
      0,                      /* Region base address.          */ \
      mpuRegionSize32b,       /* Size - Set to minimum         */ \
      mpuRegionApFullAccess,  /* Access permissions.           */ \
      true,                   /* Execution not allowed.        */ \
      true,                   /* Shareable.                    */ \
      false,                  /* Not cacheable.                */ \
      true,                   /* Bufferable.                   */ \
      0,                      /* No subregions.                */ \
      0                       /* No TEX attributes.            */ \
}


/*******************************************************************************
*****************************   PROTOTYPES   **********************************
******************************************************************************/


void MPU_ConfigureRegion(MPU_RegionInit_TypeDef *init);


/***************************************************************************/
#pragma inline = forced
void MPU_Disable(void)
{
      SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;      /* Disable fault exceptions */
      MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;            /* Disable the MPU */
}

/***************************************************************************/
#pragma inline = forced
void MPU_Enable(uint32_t flags)
{
      assert_param(!(flags & ~(MPU_CTRL_PRIVDEFENA_Msk |
                          MPU_CTRL_HFNMIENA_Msk |
                          MPU_CTRL_ENABLE_Msk)));

      MPU->CTRL   = flags | MPU_CTRL_ENABLE_Msk;     //Enable the MPU
      SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTACT;                 //clear any fault flag
      SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;        //Enable fault exceptions
}

#ifdef __cplusplus
}
#endif

#endif /* defined(__MPU_PRESENT) && (__MPU_PRESENT == 1) */

#endif /* __STM32F10X_MPU_H */


stm32f10x_mpu.c

/******************** (C) xx Design House **************************************
* File Name          : stm32f10x_MPU.c
* Author             : LGE
*     ported from http://cdn.energymicro.com/dl/documentation/doxygen/efm32__mpu_8h-source.html
* Version            : V1.0.0
* Date               : 8/2/2011
* Description        : MPU Access library
*******************************************************************************/
#include "stm32f10x_mpu.h"


/*******************************************************************************
**************************   GLOBAL FUNCTIONS   *******************************
******************************************************************************/


/***************************************************************************/
void MPU_ConfigureRegion(MPU_RegionInit_TypeDef *init)
{
      assert_param(init->regionNo < ((MPU->TYPE & MPU_TYPE_DREGION_Msk) >>
                                MPU_TYPE_DREGION_Pos));

      MPU->RNR = init->regionNo;

      if (init->regionEnable)
      {
            assert_param(!(init->baseAddress & MPU_RBAR_ADDR_Msk));
            assert_param(init->tex <= 0x7);

            MPU->RBAR = init->baseAddress;
            MPU->RASR = ((init->disableExec ? 1 : 0) << MPU_RASR_XN_Pos)   |
                              (init->accessPermission      << MPU_RASR_AP_Pos)   |
                              (init->tex                   << MPU_RASR_TEX_Pos)  |
                              ((init->shareable   ? 1 : 0) << MPU_RASR_S_Pos)    |
                              ((init->cacheable   ? 1 : 0) << MPU_RASR_C_Pos)    |
                              ((init->bufferable  ? 1 : 0) << MPU_RASR_B_Pos)    |
                              (init->srd                   << MPU_RASR_SRD_Pos)  |
                              (init->size                  << MPU_RASR_SIZE_Pos) |
                              (1                           << MPU_RASR_ENA_Pos);
      }
      else
      {
            MPU->RBAR = 0;
            MPU->RASR = 0;
      };
}
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: emrahmrcn - 29 Nisan 2014, 01:07:21
Merhaba,
Konsept olarak MPU ne yapar ne eder biliyorum, ama bir türlü kullanmak nasip olmadı. Bende Z nin teknik isteklerini elbirliği ile çözebileceğimize inanıyorum vede bu başlığın işletim sistemleri mimarisi açısından güzel bir kaynak olacağını umut ediyorum.
Öncelikle MPU kullanarak bir kod parçacığını nasıl yasaklı hale getirebiliriz bunun örneğini görmek çok isterim,
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 29 Nisan 2014, 11:53:13
@emrahmrcn

Ansiklopedik bilgi de olsa MPU hakkında bildiklerini yazarmısın? Registerlerine baktım neyseki fazla değil. Bu yakınlarda MPU ile çalışmaya başlayacağım fakat şu anda konuya çok uzağım.

Bu arada bu kadar korumaya gerek yok diyen arkadaşlara;

Bir kart yaptınız. Bu kartın içine kullanıcıların yazılım atmasına da izin vereceksiniz diyelim. Bu kart için PC yazılımları da geliştireceğinizi düşünün. Yani kartınız PC ile de etkileşimli çalışacak.

Eğer kartınız kolayca kopyalanırsa yazdığınız PC yazılımları da kopya kartlar üzerinde çalışacak demektir.

Kartınızı kullanarak ticari ürünler geliştirmek istiyorsanız bazı korumalar yapmak kadar normal bir şey olamaz.

İllaki karta yüklenen programların yüksek teknolojiler, askeri uygulama yazılımları, güçlü algoritmalar olması gerekmez.

Eğer ki karta üretim aşamasında kod yükleyip bir daha da bu kodları değiştirmeyecek olsaydım sadece okuma koruması ve JTAG yasağı yeterli olurdu. Fakat proje tanımına bakarsanız olayın çok daha karmaşık olduğunu görülecektir.


Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: hgs - 29 Nisan 2014, 13:01:58
Mcunun hafızasında belli kısımları güncelleyebilirsiniz. Bunuda pc yazılımınızla  entegre olarak yapabilirsiniz. Üretim bilgileri ile alakalı bir sayfayı hiç bir zaman güncelletmezsiniz.

Donanımsal koruma yöntemleri mevcut. Kart üzerinde konulabilecek ek donanımlar ile bir takım düzenekler kurulabilir. Bu düzeneklerin dogru çalışmadığı kartların kopyalanması mümkün olmaz.

Daha pek çok yöntem ortaya konabilir...


Ama ben hala korumanın bu kadar abartılmasına gerek olmadıgı kanısındayım. Fikir iyi ise ürün satar. Kar marjı iyi ise parası olan herhangi bir kişi benzer kartı tasarlayabilir tasarlatabilir. Devrede koruma yaparak fikri koruyamazsınız.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 30 Nisan 2014, 02:46:30
CM3 islemcinin MPU unitesinin olusu ve kodlarin user ve privileged olmak uzere iki seviyede yazilabiliyor olmasi ARM islemcileri oyuncak islemcilerden ayiran en buyuk ozellik.

Islemcinin 32 bit olmasi, icinde ivir zivir cevre biriminin hatta NVIC unitesinin olmasi hikayeymis. Ayni isleri yuksek hizli 8 bit oyuncaklarla da yapabiliyoruz ve bugun farkettim ki yillardir CM3'u oyuncak islemci gibi kullaniyormusum.

ARM islemciyi hakkiyla kullanmaya daha bu gun basladim. (30-4-2014)

Sebep ne peki? Elbette MPU + 2 seviyede kodlamaya gecis.


Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: X-Fi - 30 Nisan 2014, 07:49:07
BEnim aklıma şöyle bir yol geldi;

Sizin bir aes tablonuz ve çözücü programınız olsun bunu memory e yazın MPU ile bu kodların bulundugu sektörü veya sektörleri saklayın. Ürün sizden çıkarken burası yazılı olsun.

1-Kullanıcı işlemciye sizin daimi yazılımınızın kriptolu opcodunu istediği boot yolunu kullanarak boş adreslerine yazsın.

2-Daha sonra içeride var olan kripto çözücü dahili programı çözüp MPU ile tüm programı saklasın.

Bu işlemler tekrarlanması gerektiğinde kripto çözücü kısım dahili programı silip boş sektörlerin korumalarını kaldırsın işlemler 1. maddeden devam etsin.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 30 Nisan 2014, 10:18:34
Soyle bir risk varsa hic isime gelmez.

Dusundugum sistemde isletim sistemi asla silinmeyecek. Disaridan program yuklenirken;

Oldu ya, hatali program bile yuklense,
Oldu ya kripto yanlis bile acilsa,
Oldu ya flash programlanirken elektrik bile kesilse,
Oldu ya cip tam programlanirken kilitlense,

Cip tekrar programi yukleyebilmeli.

Bu hayati bir nokta. Aksi takdirde isletim sistemi goctu diye cipin/kartin postayla vs bana ulastirilmasi gerekir.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 30 Nisan 2014, 10:33:21
Hocam yapmak istedigim ise odaklaniliyor ve elestiriler hep bunun gereksizligi uzerine. Halbuki amac isten cok daha cazip degilmi?

Siradan programlamanin otesine gecmek gerekiyor.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Burak B - 30 Nisan 2014, 11:13:58
"Perfect is the enemy of good" Voltaire

     Bence para-zaman olarak bakıldığında yapmak istediğiniz mantıksız bir durum oluşturuyor. Ancak sizin pozisyonunuzda bu geçerli değil diye düşünüyorum. Çünkü nasılsa bir geliriniz söz konusu ve bu yaptığınız cihazı piyasaya çıkarmak için bir "deadline, çalışan maaşı, v.b." sıkıntınız yok. Diğer yandan dimağen Ar&Ge birikimi olarak değerli bir konu. Ancak konunun kendisinin ürünün işlevinden daha alametli ve değerli oluşu marjinal bir ironi ortaya koyuyor.

     Bakın @gerbay DSO Quad' ın firmware yapısına ilişkin bir grafik paylaşmış. Bu şekilde geliştirilecek uygulamaya ait sistemin sınıflandırılması ve katmanlara ayrılması, daha sonrada bu katmanlar arası ilişkilerin kurallara bağlanması ile elde edilecek modüler bir yapı istediğinizi size fazlasıyla sunacaktır.

    Ayrıca koruma konusunda bu denli bir paranoya yapmanın bir anlamı yok. Simetrik ve Asimetrik kriptolama yöntemlerinin ve Hash algortimalarının doğru kullanımını bilmek pek çok konuda size yeterli güvenliği sağlar.

   Yukarıda yaptığım alıntı oldukça önemli bir cümledir. Unutmayın kusursuz yapacağım çok mükemmel olsun diye uğraştıkça gözünüzden kaçan basit hatalar tüm sisteminizin zaafiyetine sebebiyet verir.

  Buna en iyi örnek oyun konsollarıdır. Çünkü Bazı konsollar varki satış rakamlarının çok çok üstünde üretim maliyetleri vardır. Amaç donanımı satıp yazılımdan gelir elde etmek olduğu için güvenlik üst düzeye çıkartılmış olmasına rağmen bu donanımlar kırılmışlardır.


Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: X-Fi - 30 Nisan 2014, 11:21:54
Alıntı yapılan: z - 30 Nisan 2014, 10:18:34
Soyle bir risk varsa hic isime gelmez.

Dusundugum sistemde isletim sistemi asla silinmeyecek. Disaridan program yuklenirken;

Oldu ya, hatali program bile yuklense,
Oldu ya kripto yanlis bile acilsa,
Oldu ya flash programlanirken elektrik bile kesilse,
Oldu ya cip tam programlanirken kilitlense,

Cip tekrar programi yukleyebilmeli.

Bu hayati bir nokta. Aksi takdirde isletim sistemi goctu diye cipin/kartin postayla vs bana ulastirilmasi gerekir.

Hocam haklısınız onun çözümüde şu şekilde anlatayım.

Ben buradan olayı destekli yazılım olarak anlıyorum ve bunu kullanmak istiyorsam şunları da beraberinde isterim;
-Yapacağım yanlışlıklarla içerideki kripto çözen daimi programını port eden kısım bozulmasın.
-Birden çok versiyon veya farklı çalışan programlar olacaksa ben bunları teknik hatalar yapacak olsam dahi kendi başıma değiştirebileyim.

Alınması gereken önlemler;
-Daimi yazılım çipe yüklendikten ve kontrolü yapıldıktan sonra eeprom veya flash sabitleri kullanılarak daimi programın crc kaydı tutulacak her reset sonrasında sistem yazılım çalışıp daimi programın crc kontrolü yapılarak sağlamsa çalıştırılacak.
-Bu crc kontrol işlemi bir saniye gibi bir süre alabilir ancak daha sonradan bozulmuş programlarda dahi sistem yeniden yükleme garantiye alınmış olacak.
-Yükleme öncesinde yukarıda yazdığım crc kaydı hafızadan kaldırılacak böylece eski daimi program artık kullanılamaz hale gelecek ancak yeni program sağlam yükleninceye kadar sistem fonksiyonları çalışmaya devam edecek.

Bu yapıyı doğru bir şekilde kurarsanız hem yazılımızını kullandırtırsınız hemde kapalı geliştirmelerinize devam edebilirsiniz.


Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 30 Nisan 2014, 11:36:38
Zaten şu anda harici programın bozulup bozulmadığı, bunun dechipher işlemi, çipe yükleme aşaması ile ilgili sorunlar bitti. Geriye tek bir sorun kaldı o da içeriye atılan benim yazmadığım programların içerideki kodları çalması.

Bunu da MPU ile çözmek üzereyim.

Aslında yaptığım çalışma sıradan bir bilgisayar bölümü öğrencisinin bitirme ödevi olarak sunabileceği bir çalışma.

Profesyonel hayat acımasızdır. Profesyoneller yeniliklere amatörler kadar açık değillerdir, detaylara amatörler kadar takılmak istemezler.

Amatörün zamanı ve çoğu zaman uğraştığı iş için parası da boldur. Küçücük bir detaya günlerini hatta aylarını harcıyabilir.

O yüzden profesyonel arkadaşların eleştirilerini yersiz bulmuyorum ama bana hiç bir şey ifade etmiyor.

Ok yaydan çıktı bir kere.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 01 Mayıs 2014, 15:36:33
Yazdığım kodların hiç bir işe yaramadığını görünce STM32F103C8 işlemcide MPU ünitesinin olmadığını düşünmeye başladım.

Acaba ben mi hata yapıyorum diyorum ama registerlerin yerlerinde yeller esiyor.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Burak B - 01 Mayıs 2014, 15:54:49
Alıntı yapılan: z - 01 Mayıs 2014, 15:36:33
Yazdığım kodların hiç bir işe yaramadığını görünce STM32F103C8 işlemcide MPU ünitesinin olmadığını düşünmeye başladım.

Acaba ben mi hata yapıyorum diyorum ama registerlerin yerlerinde yeller esiyor.

STM32F2xx serisine geçmelisiniz.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: X-Fi - 01 Mayıs 2014, 16:08:20
STM32F2xx serisinde 48 pin kılıf yok. Kartınız hazır ise pin to pin olması açısından STM32F303C8 önerebilirim M4 + 2x ADC.

STM32F103C serisinde RTC register desteği de yok diye hatırlıyorum.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: diot - 01 Mayıs 2014, 16:25:54
1. mesajda istenilenlerin benzerini minipro tl866cs ve tl866a programlayıcılarında yapılmış. Bios verilmiş ama kriptolu kripto cözme kısmıda PIC18F87J50 nin (üstü kazınmış)  hafızasının üst bloğunda bulunan kripto cözme algoritması tarafından  boot loader tarafından okunan kriptolu firmwarenin kodu çözülüyor. Arkasından kriptosu çözülmüş yazılım flas a  boot loader tarafından yazılır. ve her firmware kendi hardware nosu ile karşılaştırılır. Bu kadar önlemden sonra akla gelen firmwarenin çözülemiyeceği. Ama onuda kırmışlar . Naparsanız yapın kırılmaz diye bir şey yok.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: emrahmrcn - 01 Mayıs 2014, 19:11:45
@z hocam,

MPU ile yapmaya çalıştığınız nedir? Bence öncelikle belirli bir RAM alanında çalışan komutun, sınırlandırılmış
bölgeye atlamasını/erişmesini MPU ile engellemeye çalışın, bunun sonucunda işlemci trap kesmesi oluşturacaktır.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 01 Mayıs 2014, 19:38:53
Kullandığım işlemcide MPU ünitesi yokmuş. Bu durumda kullanıcının yazacağı programı karta yüklenmesine izin vermeyeceğim.

MPU olmadan koruma yapmam imkansız.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: hgs - 01 Mayıs 2014, 21:59:26
Kart tasarımı bittimi ?
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 01 Mayıs 2014, 22:01:05
PCB ler postada.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Elektroemre - 31 Mayıs 2014, 12:33:45
@z hocam şuan projenin durumu nedir?
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 31 Mayıs 2014, 13:03:43
Keilde uretilen hex kodlari kriptolayip vs SD karta kopyalanacak hale getiren PC yazilimini bitirdim.

ARM kartimda SD deki bu dosyayi okuyup verileri ilk haline getirilen kismi da bitirdim.
Flashi silen kismi da bitirdim.

Bugun okunan kodlari flasha yazan kodlamayi yapacagim.
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: speak48 - 31 Mayıs 2014, 13:07:37
şifreleme olarak ne kullandınız
XTEA bu işler için baya uygun ve kullanılmakta
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 31 Mayıs 2014, 13:29:41
Algoritmam, anahtar uretimi ve yonetim sistemi Çok Gizli  bilgi sinifina giriyor.

Bu konuda soyleyecegim her kelime sistem icin bir zafiyet olusturur. (Bu kadar aciklama bile bir zafiyet olusturdu)


Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: speak48 - 31 Mayıs 2014, 13:55:33
 ;)
en iyisi kimsenin sizin siteminizi kırmaya yönelik isteği olmamasını Tanrı'dan dilemek.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 31 Mayıs 2014, 13:57:46
Umarim sistemim kirilmaya calisilacak kadar ilgi ceker.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Burak B - 31 Mayıs 2014, 14:41:28
@z hocam PC yazılımını görebilecekmiyiz ?
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: speak48 - 31 Mayıs 2014, 14:45:01
ilgi çekerse kesinlikle kırılır
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 31 Mayıs 2014, 14:47:39
@ByteMaster

Oldumu simdi?

Plain text ile Cipher texti  yan yana verirmiyim? (Debugger ile kripto algortmamin key uretim ve yonetimimi desifre edecek ip uclarini public hale getirirmiyim?) Aklin aliyormu?

Ipucu vermemek adina LCD mesajlarini plain text haliyle dogrudan chipher text icine gommeyi bile dusunuyorum.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Burak B - 31 Mayıs 2014, 14:57:11
:) Kullanıcıya firmware update yapmaya izin verecek misiniz ?
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 31 Mayıs 2014, 15:01:24
Firmware ile Zios (DOS tarzi mini isletim sistemi) yazilimdan bahsediyorsak malesef Zios update olmayacak.

Zaten PC yazilimi ile ZIOS esit gizlilige sahip.

Eger Ziosda bir hata yaparsam sattigim kartlari piyasadan toplayip MCUlari sokup sorunu giderip daha sonra yeni ciplerle tekrar dagitmam gerekecek.

Aksi takdirde sistemde buyuk zafiyet olusur.

Fakat uygulama programlarindaki hata hic sorun değil. Yenisini yayinladigim anda kullanicilar sistemlerini kolayca update edecekler.

Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Burak B - 31 Mayıs 2014, 15:11:49
MMU konusunu halletiniz mi ? Birde kullanıcılara uygulama geliştirebilecekleri bir API desteği sunacakmısınız ?
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 31 Mayıs 2014, 15:30:54
Yok hocam kullandığım CM3 çipte MPU  ünitesi yok malesef.

Şimdilik ilk versiyon olacak CM3 çipli  kartlarda sadece benim geliştirdiğim kodlar çalışacak.  CM3 yerine pin to pin uyumlu CM4 işlemci taktığımda MPU ünitesi de olacak ve bu durumda kullanıcıların da kendi kodlarını geliştirme durumu olacak.

Eğerki kripto düzeneğim kırılırsa bu durumda B planını (CM4 işlemcili yapıyı) hayata geçireceğim.

Şimdilik işleri daha fazla karıştırmamak adına CM3 çipli basit versiyonla bir şeyler yapmaya çalışıyorum. Eğer umut vaadederse devamı gelir.

Aşağıdaki başlıktaki çalışmayla cuzi fiyatlı yazılımlarımı ufak ufak paralara çevirmek istiyorum.

https://www.picproje.org/index.php/topic,53564.msg406975/topicseen.html#msg406975 (https://www.picproje.org/index.php/topic,53564.msg406975/topicseen.html#msg406975)
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: speak48 - 31 Mayıs 2014, 16:03:51
m3 ün mpu lu versiyonları var
ayrıca arm TRUST-zone diye bi olay var tam bilmiyorum
araştırılması gerek

baktımda sadece  a serisi için varmış
m serisi içinde üreticilerin yaptığı flashtan rame donanımsal şifreleme yapan lar var
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 31 Mayıs 2014, 16:14:07
Vardir da benim sectigim cipi bu saatten sonra degistirmek istemiyorum.

Trustzone olayina simdi baktim da benim cipime uymuyor.

http://www.arm.com/products/processors/technologies/trustzone/index.php (http://www.arm.com/products/processors/technologies/trustzone/index.php)

Bu proje ile bugune kadar yaptigim siradan uygulamalarin bir adim otesine gectim diye dusunuyordum da el oglu neler yapmis neler.



Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: speak48 - 31 Mayıs 2014, 16:26:57
dediğim gibi
harware hardware hardware
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 05 Ocak 2015, 20:20:20
Sözkonusu kartımın şemasını yayınlıyorum.

http://www.cncdesigner.com/wordpress/?p=4204 (http://www.cncdesigner.com/wordpress/?p=4204)

Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 29 Ekim 2020, 06:24:24
Bu konuya baska bir basliktan link verdim. Bu baslikta adi gecen ihtiyacimi kismen hallettim.
Fakat kullaniciya kendi yazdigi programi yukleme sansini veremedim.

Sistem PCmin bir klasorunde yeri geldiginde kullanilmak uzere simdilik uykuda.

STM32F103C8 uzerinde SD kart ve LCD var.
Bunun uzerine minik bir bootloader ve kripto programi yazdim.

Dagitmak istedigim programi hex hale getirip kriptoluyorum. Kullandigim anahtarlari programin arkasina ekliyor ve program uzunlugunu 64Kya cikartiyorum.

Ardindan 64K lik bu blogun her bir bitinde bitlerin yerlerini degistiriyorum.  Mesela 1. biti 7'ye koy, 7 biti 9'a koy .... gibi.

Ardindan 64K lik blokta her bir bytein yerlerini degistiriyorum. 1. bytei al, 3489'uncu byte yaz.  3489'uncu byte al 7899 a koy gibi. Bunlar icerideki bir fonksiyonla belirleniyor.

Boylece kurali bilmeyen hangi byte'dan sonra hangi byte gelecek bilemiyor. Bilse bile bitler nasil siraya dizilecek onu da bilemiyor. Disasm ile baksa zaten hic bir anlami yok.

Edit: Bu islem ardindan kriptolojiye ters olsa da ayni anahtarlarla (baslangic adresi 64K icine gizlenmis) bir de exorlama islemi yapiyorum.

Bu hale gelmis 64K programi internete koyuyorum. Isteyen indirebiliyor.
Bu programi SD karta kopyalayip islemcili kartima tasinip yukle dendiginde islemci
gelen kodlarin bize ait olmadigini test ediyor. Degilse bile bir flagi set edip komple kod sanki bize aitmis gibi desifre ediliyor.

Ancak flag set oldugu icin desifre sonunda kodlari kullanmayip kullaniciya bu kodlarin bozuk oldugu uyarisini veriyor.

Boylece tempest sizintilar dinlense bile zaman kazanmak adina hatali kod olup olmadigi lcd mesajdaki uyari haricinde anlasilamiyor.

Sistem bu haliyle 4/4 calisti ve cok guveniyorum kimse kiramaz. Brute Force icin cok zaman gerekiyor.

Fakat bu iddiam PC'deki kriptolama yazilimim ele gecirildigi anda coker.

Sistemi bir heyecanla yaptim fakat kullanacagimi sanmadigim icin bu detaylari verdim ve sistemi bu aciklamalari yaptigim icin bir hayli zayiflatmis oldum.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: mufitsozen - 29 Ekim 2020, 09:06:06
@z bu forumdaki arkaslarin bilgisini artiracak bir uygulama olmys, tebrikler.

Bununla birlikte kullandigin teknigin   cagdas bir teknik olmadigini belirtmem lazim.

19yy da yasamis olan Auguste Kerckhoffs kuralina gore sifreleme metodu/teknigi bilinir olmali sadece sifre sakli olmalidir.

Konu cok temel bir prensip etrafinda gelistigi icin bu konudaki bilgileri arastirmak faydali olacaktir.


https://en.m.wikipedia.org/wiki/Kerckhoffs%27s_principle

Sifreleme algorithmasini sakli tutmaya calismak , boyle bir sistemde en buyuk zafiyeti olusturur, dolayisi ile buna dayali bir guvenlik sistemi modern kripto sistemleri icin kullanilmamalidir.
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 29 Ekim 2020, 09:15:58
Haklisin ama kripto algoritmasinin herkesce bilinip bilinmemesi durumu uygulama ile ilgili degil mi?

Sifrelememde exorlama islemi yaptigimi belirtmemisim. Sonucta ortamda random keyim de var.

Bu arada bu teknikle piyasaya sundugum bir uygulamam da mevcut. Fakat  bu uygulama simdilik ilk ve son oldu.

Ana kart tum projeler icin ayni oldugu ve uygulama programlarini internete erisilebilir bir yere koydugum icin
indirilen programin ucreti karsiliginda mi yuklenecegi yoksa ucretsiz mi yuklenecegine hatta demo modunda 5..10 kez ucretsiz kullanilabilecegi de tanimlanabiliyor.

http://www.cncdesigner.com/wordpress/?p=4713

Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: mufitsozen - 29 Ekim 2020, 09:25:56
Alıntı yapılan: z - 29 Ekim 2020, 09:15:58Haklisin ama kripto algoritmasinin herkesce bilinip bilinmemesi durumu uygulama ile ilgili degil mi?

Sifrelememde exorlama islemi yaptigimi belirtmemisim. Sonucta ortamda random keyim de var.



Hayir degil.
yontemin gizli tutulmaya calisilmasi bu sekilde sifrelenmis BUTUN sistemlerin kirilmasi riskini getirir.

Bu yuzden resmi gov/military hicbir sistemde bu yontem kullanilmamalidir.
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 29 Ekim 2020, 09:47:10
Evet haklisin. Mevcut sistemim bir kere kirilirsa ve bundan haberim olmazsa artik butun sistemlerim cok kolay cozulur.

O yuzden de tek korumam PC yazilimimin benim elimde olmasi.
Başlık: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: Tagli - 29 Ekim 2020, 10:04:08
Konuyla ilgili kaynaklarda geçen genel bir tavsiye var:

Alıntı YapKriptoloji konusunda uzman değilseniz kendi algoritmanızı geliştirmeye çalışmayın. Güncel ve bilinen hazır bir algoritmayı alıp kullanın.
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: mufitsozen - 29 Ekim 2020, 12:21:14
Alıntı yapılan: z - 29 Ekim 2020, 09:47:10Evet haklisin. Mevcut sistemim bir kere kirilirsa ve bundan haberim olmazsa artik butun sistemlerim cok kolay cozulur.

O yuzden de tek korumam PC yazilimimin benim elimde olmasi.
@z bu durumda en buyuk risk (liability) sen oluyorsun farkindaysan!!

sana bir sekilde santaj veya iskence veya para vererek bu bilgiyi senden alanlar BUTUN eski-yeni bilgiyi ele gecirebilir.

Yada sana otobus carpsa sistem calismaz olur vs vs vs

Sonucta gelistirdigin sistemin kurumsal, gov/askeri yada gizlilik derecesi yuksek yerlerde kullanilmasi cok riskli ve tehlikelidir.
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 29 Ekim 2020, 13:07:14
Bahsettiginiz uygulamalarda haklisiniz. Benimkisi bu uygulamalardan cok uzak oldugundan ornegini verdigim projede bu riski her zaman alirim. Sozkonusu risk, kodlarin cirilciplak olmasindan daha iyidir.

Kriptolu kodlarim asagidaki linkte.

http://www.cncdesigner.com/wordpress/wp-content/uploads/Z1100.rar

Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: muuzoo - 29 Ekim 2020, 13:20:25
Hocam doğrudan alakalı değil ama zamanında yaptığım bir uygulamadan bahsedeyim. Türktelekom'un dağıttı modemlerden biri donanım olarak oldukça yetenekli olmasına rağmen firmware olarak kısıtlanmıştı. Openwrt yüklemye çalıştığımızda da firmware imzalı olmadığı/imzası tutmadığı için yüklenmiyordu. SOnrasında cihaza telnet(ssh da olabilir emin olamadım) üzerinden eriştim. Busybox üzerinden çalıştırılabilir dosyaları incelerken firmwarupdater uygulamasını buldum. Elle istediğim firmwarei yüklemeye çalışınca hata verdi.

Hata mesajını almak iyi oldu çünkü artık o uygulamayı disassemble edip dallanmaları görebilirdim. Nitekim de öyle oldu. firmwareupdater dosyasını alıp bilgisayarda disassemble edip her hata mesajı verdiğinde dallanma noktalarını bulup kodun istediğim yere jump etmesini sağladım  ;)

Bu sayede imza imiş doğrulama imiş hepsini bir kaç bitlik değişiklikle (sanırım 5 nokta vardı zıplama yapılan) aştım ve istediğim firmware'i yükledim.

Özet olarak keyi bilmek çok öenmli değil gibi. Uygun motivasyon varsa bir şekilde aşılır.  :)

Ekleme : Şİmdi bakınca işlemleri MCU üzeriende yaptığınızı yazmışsınız o noktayı atlamışım :) . Muhtemelen kod koruması da olduğu için okunması zor olur. Ben işlemin bir yerinde dağıttığınız programı da kullanıdığınızı düşünmüştüm.
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: power20 - 29 Ekim 2020, 21:28:48
Alıntı yapılan: mufitsozen - 29 Ekim 2020, 09:06:0619yy da yasamis olan Auguste Kerckhoffs kuralina gore sifreleme metodu/teknigi bilinir olmali sadece sifre sakli olmalidir.
Şifreye ilaveten algoritma da gizli olursa niçin güvenli olmuyor? 
Algoritma da gizli olursa sanki ekstra güvenlik sağlanacak gibi görünüyor?  Aydınlatır mısınız?
Başlık: Ynt: Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek
Gönderen: z - 30 Ekim 2020, 03:27:25
Alıntı yapılan: muuzoo - 29 Ekim 2020, 13:20:25Özet olarak keyi bilmek çok öenmli değil gibi. Uygun motivasyon varsa bir şekilde aşılır.  :)

Key var key var.

Key var 10 karakter, key var benim ornegimde oldugu gibi programin kendi uzunlugu kadar.

10K uzunlugunda bir programin var. Bunu 10K uzunlugunda bir baska programla exorladin diyelim. Bu 10K uzunlugundaki key de sadece sende bir de musteriye verdigin kartin icine gomdun diyelim.  JTAG'dan Disasm sansini da elden alinca geriye iki secenek kaliyor.

Ya sen bir hata yapacaksin
Yada kaba kuvvet kirmayi deneyecekler.

Ama bir kere kirildimi artik sistem coker.