DL3021A elektronik yükü DL3031A haline getirmek

Şifreli olan EEPROM imajını açtıktan sonra kod ve veriler görünüyor, ama buradaki binary yapı, işlemcinin hafızasında çalışan programın yapısına tam olarak karşılık gelmiyor. Şifresi açılan yapı, peş peşe gelen binary bloklardan oluşuyor ve işlemcinin dahili ROM'undaki boot kodu, bu blokları tek tek okuyup RAM belleye kopyalıyor. Bu blokların hepsi kopyalandıktan sonra asıl program bellekte oluşturulmuş oluyor. Burada gereken, aynen bu ROM kodunun yaptığı gibi blokları tek tek derlemek ve RAM bellekte oluşacak programı oluşturmak.

Bu noktada şöyle düşündüm. elftosb programı ile SB formatındaki şifreli dosya elde ediliyor, ama bize tersi lazım, sbtoelf. Hakkaten de bunu aratınca aşağıdaki proje çıkıyor:


Burada sbtoelf.c diye bir program var. Bu depo, bir çeşit açık kaynak müzik çalar ailesinin firmware dosyalarını barındırıyor. Bana diğer yüzlerce bileşen lazım değil, sadece sbtoelf lazım. Bu programı tek başına derler hale getirmek için biraz uğraştım ve sonunda bağımsız olarak derleyip programı oluşturdum.

Bash:
[ta@bonsai elftosb]$ ../rockbox/utils/imxtools/sbtools/sbtoelf --help
Usage: sbtoelf [options] sb-file
Options:
  -h/--help             Display this message
  -o <prefix>           Enable output and set prefix
  -d/--debug            Enable debug output*
  -k <file>             Add key file
  -z                    Add zero key
  -r                    Use raw command mode
  -a/--add-key <key>    Add single key
  -n/--no-color         Disable output colors
  -l/--loopback <file>  Produce sb file out of extracted description*
  -f/--force            Force reading even without a key*
  -1/--v1               Force to read file as a version 1 file
  -2/--v2               Force to read file as a version 2 file
  -s/--no-simpl         Prevent elf files from being simplified*
  -x                    Use default sb1 key
  -b                    Brute force key
  --ignore-sha1         Ignore SHA-1 mismatch*
Options marked with a * are for debug purpose only
[ta@bonsai elftosb]$
 
Programın opsiyonlarını bir süre kurcaladıktan sonra istediğim kombinasyonu yakaladım

Bash:
[ta@bonsai elftosb]$ ../rockbox/utils/imxtools/sbtools/sbtoelf -o DL3000 -n -d -z DL3021_25X40.enc
[Restrict file size from 524288 to 276576 bytes]
Basic info:
  SB version: 1.1
  Header SHA-1: B6 49 82 63 0A 3A 99 58 91 0E 65 23 3A 44 23 A7 71 B1 5B B5  Ok
  Flags: 0
  Total file size : 276576
Sizes and offsets:
  # of encryption keys = 1
  # of sections = 1
Versions
  Random 1: 12 40 73 67 74 6C
  Random 2: BB A4 4A 3F C9 ED
  Creation date/time = Tue Apr 25 13:11:54 2017
  Product version   = 999.999.999
  Component version = 999.999.999
  Drive tag = 0
  First boot tag offset = 9
  First boot section ID = 0x00000000
Encryption keys
  Key 0
    Key: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    CBC-MAC: 59 7F FA 86 AC 6D 49 C5 6C B8 22 26 54 67 AB EC
DEK
  Entry 0
    Encrypted key: D1 CD 68 88 FF 64 75 14 B0 E8 68 F6 9F 75 CA 0D
    CBC-MAC      : 59 7F FA 86 AC 6D 49 C5 6C B8 22 26 54 67 AB EC  Match
    Decrypted key: CF EB 7A DF 29 AC AE 69 5D 65 1D 15 F1 06 E4 87
  Summary:
    Real key: CF EB 7A DF 29 AC AE 69 5D 65 1D 15 F1 06 E4 87
    IV      : B6 49 82 63 0A 3A 99 58 91 0E 65 23 3A 44 23 A7
