Technical Docs/Android
Smali 코드로 Toast 생성하기
뚜봄뚜봄
2021. 12. 17. 21:18
해당 앱이 무결성 탐지를 하는지 또는 디버깅을 하기 위해 Smali 코드에 Toast 메시지 띄우는 부분을
추가하는 방법을 알아보자
Samli Code ?
이미 알겠지만 어플리케이션(apk)파일을 보면 Classes.dex 라는 파일이 있다. 이 파일이 달빅머신에 올라가는
바이트 코드인데 이걸 디컴파일 하면 그나마 사람이 대충 읽을 수 있는 Smali 코드라는걸로 변환된다.
Android Toast message ?
토스트메시지는 설명보다 그냥 사진으로 보는게 빠르다. 아래와 같이 메시지를 아래 띄워주는게 토스트 메시지다
alert dialog를 띄우는게 빠르지 않을까 나도 처음에는 생각해봤는데, alertdialog 는 현재 엑티비티의 인자도 가져와야하고 그냥 인자 값으로 넣어줘야 하는게 상당히 귀찮기 때문에 간단하게 만들 수 있는 Toast를 띄우자..
const-string v0, "Toast TEST"
const/4 v1, 0x0
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
Smali 에서 p는 매개변수를 의미하고 v는 레지스터를 의미한다.
Toast 를 구현하기 위해서는 2개의 레지스터와 1개의 매개변수가 필요하다.
그러니 Toast를 삽입할 곳의 함수의 맨위에 .locals 3 이라고 되어있으면 3개의 레지스트리를 쓴다는 뜻이니 이걸 5로 수정하면 된다.
그리고 나머지는 위와 같이 작성하면 토스트 메시지를 출력할 수 있다.