참고 : https://www.flashrom.org/Development_Guidelines#Adding.2Freviewing_a_new_flash_chip

내가 만들 chip : MX25L3233F

참고 chip : MX25L3273E


git 을 통해 https://github.com/flashrom/flashrom 를 설치한다. flashrom 에서 현재 지원되지 않는 칩의 경우 추가할 수 있는데, 그 방법을 확인해보고 해보았다.


새로운 칩 정보를 넣는 방법은 아래 링크에 자세히 써있다.

https://www.flashrom.org/Development_Guidelines#Adding.2Freviewing_a_new_flash_chip


저 링크의 내용을 따라 새로운 칩 정보를 넣어본것을 아래에 정리해본다.



3. First, find the best* IDs in the datasheet (*FIXME: this needs to be explained together with the probing somewhere else in detail) and check if the ID exists in flashchips.h already

  >> #define MACRONIX_MX25L3205 0x2016 이런식으로 되어있는데, 여기서 0x2016의 의미는 데이터 시트에 보면 ID Definitions 값 중 RDID 값이 있다. 앞부분 1비트는 장비 제조사 비트, 다음 2비트가 모델 비트다. 여기에 RDID 2번째 비트 값을 의미한다.


7. We encode various features of flash chips in a bitmask named .feature_bits. The various possibilities can be found in flash.h.

  >> MX25L3273E에 FEATURE_WRSR_WREN | FEATURE_OTP,로 되어있고, DataSheet에 otp 검색하니까 있어서 똑같이넣음


8. .tested is used to indicate if the code was tested to work with real hardware, its possible values are defined in flash.h. Without any tests it should be set to TEST_UNTESTED.

  >> TEST_UNTESTED 로 설정


9. .probe indicates which function is called to fetch IDs from the chip and to compare them with the ones in .manufacture_id and .model_id. This requires some knowledge or source reading. For most SPI flash chips probe_spi_rdid is the right one if the datasheets mentions 0x9f as an identification/probing opcode.

  >> 9f 검색하니까 rdid 커맨드 지원해서 그대로 납둠


11. .block_erasers stores an array of pairs of erase functions (.block_erase) with their respective layout (.eraseblocks).

  1. .block_erase is similar to the probing function. You should at least check that the opcode named in the function name is matching the respective opcode in the datasheet.
>> 참고 chip을 보니, 20, 52, d8, 60, c7이 erase 커맨드임. 그래서 erase 커맨드 hex값을 확인했더니 같았음.

2. Two forms of .eraseblocks can be distinguished: symmetric and asymmetric layouts. Symmetric means that all blocks that can be erased by an opcode are sized equal. In that case a single range can define the whole layout (e.g. {4 * 1024, 256} means 256 blocks of 4 kB each). Asymmetric layouts on the other hand contain differently sized blocks, ordered by their base addresses (e.g. {{8 * 1024, 1}, {4 * 1024, 2}, {16 * 1024, 7}}describes a layout that starts with a single 8 kB block, followed by two 4 kB blocks and 7 16 kB blocks at the end).
      >> 지우는 사이즈를 의미함. 예로 참고하는 칩의경우 52의 경우 32K의 블록을 지우는 거니까 {32 * 1024, 128}로 되어있었음. 같은 사이즈의 칩이고, 다 같았기 때문에 그대로 둠 


12..printlock is a misnomer to some extent. It is misused not only to print (write) protected address ranges of the chip, but also to pretty print the values of the status register(s) - especially true for SPI chips. There are a lot of existing functions for that already and you should reuse one if possible. Comparing the description of the status register in the datasheet of an already supported chip with that of your chip can help to determine if you can reuse a printlock function.

  >> Block Lock Protection에 있는 정보를 비교해서 작성함. 두개의 칩이 같은 내용이 적혀있어 그대로 진행... 


13, .unlock is called before flashrom wants to modify the chip's contents to disable possible write protections. It is tightly related to the .printlock function as it tries to change some of the bits displayed by .printlock.

  >> 잘 모르겠음..ㅠㅠ 일단 그대로 둠