Sections
  Section '____'
    pos   =       a0 -    43840
    len   =    437a0
    flags =        1  Boot Section (Encrypted)
      LOAD | addr=0x00000000 | len=0x00000040 | crc=0xbaf6af35  Ok
      LOAD | addr=0x00000400 | len=0x00004d14 | crc=0x50f7869a  Ok
      FILL | addr=0x00018000 | len=0x00001960 | pattern=0x00000000
      LOAD | addr=0x00008000 | len=0x00000020 | crc=0x1809d243  Ok
      [f=1] CALL | addr=0x00008000 | arg=0x00000000
      LOAD | addr=0x00000000 | len=0x00000040 | crc=0xd0a61acb  Ok
      LOAD | addr=0x41000000 | len=0x0003e8f7 | crc=0x9058c4b0  Ok
      FILL | addr=0x41300000 | len=0x00001900 | pattern=0x00000000
      FILL | addr=0x41301900 | len=0x000024e4 | pattern=0x00000000
      FILL | addr=0x41700000 | len=0x004c4b40 | pattern=0x00000000
      LOAD | addr=0x00008000 | len=0x00000020 | crc=0xb4af14f4  Ok
      [f=1] JUMP | addr=0x00008000 | arg=0x00000000
Final signature:
  Encrypted SHA-1:
    07 15 E8 6D C7 F4 38 BD C3 5E 34 3A 81 22 C1 AB
    E5 71 B2 09 F1 40 13 31 4C 80 7B F4 21 C2 BC 8A
  File SHA-1:
    17 05 FE FC 19 C0 EE 96 8C 90 7C 15 09 EA 10 2B 6B B6 76 D6  Ok
Write boot section ____ to DL3000____.0.elf
Write boot section ____ to DL3000____.1.elf
Write command file to DL3000make.db
[Debug output]
SB File
+-Version: 1.1
+-Flags: 0
+-Drive Tag: 0
+-First Boot Section ID: 00000000 (____)
+-Timestamp: 0x1f0fde9a4e280 (Tue Apr 25 13:11:54 2017)
+-Product Version: 999.999.999
+-Component Version: 999.999.999
+-Section
|  +-Identifier: 00000000 (____)
|  +-Type: Boot Section (Encrypted)
|  +-Alignment: 32 (bytes)
|  +-Other Flags: 0
|  +-Instructions
|  |  +-LOAD | addr=0x00000000 | len=0x00000040
|  |  +-LOAD | addr=0x00000400 | len=0x00004d14
|  |  +-FILL | addr=0x00018000 | len=0x00001960 | pattern=0x00000000
|  |  +-LOAD | addr=0x00008000 | len=0x00000020
|  |  +-CALL | addr=0x00008000 | arg=0x00000000
|  |  +-LOAD | addr=0x00000000 | len=0x00000040
|  |  +-LOAD | addr=0x41000000 | len=0x0003e8f7
|  |  +-FILL | addr=0x41300000 | len=0x00001900 | pattern=0x00000000
|  |  +-FILL | addr=0x41301900 | len=0x000024e4 | pattern=0x00000000
|  |  +-FILL | addr=0x41700000 | len=0x004c4b40 | pattern=0x00000000
|  |  +-LOAD | addr=0x00008000 | len=0x00000020
|  |  +-JUMP | addr=0x00008000 | arg=0x00000000
[ta@bonsai elftosb]$

Çıktının en altında "Instructions" başlığından sonra, ROM kodunun RAM'e kopyaladığı bütün bloklar görülüyor. Onun dışında bu program, iki tane ELF dosyası ve bir tane de db dosyası oluşturmuş. db dosyasının amacını bilmiyorum ama ELF dosyaları tam olarak bizim istediğimiz dosyalar. Bunlar, windows'daki EXE gibi çalıştırılabilir dosyalar.

Bash:
-rw-r--r--  1 ta ta    20286 Jun  2 13:37 DL3000____.0.elf
-rw-r--r--  1 ta ta   256879 Jun  2 13:37 DL3000____.1.elf
-rw-r--r--  1 ta ta      427 Jun  2 13:37 DL3000make.db
 
ELF programların özelliklerine bakalım:

Bash:
[ta@bonsai elftosb]$ readelf -a DL3000____.0.elf
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x8000
  Start of program headers:          52 (bytes into file)
  Start of section headers:          180 (bytes into file)
  Flags:                             0x2, GNU EABI, <unknown>
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         4
  Size of section headers:           40 (bytes)
  Number of section headers:         6
  Section header string table index: 5

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text0            PROGBITS        00000000 0001a4 000040 00  AX  0   0  1
  [ 2] .text1            PROGBITS        00000400 0001e4 004d14 00  AX  0   0  1
  [ 3] .text2            PROGBITS        00008000 004ef8 000020 00  AX  0   0  1
  [ 4] .bss0             NOBITS          00018000 0001a4 001960 00  AX  0   0  1
  [ 5] .shstrtab         STRTAB          00000000 004f18 000026 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  y (purecode), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x0001a4 0x00000000 0x00000000 0x00040 0x00040 RWE 0
  LOAD           0x0001e4 0x00000400 0x00000400 0x04d14 0x04d14 RWE 0
  LOAD           0x004ef8 0x00008000 0x00008000 0x00020 0x00020 RWE 0
  LOAD           0x000000 0x00018000 0x00018000 0x00000 0x01960 RWE 0

 Section to Segment mapping:
  Segment Sections...
   00     .text0
   01     .text1
   02     .text2
   03     .bss0

