기본 콘텐츠로 건너뛰기

안드로이드 APK 디컴파일

안드로이드는 JAVA기반이기 때문에 런타임 후 코드가 실행되는 구조로 코드를 역으로 컴파일가능하다. 그중 가장 흔하게 사용하는 Dex2Jar이 있다. 이를 이용하면 dex파일을 jar로 변환이 가능하다. jar로 변환 후 JD GUI툴을 이용하여 코드를 볼 수있다.
아래 2가지 툴을 다운받아서 사용하면 되고 Windows와 Mac모두 지원이 된다.

dex2jar

JD GUI


apk파일을 jar로 변환하여 JDGUI로 어떻게 코드를 보는지 하나씩 설명 하겠다.
1) 소스를 볼 apk파일을 준비한다음 apk->zip파일로 확장자를 변환하여 압축을 푼다. 참고로 http://www.apkmirror.com 사이트를 이용하면 구글플레이에 올라온 앱을 모두 구할 수 있다.

2) 압축을 풀면 classs.dex파일이 보인다. 이파일을 dex2jar툴을 이용하여 jar로 변형한다. 위에서 받은 dex2jar압축을 풀면 dex2jar.bat(windows용)파일과 dex2jar.sh(mac용)을 볼 수 있다.
3) 명령어를 통해 dex파일을 jar로 변경 해보자.(mac)
$>./dex2jar.sh <apk압축을 푼 위치>/classes.de
이렇게 명령어를 실행 하고 나면 classes.dex의 같은 폴더내에 classes_dex2jar.jar파일이 생성된다.
JD-GUI를 통해서 디컴파일된 jar파일을 불러와서 코드를 보면된다.
이렇게 디컴파일이 쉽다 보니 코드를 난독화 하여 빌드되는 앱이 대부분일 것이다. 예를 들어 클래스명이나 메서드 명을 알아보지 못하게 바꿔버리는 해당클래스나 메서드가 어떤역할을 하는지 이해하지 못하도록 해버린다. 그렇기 때문에 이런 역컴파일 코드는 단순히 참고용으로 사용하길 바란다.

댓글

이 블로그의 인기 게시물

보안 공부 링크

SSLsplit - SSL/TLS기반의 네트워크 포렌식 및 침투테스트(중간자공격) 도구 http://www.roe.ch/SSLsplit 가상화 서버운영 및 구축을 위한 Xenserver가 오픈소스로 공개 http://www.xenserver.org/ Python과 Fabric를 사용한 SSH 봇넷 C&C 구축 예제 http://raidersec.blogspot.kr/2013/07/building-ssh-botnet-c-using-python-and.html 파워쉘을 이용한 비밀번호 정보 획득 http://www.obscuresecurity.blogspot.kr/2013/07/get-gpppassword.html niktoHelper - Nmap의 Grepable형식을 Nikito와 연동하기 위한 파이썬 스크립트 http://milo2012.wordpress.com/2013/07/07/niktohelper-bridge-between-nmap-grepable-output-and-nikto/ 루비를 통한 심도있는 XSS 방어 방법 http://homakov.blogspot.com.es/2013/07/xss-defense-in-depth-with-rackrails-demo.html IT관련 E-Book 모음 http://www.cyberhades.com/2013/07/04/unos-libritos-tecnicos-para-el-veranito JJEncode 스크립트 분석 http://www.kahusecurity.com/2013/jjencode-script-leads-to-drive-by/ 웹브라우저 호환성 검증 및 분석결과 제공 http://www.modern.ie/ko-kr/ http://browsershots.org/ html 색상 선택 도구 https://kuler.adobe.com/create/color-wheel/ Windows 메모리 보호 메커니즘 http://resources.infosecinstitute.com/window...

dns2proxy 해킹툴

dns2proxy Offensive DNS server This tools offer a different features for post-explotation once you change the DNS server to a Victim. <Referer to help (-h) to new params options> Feature 1 Traditional DNS Spoof adding to the response the original IP address. Using spoof.cfg file: hostname ip.ip.ip.ip root@kali:~/dns2proxy# echo " www.s21sec.com  1.1.1.1" > spoof.cfg // launch in another terminal dns2proxy.py root@kali:~/dns2proxy# nslookup  www.s21sec.com  127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name:  www.s21sec.com Address: 1.1.1.1 Name:  www.s21sec.com Address: 88.84.64.30 or you can use domains.cfg file to spoof all host of a same domain: root@kali:~/demoBH/dns2proxy# cat dominios.cfg .domain.com 192.168.1.1 root@kali:~/demoBH/dns2proxy# nslookup aaaa.domain.com 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: aaaa.domain.com Address: 192.168.1.1 Hostnames at nospoof.cfg will no be spoofed. Featu...

어셈블리어(Assembly) 기초

0x01.  어셈블리 언어란 ? &  배우는 목적 CPU  에는 해당 프로세서에 명령을 내리기 위해 고유의 명령어 세트가 마련되어 있는데 이  명령어 세트를 기계어라고 한다 .  이 기계어는 숫자들의 규칙조합임으로 프로그래밍에 상당 히 난해하다 .  그래서 이 기계 명령어를 좀더 이해하기 쉬운 기호 코드로 나타낸것 ( 기계어와  1:1 로 대응된 명령을 기술하는 언어 ) 이 어셈블리어이다 .  어셈블리 언어는 그 코드가 어떤  일을 할지를 추상적이 아닌 ,  직접적으로 보여준다 .  논리상의 오류나 ,  수행 속도 ,  수행 과정 에 대해 명확히 해준다는 점에서 직관적인 언어이다 .  어셈블리 언어를 사용하면 메모리에 대한 이해도도 높아진다 .  어셈블리를 익히고 ,  배우는데 있어서는 여러 가지 목적이 있을 수 있다 .  컴퓨터 시스템 & 구조를 좀 더 깊게 이해하고 ,  메모리상의 데이터나  I/O 기기를 직접 액 세스 하는등의 고급언어에서는 할 수 없는 조작을위해서이다 .  프로그램의 최적화 및 리버 스 엔지니어링을 위해서도 필요하다 . + 2 줄 요약  + -  어셈블리 언어는 기계어와  1:1  대응을 하는 언어이다 . -  어셈블리 언어를 배우면 시스템을 이해하는데 도움이 된다 . 0x02.  어셈블리를 위한 기본 지식 (1)  기본적인 하드웨어 1) CPU -  메모리에 있는 내용을 읽고 ,  쓰고 데이터를 메모리와 각 레지스터로 보낸다 . 프로그램의 명령을 해석하고 실행한다 . 하나의 프로세서는  12~14 개의 레지스터를 가 지고 있으며 , CPU 의 연산 ,  논리 장치는 숫자와 기호에 관한 연산자를...