Thứ Năm, 14 tháng 12, 2017

Chạy MiniPro TL866 trong Linux


Mình thường hay sử dụng Linux để làm việc, đôi khi muốn nạp chip sử dụng bộ TL866 thì lại vướng vụ chương trình không chạy trên nền Linux mặc dù đã cài Wine.

Bài viết này hướng dẫn các bạn chạy chương trình nạp TL866 hoàn hảo trong Linux.


Có một điều dễ nhận thấy nhất đó là hầu hết các ứng dụng liên quan tới ngành nghề kỹ thuật thì thường là chạy trên Windows mà không phải các hệ điều hành khác, chắc vì do tính ổn định của ứng dụng và cùng số lượng lớn người dùng nên các nhà sản xuất ưu ái cho Windows hơn. Với TL866 cũng vậy, mặc định thì nhà sản xuất họ không hề viết ứng dụng này chạy trên nền Linux nhưng có nhiều người do làm việc trên hệ thống Linux quen rồi nên  họ tìm cách chạy TL866 trên Linux.
 Thật sự phải cám ơn các bạn nước ngoài vì việc này.

Để chạy được TL866 trên Linux thì điều tiên là phải cài ứng dụng Wine (viết tắt của Wine is not an emulator - một phần mềm mã nguồn mở dùng để chạy các phần mềm viết cho Windows trên các hệ điều hành dựa trên Unix)

Các bước thực hiện:

  1. Tải chương trình MiniPro Programmer từ trang web của nhà sản xuất tại link sau. Tải xuống.
  2. Cài đặt ứng dụng Wine nếu chưa cài.
  3. Giải nén ra và chạy với lệnh  sau: wine ./MiniProV660setup.exe.  Ứng dụng sẽ hiện cửa sổ cài đặt y chang như bên Windows.
  4.  Truy cập vào đây và tải xuống toàn bộ các file trong đó (cần thiết khi bạn muốn tự biên dịch *.dll), hãy copy tập tin setupapi_v660.dll vào thư mục cài đặt MiniPro và đổi tên nó thành  setupapi.dll.
  5. Đăng nhập với quuyền Root và tạo tập tin 50-minipro.rules ở thư mục /etc/udev/rules.d/ sau đó mở tập tin này ra và thêm vào nội dung: SUBSYSTEM=="usb", ATTR{idVendor}=="04d8", ATTR{idProduct}=="e11c", GROUP="plugdev", MODE="0666" 

  6. Mở Terminal và gõ lệnh sau: udevadm trigger
  7. Bây giờ hãy cắm cáp USB vào bộ nạp TL866 và xem kết quả kết nối. 

Thao tác bằng dòng lệnh

Nếu bạn không thích cài chương trình thông qua Wine hoặc là sử dụng chương trình MiniPro của hãng phát triển thì còn có một cách nữa là chạy chương trinhg dạng dòng lệnh mã nguồn mở được cộng đồng phát triển Tải tại đây.
Tất cả những gì bạn cần làm là đọc kỹ hướng dẫn của nó, tuy nhiên vì là chế độ dòng lệnh cùng với tính năng nghèo nàn nên lúc đầu có thể sẽ hơi khó xài.

Có một điều bất tiện nữa là muốn xem nội dung của file ROM thì không thể sử dụng chương trình minipro để xem được mà phải sử dụng một chương trình khác để xem nh hd, blesshex hay 010 Editor. Rất bất tiện đúng không nhỉ, vì vậy mình khuyên là vẫn sử dụng chương trình gốc của hãng thì hay hơn. Trên hệ sinh thái Linux thì khó mà có chương trình nào liên quan tới việc Flash NAND ngon cả.

Mình thử so sánh nội dung ROM đọc được từ phần mềm chính hãng với phần mềm mã nguồn mở này thì thấy nội dung khớp hoàn toàn, như vậy là có thể tin tưởng được.

Trong quá trình sử dụng phần mềm chính hãng mình thỉnh thoảng mắc phải một cái lỗi mà mình nghĩ là do chương trình gây ra chứ không phải là chip có vấn đề. "OverCurrent Protection actions! External short circuit/IC reverse or damaged!"

Tuy nhiên với chương trình mã nguồn mở thì nó lại đọc ngon lành, không rõ là do chương trình nó bỏ qua việc kiểm tra nguy cơ tiềm ẩn hay là do vấn đề từ phần mềm chính hãng gây nên, đều này có lẽ không quan trọng với mình lắm vì file mình đọc ra và nạp từ chương trình mã nguồn này cho tới nay đều chạy OK.


Thứ Tư, 13 tháng 12, 2017

Chuyển MiniPro TL866CS sang MiniPro TL866A

Xin chào các bạn.