There is no dynamic section in this file.

There are no relocations in this file.

There are no unwind sections in this file.

No version information found in this file.
[ta@bonsai elftosb]$
 
Bash:
[ta@bonsai elftosb]$ readelf -a DL3000____.1.elf
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x8000
  Start of program headers:          52 (bytes into file)
  Start of section headers:          212 (bytes into file)
  Flags:                             0x2, GNU EABI, <unknown>
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         5
  Size of section headers:           40 (bytes)
  Number of section headers:         7
  Section header string table index: 6

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text0            PROGBITS        00000000 0001ec 000040 00  AX  0   0  1
  [ 2] .text2            PROGBITS        00008000 00022c 000020 00  AX  0   0  1
  [ 3] .text1            PROGBITS        41000000 00024c 03e8f7 00  AX  0   0  1
  [ 4] .bss0             NOBITS          41300000 0001ec 003de4 00  AX  0   0  1
  [ 5] .bss2             NOBITS          41700000 0001ec 4c4b40 00  AX  0   0  1
  [ 6] .shstrtab         STRTAB          00000000 03eb43 00002c 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  y (purecode), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x0001ec 0x00000000 0x00000000 0x00040 0x00040 RWE 0
  LOAD           0x00022c 0x00008000 0x00008000 0x00020 0x00020 RWE 0
  LOAD           0x00024c 0x41000000 0x41000000 0x3e8f7 0x3e8f7 RWE 0
  LOAD           0x000000 0x41300000 0x41300000 0x00000 0x03de4 RWE 0
  LOAD           0x000000 0x41700000 0x41700000 0x00000 0x4c4b40 RWE 0

 Section to Segment mapping:
  Segment Sections...
   00     .text0
   01     .text2
   02     .text1
   03     .bss0
   04     .bss2

There is no dynamic section in this file.

There are no relocations in this file.

There are no unwind sections in this file.

No version information found in this file.
[ta@bonsai elftosb]$
 
İki programda da örtüşen alanlar var, örtüşmeyen alanlar da var. Burada bir tahminle gideceğım. İlk program, ikinci programın bir ön yükleyicisi gibi görev yapıyor muhtemelen ve bir kere ikinci program yüklendikten sonra ilk programın bir fonksiyonu kalmıyor. Bu varsayımla devam edeceğim.
 
@taydin Assembly kodun ekran görüntüsü yerine tamamını paylaşma imkanın var mı?

Paylaşayım da şu anda hiç anlamlı semboller yok. Bunların ortaya çıkarılması lazım. Mesela aşağıda bir fonksiyon için bunu yapmaya başladım. İşlemcinin clock controller'ini yapılandırıyor. Normalde sadece hex adres var, bunların i.MX283 ün çevre birimleri ile eşleştirilmeleri gerekiyor.



Kod:
; ---------------------------------------------------------------------------

loc_2DA4                                ; CODE XREF: sub_2BE0+288↓p
                LDR     R0, =HW_CLKCTRL_XTAL
                LDR     R0, [R0]
                MOVS    R0, R0,LSL#1
                MOVS    R0, R0,LSR#1
                LDR     R1, =HW_CLKCTRL_XTAL
                STR     R0, [R1]
                MOV     R0, #0x80018000
                LDR     R0, [R0]
                MOVS    R0, R0,LSL#2
                MOVS    R0, R0,LSR#2
                MOV     R1, #0x80018000
                STR     R0, [R1]
                LDR     R0, =unk_80018170
                MOV     R1, #0xAA00
                STR     R1, [R0]
                MOV     R0, #0x80072000
                LDR     R0, [R0]
                ORRS    R0, R0, #0x80000000
                MOV     R1, #0x80072000
                STR     R0, [R1]
                MOV     R0, #0x80072000
                LDR     R0, [R0]
                MOVS    R0, R0,LSL#2
                MOVS    R0, R0,LSR#2
                MOV     R1, #0x80072000
                STR     R0, [R1]
                MOV     R0, #0x80072030
                MOV     R1, #0x680A60
                STR     R1, [R0]
                MOV     R0, #0x80072020
                MOV     R1, #0x301
                STR     R1, [R0]
                BX      LR
 

Ekler

  • DL3000____.0.elf.asm.zip
    78 KB · Görüntüleme: 120

Çevrimiçi personel

Forum istatistikleri

Konular
6,952
Mesajlar
118,756
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top