티몬에서 UHD TV를 싸게 팔고 있어 해피머니 10만원당 93000원에 구매해서 티몬 캐쉬 30만원 충전한뒤 구입하니 더 싸졌다 +_+ 




<Fig1. 득템>



어쨋든 이놈은 태생이 TV인지라 기본으로 Sharp filter가 적용되어 있기 때문에 모니터로 쓰기엔 가독성이 너무 떨어진다. 


구글링을 통해 유출인지 찾은건진 모르겠지만 어떤 능력자가 관리자 모드 (팩토리 모드)를 공개줬다.  


(리모콘에서 메뉴 -> 1147 입력)


<Fig2. 팩토리 모드>




팩토리 모드에서 Sharp filter를 끌 수 있지만 재부팅하면 다시 초기화되는 치명적(?) 약점을 가져 아예 펌웨어 분석한 뒤 디폴트로 Sharp를 없애려고 분석을 시작했다.





<Fig3. 왜 찾질 못하니>



펌웨어 파일은 4메가 정도 되며 펌웨어 구조 분석한 문서가 아무것도 없다. 


또한 binwalk에도 만 가득 출력되서 직접..펌웨어 포맷을 분석하는 방법 밖에 없다....




처음으로 UHD를 샀고.......a/s도 2년 짜리라.........감히 Teardown을 못하겠다......UART를 찾아야 빠른데...... 안돼! a/s받아야돼!!


맨땅에 해딩 ㄱㄱㄱ



<Fig4. UHD로 디아 하면 짱임>



0x22080 부터 file 구조체가 있는 것을 확인할 수 있다. 4byte ADDR, 4byte SIZE, 3byte Type 순으로 기록되어 있는 것을 확인할 수 있다.


<Fig5. Zepa firmware file structure>


구조 파악했으니 얼릉 분리하고 분석 해봐야징 ^^*



<Fig6. Zepa firmware extract>


fig7는 분해된 데이터이며 ZEPA TV 있는 사람이라면 부팅 시 나오는 로고인  DIGITAL LED TV가 00308d10.jpg 파일로 존재하는 것을 확인할 수 있다.


<Fig7. files>



식별 할 수 있는 파일들은 확장자로 구분했다.


해당 TV의 OS는 embedded Linux이며 모든 관리는 커널에서 관리한다.


분석해보니 HDMI 2.0 쓰면 TV에서 알아서 그래픽 모드로 진입해서 SHARP 기능을 끄는 루틴이였다;; 


이후 GTX 970 사서 껴보니 Sharp filter가 자동으로 꺼졌다! ㅎ...........


더 상세한 내용은 저작권(?) 문제가 될 수 있으니, 자세한건 여러분이 분석하세요. 


펌웨어 수정해서 올리지 마세요. 벽돌 될 수 있습니다. 전 못고치며 모든 책임은 당신에게 있습니다.


얘는 크로마 서브샘플링(Chroma subsampling)을 지원하니 출력색은 ycbcr444으로 하세용^^*


import struct

print "##############################################"
print "#           Zepa Firmware Extractor v0.01    #"
print "#                                            #"
print "#             hacked by koha  #"
print "##############################################\n"

f=open("MSD3458_8M.bin","rb")

f.seek(0x22090)
addrl=[]
sizel=[]
for i in range(20):
    addr = f.read(4)
    addrl.append(addr)
    size = f.read(4)
    sizel.append(size)
    unknown = f.read(3)
    print str(i)+" : "+addr.encode('hex') +  " "+size.encode('hex')

for i in range(len(addrl)):
    addr = struct.unpack('>l',addrl[i])[0]
    size = struct.unpack('>l',sizel[i])[0]
    f.seek(addr)
    data = f.read(size)
    fname =  addrl[i].encode('hex')+".bin"
    if data[0] == "\x5D":
        fname =  addrl[i].encode('hex')+".lzma"
    if data[:3] == "\xff\xd8":
        fname =  addrl[i].encode('hex')+".jpg"
    open(fname,"wb").write(data)


저작자 표시
신고
Posted by kkoha 트랙백 0 : 댓글 0



<Fig1. 보도자료>



2014년 11월 24일에 소니 픽쳐스 엔터테인먼트 공격에 쓰였던 샘플 2종을 분석한 경험이 있는데 기사 본문에서 나오는 코드는 전혀 보지 못했던 코드다....


파일 정보 : https://virustotal.com/ko/file/E2ECEC43DA974DB02F624ECADC94BAF1D21FD1A5C4990C15863BB9929F781A0A/analysis/


