본문 바로가기

전체 글

(34)
[ARM] iptime 펌웨어 분석 이번엔 iptime 펌웨어를 직접 다운받아 bootloader + kernel + RFS의 구조로 분해해 보겠다. 해당 포스팅은 다음 해커스쿨 자료를 참조하였다. https://www.hackerschool.org/HardwareHacking/%EA%B3%B5%EC%9C%A0%EA%B8%B0%20%ED%95%B4%ED%82%B9%20-%20ARM%20exploitation.pdf iptime의 g104 7.60 버젼의 펌웨어를 사용하였다. (http://iptime.com/iptime/?pageid=4&page_id=126&mod=document&keyword=7.60&uid=9564) binwalk로 펌웨어의 구조를 살펴보면 0x10038까지는 bootloader x0010038 이후에는 gzip으로 ..
[ARM] Bootloader + Kernel + RFS 이번에는 Bootloader와 Kernel 뿐 아니라 루트 파일 시스템과 함께 부팅을 진행할 것이다. $ wget http://busybox.net/downloads/busybox-1.21.1.tar.bz2 $ tar -xvf busybox-1.21.1.tar.bz2 루트파일 시스템을 부팅하기 위해선 busybox를 다운받아야한다. $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- defconfig $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig 다음 명령어로 빌드를 진행하면 아래와 같은 menuconfig 창이 뜨는데 busybox setting --> Build Options --> st..
[ARM] Bootloader + Kerenl 부팅 다음 과정은 bootloader와 Kernel을 결합하여 부팅을 진행할 것이다. 우선 Bootloader의 경로로 들어가서 include/configs/versatile.h 파일을 열어보자 CONFIG__BOOTARGS 파라미터를 통해서 시스템의 플래쉬나 하드디스크에 rfs를 저장하기 위해 가상의 메모리를 생성해준다. --> 128M의 가상 하드디스크 생성 그 이후 common/image.c 파일에서 if 조건문에 define(CONFIG_VERSATILE) 조건을 추가한다. $ make all ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 이후 다음 명령어로 u-boot를 다시 빌드한다. $ dd if=/dev/zero of=flash.bin bs=1 count=5..
[ARM] Kernel 설치 $ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.6.tar.xz $ tar -xvf linux-4.1.6.tar.xz 다음 명령어로 Kernel 설치 및 압축 파일 해제 $ apt-get install lib32ncurses5 lib32ncurses5 bc $ cd linux-4.1.6 $ make ARCH=arm versatile_defconfig $ make ARCH=arm menuconfig 다음 명령어로 필요한 패키지 다운로드 및 커널 컴파일 진행 마지막 명령어인 make ARCH=arm menuconfig를 입력하면 사진과 같은 창이 뜬다 여기서 Kernel Feature --> Use the ARM EABI 부분이 [*]가 되어있어..
[ARM] Boot Loader 설치 $ wget ftp://ftp.denx.de/pub/u-boot/u-boot-2010.03.tar.bz2 $ tar -xvf u-boot-2010.03.tar.bz2 $ cd u-boot-2010.03 다음 명령어로 U-Boot 파일을 다운받는다. $ make versatilepb_config ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- $ make all ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 그 다음 해당 명령어로 make를 진행해준다. $ make clean ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make 옵션을 변경해서 clean을 진행하고 싶으면 다음 명령어로 clea..
[ARM] Cross-Compiler 설치 Ubuntu 16.04 버젼에서 arm-2014.05-29 Version의 Cross Compiler 설치 방법 그림1.과 같이 다운받은 arm-2014.05 Cross Compiler의 Directory에서 bin 폴더로 이동 그림 2.와 같이 bin 폴더에 존재하는 arm-none-linux-gnueabi-gcc 파일 확인 해당 bin폴더의 전체 Path를 pwd 명령어로 복사 이후 그림 4.와 같이 gedit ~/.bashrc 명령어로 에디터 창 Open 맨 아래줄에 PATH =$PATH: (복사했던 경로) 한줄 추가 추가를 한 후 명령어 source ~/.bashrc를 입력하여 실행 sudo apt-get install libc6-i386로 패키지 다운 arm-none-linux-gnueabi-g..
[Verilog] FSM(유한 상태 머신)_3 지난 포스트에서 FSM의 기본적인 형태의 코딩 방식을 대략적으로 포스트 했었다. FSM 같은 경우는 사실상 모든 시스템에서 필수적인 모듈로 들어가게 된다. 모든 시스템을 구현할 때 컨트롤러와 연산부를 구현을 하는데 거의 모든 컨트롤러는 FSM 방식으로 구현을 하는거 같다. FSM에서 제어 신호를 생성하여 실행부로 제어 신호가 전달되어 그 신호에 맞게 동작을 하는게 기본적인 시스템 구현 방식이다. 원래 FSM 설계는 다음 상태를 나타내는 next_state와 현재 상태를 나타내는 state 두 reg형 데이터를 이용하여 구현하였다. 이중에서도 Mealy, Moore 방식의 FSM으로 나뉘어 졌지만 실제 설계를 할때는 next_state를 나타내는 데이터를 사용하지 않고 간단하게 현재 상태를 나타내는 sta..
[ARM] roplevel2 이번엔 roplevel2를 풀어보겠다. (ASLR은 disabled인 상태.) 이번엔 gadget라는 함수가 주어져 있다. 이를 이용하여 r0에 /bin/sh 문자열을 넣고 pc에 system의 주소를 넣어 shell을 획득해 보겠다. 하지만 여기서 r0에 /bin/sh를 넣는 대신 코드에 주어진 str1과 str2그리고 str3를 이용하여 명령어를 따로 넣어줄 수 있다. 두가지 방법을 시도해보겠다. 첫 번째 방법으로 /bin/sh를 system함수에 전달하는 방법을 사용해보겠다. 코드를 살펴보면 buff에 16byte를 할당받는다. 그럼 20byte dummy data를 넣어줌으로써 overflow를 일으킬 수 있다. gadget의 address이다. 여기서 20byte를 넣어준 후 jump할 주소가 ..