Trước giờ mình thường hay dùng bộ nạp TL866 mà không để ý rằng nó còn phân chia phiên bản nữa. Đó là TL866CS và TL866A. Vậy sự khác nhau của 2 phiên bản này là gì?

Về bản chất hỗ trợ chip nạp thì cả hai phiên bản này đều hỗ trợ như nhau, nhưng khi bạn cần nạp qua giao tiếp ICSP (in-circuit serial program - nạp trên board mà không cần tháo chip ra, rất tiện lợi phải không?) thì chỉ có phiên bản TL866A hỗ trợ mà thôi, chỉ có như vậy thôi nhưng giá thì chênh lệch nhau cũng đáng kể.

Giao tiếp ICSP thường thì sẽ có trên ATMEL89S51, ATMEL89S52, AT45DBxxx, và toàn bộ họ AVR ATMEGAxxx, MICROCHIP PIC10Fxxx 12Fxxx 16Fxxx 18Fxxx, cũng như SYNCMOS SM59Dxx SM59Rxx.

Tình cờ hôm nay có việc sử dụng bộ này nạp cho một thiết bị mà mình thấy có cổng giao tiếp ISP nên mới để ý tới bộ này và sau khi thắc mắc với google thì mình tìm được kết quả của mấy anh tây họ hack vào firmware để chuyển từ phiên bản TL866CS sang TL866A, mình thử thực hiện theo hướng dẫn và thành công (tuy hơi run tay vì ngày đó mua cũng không có rẻ lắm). Ở VN mình thấy có nhiều của hàng, cty bán bộ nạp này (phiên bản TL866CS) vì nó thực sự cần thiết đối với anh em kỹ thuật + hỗ trợ rất nhiều chip nạp (hiện tại là >14.000>

Để thực hiện việc chuyển đổi qua lại giữa hai phiên bản này, các bạn có thể truy cập vào địa chỉ https://www.eevblog.com/forum/blog/eevblog-411-minipro-tl866-universal-programmer-review/ và đọc thật kỹ hướng dẫn nếu như muốn làm.

Nếu thấy quá rườm rà thì làm theo hướng dẫn dưới đây.
 
1: Cài đặt chương trình vào C:\MiniPro (Có thể tải tại đây).
2: Cắm dây cáp USB vào bộ nạp (nếu có phiên bản firmware mới hơn so với firmware trên bộ nạp thì chương trình sẽ gợi ý bạn thực hiện việc cập nhật).
3: Chạy chương trình MiniPro Programmer và nhìn vào thanh status của chương trình sẽ thấy phiên bản hiện tại TL866CS.

4: Thoát khỏi chương trình và tải tiếp file này.
5: Chạy chương trình TL866.exe từ bất kỳ thư mục nào mà bạn đã lưu nó.
6: Nhấp vào nút [...] và chọn tập tin update.dat từ C:\MiniPro.
7: Chọn "Firmware Dumper" và nhấn vào nút "Reflash".Nó sẽ hỏi xác nhận thì nhấn Yes
8: Nhấn vào "Advanced", sau đó chọn "A Bootloader", và nhấn vào nút "Write"
9: Nhớ bỏ chọn mục "Code protection bit", và sau đó nhấn "Write"
A: Nhấn OK để thoát ra cửa sổ chính và sau đó chọn "TL866A firmware" nhấn tiếp "Reflash"
B: Khi đã reflash xong, nhấn vào "Reset", chờ, nhấn lại "Reset".
C: Thoát chương trình TL866.exe.
D: Chạy lại chương trình MiniPro Programmer và xem phiên bản bây giờ là TL866A.

E: Chúc may mắn.:)

Thứ Tư, 6 tháng 12, 2017

Điện trở giả...

Bữa rồi có dịp mua linh kiện, cụ thể con điện trở 1k5/10W như cái hình dưới. Mọi lần mình mua thì nó đều là giá 5k/em, nay ghé tiệm khác thì nó báo giá có 2k/em. Cũng tính không lấy vì nhìn thấy màu sắc cùng với cách đóng gói nham nhở nhưng không hiểu sao lại lấy.
Về nhà mình có thử hi sinh đập một con 5K và con 2K ra thì ...

Mời các bạn xem hình để thấy rõ hơn.

Ruột THẬT
Chữ sắc nét, chân linh kiện to


Ruột gồm 2 con điện trở 750Ohm/2W nối tiếp với nhau thành 1k5/10W ???
Chữ nhòe nhoẹt,,, chân linh kiện nhỏ, yếu

Thứ Hai, 4 tháng 12, 2017

[Phần 3] Box FPT chạy gì khi khởi động?



