안드로이드에는 액티비티(Activity), 서비스(Service), 콘텐트 프로바이더(Content Provider), 브로드캐스트 리시버(BroadCast Receiver)등 4가지의 주요 기능으로 구성된다. 기능을 간단히 정리하면 다음과 같다. 
  1) 액티비티 : 사용자에게 보여주는 디바이스 인터페이스이다. 메뉴를 클릭하거나 버튼을 클릭하는 등 특정한 액션에 의해 전환하게 되는 화면 마다 모두 액티비티라고 할수 있다.
  2) 서비스 : 화면에 보여주지 않고 백그라운드에서 실행된다. 네트워크 전송하거나 파일을 읽는 등의 작업이 있다. 액티비티가 화면에 보여주는 동안 이 기능이 같이 동작을 하는 경우가 대부분이다.
  3) 콘텐트 프로바이더 : 애플리케이션이 공유하는 공간이다. 데이터가 파일 시스템이나 다른 저장소에 있더라도 애플리케이션은 콘텐트 프로바이더를 통해 데이터에 접근한다.
  4) 브로드캐스트 리시버 : 실시간으로 시스템의 상태(배터리, 메일 알람 등)를 확인해 이벤트가 발생할 때 응답한다. 디바이스에 발생하는 노티피케이션 등을 이용해 사용자에게 알람을 발생한다.

1. 액티비티
  안드로이드 환경에서 액티비티는 대개 하나의 화면에서 표시된다.  예를 들어 메인 화면에서 하나의 버튼을 클릭하면 다음 페이지로 접근되며 그 다음에 다른 액션에 의해 다른 액티비티들이 실행 되어 사용자 화면에 보여준다. 액티비티의 생명 주기는 다음과 같다.
  1) 시작(Starting) : 액티비티가 시작 될 때 메모리에 해당 정보가 없을때 시작 상태로 작동 된다. 콜백 함수에 의해 동작이 이뤄지고 동작 상태로 전환된다.
  2) 동작(Running) : 사용자의 화면에 보여주는 상태이며, 액티비티에 실제 액션들이 이뤄지는 상태이다. 문자를 입력하거나 스크린에 터치를 하는 동안의 상태이다.
  3) 대기(Paused) : 사용자의 화면에는 아직 보이는 상태이지만, 포커스는 위치하고 있지 않는 상태이다. 특정 메시지로 인해 대화상자가 액티비티 앞에 발생 할 때를 예로 들 수 있다.
  4) 멈춤(Stopped) : 사용자의 화면에는 보이지 않지만 메모리 상에 존재하는 상태이다. 사용자가 다음 액티비티에서 실행하고 있다가 언제든지 빠르게 볼 수 있게 저장되어 있다.
  5) 파괴(Destoryed) : 메모리에 더 이상 존재하지 않는 상태이다.

2. 서비스
  사용자에게 보이지 않고 백그라운드에서 액티비티와 비슷한 프로세스로 동작 한다. 음악을 듣고 있을 때 다른 어플리케이션이 동작하면서도 백그라운드에서 실행되는 것은 이런 서비스의 기능 때문이다.

3. 콘텐트 프로바이더
  콘텐트 프로바이더는 애플리케이션 사이에 데이터를 공유하기 위한 인터페이스이다. 기본적으로 안드로이드는 애플리케이션 마다 샌드박스에서 동작하기 때문에 시스템에 있는 다른 애플리케이션들끼리 직접 데이터 접근은 격리된다. 작은 데이터들은 인텐트를 통해 공유된다. 콘텐트 프로바이더는 음악, 파일, 사진 등 용량이 큰 데이터를 공유하는데 적합하다.

출처 : 안드로이드 모바일 악성코드와 모의 해킹 진단

'0x002 OperatingSystem > 04. Android' 카테고리의 다른 글

[Command] nm  (0) 2017.12.29
[Tip] Dex 추출 방법  (0) 2017.12.29
[Tip] 분석 방지 솔루션 우회  (0) 2017.12.29
[Command] ADB  (0) 2017.12.29
[Theory] 동적 디버깅  (0) 2017.12.29