14. .write and .read are function pointers with the obvious meaning. Currently flashrom does only support a single function each. The one that is best supported by existing programmers should be used for now, but others should be noted in a comment if available.

  >> 참고 칩의 256이 page 단위길래 검색했더니 같음. read도 0x0b로 fastread 값이 동일함


15. .voltage defines the upper and lower bounds of the supply voltage of the chip. If there are multiple chip models with different allowed voltage ranges, the intersection should be used and an appropriate comment added.

  >> minimum, maximum 값이다. 동일함




flashchips.c 에 수정한값.



{

.vendor = "Macronix",    /*HANA*/

.name = "MX25L3233F",

.bustype = BUS_SPI,

.manufacture_id = MACRONIX_ID,

.model_id = MACRONIX_MX25L3205,

.total_size = 4096,

.page_size = 256,

/* OTP: 64B total; enter 0xB1, exit 0xC1 */

.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,

.tested = TEST_UNTESTED,

.probe = probe_spi_rdid,

.probe_timing = TIMING_ZERO,

.block_erasers =

{

{

.eraseblocks = { {4 * 1024, 1024} },

.block_erase = spi_block_erase_20,

}, {

.eraseblocks = { {32 * 1024, 128} },

.block_erase = spi_block_erase_52,

}, {

.eraseblocks = { {64 * 1024, 64} },

.block_erase = spi_block_erase_d8,

}, {

.eraseblocks = { {4 * 1024 * 1024, 1} },

.block_erase = spi_block_erase_60,

}, {

.eraseblocks = { {4 * 1024 * 1024, 1} },

.block_erase = spi_block_erase_c7,

},

},

.printlock = spi_prettyprint_status_register_bp3_srwd,

.unlock = spi_disable_blockprotect_bp3_srwd,

.write = spi_chip_write_256,

.read = spi_chip_read, /* Fast read (0x0B) and dual I/O supported */

.voltage = {2700, 3600},

},



이렇게 해서 make 하면 됨.. 

./flashrom -p linux_spi:dev=/dev/spidev0.0 -V 


근데 -V 옵션을 주고 보면 RDID 값을 확인할 수 있는데, 0x00 0x0000 으로 출력되는걸 보니 장비 칩이랑 SPI 통신이랑 원활하게 이루어 지지 않는것같다.


./flashrom -L  하면 방금 추가한 MX25L3233F 도 볼 수 있음. 




'임베디드' 카테고리의 다른 글

ubuntu 에 searchsploit, findsploit 설치하기  (0) 2017.09.01
kali binwalk 삭제 후 다른버전 설치하기  (0) 2017.02.15
glibc 버전 확인하기  (0) 2016.03.24
lz4 latency 압축 해제하기  (0) 2015.05.14
linux shadow, passwd  (0) 2015.05.13

searchsploit은 exploitdb에서 poc들을 찾을 때 사용하는 것. 


SearchSploit URL : https://www.exploit-db.com/searchsploit/



findsploit은 metasploit + exploitDB 의 PoC들을 찾을 때 사용함.

findsploit에서는 searchsploit을 이용하여 exploitDB의 PoC들을 검색함.


FindSploit URL : https://github.com/1N3/findsploit





내 환경은 ubuntu 이고, findsploit을 설치 할 때 install.sh를 실행 한 결과 아래와 같은 화면이 출력되었다.



root@hana-ubuntu:~/tools/Findsploit# ./install.sh 

   ___ _           _           _       _ _   

  / __(_)_ __   __| |___ _ __ | | ___ (_) |_ 

 / _\ | | '_ \ / _` / __| '_ \| |/ _ \| | __|

/ /   | | | | | (_| \__ \ |_) | | (_) | | |_ 

\/    |_|_| |_|\__,_|___/ .__/|_|\___/|_|\__|

                        |_|                  