Hiện tại theo như mình biết thì Box sau khi bật nguồn sẽ thực hiện tuần tự các bước sau:
  1. Boot loader from serial flash in Sigma Designs SMP86xx chip.
  2. Boot loader from NAND flash. 
  3. Linux kernel from NAND flash. 
  4. /sbin/init and /etc/init.d/rcS 
  5. /etc/init.d/S99local 
  6. /tango/app/runme.sh 
GHI CHÚ: 
- Từ bước 1-5 đây là mặc định được cấu hình từ SDK.
- Từ bước 6 trở về sau là do dev họ quyết định...
Giải thích:

 /etc/init.d/S99local

  • Đây là script chính sẽ được chạy sau khi kernel đã được chạy, thường thì script này nó nằm luôn trong phân vùng của pt residing in the rootfs filesystem (which is the part of the Linux kernel image). -
  • This boot script performs the following steps:
  • - Loads various drivers:
  • - FIP (front interface panel) driver.
  • - IR (remote control) driver.
  • - Drivers for storage devices (SATA, USB, SD card).
  • - Drivers for additional filesystems (e.g. NTFS).
  • - NAND flash driver. - Checks for local storage devices (e.g. USB flash drive).
  • - If such devices are found, they are tried to be mounted.
  • - NOTE: All mounted local storage devices are kept mounted in /tmp/boot_mnt/; these temporary mounts points are called "boot mounts"; at a later boot stage, /tango/bdstart.sh script will further analyze them and remount them into an appropriate final location.
  • - Checks if emergency firmware recovery should be performed (triggered by "dune_firmware.dff" file in the root of any mounted local storage device).
  • - Emergency firmware recovery updates all parts of the flash memory which are updated during normal firmware upgrade process. This includes all read-only parts of the firmware, such as Linux kernel and /tango. This does not include /mnt flash memory parition which is used to store STB settings. - After emergency firmware recovery is finished, the STB hangs and the user should remove the local storage device with "dune_firmware.dff" file and manually reboot the STB. - Checks if emergency settings reset should be performed (triggered by "dune_boot_reset_settings.flag" file in the root of any mounted local storage device).
  • - Emergency settings reset reformats /mnt flash memory partition which is used to store STB settings.
  • - After emergency settings reset is finished, the STB continues normal boot process.
  • - Mounts the main read-only flash memory partition to /tango.
  • - Mounts the main read-write flash memory partition to /mnt.
  • - If this fails (e.g. the filesystem is corrupted), reformats it and retries.
  • - Calls /tango/bdstart.sh.

/tango/app/runme.sh

  • - This is the main boot script residing in the /tango partition.
  • - This boot script performs the following steps:
  • - Loads some additional drivers. 
  • - Does some additional initialization.
  • - Prepares some symlinks. 
  • - Prepares some environment variables.
  • - Prepares some required directories and files in the RAM disk (e.g. in /tmp).
  • - Handles "boot mounts", remounts some of the local storage devices to /persistfs ("system storage") and /D ("main storage") when needed.
  • - Loads Sigma Designs MRUA drivers (microcodes and kernel modules).
  • - Frees resources occupied by the boot splash.
  • - Mounts /firmware_opt and/or /flashdata flash memory partitions, when they exist.
  • - NOTE:
  • The following scripts are used here:
  • - /tango/firmware/mount_firmware_opt.sh
  • - /tango/firmware/mount_flashdata.sh
  • - Does some more initialization. In particular, calls the following extra init scripts:
  • - /tango/firmware/scripts/init_timezone.sh
  • - /tango/firmware/scripts/init_cron_apps.sh
  • - /tango/firmware/ftpserver/run
  • - /tango/firmware/smbserver/run
  • - /tango/firmware/scripts/init_ssh_server.sh
  • - Calls the following script, if it exists (can be used in custom firmware builds to do some extra custom initialization on STB boot):
  • - /tango/firmware/config/start.sh
  • - Does some more initialization.
  • - Finally, launches the following executable: /tango/firmware/bin/root

Thứ Tư, 29 tháng 11, 2017

[Phần 2] Sử dụng công cụ Binwalk để phân tích Firmware


Binwalk là một công cụ cho phép chúng ta phân tích một hoặc nhiều tập tin. Nó cho phép chúng ta nhận dạng tập tin hoặc những đoạn code được nhúng vào trong Firmware. Binwalk sử dụng thư viện libmagic, vì vậy nó tương thích với các Magic Signature được tạo ra cho tiện ích tập tin  Unix.

Mình chỉ mới làm quen với chương trình nàyđược khoảng thời gian rất ngắn nhưng mình thấy nó thật sự hữu ích cho ai muốn tìm hiểu phân tích Firmware.
Thông tin chi tiết về nó các bạn có thể truy cập vào:
Trang chủ:  http://binwalk.org
Git: https://github.com/ReFirmLabs/binwalk
Cài đặt: https://github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md


