sweetchip's blog

0x00 프로그래밍 3건이 검색되었습니다.

Ubuntu 기준으로 크로스 컴파일 하는법.


최근 여러 아키텍쳐 환경을 구성해야할 일이 있어서 메모!


1. 아래 명령어로 여러 아키텍쳐 gcc 설치 (arm, mips, ppc 등 다수 포함)

sudo apt-get install -y  gcc-multilib-arm-linux-gnueabi;sudo apt-get install -y  gcc-multilib-arm-linux-gnueabihf;sudo apt-get install -y  gcc-multilib-mips-linux-gnu;sudo apt-get install -y  gcc-multilib-mips64-linux-gnuabi64;sudo apt-get install -y  gcc-multilib-mips64el-linux-gnuabi64;sudo apt-get install -y  gcc-multilib-mipsel-linux-gnu;sudo apt-get install -y  gcc-multilib-powerpc-linux-gnu;sudo apt-get install -y  gcc-multilib-powerpc64-linux-gnu;sudo apt-get install -y  gcc-multilib-s390x-linux-gnu;sudo apt-get install -y  gcc-multilib-sparc64-linux-gnu


복사가 어렵다면 http://pastebin.com/iksPEaAH


2. 설치 이후 아래와 같이 컴파일

arm-linux-gnueabi-gcc -o test test.c -> arm

mips-linux-gnu-gcc -o test_mips test.c ->mips


결과

[sweetchip@ubuntu qemutest]$ file test

test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=a9248b1c3ba0c940029d23e1f345d3df28f6d39b, not stripped


[sweetchip@ubuntu qemutest]$ file test_mips

test_mips: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 3.2.0, BuildID[sha1]=2e9ee6c560f47f28aa1ee329fba06e38bbb0960e, not stripped



보너스


만약 ubuntu 에서 mips나 arm 바이너리를 돌리고 싶다면 아래 명령어를 통해서 qemu를 설치한다

sudo apt-get install qemu-user-static


qemu-user-static 은 이미지를 구하지 않고도 ELF 바이너리를 돌릴수 있도록 도와주는 매우 땡큐한 툴이다.


설치 이후 가능한 목록은 아래와 같다.

[sweetchip@ubuntu qemutest]$ ls /usr/bin/qemu-

qemu-aarch64-static       qemu-m68k-static          qemu-mipsn32el-static     qemu-ppc64-static         qemu-sparc64-static

qemu-alpha-static         qemu-microblazeel-static  qemu-mipsn32-static       qemu-ppc-static           qemu-sparc-static

qemu-armeb-static         qemu-microblaze-static    qemu-mips-static          qemu-s390x-static         qemu-tilegx-static

qemu-arm-static           qemu-mips64el-static      qemu-or32-static          qemu-sh4eb-static         qemu-unicore32-static

qemu-cris-static          qemu-mips64-static        qemu-ppc64abi32-static    qemu-sh4-static           qemu-x86_64-static

qemu-i386-static          qemu-mipsel-static        qemu-ppc64le-static       qemu-sparc32plus-static

엄청나게 많은 아키텍쳐를 지원한다.


그중 아까 컴파일한 arm과 mips를 돌려보자. (사전에 gdb-multiarch 설치 필요, apt-get 으로 설치한다.)


-> qemu-arm-static -L /usr/arm-linux-gnueabi -g 31338 ./test -> GDBServer에 test 바이너리를 돌림 (gdb에서 target remote ip:31338 로 접근 가능)

[root@ubuntu qemutest]$ qemu-arm-static -L /usr/arm-linux-gnueabi -g 31338 ./test


[sweetchip@ubuntu qemutest]$ gdb-multiarch 

GNU gdb (Ubuntu 7.11-0ubuntu1) 7.11

Copyright (C) 2016 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".

Type "apropos word" to search for commands related to "word".

(gdb) target remote localhost:31338

Remote debugging using localhost:31338


....


(gdb) disas main