파일 정보 : https://virustotal.com/ko/file/4D4B17DDBCF4CE397F76CF0A2E230C9D513B23065F746A5EE2DE74F447BE39B9/analysis/


sony malware 분석 내용 : http://kkoha.tistory.com/entry/sony-malware-analysis


2014년 11월 소니픽처스 공격과 2015년 12월 발생한 베트남 은행 공격, 그리고 올해 2월 발생한 방글라데시 중앙은행 공격에서 사용된 악성코드의 비교 결과 파일삭제 기능의 함수 코드 진행 부분이 매우 유사하다는 것이다. 그러나 이번 해킹사건이 북한의 소행이라고 단정 짓기는 어렵다는 게 이슈메이커스랩 측의 설명이다. 


기사 내용 : http://www.boannews.com/media/view.asp?idx=50617



이런 내용을 공유할 때는 hash 라도 좀 달아주면 좋겠다. 이슈메이커즈랩에서 분석 했다는 소니 악성코드가 변종일 수 있겠지만 FBI 수사 결과 발표에 공유된 놈과는 다르다.



<Fig2. sony>


sony 건의 특이점은 3번의 MBR wipe 기능과 파일 삭제 시 windows, program files 폴더는 예외 처리한뒤 exe파일과 dll파일이 아닌 파일만 WriteFile 함수를 통해 파일 크기만큼 가비 데이터로 덮어쓴 뒤 DeleteFileW 을 사용하여 삭제 하였다.




<Fig3. BBSWIFT>


기사에 나온 파일 정보 : https://virustotal.com/ko/file/AE086350239380F56470C19D6A200F7D251C7422C7BC5CE74730EE8BAB8E6283/analysis/


Bangladesh Bank’s (BB) SWIFT payment system 건 같은 경우 파일 경로명을 인자값으로 받아 해당 경로에 있는 파일을 WriteFile 함수를 통해 파일 크기만큼 0x00 데이터로 덮어쓴다.  

이후 rand 함수로 파일이름을 생성한뒤 (ex c:\1.txt -> c:\qhrsh) 

파일명을 삭제하기 위해 MoveFileA 함수로 파일명 변경 뒤 DeleteFileA 함수로 삭제한다.



구성도 및 분석 내용은 이미 baesystem에서 잘 분석되어 있어서 참고 바람.

전문 http://baesystemsai.blogspot.kr/2016/04/two-bytes-to-951m.html

저작자 표시
신고
Posted by kkoha 트랙백 0 : 댓글 0



The MIX transformation of RC2; four of these comprise a MIXING round


General

Designers      : Ron Rivest

First published : leaked in 1996, designed in 1987


Cipher detail

Key sizes      : 8–1024 bits, in steps of 8 bits; default 64 bits

Block sizes     : 64 bits

Structure        : Source-heavy unbalanced Feistel network

Rounds          : 16 of type MIXING, 2 of type MASHING



This module implements the RC2 (Rivest's Cipher version 2) encryption algorithm in pure python, specified in RFC 2268.


ECB and CBC modes are supported.


Original source code : https://github.com/0xEBFE/RC2-python/blob/master/rc2.py


Backporting Python 3 Code to Python 2.7.x by koha <kkoha@msn.com>


Quick start


Install from PyPIhttps://pip.pypa.io/en/latest/installing.html


pip install rc2


Example RC2 usage


from rc2 import *

#RC2 ECB encryption.
plaintext = "hello_word_ECB"
key = "test key"

rc2 = RC2(key)
encrypted = rc2.encrypt(plaintext,MODE_ECB)
print encrypted.encode('hex')

#RC2 ECB decryption.
rc2 = RC2(key)
decrypted = rc2.decrypt(encrypted,MODE_ECB)
print decrypted

#RC2 CBC encryption.
plaintext = "hello_word_CBC"
key = "test key"
iv = "\x01\x02\x03\x04\x05\x06\x07\x08"

rc2 = RC2(key)
encrypted = rc2.encrypt(plaintext,MODE_CBC,iv,PADDING_PKCS5)
print encrypted.encode('hex')

#RC2 CBC decryption.
rc2 = RC2(key)
decrypted = rc2.decrypt(encrypted,MODE_CBC,iv,PADDING_PKCS5)
print decrypted


https://pypi.python.org/pypi/rc2

저작자 표시
신고
Posted by kkoha 트랙백 0 : 댓글 0