+ -- --=[findsploit by 1N3

+ -- --=[https://crowdshield.com

+ -- --=[Usage: findsploit windows xp remote, etc.


 + -- --=[This script will install findsploit under /usr/share/findsploit.

패키지 목록을 읽는 중입니다... 완료

의존성 트리를 만드는 중입니다       

상태 정보를 읽는 중입니다... 완료

E: exploitdb 패키지를 찾을 수 없습니다

 + -- --=[Done!




exploitdb 패키지를 찾을 수 없습니다!!!

그래서 install.sh를 확인했더니,


apt-get 을 이용하여 exploitdb를 설치하는 것을 확인했다.


그런데, searchsploit의 설치 정보를 보면 linux의 경우 apt가 아닌 git을 이용하여 설치하도록 권장했다.


따라서 나도 apt-get이 아닌, git을 이용해서 searchsploit을 설치해야 한다.


대략적인 흐름은 다음과 같다.


1. git을 이용하여 searchsploit 설치

2. findsploit 의 searchsploit 경로 변경

3. findsploit 설치


1번은 위에 작성한 searchsploit URL에 들어가면 설치 방법이 자세하게 적혀있다.

2번은 git clone으로 다운받은 findsploit의 파일의 searchsploit 경로를 바꿔준다.

나는 아래와 같이 바꿨다.





#SEARCHSPLOIT_SCRIPT='/usr/share/exploitdb/searchsploit' # PATH TO THE EXPLOITDB SEARCH SCRIPT  

SEARCHSPLOIT_SCRIPT='/opt/exploit-database/searchsploit' # PATH TO THE EXPLOITDB SEARCH SCRIPT




그리고 정상적으로 ./install.sh을 하면 똑같은 에러 메시지가 떠도 정상적으로 구동이 된다.








'임베디드' 카테고리의 다른 글

flashrom 새로운 chip 등록하기  (0) 2018.11.30
kali binwalk 삭제 후 다른버전 설치하기  (0) 2017.02.15
glibc 버전 확인하기  (0) 2016.03.24
lz4 latency 압축 해제하기  (0) 2015.05.14
linux shadow, passwd  (0) 2015.05.13

cd /usr/local/lib/python2.7/dist-packages/

rm -rf binwalk

rm binwalk*


rm /usr/local/bin/binwalk



binwalk 다른 버전 다운로드


tar -xvfz binwalk-2.0.0.tar.gz

cd binwalk-2.0.0

./configure

make

python setup.py install

'임베디드' 카테고리의 다른 글

flashrom 새로운 chip 등록하기  (0) 2018.11.30
ubuntu 에 searchsploit, findsploit 설치하기  (0) 2017.09.01
glibc 버전 확인하기  (0) 2016.03.24
lz4 latency 압축 해제하기  (0) 2015.05.14
linux shadow, passwd  (0) 2015.05.13

getconf -a | grep libc

GNU_LIBC_VERSION                   glibc 2.22





1. 툴 설치

# svn checkout http://lz4.googlecode.com/svn/trunk/ lz4-read-only

# cd lz4-read-only

lz4-read-only# make

lz4-read-only# make install




2. 압축 해제

lz4-read-only# cd programs

lz4-read-only/programs# ./lz4 -l -d filename.lz4 filename_output


옛날 linux 시스템의 경우, passwd에 해쉬값을 저장한다.



hashid salt hash value 


예시 

root:$1$OaaE3jCl$R20qeJza5v/kby7CpSZ0j0:0:0:root:/root:/bin/ash






md5(PASSWORD + SALT)

cpio 파일이 뭐지??


root@kali:~/Desktop/_output.extracted# file 15080 

15080: ASCII cpio archive (SVR4 with no CRC)



해당 파일을 해제 하는 명령어

root@kali:~/Desktop/_output.extracted# cpio -i -F 15080







다시 압축하기

root@kali:~/Desktop/_output.extracted/output# find . | cpio -H newc -o > ../output.cpio

7737 blocks

'임베디드' 카테고리의 다른 글

ubuntu 에 searchsploit, findsploit 설치하기  (0) 2017.09.01
kali binwalk 삭제 후 다른버전 설치하기  (0) 2017.02.15
glibc 버전 확인하기  (0) 2016.03.24
lz4 latency 압축 해제하기  (0) 2015.05.14
linux shadow, passwd  (0) 2015.05.13

+ Recent posts