Trích xuất các tập tin từ Kernel của Box FPT

Đầu tiên các bạn tải Kernel về bằng cách truy cập vào địa chỉ sau đây:
http://fbox-fw.fpt.vn/rom8675B00//v2.3.41/FPT-KERNEL.bin (phiên bản này hình như hơi cũ thì phải,,, nhưng mình nghĩ FPT nó không update cái Kernel này làm gì,,, có thì nó chỉ update Apps thôi.)

Sau khi tải về và lưu ở đâu đó, của mình thì lưu tại /Downloads, các bạn thử dùng Binwalk phân tích xem thế nào, mình thử phân tích thì nó như hình dưới.


Như vậy tập tin FPT-KERNEL.bin thực chất là một file ảnh (romfs dạng một phân vùng có tên là MIPSLINUX_XLOAD). Để chắc ăn mình thử mở bằng 010 Editor xem thế nào và hình dưới cũng cho mình kết quả y chang như Binwalk phân tích.


Oái,,, hình như phân vùng này còn chứa một file gì đó với định dạng .zbf (vmlinux_xload.zbf). Chắc ăn nhất là thử mount vào /tmp để xem thôi.

Rồi,, y rằng. Mở sao đây? Binwalk chứ sao.
Như vậy nhìn vào những gì Binwalk phân tích thì ta thấy file này chứa ZBOOT và tại offset 0x768 có chứa dữ liệu bị nén bằng gzip. Chúng ta không quan tâm tới offset chứa ZBOOT mà chỉ quan tâm tới phần data gzip kia thôi. Trích xuất nó ra xem thế nào.

Nếu như may mắn thì chúng ta có thể giải nén được data này ra và xem trong đó là cái gì.
Có vẻ giải nén ra được rồi nhưng không có gì cả,, chỉ là 1 file không tên tuổi.
Mình thử dump string xem có gì không thì thấy khá nhiều thông tin thú vị (cái này các bạn tự tìm hiểu nhé....)
Binwalk tiếp xem sao.

Lại thấy một data bị nén nữa,,, nhưng lần này file 1896 có vẻ cho chúng ta nhiều thông tin hơn nữa.
dd phát nữa xem sao.
Tiếp tục giải nén ra xem thế nào.

 XONG,,, lần này thì đã có dữ liệu để xem rồi.










Thứ Ba, 28 tháng 11, 2017

Giải nén file dune_service_XXXX.dsf của Dune

Mình có sử dụng một cái Box giải trí của thằng Dune (Dune TV-102). Bữa có tìm cách telnet vào nó qua cổng LAN (chứ cổng Serial UART thì quá bình thường) mục đích là không phải tháo nó ra mất zin.
Mình có tìm hướng dẫn trên mạng thì trang của Dune có hướng dẫn.
Các bạn nếu đang dùng nó có thể tham khảo.
http://files.dune-hd.com/sdk/doc/txt/dune_devel_info.txt

Đầu tiên các bạn tải dune_service_telnetd.dsf về vào một thư mục nào đó. Ở đây mình ví dụ là thư mục /Document và mở nó ra xem ở dạng hex



Để giải nén file này ra thì rất đơn giản là các bạn tải code từ trang dưới sau đó complie thành chương trình để chạy.

Sử dụng gcc để biên dịch thành file chạy  ELF


 Chạy lệnh decode nó sẽ tự giải nén ra với tên là outfile.gz


Hóa ra file dune_service_telnetd.dsf thực chất là cái lệnh
#!/bin/sh
telnetd

Thứ Bảy, 25 tháng 11, 2017

[Phần 1] Giải quyết DRM key

ĐÂY LÀ MỘT BÀI VIẾT DÀI KỂ VỀ QUÁ TRÌNH MÌNH TÌM DRM Key..
Như bài trước mình có giới thiệu qua về con Box của FPT chạy Linux thuần túy...

Bài viết này mình sẽ có gắng nói thật ngắn gọn về DRM key của con Box này. Vậy DRM key là gì và chúng có tác dụng gì trong thiết bị giải trí??

Mình xin nhắc lại chút về từ khóa DRM key cho một vài bạn hiểu (mình cũng tìm hiểu trên mạng và tha về blog này thôi...đứng quá khích khi mình nói sai nhé, hãy comment lại cho mình biết.)

DRM key là sao và tác dụng của chúng trong thiết bị giải trí???
DRM key là từ được viết tắt của Digital Rights Management Key (công nghệ quản lý bản quyền số). DRM key cần thiết cho việc thực hiện một số chứng năng nhất định mà nhà sản xuất muốn quản lý, cụ thể ở trên Box này thì DRM key có tác dụng rất quan trọng trong việc phát Video/Audio chất lượng cao qua cổng HDMI (bản quyền mà).

