Technical Docs/Android (14) 썸네일형 리스트형 Smali 수정으로 logcat 남기기 며칠 전 안드로이드에서 특정 함수가 몇 번 실행되는지 테스트를 해야할일이 있었다. 그냥 프리다로 찍어보면 편하겠지만 왠지 오랜만에 Smali 를 수정해서 로그를 찍어보고 싶어보고 싶어서 해봤다. 로그켓을 한번이라도 찍어본 사람은 알겠지만, 대충 사용자가 지정할건 Tag랑 Text라고 볼 수 있다. 뭐 다른것도 지정 가능하겠지만... 그래서 Smali 를 사용할 때 String을 두 개를 만들어준다. 실제 코드는 아래와 같다. const-string v2, "patrick_test1" const-string v3, "patrick_test2" invoke-static {v2,v3}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I 근데 혹시.. .. 뚜봄뚜봄 2022. 6. 2. 22:23 Manifest 구조를 알아보자 # Manifest ?? 안드로이드에서 매니페스트란 apk 파일을 보면 루트경로에 위치해 있는 application의 기본적인 정보를 담고있는 파일이라고 생각하면 된다. 디바이스에서 해당 파일을 읽고 어떤 권한을 주고 어떤 액티비티를 먼저 실행시키는지 등등을 알려준다고 생각하면 될듯? # 구조는 어떨까 ?? 기본적인 구조는 아래와 같다 manifest : 패키지명 , 버전정보, 구성하는 클래스 패키지명 정의 uses-permission : 앱에서 사용할 시스템 권한을 정의 permission : 앱에서 제공하는 권한이외에 컴포넌트에서 정의하는 권한(다른 앱에서 해당 앱 접근 등등) permission-tree : permission-group : instrumentation : 시스템 이벤트 발생 시 애.. 뚜봄뚜봄 2022. 1. 10. 21:41 네임 맹글링 (Name Mangling or Name Decoration) 기본적으로 자바에서 call 하는 함수의 경우에는 Java_com_xxx 이와 같은 형식으로 함수 네이밍이 되어있다. 그런데 C, C++ 내부에서 사용하려고 클래스를 만들거나 그 안의 함수를 후킹할 때 IDA에서 function List로 볼 때는 그냥 개발자가 선언한 함수 이름으로 보이지만 실제 frida 등을 통해서 후킹할 때는 맹글링된 이름을 가져와야한다. 뭐 사실 나도 frida에 대해서 많은 함수를 써본것도 아니니 다른 방법을 통해 후킹이 가능하다면 댓글 부탁드림미다.... ## Name Mangling ?? 우선 Name Mangling이 뭔지 알아보자. 위키에 따르면 컴파일러에서 프로그래밍 entity에 대한 고유한 이름을 해결해야 하는 필요성으로 인해 발생하는 다양한 기술 문제를 해결하기 .. 뚜봄뚜봄 2021. 12. 30. 13:47 Smali 코드로 Toast 생성하기 해당 앱이 무결성 탐지를 하는지 또는 디버깅을 하기 위해 Smali 코드에 Toast 메시지 띄우는 부분을 추가하는 방법을 알아보자 Samli Code ? 이미 알겠지만 어플리케이션(apk)파일을 보면 Classes.dex 라는 파일이 있다. 이 파일이 달빅머신에 올라가는 바이트 코드인데 이걸 디컴파일 하면 그나마 사람이 대충 읽을 수 있는 Smali 코드라는걸로 변환된다. Android Toast message ? 토스트메시지는 설명보다 그냥 사진으로 보는게 빠르다. 아래와 같이 메시지를 아래 띄워주는게 토스트 메시지다 alert dialog를 띄우는게 빠르지 않을까 나도 처음에는 생각해봤는데, alertdialog 는 현재 엑티비티의 인자도 가져와야하고 그냥 인자 값으로 넣어줘야 하는게 상당히 귀찮기.. 뚜봄뚜봄 2021. 12. 17. 21:18 Android Native C++ string Frida로 출력 Frida 를 사용하다 보면 심심치 않게 Native Method를 후킹해야할 때가 많다. 그러다 보면 각 argu에 따라서 캐스팅을 해줘야 정상적으로 출력이 가능하다. 그 중에 한가지 C++ 에서 사용하는 Std::String 자료형을 Frida에서 문자열로 출력하고 싶을 때 아래의 방법을 사용한다. function readStdString (str) { const isTiny = (str.readU8() & 1) === 0; if (isTiny) { return str.add(1).readUtf8String(); } return str.add(2 * Process.pointerSize).readPointer().readUtf8String(); } readU8 &1 을 통해 해당 문자열이 long St.. 뚜봄뚜봄 2021. 12. 17. 10:17 NDK Jstring to string (char *) 문자열 변경 JString to C++ string NDK 를 사용할 때 Java에서 Argu를 통해 String 형식을 보내줘야 할 때가 있음 그러면 해당 string을 받는쪽에서 다른 변수(int ...) 같은 경우에는 jint 형으로 받아서 처리가 가능함 그런데 String 같은 경우에는 C++ 에서 재사용하는 경우 Jstring 에서 C++ String 형으로 변환을 해줘야 정상적으로 사용이 가능함 Java에서 사용하는 String은 16비트의 Unicode 문자세트를 사용하고, C, C++ 에서는 일반적으로 8bit 의 문자열을 표현하기 때문에 이것을 변환시키기 위해서 UTF-8 포맷으로 변경을 해주는 작업이 필요 위와같이 함수의 선언에서 받을 때는 JString으로 정상적으로 받지만, 실제로 C++에서 사.. 뚜봄뚜봄 2021. 12. 8. 20:38 이전 1 2 다음