Flash'tan CPU'ya yüklenebilmeleri için ikili yürütülebilir dosyanın imzalanmasını gerektiren gömülü bir platform var. İmzalı yürütülebilir dosya, imzadan (ilk 40 bayt) ve bir araya getirilen imzasız yürütülebilir dosyadan oluşur. İmzasız yürütülebilir dosya bir ELF dosyasından oluşturulabilir.
İmza formatı tam olarak bilinmemekle birlikte aşağıdaki gibi görünmektedir: İlk 4 bayt neredeyse her zaman 0xAA 0xAA 0x01 0x00 gibi görünmektedir (ayrı bir imza dosyasındaki 0xAA 0xAA 0x04 0xFF hariç, bu tür tek dosya sağlanmıştır) Sonraki 16 bayt dosyadan dosyaya farklılık gösterir ve muhtemelen imzanın kendisidir. Sonraki 16 bayt her zaman sıfırdır Sonraki 4 bayt, little-endian'daki imzasız ikili dosyanın boyutudur.
İşte böyle bir dosyanın bir örneği:
00000000: aaaa 0100 389e d563 f9d2 853b fb63 a2d3 ....8..c...;.c..
00000010: 9be7 1482 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 dc02 0000 0050 3914 0000 0001 .........P9.....
00000030: 0000 000a 0001 40df 0000 0147 0c00 002f ......@....G.../
00000040: 0001 0000 0004 0000 0003 0000 312e 705f ............1.p_
00000050: 0000 0000 0000 0000 0000 0000 0000 0052 ...............R
00000060: 0000 0000 0000 0064 0000 0000 0000 0000 .......d........
00000070: 0000 0000 0000 40df 0001 0000 0000 0146 ......@........F
00000080: 0000 0000 8420 0000 4000 0060 0000 0000 ..... ..@..`....
00000090: 0016 0060 4000 0004 0000 0060 0016 0900 ...`@......`....
000000a0: 00a4 1ef6 0913 fdff f004 e727 0016 f301 ...........'....
000000b0: 880f de41 fdff f033 ec2b 0912 88f1 fa1f ...A...3.+......
000000c0: c207 88b1 d842 f21f c208 f155 f002 4000 .....B.....U..@.
000000d0: 003c 0843 fdff f008 e525 f000 f009 4371 .<.C.....%....Cq
000000e0: fdff f033 ea3f f001 f742 4c80 085c 084b ...3.?...BL..\.K
000000f0: fdff f033 ea35 8e72 f06a 8e03 d841 8eb1 ...3.5.r.j...A..
00000100: fdff f2dd ea27 de4a 52ba de52 c6b9 de59 .....'.JR..R...Y
00000110: f878 c8d2 de62 f781 1fff de69 1245 2104 .x...b.....i.E!.
00000120: f003 4070 085a fdff f004 e72d 4af6 4cd8 ..@p.Z.....-J.L.
00000130: 1cf3 0910 002f fdff f004 e237 0016 f155 ...../.....7...U
00000140: f002 4030 fdff f008 e02f 2041 f301 8e14 ..@0...../ A....
00000150: f301 880f 8eb1 fdff f033 e729 8ef2 003b .........3.)...;
00000160: 0842 fdff f003 ec31 0410 6203 0002 6e11 .B.....1..b...n.
00000170: f000 f007 4371 fdff f033 e629 f001 f742 ....Cq...3.)...B
00000180: 4c80 0844 003b fdff f033 e53f 8e72 2042 L..D.;...3.?.r B
00000190: 48f3 4cd8 1cf3 0016 0928 fdff f003 ef33 H.L......(.....3
000001a0: 0017 f155 f002 4045 fdff f007 ed2b f300 ...U..@E.....+..
000001b0: 8e14 213f fdff f274 e425 e83a 6007 0004 ..!?...t.%.:`...
000001c0: 0003 fdff f034 e037 ee38 fdff f274 e42b .....4.7.8...t.+
000001d0: 0843 0032 fdff f003 e823 48f3 4cd8 f000 .C.2.....#H.L...
000001e0: f002 4000 f000 5a4c 0000 0a00 0016 0028 ..@...ZL.......(
000001f0: 0000 0001 40df 0000 0000 0000 0001 0000 ....@...........
00000200: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000210: 0000 0000 0000 0000 0010 0a00 0016 0028 ...............(
00000220: 0000 0001 0371 0000 0371 0000 0731 0000 .....q...q...1..
00000230: 073d 0000 0725 0000 07c9 0000 07d5 0000 .=...%..........
00000240: 0769 0000 0815 0000 07e1 0a00 0006 0010 .i..............
00000250: 0000 0001 1000 0000 085f 0a00 0005 0004 ........._......
00000260: 0000 0001 312e 705f 0500 0000 0600 0000 ....1.p_........
00000270: 0b00 0010 0000 0000 8000 001c 8000 0000 ................
00000280: 0000 8000 0067 8000 0000 0001 8000 009e .....g..........
00000290: 0000 0000 0b00 000b 0001 0002 0000 0014 ................
000002a0: 0000 0000 0003 0000 0018 0000 0000 0b00 ................
000002b0: 000b 0002 0000 0000 0000 8000 0047 0000 .............G..
000002c0: 0000 0004 8000 0079 0000 0000 0000 0000 .......y........
000002d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000002e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000002f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000300: 0000 0000 ....
Ve ayrı imza:
00000000: aaaa 04ff e7dc 26eb e3d3 fd0e bae5 3d38 ......&.......=8
00000010: 9105 8a2f 0000 0000 0000 0000 0000 0000 .../............
00000020: 0000 0000 d8b7 0000 ........
Hangi dijital imzanın kullanıldığını nasıl öğrenebilirim ve kendi dosyalarımı bununla nasıl imzalayabilirim?
GÜNCELLEME: Aşağıdaki program ASN.1 olarak kodunu çözmeye çalışıyor
import asn1
encoded_bytes = bytes.fromhex('aaaa0100389ed563f9d2853bfb63a2d39be7148200000000000000000000000000000000dc02000000503914000000010000000a000140df000001470c00002f000100000004000000030000312e705f000000000000000000000000000000520000000000000064000000000000000000000000000040df0001000000000146000000008420000040000060000000000016006040000004000000600016090000a41ef60913fdfff004e7270016f301880fde41fdfff033ec2b091288f1fa1fc20788b1d842f21fc208f155f0024000003c0843fdfff008e525f000f0094371fdfff033ea3ff001f7424c80085c084bfdfff033ea358e72f06a8e03d8418eb1fdfff2ddea27de4a52bade52c6b9de59f878c8d2de62f7811fffde6912452104f0034070085afdfff004e72d4af64cd81cf30910002ffdfff004e2370016f155f0024030fdfff008e02f2041f3018e14f301880f8eb1fdfff033e7298ef2003b0842fdfff003ec310410620300026e11f000f0074371fdfff033e629f001f7424c800844003bfdfff033e53f8e72204248f34cd81cf300160928fdfff003ef330017f155f0024045fdfff007ed2bf3008e14213ffdfff274e425e83a600700040003fdfff034e037ee38fdfff274e42b08430032fdfff003e82348f34cd8f000f0024000f0005a4c00000a00001600280000000140df0000000000000001000000000000000000000000000000000000000000000000000000100a000016002800000001037100000371000007310000073d00000725000007c9000007d50000076900000815000007e10a00000600100000000110000000085f0a000005000400000001312e705f05000000060000000b000010000000008000001c800000000000800000678000000000018000009e000000000b00000b000100020000001400000000000300000018000000000b00000b00020000000000008000004700000000000480000079000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')
for offset in range(32):
try:
decoder = asn1.Decoder()
decoder.start(encoded_bytes[offset:])
tag, value = decoder.read()
print(f'{offset}: {tag} ({len(value)}) {value}')
except Exception as e:
print(f'{offset}: Cannot decode:', e)
Şunları yazdırır:
0: Cannot decode: Premature end of input.
1: Tag(nr=10, typ=32, cls=128) (1) b'\x00'
2: Cannot decode: ASN1 syntax error
3: Tag(nr=0, typ=0, cls=0) (56) b'\x9e\xd5c\xf9\xd2\x85;\xfbc\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c'
4: Cannot decode: Premature end of input.
5: Cannot decode: Premature end of input.
6: Tag(nr=21, typ=0, cls=192) (99) b'\xf9\xd2\x85;\xfbc\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c\x00\x00/\x00\x01\x00\x00\x00\x04\x00\x00\x00\x03\x00\x001.p_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00'
7: Cannot decode: Premature end of input.
8: Cannot decode: Premature end of input.
9: Cannot decode: Premature end of input.
10: Tag(nr=5, typ=0, cls=128) (59) b'\xfbc\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c\x00\x00/\x00\x01\x00\x00\x00\x04\x00'
11: Cannot decode: Premature end of input.
12: Tag(nr=27, typ=32, cls=192) (99) b'\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c\x00\x00/\x00\x01\x00\x00\x00\x04\x00\x00\x00\x03\x00\x001.p_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x00\x00'
13: Cannot decode: Premature end of input.
14: Cannot decode: Premature end of input.
15: Cannot decode: Premature end of input.
16: Cannot decode: Premature end of input.
17: Tag(nr=7, typ=32, cls=192) (20) b'\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00'
18: Tag(nr=20, typ=0, cls=0) (0) b''
19: Tag(nr=2, typ=0, cls=128) (0) b''
20: Tag(nr=0, typ=0, cls=0) (0) b''
21: Tag(nr=0, typ=0, cls=0) (0) b''
22: Tag(nr=0, typ=0, cls=0) (0) b''
23: Tag(nr=0, typ=0, cls=0) (0) b''
24: Tag(nr=0, typ=0, cls=0) (0) b''
25: Tag(nr=0, typ=0, cls=0) (0) b''
26: Tag(nr=0, typ=0, cls=0) (0) b''
27: Tag(nr=0, typ=0, cls=0) (0) b''
28: Tag(nr=0, typ=0, cls=0) (0) b''
29: Tag(nr=0, typ=0, cls=0) (0) b''
30: Tag(nr=0, typ=0, cls=0) (0) b''
31: Tag(nr=0, typ=0, cls=0) (0) b''
İmza formatı tam olarak bilinmemekle birlikte aşağıdaki gibi görünmektedir: İlk 4 bayt neredeyse her zaman 0xAA 0xAA 0x01 0x00 gibi görünmektedir (ayrı bir imza dosyasındaki 0xAA 0xAA 0x04 0xFF hariç, bu tür tek dosya sağlanmıştır) Sonraki 16 bayt dosyadan dosyaya farklılık gösterir ve muhtemelen imzanın kendisidir. Sonraki 16 bayt her zaman sıfırdır Sonraki 4 bayt, little-endian'daki imzasız ikili dosyanın boyutudur.
İşte böyle bir dosyanın bir örneği:
00000000: aaaa 0100 389e d563 f9d2 853b fb63 a2d3 ....8..c...;.c..
00000010: 9be7 1482 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 dc02 0000 0050 3914 0000 0001 .........P9.....
00000030: 0000 000a 0001 40df 0000 0147 0c00 002f ......@....G.../
00000040: 0001 0000 0004 0000 0003 0000 312e 705f ............1.p_
00000050: 0000 0000 0000 0000 0000 0000 0000 0052 ...............R
00000060: 0000 0000 0000 0064 0000 0000 0000 0000 .......d........
00000070: 0000 0000 0000 40df 0001 0000 0000 0146 ......@........F
00000080: 0000 0000 8420 0000 4000 0060 0000 0000 ..... ..@..`....
00000090: 0016 0060 4000 0004 0000 0060 0016 0900 ...`@......`....
000000a0: 00a4 1ef6 0913 fdff f004 e727 0016 f301 ...........'....
000000b0: 880f de41 fdff f033 ec2b 0912 88f1 fa1f ...A...3.+......
000000c0: c207 88b1 d842 f21f c208 f155 f002 4000 .....B.....U..@.
000000d0: 003c 0843 fdff f008 e525 f000 f009 4371 .<.C.....%....Cq
000000e0: fdff f033 ea3f f001 f742 4c80 085c 084b ...3.?...BL..\.K
000000f0: fdff f033 ea35 8e72 f06a 8e03 d841 8eb1 ...3.5.r.j...A..
00000100: fdff f2dd ea27 de4a 52ba de52 c6b9 de59 .....'.JR..R...Y
00000110: f878 c8d2 de62 f781 1fff de69 1245 2104 .x...b.....i.E!.
00000120: f003 4070 085a fdff f004 e72d 4af6 4cd8 ..@p.Z.....-J.L.
00000130: 1cf3 0910 002f fdff f004 e237 0016 f155 ...../.....7...U
00000140: f002 4030 fdff f008 e02f 2041 f301 8e14 ..@0...../ A....
00000150: f301 880f 8eb1 fdff f033 e729 8ef2 003b .........3.)...;
00000160: 0842 fdff f003 ec31 0410 6203 0002 6e11 .B.....1..b...n.
00000170: f000 f007 4371 fdff f033 e629 f001 f742 ....Cq...3.)...B
00000180: 4c80 0844 003b fdff f033 e53f 8e72 2042 L..D.;...3.?.r B
00000190: 48f3 4cd8 1cf3 0016 0928 fdff f003 ef33 H.L......(.....3
000001a0: 0017 f155 f002 4045 fdff f007 ed2b f300 ...U..@E.....+..
000001b0: 8e14 213f fdff f274 e425 e83a 6007 0004 ..!?...t.%.:`...
000001c0: 0003 fdff f034 e037 ee38 fdff f274 e42b .....4.7.8...t.+
000001d0: 0843 0032 fdff f003 e823 48f3 4cd8 f000 .C.2.....#H.L...
000001e0: f002 4000 f000 5a4c 0000 0a00 0016 0028 ..@...ZL.......(
000001f0: 0000 0001 40df 0000 0000 0000 0001 0000 ....@...........
00000200: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000210: 0000 0000 0000 0000 0010 0a00 0016 0028 ...............(
00000220: 0000 0001 0371 0000 0371 0000 0731 0000 .....q...q...1..
00000230: 073d 0000 0725 0000 07c9 0000 07d5 0000 .=...%..........
00000240: 0769 0000 0815 0000 07e1 0a00 0006 0010 .i..............
00000250: 0000 0001 1000 0000 085f 0a00 0005 0004 ........._......
00000260: 0000 0001 312e 705f 0500 0000 0600 0000 ....1.p_........
00000270: 0b00 0010 0000 0000 8000 001c 8000 0000 ................
00000280: 0000 8000 0067 8000 0000 0001 8000 009e .....g..........
00000290: 0000 0000 0b00 000b 0001 0002 0000 0014 ................
000002a0: 0000 0000 0003 0000 0018 0000 0000 0b00 ................
000002b0: 000b 0002 0000 0000 0000 8000 0047 0000 .............G..
000002c0: 0000 0004 8000 0079 0000 0000 0000 0000 .......y........
000002d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000002e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000002f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000300: 0000 0000 ....
Ve ayrı imza:
00000000: aaaa 04ff e7dc 26eb e3d3 fd0e bae5 3d38 ......&.......=8
00000010: 9105 8a2f 0000 0000 0000 0000 0000 0000 .../............
00000020: 0000 0000 d8b7 0000 ........
Hangi dijital imzanın kullanıldığını nasıl öğrenebilirim ve kendi dosyalarımı bununla nasıl imzalayabilirim?
GÜNCELLEME: Aşağıdaki program ASN.1 olarak kodunu çözmeye çalışıyor
import asn1
encoded_bytes = bytes.fromhex('aaaa0100389ed563f9d2853bfb63a2d39be7148200000000000000000000000000000000dc02000000503914000000010000000a000140df000001470c00002f000100000004000000030000312e705f000000000000000000000000000000520000000000000064000000000000000000000000000040df0001000000000146000000008420000040000060000000000016006040000004000000600016090000a41ef60913fdfff004e7270016f301880fde41fdfff033ec2b091288f1fa1fc20788b1d842f21fc208f155f0024000003c0843fdfff008e525f000f0094371fdfff033ea3ff001f7424c80085c084bfdfff033ea358e72f06a8e03d8418eb1fdfff2ddea27de4a52bade52c6b9de59f878c8d2de62f7811fffde6912452104f0034070085afdfff004e72d4af64cd81cf30910002ffdfff004e2370016f155f0024030fdfff008e02f2041f3018e14f301880f8eb1fdfff033e7298ef2003b0842fdfff003ec310410620300026e11f000f0074371fdfff033e629f001f7424c800844003bfdfff033e53f8e72204248f34cd81cf300160928fdfff003ef330017f155f0024045fdfff007ed2bf3008e14213ffdfff274e425e83a600700040003fdfff034e037ee38fdfff274e42b08430032fdfff003e82348f34cd8f000f0024000f0005a4c00000a00001600280000000140df0000000000000001000000000000000000000000000000000000000000000000000000100a000016002800000001037100000371000007310000073d00000725000007c9000007d50000076900000815000007e10a00000600100000000110000000085f0a000005000400000001312e705f05000000060000000b000010000000008000001c800000000000800000678000000000018000009e000000000b00000b000100020000001400000000000300000018000000000b00000b00020000000000008000004700000000000480000079000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')
for offset in range(32):
try:
decoder = asn1.Decoder()
decoder.start(encoded_bytes[offset:])
tag, value = decoder.read()
print(f'{offset}: {tag} ({len(value)}) {value}')
except Exception as e:
print(f'{offset}: Cannot decode:', e)
Şunları yazdırır:
0: Cannot decode: Premature end of input.
1: Tag(nr=10, typ=32, cls=128) (1) b'\x00'
2: Cannot decode: ASN1 syntax error
3: Tag(nr=0, typ=0, cls=0) (56) b'\x9e\xd5c\xf9\xd2\x85;\xfbc\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c'
4: Cannot decode: Premature end of input.
5: Cannot decode: Premature end of input.
6: Tag(nr=21, typ=0, cls=192) (99) b'\xf9\xd2\x85;\xfbc\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c\x00\x00/\x00\x01\x00\x00\x00\x04\x00\x00\x00\x03\x00\x001.p_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00'
7: Cannot decode: Premature end of input.
8: Cannot decode: Premature end of input.
9: Cannot decode: Premature end of input.
10: Tag(nr=5, typ=0, cls=128) (59) b'\xfbc\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c\x00\x00/\x00\x01\x00\x00\x00\x04\x00'
11: Cannot decode: Premature end of input.
12: Tag(nr=27, typ=32, cls=192) (99) b'\xa2\xd3\x9b\xe7\x14\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00P9\x14\x00\x00\x00\x01\x00\x00\x00\n\x00\x01@\xdf\x00\x00\x01G\x0c\x00\x00/\x00\x01\x00\x00\x00\x04\x00\x00\x00\x03\x00\x001.p_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x00\x00'
13: Cannot decode: Premature end of input.
14: Cannot decode: Premature end of input.
15: Cannot decode: Premature end of input.
16: Cannot decode: Premature end of input.
17: Tag(nr=7, typ=32, cls=192) (20) b'\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00'
18: Tag(nr=20, typ=0, cls=0) (0) b''
19: Tag(nr=2, typ=0, cls=128) (0) b''
20: Tag(nr=0, typ=0, cls=0) (0) b''
21: Tag(nr=0, typ=0, cls=0) (0) b''
22: Tag(nr=0, typ=0, cls=0) (0) b''
23: Tag(nr=0, typ=0, cls=0) (0) b''
24: Tag(nr=0, typ=0, cls=0) (0) b''
25: Tag(nr=0, typ=0, cls=0) (0) b''
26: Tag(nr=0, typ=0, cls=0) (0) b''
27: Tag(nr=0, typ=0, cls=0) (0) b''
28: Tag(nr=0, typ=0, cls=0) (0) b''
29: Tag(nr=0, typ=0, cls=0) (0) b''
30: Tag(nr=0, typ=0, cls=0) (0) b''
31: Tag(nr=0, typ=0, cls=0) (0) b''