안드로이드 - Smali

1. Smali 코드란???

An assembler/disassembler for Android's dex format의 약자로 DEX 바이너리를 읽을 수 있도록 표현한 언어이며 DEX파일 디컴파일 했을경우 나오는 어셈블리어와 같은 결과물이다. 안드로이드 앱을 대상으로 소스코드를 변조할 때 Smali 코드를 수정하는것을 리패키징이라고 한다.

DEX에 대해서는 이전의 글을 확인하면 된다.

 

2. Smali 어셈블리 지시자 , 데이터 타입 및 제어문

https://naro-security.tistory.com/41에서 정보를 얻음.

 

안드로이드 smali 코드 분석에 관한 기초 지식

개요smali 코드는 안드로이드 애플리케이션의 Dalvik 가상 머신 코드를 표현한 언어이다. Dalvik VM은 안드로이드 앱의 실행을 위한 가상 머신이며(지금은 ART를 사용한다.), smali는 이 VM에서 동작하는

naro-security.tistory.com

 

지시자

구문이름 설명
.class 클래스이름
.super 상속 관계의 상위 클래스 이름
.source 소스 이름
.field 멤버 변수 정의
.method 함수 이름 및 시작 지점
.register 함수에서 사용되는 임시 변수(레지스터 변수)
.end method 함수 종료 지점
public 접근 제어자로 외부에서 접근 가능
protected 접근 제어자로 상속 관계에 있는 하위 클래스에서만 접근 가능
private 접근 제어자로 클래스 내부에서만 접근 가능
.parameter 매개변수 지시어
.prologue 함수 진입 부문을 나타내는 지시어
.line xxx 소스 코드와 바이트 코드 간의 줄 번호 연결을 나타내는 지시어

 


데이터 타입

smali 코드 데이터 타입 Java 코드 데이터 타입
V void
Z boolean
B byte
S short
C char
I int
J long
F float
D double
string String
Lxxx/xxx/xxx object

제어문

구문 이름 설명
const 정수, 부동 소수점 등의 상수 값을 정의하는 지시어
const-string 문자열 상수를 정의하는 지시어
const-wid 64비트 부동 소수점 상수 값을 정의하는 지시어
return 명령어 결과 값 반환
if-eq 두 값이 서로 같을 경우에 지정된 레이블로 분기 (a=b)와 동일
if-ne 두 값이 서로 다를 경우에 지정된 레이블로 분기 (a!=b)와 동일
if-nez 레지스터의 값이 0일 경우에 지정된 레이블로 분기 (a==0)와 동일
if-eqz 레지스터의 값이 0이 아닐 경우에 지정된 레이블로 분기 (a!=0)와 동일
if-ge 첫 번쨰 값이 두 번째 값보다 크거나 같을 경우에 지정된 레이블로 분기 (a>=b)와 동일
if-le 첫 번째 값이 두 번쨰 값보다 작거나 같을 경우에 지정된 레이블로 분기 (a<=b)와 동일
goto 지정된 레이블로 무조건적으로 분기하는 명령어
switch 조건 분기 구문 중 하나로, 주어진 값에 따라 분기 경로를 선택하는 명령어
switch-case문과 동일
iget 객체의 인스턴스 변수에 저장된 값을 불러오는 명령어

3. 코드 분석방법

https://hyotwo.tistory.com/140

 

[Android] Smali 코드 분석 및 변조를 통한 루팅 탐지 우회 (심화)

Smali 파일 변조를 하려면 결국 코드가 어떻게 굴러가는건지 아는게 중요하다 그래야 원리 파악이 가능하다. 기초편 글에서 보았던 코드들 중 일부를 심화분석해보자 루팅 탐지하는 자바코드 먼

hyotwo.tistory.com

 

4. 참조 및 출처

https://naro-security.tistory.com/41

 

안드로이드 smali 코드 분석에 관한 기초 지식

개요smali 코드는 안드로이드 애플리케이션의 Dalvik 가상 머신 코드를 표현한 언어이다. Dalvik VM은 안드로이드 앱의 실행을 위한 가상 머신이며(지금은 ART를 사용한다.), smali는 이 VM에서 동작하는

naro-security.tistory.com

 

'앱 진단 > 안드로이드 진단' 카테고리의 다른 글

안드로이드 리패키징(인시큐어뱅크)  (1) 2025.04.01
안드로이드 - 루팅  (0) 2024.12.17
Apk - 디컴파일 및 리패키징  (0) 2024.08.22
안드로이드 - DEX  (0) 2024.08.20