Dump of assembler code for function main:

   0x00010438 <+0>: push {r11, lr}

   0x0001043c <+4>: add r11, sp, #4

   0x00010440 <+8>: ldr r0, [pc, #12] ; 0x10454 <main+28>

   0x00010444 <+12>: bl 0x102e0 <printf@plt>

   0x00010448 <+16>: mov r3, #0

   0x0001044c <+20>: mov r0, r3

   0x00010450 <+24>: pop {r11, pc}

   0x00010454 <+28>: andeq r0, r1, r8, asr #9

End of assembler dump.

(gdb) 



======================================================================================

-> qemu-mips-static -L /usr/mips-linux-gnu/ ./test_mips -> mips 바이너리 실행


[root@ubuntu qemutest]$ qemu-mips-qemu-mips-static -L /usr/mips-linux-gnu/ ./test_mips

hello world



생각보다 간편한 크로스컴파일과 실행 ㅋㅋ

저작자 표시 비영리 변경 금지
신고

댓글 0



안녕하세요.


오랜만의 포스팅이네요..


회사 인턴을 하면서 지내다가 얼마전 부터 조금 여유가 생기고.. 잠시 쉬려고 하는데 갑자기 이상하게도 매일 쓰는 카카오톡의 구조를 알고 싶어서 조금 까보게 되었습니다.


카톡은 예전부터 이미 다른 짱짱해커분들이 바이너리를 많이 까둔 상태인데.. (PC for MAC, PC for Windows, IOS, Android <- 이건 신나게 분석하는 도중.. 분석 막바지에 찾았네요.. OTL)


위는 구글링 하면 나오는 자료들이니 패스!


언어를 주로 제가 사용하는 파이썬으로 짜보려고 했는데 카톡의 독특한 암호알고리즘으로 암호화 되어있어서 파이썬으로 재현해보려고 별의 별 뻘짓의 결과 실패로 포기하고


자바 언어도 새로 배울겸(3년전에 만져본적은 있지만.. helloworld 조차 실패 ㅋㅋ) 하면서 주말동안 분석을 진행해봤습니다.


그나저나 기본적인 Proguard 같은 난독화 솔루션 이외에 다른 무언가가 적용되었는지 아니면 JD-GUI가 이상한건지


Internal Error 등 내부적인 디컴파일 오류를 내뿜어대고 심지어 함수가 몇단계를 계속 들어가야 하는 부분도 있어서 분석하느라 고생좀 했습니다 ㅋㅋ


* 이과정에서 IDA로 Jar 파일을 열수 있다는것과 smali code를 강제로 공부하게 되었네요 ㅋㅋ..



그러나.. 분석하면서 답답함을 느끼고 다른 운영체제의 카톡의 구조는 어떻게 만들어져 있는지 찾아보기 위해서 구글링을 해보다가


몇페이지 더 깊게 들어가보니 2년전에 어느분이 안드로이드용 카톡을 조금 분석해둔 분이 계셨네요.. OTL


APK 분석은 많은 경험이 없어서 삽질하면서 그냥 공부했다 생각하며.. ㅎ 나머지를 계속 진행했습니다 ㅋㅋ



결국엔 여러 삽질 끝에 주말을 빠이빠이하고 복호화에 성공했네요.. ㅎㅎ


현재 복호화가 되는걸로 확인한 것은 친구들 데이터와 대화 내용 데이터인데..


분석해본건 나중에 시간날때 정리해서 올려보도록 하겠습니다. :)





신고

'0x00 프로그래밍 > 0x02 android' 카테고리의 다른 글

KakaoTalk 안드로이드 DB 복호화 성공!  (11) 2015.02.16

Comment 11

안녕하세요 pgnsc입니다.


급하게 아스키코드나 헥스코드를 일반 문자로 변환해야 되는데 그 많은걸 일일히 모두다 꿰고 있을수는 없어서 필요할때마다 찾아보게 됩니다.


아스키코드에 대해서.


아스키(ASCII, American Standard Code for Information Interchange, 미국 정보 교환 표준 부호)는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다.

아스키는 1967년에 표준으로 제정되어 1986년에 마지막으로 개정되었다. 아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 이루어진다. 제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다. 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의공백 문자로 이루어진다.

아스키 코드는 국제 표준 기구에 의해 개발되었으며 미국 국립 표준 연구소에서 제정하였다.[1]

일부 수정 및 출처 위키피디아. http://ko.wikipedia.org/wiki/아스키코드



헥스코드는 그냥 16진수입니다. 0 ~ 9, a~f 로 이루어진 숫자입니다.


사진은 인터넷 상에 많이 떠돌고 있는 사진입니다.


아래사진을 보시기를 권장드립니다.


위에는 알파벳은 상관없는데, 특수문자에서 몇개 짤리는게 보이더군요.


변환할때마다 코드를 짜는것보다 전 이게 나은것 같네요 ㅋㅋ



신고

Comment 2