2020. 2. 1. 15:20ㆍ2020/Android App Hacking
1. move vA, vB (A = B )
A: target register (4bits), B: source register (4bits)
2. move-result vAA ★★★★
A: target register (8bits)
해당 명령 직전의 invoke-X 함수 호출의 결과를 A에 저장한다.
3. return-void
invoke-X 함수 실행 후에 void값을 리턴한다. move-result명령 필요 X
4. return vAA
A: target register (8bits)
4byte까지의 데이터를 리턴한다.
5. return-object vAA
단순 변수가 아닌 Object를 리턴할 때 사용한다.
6. const/4 vA, #+B
A(4bits), B(4bits)
B에 지정된 값을 A에 저장한다
7. const/16 vAA, #+BBBB
AA: 16bits
BBBB: 정수 (16bits)
8. const vAA, #+BBBBBBBB
AA: 16bits
BBBBBBBB: 4byte짜리 상수
9. const-string vAA, string@BBBB
AA: 8bits
B: 문자열
A에는 B문자열에 대한 참조가 입력된다.
10. array-length vA, vB
A: 4bits
B: 4bits, 배열 참조 레지스터
B로 지정된 배열의 길이를 A에 저장한다.
11. new-array vA, vB, type@CCCC
A: 8bits
B: 배열 크기 register
C: 배열 타입
C로 지정한 형식으로 B로 지정한 크기의 배열을 만들어 A에 저장
12. goto + AA
AA: 8bits
해당 offset으로 분기
13. if-(X) vA, vB +CCCC (e.g. if-eqz v0, :cond_26)
A: 4bits register
B: 4bits register
CCCC: 분기되어질 offset (16bits)
if-eq: A==B
if-ne: A!=B
if-lt: A<B
if-le: A<=B
if-ge: A>=B
if-gt: A>B
14. if-(X)z vAA, +BBBB
AA: 8bits register
BBBB: 분기할 offset (16bits) - 주로 cond_0
if-eqz, if-nez, if-ltz, if-gtz, if-gez, if-lez
15. invoke-(X) {vC, vD, ...}, meth@BBBB
B: 참조할 함수
C,D : 함수의 인수
B로 지정한 함수를 실행한다. 함수의 결과는 move-result에 저장한다.
invoke-virtual, invoke-direct, invoke-static ...
* 69번 옆 주석은 반환값이 0과 같은 때 cond_17로 분기됨으로 수정해야한다.
'2020 > Android App Hacking' 카테고리의 다른 글
Santoku: Drozer (4) | 2020.02.01 |
---|---|
Santoku: Bypass SSL Pinning using Frida (1) | 2020.02.01 |
Santoku: Reversing an Application (0) | 2020.01.31 |
Santoku: Static Analysis Log 확인 (0) | 2020.01.31 |
Santoku: 안드로이드 앱 소스코드 변환 Dex->Jar (dex2jar, jd-gui) (0) | 2020.01.31 |