DRM key thường thì nó là một mã số riêng biệt, nghĩa là mỗi một thiết bị thì sẽ có DRM key tương ứng, việc này nhằm quản lý chặt chẽ vấn đề bản quyền số. Thông thường DRM key nó sẽ nằm ở phân vùng bootloader do vậy phải thật sự hỏng nặng lắm như sét đánh, cháy nổ mới mất cái DRM key này. (bootloader là một đoạn mã được thực thi trước khi hệ điều hành bắt đầu chạy và nó cho phép nhà sản xuất thiết bị quyết định những tính năng nào người sử dụng được phép dùng hoặc bị hạn chế.)

Mất DRM key điều gì sẽ xảy ra.. các thiết bị khác thì mình không rõ nhưng với Box nếu như mất DRM key thì việc xuất hình ảnh, âm thanh chất lượng cao qua cổng HDMI hay quang sẽ = 0,,, Nói tóm lại là Box sẽ vẫn chạy và màn hình sẽ đen thui. Việc này nhằm ngăn chặn khi một ai đó cố gắng can thiệp vào phần cứng để làm một điều gì đó mà nhà sản xuất không mong muốn.

Nói dài dòng vậy thôi, giờ đi vào việc chính.

Mình có 1 con Box sử dụng mạng FPT sau này do hết hạn hợp đồng nên Box nó trở thành cục chặn giấy đúng nghĩa, cắm nguồn vẫn lên nhưng không thể làm gì được vì nó dùng mạng của FPT. Sau một thời gian mình tìm hướng đi để sử dụng được Box này thì phát hiện thêm 1 vấn đề là tất cả các cách thức truy cập vào con Box này đều bị vô hiệu hóa và kèm theo là có mật khẩu bảo vệ.
Mình cũng thử từng dò mật khẩu bằng cách nhập vào những chuỗi ký tự mà người ta hay đặt pass nhưng tất cả đều không thành công.

Sau đó mình search Google thì mình thấy chip Sigma này nó được nhiều hãng sử dụng. Và cụ thể ở đây mình có thấy 1 hãng đó là Dune. Tìm hiểu một hồi mình tìm ra cách truy cập vào Bootloader của Box và mày mò trong đó,, và cũng từ đây thì Box đồng nghĩa với việc tèo khi boot không được nữa.

Kinh nghiệm cho mình biết là nó đã bị lỗi gì đó trong con Flash mà mình hay gọi tắt là lỗi ROM.

Giải quyết vấn đề.

Với những con bị lỗi ROM thì thường cách giải quyết nhanh gọn nhẹ nhất mà dân kỹ thuật hay làm là nạp ROM. Nạp ROM là gì?? Đó là phương pháp để làm sao cho máy trở về như lúc ban đầu, thường thì chúng ta có các nút Reset trên các thiết bị nhưng với một vài thiết bị đặc biệt thì hang sản xuất họ lại không thiết kế nút này,,, Phương pháp nạp ROM đa số đều làm cho thiết bị chạy lại thành công và các lỗi liên quan tới phần mềm đều được fix hết. một vài trường hợp vẫn không hết bệnh thì có nghĩa là rơi vào phần cứng… lúc này thì không phải liên quan tới ROM nữa mà nó có thể liên quan tới RAM, Vi xử lý, các IC giao tiếp hay cấp nguồn.


Tiến hành nạp ROM

Để tiến hành nạp ROM cho một thiết bị đang bị lỗi phần mềm thì chúng ta có nhiều bước thực hiện.
  • Sử dụng máy nạp ROM chuyên dụng
  • Sử dụng thao tác lệnh console thông qua các cổng giao tiếp trên board thiết bị. Thường thì đa số thiết bị sẽ cung cấp cổng Console này,, cổng này dân kỹ thuật thường hay gọi là cổng nối tiếp hay là cổng RS232…
  • Sử dụng thao tác lệnh Console thông qua cổng giao tiếp đặc biệt JTAG. JTAG được làm ra để dung cho việc test PCB là chủ yếu, nhưng thông qua cổng này chúng ta có cũng có thể nạp được ROM hay debug phần mềm.

Bài viết này mình sẽ sử dụng máy nạp ROM chuyên dụng, nhờ mối quan hệ với anh em kỹ thuật mà mình mượn được một bộ nạp ROM dạng chân TSOPxx.

