Örnek firmware SCX-3200 sürümünü 7 Eğitim

22.05.2014 15:32

Format yazıcılar firmware hakkında bir yazı dizisi yazmaya okuyucuların sayıda isteklere göre.

Neredeyse firmware odnoapparatnyh başından itibaren, en basit ile başlayalım. SCX-3200. Sürüm 8 ile başlayarak, üretici şifreleme, burada basit bir sıkıştırma gzip kullanın başladı. 
yüzden gerekir:

Size uygun bir yerde 1. HEX-editörü,. Gibi Hex Editor NEO.
2.. Programlama ortamı, size tanıdık bir dil. Örneğin biz kullanacağız PHP DevelStudio (http://develstudio.ru/ ), çünkü Burada gzip açma / paketleme düzenlemek için en kolay yolu. 
3.. IDA Hex-ışınları ile Pro Advanced 5.5 demontaj için.

Hex Editor dosyayı yükleyin:

image001

ve (CTRL + G) 0 × 40078 (onaltılık gösteriminde adreslerinin bundan böyle tüm) gidin

image002

Bir imza $ ZIP bakın. İşte paketlenmiş çekirdek ve firmware. 
4 byte 0 × 40080000 aşağıdaki - boyutu paketlenmiş parçalar - kernel, daha sonra 0x001afff4 açma adresi.

image003

ARASÖZ: firmware 2 ana parçaları - yükleyici ve çekirdek. Loader yazılımı paketten çıkarır ve sağlama denetler ve çekirdeği başlar. Burada zorla modu ve hata ayıklama olduğunu. Çekirdek - bilgisayar, ağ protokolleri, ve diğer tüm makina iş akışları ile yazdırma işlevini, etkileşim uygular ana çalışma yazıcı programı.

Şimdi Devel Studio başlamak için zamanı. 
form üzerinde düğmesi eklemek ve onun için olay yaratmak "Click"

image004

Etiket üzerine çift tıklayın kod editörü açmak "Click".

image005

Bu andan itibaren programlama başlar. 
aşağıdaki kodu yazma:

$ FN = 'D: \ test \ Z501BFEZ900168X_FIX_NU_3200_v07.hd' ;/ / имя файла и путь к нему
$ Dosya = file_get_contents ($ fn); / / Dosyanın içeriğini bir değişkene Oku
$ Zip = substr ($ dosya, 0x40078 0 xC, 0x1afff4); / / Title $ ZIP olmadan paketlenmiş çekirdek Oku (0xC - 12 bayt)
$ Sıkıştırılmış = gzuncompress ($ zip); Arşiv / / Paketin Açılması
file_put_contents ('D: \ kernel.hd', $ unzip); / / Çözülmüş çekirdeği kaydet
"! Tamam" echo;

Derlemek ve çalıştırmak ( F9 ), bizim tek bir düğmeye basmaları. Dosya yolları doğru yazılmış ve hiçbir hata meydana olacaksa - "Tamam" iletisini gördüğünüzde. Tanıtıldı file ' D: \ kernel.hd 'bizim temel çözdükten olduğunu.

Bu seri numarasını bulmak için arama yapabilirsiniz.

Image006

Gülümseme, ve büyük ölçüde zenginleştirmek nasıl bu bilgiyi birkaç yıl önce hayal.

Şimdi IMU içinde çekirdeği yüklemek ve biraz sökmeye. 
işlemci ARMB (big endian) seçimi:

image007

Resimdeki gibi, adresleri gösterirler:

image008

Далее в меню Seçenekler -> Genel -> Analiz -> Kernel seçenekleri 1 ставим галку son tahlilde geçiş yapın -> Tamam -> programı yeniden analiz edin
Несколько минут курим. Пока идет процесс анализа кода, скажу вам, что верить Иде% 100 нельзя на, иногда она ошибочно принимает данные за код и наоборот. И довольно часто домысливает лишние конструкции, что усложняет понимание кода. Лучше запускать исследуемые функции в эмуляторе и смотреть, что происходит с регистрами и памятью. Но, все-таки, общую картину понять можно значительно быстрее с помощью Иды.

Böylece, analiz (basın gitmek için seri 0x400C76B0 yer alır, bitti G )

image009

Seri numarası, bir firmware zamanı 0x400C768C okumak ve onu doğrular ve = 0 uygunluk R0'ın durumunda yazıyor sub_400DBF70, çalışması için R0 yoluyla iletilir.

ROM: 400C769C CMP R0, # 0
var sıfır ile R0 karşılaştırma, aslında, değişim bayt mnogoapparatnuyu firmware bir çift yapabilirsiniz yerdir.

Hepsi bu, devamı için bekleyin. Eğer yukarıdaki tüm anlamak yoksa, o zaman hiçbir mantıklı bu konuda tırmanmaya - hatta daha üzerinde.