1. A 로 분석하고자 하는 프로그램을 로드 한 뒤 분석이 완료되길 기다린다.
2. File -> Produce file -> Create MAP File 메뉴를 이용하여 MAP 파일을 생성한다.
3. 아래 소스코드를 작성한 뒤 Immunity Debugger 에 사용한다.

 

 

import immlib
import re
import pefile

 

def usage(imm):
 imm.log("!map [mapfile]")
 imm.log(" ex) !map c:\\test.map")

 

def load_map(imm,filename):
 map_list = []
 f = open(filename, "r")
 contents = f.read()
 
 m=re.findall("\s+([\d\S]{4}):([\d\S]{8})\s+([^\d]\S+)",contents,re.M)
 if len(m) > 0:
  for line in m:
   map_list.append([int(line[0])-1, (int(line[1],16)), line[2]])
 return map_list

 

def main(args):
 imm = immlib.Debugger()
 imm.log("[*] Map v1.0 by hyunmini")


 if not args:
  usage(imm)
  return " [-] Not found map file"
 filename = args[0]
 map_list = load_map(imm,filename)
 
 module = imm.getDebuggedName()
 mod = imm.getModule(module)
 pe = pefile.PE(mod.getPath())


 for map in map_list:
  base = mod.getBaseAddress()
  section = pe.sections[map[0]].VirtualAddress
  func_offset = map[1]
  lable = map[2]
  lable_addr = base + section + func_offset
  imm.setLabel(lable_addr, lable)


 return "[+] Finish!! %d symbols" % len(map_list)

 

 

출처 : 윈도우 시스템 해킹 가이드 버그헌팅과 익스플로잇

 

  펌웨어는 특정 목적에 맞게 하드웨어를 동작시키기 위한 코드들로 구성되며, 일반적으로 부팅과 관련한 코드, 운영체제, 파일 시스템 등으로 구성된다. 이러한 펌웨어 코드는 비휘발성 메모리인 ROM, PROM, EPROM, EEPROM 에 일반적으로 존재하지만 최근에는 플래시 메모리로 대체되고 있다. 펌웨어는 덤프를 통해 수집하는 방법이 존재하며 제조사에서 공개하는 경우가 있으므로 해당 웹 사이트에서 펌웨어를 수집할 수 있다.
 

1. binwalk ( Firmware Analysis Tool )

  Open Source 펌웨어 분석 툴로 분석, 리버싱, 데이터 추출 등의 기능을 제공한다. Python 으로 작성되어 있으며 현재 리눅스 플랫폼만 지원한다.
https://github.com/devttys0/binwalk/blob/master/INSTALL.md

 


 

2. Firmware Modification Kit

  펌웨어를 수정할 수 있는 도구로 해당 시스템의 펌웨어 코드를 재컴파일 없이 펌웨어를 수정할 수 있도록 도와주며 GNU GPL Version 2 라이센스 기반의 오픈소스 형태로 제공되고 있다. 펌웨어 분석 및 수정에 활용 할 수 있는 다양한 도구 및 스크립트들을 하나로 구성하여 제공한다
 
  2.1) Firmware Modification Kit 환경 구성 
  
   2.1.1) 소스코드 다운로드 
    별도의 설치 과정은 없으며 아래 링크에서 소스코드를 다운 받아 압축 해제한다.   https://code.google.com/archive/p/firmware-mod-kit/
   
   2.1.2) 관련 라이브러리 설치
    Firmware Modification Kit 을 사용하기 위해서는 압축라이브러리( gzip / lzma )python magic 모듈이 필요하다우분투의 경우 아래 명령어로 간단하게 설치 할 수 있다.

 

  sudo apt-get install build-essential zlib1g-dev liblzma-dev python-magic

'0x003 Reversing > 04. Theory' 카테고리의 다른 글

[Linux] ShellCode 제작 방법  (0) 2017.12.29
[Tip] IDA Map 연동  (0) 2017.12.29
[Windows] Hooking Immunity Debugger  (0) 2017.12.29
[Tip] Process 내 DLL 주소 찾기  (0) 2017.12.29

+ Recent posts