Bước đầu tiên thuộc điều kiện bắt buộc phải có là có một source tốt, có nghĩa là có 1 cái Box đang chạy OK. Mình có liên hệ trong nhóm thì có 1 anh nhà đang dùng con này và mình có xin nhờ anh đó dump file ROM hộ mình và ảnh OK.
Sau khi có ROM ok mình tiến hành Backup ROM cũ trước rồi nạp vào và,,,,cắm nguồn thì thì có boot bình thường, hiện logo FPT nhưng sau đó thì không còn hiện tượng gì xảy ra nữa, hình ảnh, âm thanh đều không có,,, trong khi đó màn hình HDMI vẫn báo có tín hiệu. == > vẫn có tín hiệu có nghĩa là box đã boot OK nhưng có vấn đề gì đó mà không hiện hình được. Tiến hành tìm kiếm thông tin thì trên mạng có một sản phẩm khác hãng có cấu trúc phần cứng tương đồng là Dune TV102, tìm kiếm thông tin về sản phẩm này thì thu được kết quả có file log của loại sản phầm này, tìm thêm chút nữa thì thấy nó có cổng giao tiếp RS232.

Tiến hành rà soát trên board Box để tìm cổng Console thì phát hiện ra có 2 vùng socket để trống, kết hợp kinh nghiệm thì xác định được J2 là cổng Console.

Tiến hành log vào thì chính xác là là đây là cổng Console và file log như dưới: (file log rất dài nên mình chỉ post của sổ của nó đang chạy.)
Tình cờ mình đi chợ Nhật tảo thấy họ bán ve chai con này có 70k nên hốt về một con và thật bất ngờ là nó chạy OK... chắc do hết hạn hợp đồng truyền hình như mình nên họ bỏ.
Quay lại vấn đề.

Mình thử Log vào con mới và save lại file log sau đó mình đem 2 file này ra so sánh.
Để ý thì thấy file này nó chạy tới cuối luôn và so sánh với Box OK thì hoàn toàn giống nhau. Như vậy vấn đề nằm ở đâu???
Rà soát lại lần nữa thì ta thấy ngay gần đoạn đầu tiên khi boot thì có sự khác biệt:


Từ khóa DRM key với Google thì chúng ta được nhiều thông tin thú vị liên quan tới các thiết bị phát nguồn HD, cụ thể ở đây là với box. Theo như mô ta từ google thì DRM key thường được đi kèm với thiết bị HD để chống tình trạng sao chép nguồn HD, cụ thể thì ví như là phát tán phim lậu. Một ngôi nhà được ví như là Box và chì khóa nhà thì nó dĩ nhiên là giống như mật khẩu ra vào ngôi nhà đó rồi,, hehe, DRM key nó sẽ giống như cái quyền thuê nhà vậy,,, bạn chỉ được quyền sống trong căn nhà đó nhưng không cho phép mang đồ vật gì ra ngoài. Quay trở lại vấn đề về cái lỗi DRM key này, như vậy kết luận một điều là DRM key có liên quan tới hình ảnh trên màn hình HDMI không hiển thị.

Thử kết nối màn hình qua cổng AV thì hình ảnh hiện lên bình thường ??????????????????? quái lại. Như vậy là sao!!! Tìm lại chút thông tin trên mạng vẫn về DMR key thì chúng ta thu them được chút thông tin là DRM key sẽ chỉ ngăn việc sao chép hình ảnh video chất lượng cao ra khỏi thiết bị… liên tưởng tới vấn đề của Box thì ta có thể thấy là việc cắm cổng HDMI vào màn hình thì không hiển thị và nếu cắm cổng AV thì hiển thị bình thường. như vậy kết luận một điều là DRM key ngăn không cho Video và âm thanh chất lượng cao xuất qua cổng HDMI.

Phân tích cơ chế kiểm tra DRM key để cho phép xuất hình ảnh ra cổng HDMI.

Rà soát và so sánh lại file log chúng ta có them thông tin về DRM key, cụ thể là một chuỗi ký tự liên quan tới DMR key:

  1. Một phân vùng có tên là DRM keys
  2. Một file có tên là hdcpkey.xxxxx
  3. Một file có tên là iptokey.xxx
Cả 2 file này đều nằm trong phân vùng có tên là DRM keys và đều liên quan tới cụm từ DRM keys. như vậy vấn đề rõ rang nằm ở 2 file này.

Đọc và so sánh giữ 2 con Box nữa thì ta lại phát hiện một điều là 2 file hdcpkey và iptoken có các chuỗi số khác nhau (10 con Box thì sẽ có 10 file có chuỗi số khác nhau….). Như vậy mình đoán là mỗi Box sẽ có file khác nhau và không trùng lẫn được. Tới đây vấn đề gần sáng tỏ rồi.

Một Box A có chuỗi số hdcpkeyiptoken là AAA và một Box B có chuỗi số hdcpkeyiptoken là BBB. Nếu như copy source của con B qua A thì báo lỗi.. ??? Box dự vào cái gì để phát hiện ra chuỗi số của 2 file này không hợp lệ, lấy gì để so sánh 2 file này??

