본문 바로가기

android

(7)
VPN 또는 내부망에서 프록시 잡기 (reverse proxy) 여러 고객사에서 진단 업무를 수행하거나 내부 개발망에서 진단이 필요할 때 VPN을 사용하거나 작업용으로 사용하는 PC에 휴대폰이 프록시를 붙지 못하는 경우가 있다. 대충 나는 아래와 같은 그림의 상황이다. + 진단 나갔는데 무선망은 따로 존재하지 않고 랜포트를 통해서 내부망 진단하는 경우? 우선 우리회사에서 사용하는 VPN은 연결할 경우 이더넷이 하나 더 생긴다. 그래서 VPN을 붙지않으면 일반 환경에서는 그냥 인터넷도 사용 할 수 없도록 막혀있다. 대충 망분리를 위한 조치라고 보면된다. 그래서 문제는 모바일진단이 필요한데 모바일의 프록시를 업무용 PC에 넣어도 실제 패킷은 VPN 이더넷 쪽으로 빠지기 때문에 내부망 접근이 불가능하다. 그래서 평소에는 출근해서 pentest용 세컨 PC와 전용망(무선망).. 뚜봄뚜봄  2024. 2. 13. 21:37
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