Thử lấy con ROM OK đóng qua board bị lỗi ROM thì vẫn là vấn đề DRM key như vậy Box so sánh 2 chuỗi file này với một chuỗi file nào đó không phải nằm trong nội dung con ROM để phát hiện ra việc can thiệp phần cứng nhằm vượt qua cơ chế DRM của hãng.

Sử dụng một chương trình Hex Editor để đọc source và tìm kiếm từ khóa DRM key liên quan.


Như vậy chúng ta có them thông tin:
  • -rom1fs-: đây là ký tự nhận dạng trong linux cho biết đây là một phân vùng
  • DRM keys: tên phân vùng và ta cũng nhìn thấy là trong phân vùng này có chứa một file hdcpkey.xxx. di chuyển xuống offset dưới chúng ta cũng sẽ thấy một file nữa tên là iptoken nữa.
Thử thay đổi tên của 2 chuỗi này thì khi chạy sẽ báo lỗi không tìm thấy 2 file này…và màn hình thì vẫn đen thui.

Sử dụng Hex Editor tìm tới phân vùng DRM Keys này và làm theo cách thủ công là copy - paste đoạn offset thay thế, dò phân vùng này ta thu đươc kết quả là offset chứa phân vùng này là cố định đều có địa chỉ bắt đầu từ 0x154000 và kết thúc là 0x15572F (chú ý là ứng với mỗi loại NAND khác nhau thì Offset khác nhau nhé). Sau khi thử copy-paste thì ố ồ.. cuối cùng cũng hiện hình.

Phân tích file ROM bằng công cụ binwalk thì ta thu được kết quả như hình dưới.

Như vậy là mình đã hiểu sơ qua cơ chế của DRM keys và cách mình vượt qua nó. Thực sự thì còn rất nhiều điều thú vị đằng sau câu chuyện này mà mình không dám kể ra vì nó sẽ làm ảnh hưởng "miếng cơm" của một số người (mình đã được yêu cầu gỡ bổ một vài nội dung liên quan tới bản quyền).

Kết thúc phần này, phần tới mình xin nói về Cách sử dụng binwalk để phân tích cũng như giải nén firmware

Thứ Năm, 23 tháng 11, 2017

Nâng cấp Flash từ 8MB lên 16MB trên TP-Link WR841N v9

Bữa rồi mình có đi chợ Nhật Tảo chơi mua được em "đồng nát" WR841N version 9.1, tính về cài OpenWRT mà không được toàn báo lỗi 18005. Mình có tìm hiểu thì biết lỗi này liên quan tới việc TPlink chặn không cho upgrade Firmware dành riêng cho nhà mạng Viettel.

Bài viết này mình sẽ hướng dẫn các bạn cách unlock router để có thể upgrade firmware phiên bản quốc tế. Cách thức unlock sẽ can thiệp vào chương trình u-boot của firmware. Cụ thể ở đây là mình sẽ thay thế u-boot gốc của TP-Link (bị giới rất nhiều thứ) bằng u-boot mod của tác giả pepe2k.

Các tính năng của u-boot mod này các bạn có thể xem tại địa chỉ của tác giả: https://github.com/pepe2k/u-boot_mod

Các thứ cần chuẩn bị:
  1. U-boot_mod để unlock u-boot: u-boot_mod__tp-link_tl-wr841n_v9
  2. Chương trình Hxd hay WinHex để chỉnh sửa file Firmware
  3. File ROM đã backup từ ROM gốc ra (tải từ đây)
  4. Tool cho phép nạp EEPROM, Flash
Đầu tiên để có thể tiến hành nâng cấp Flash thì điều cần làm quan trọng là hãy backup lại Flash của bạn bằng một tool nào đó cho phép bạn Programer hay gọi là nạp ROM. Ở đây mình sử dụng Tool CH341A (bài viết trước mình có giới thiệu sơ qua về nó), các bạn có thể mua ở VN:
 Ở đây là file backup của mình, các bạn có thể sử dụng nó nếu cần:

link 1: https://mega.nz/#!IwoUAbQR!0fUxsIU-AU6iYRpGQgrkWj8x5ccQ57hkYU29bC-2ckk
link 2: https://mega.nz/#!hx4ymAbB!0fUxsIU-AU6iYRpGQgrkWj8x5ccQ57hkYU29bC-2ckk

 Hãy mở file u-boot_mod__tp-link_tl-wr841n_v9__20170831__git_master-b29f18ad.bin và 841Nv9.1 bằng Hxd hay một chương trình nào đó cho phép bạn xem và chỉnh sửa Hexa như WinHex chẳng hạn, cá nhân mình thì thích thằng HxD hơn vì đơn giản và có những chức năng cơ bản mình cần. (WinHex thì pro quá...). Tại Tab của u-boot_mod__tp-link_tl-wr841n_v9__20170831__git_master-b29f18ad.bin hãy copy toàn bộ nội dung vào bộ nhớ tạm bằng Ctrl+A sau đó thì là Crtl+C

Chuyển qua Tab 841Nv9.1 và chọn menu Edit --> Select block và gõ thông số như hình dưới:

Tiếp tục thực hiện lệnh Edit --> Paste write Ctrl+B. Mục đích việc này là để thay thế u-boot gốc của TP-Link bằng u-boot-mod của pepe2k (nhiều tính năng hơn..)

Save lại cho chắc ăn.

Như vậy là chúng ta đã unlock u-boot rồi đó,,,

Tiến hành thêm vài bước nữa để thay đổi cấu trúc offset cho phép nâng lên 16MB không làm bước này thì router vẫn chạy nhưng không nhận diện được không gian trống thực sự của Flash.
Vẫn tại cửa sổ Tab  bạn hãy vào Search --> Goto ... để đi tới offset khác và gõ như hình dưới.

Hãy chắc chắn rằng con trỏ đang ở vị trí như hình dưới để khi mình chèn data sẽ không bị lệch.

Đi tiếp vào Edit --> Insert bytes và nhập các thông sô như hình dưới  để chèn data rỗng vào.
Tính toán 1 chút... nếu bạn rành về chuyển đổ các cơ số thì sẽ biết cách tính 16MB nó bằng bao nhiêu nếu đổi sang cơ số thập phân.
16MB = 16*1024*1024 = 16777216d = FFFFFFh = 16,384KB





Sau khi xong thì Save lại và bỏ lên tool để nạp nó. Mình có sẵn tool nên nạp luôn,, nếu bạn không có tool và chip Flash thì có thể liên hệ mình nạp giùm cho hoặc ra chợ Nhật tảo sạp E10 có ông tên Nhân mập chuyên làm chuyện chép/nạp ROM (hình như chạy hay không thì cứ 20K/lần.)
Sau khi Flash xong và cắm nguồn,, kiểm tra dung lượng nó thì như hình dưới,

Cài thêm vài chương trình trên OpenWRT như adblock, upxd.... thì còn lại như vậy.

Thứ Ba, 21 tháng 11, 2017

[Phần 0] Khám phá FPT Box HD



Bài viết này mình sẽ tập trung duy nhất về thiết bị xem truyền hình FPT HD (phiên bản chạy linux thuần của FPT sử dụng chip Sigma nhé). FPT sử dụng một loại box khác nữa chạy hệ điều hành Android 4.4 thì phải, mình không bàn ở đây vì mình không có nó và cũng không đủ tiền để mua nó (thời điểm hiện tại nghe nói là giá 1tr500k).


Nội dung bài viết mình sẽ nói về:
  1. Tìm hiểu Cơ chế DRM và cách vượt qua chúng (đây là vấn đề mình gặp phải khi cái box nhà mình nó hư và mình tìm cách sửa nó)
  2. Giải nén Kernel của box để xem thông tin (để biết mật khẩu mà nó chứa là gì)
  3. Phân tích một vài tập lệnh mà Box nó chạy khi khởi động
  4. Xem Chế  độ debug của box (Serial console) để tìm cách thâm nhập vào Box
  5. Chiếm quyền root của box để tùy biến một số thứ.


Sơ lược về phần cứng 1 chút:

Box bao gồm 3 phiên bản phần cứng khác nhau nhưng cấu hình thì tương đương nhau và cùng chạy 1 phiên bản Linux chung.
  1. Phiên bản chạy chip Sigma SMP8671A (dual DDR3 = 256MB)
  2. Phiên bản chạy chip Sigma SMP8675A/B (DDR3 256MB)
  3. Phiên bản này nghe nói là do FPT tự thiết kế sử dụng chip Sigma SMP8673A (DDR3 1GB) mình chưa có con này nên cũng không biết nhiều về nó, mọi thông tin có được do người bạn phía bắc nói mình biết.
Phiên bản 1 và 2 thì mình thấy là do Shenzhen Kaifa Technology Co. và MitraStar Technology Corp. thiết kế và sản xuất (mình biết điều này do thấy số MAC của nó là dạng 00:1C:55:xxxxx B0:46:FC:xxxx và tra trên https://macvendors.com thì nó báo thế.

Phiên bản thứ 3 thì tra MAC không có kết quả nào cả (chắc là do FPT chưa đăng ký MAC vendor...)

Bài đăng nổi bật

Timer điện tử Kawsan KW-TS17C

 

Popular Posts