본문 바로가기

모바일/보안

(12)
202004~05 플젝 HGIT 보호되어 있는 글입니다.
ARM 리버싱 https://azeria-labs.com/writing-arm-assembly-part-1/
안드로이드 쉘 스크립트 : 쓸만한 스크립트 빠르게 종료되는 프로그램 메모리 맵 추출 # cat /proc/`ps | awk '/com.test.app/{print $2}'`/maps > /data/local/tmp/maps ps 출력을 awk의 입력으로 받고 com.test.app이 포함된 라인의 두번째 필드를 출력하여 cat /proc/[output]/maps 로 넣고 그 출력을 > /data/local/tmp/maps 파일로 저장한다는 뜻 -> com.test.app 앱의 메모리맵을 /data/local/tmp/maps에 저장 *awk usage: awk 'pattern_reg{action}' file #!/system/bin/sh while [ 1 ] ; do tmp=`ps | awk '/com.test.app/{print $2}'` if ..
frida : 앱 분석 1. *.*.fido.ha* 보호되어 있는 글입니다.
안드로이드 네이티브 라이브러리 분석 네이티브 라이브러리 함수 찾기 네이티브 라이브러리는 안드로이드 소스코드 상에서 loadLibrary 하는 부분이 존재한다. 이 때 라이브러리의 이름은 lib*.so 이며 jadx 상에서 Resources/lib/[아키텍쳐]/lib*.so 경로에 존재한다. 라이브러리 파일은 컴파일 시 함께 컴파일되지 않고 따로 보관되기 때문에 그냥 apk 파일을 바로 압축해제 시 원본 파일을 확인할 수 있다. 그리고 내부에 있는 함수는 native로 선언 후 자바단에서 호출하게 된다. IDA 프로그램을 통해 열어보면 Function name에 Java_[패키지명]_[클래스]_[함수명] 형식으로 존재한다. 바로위 사진에 있는 bar native함수 같은 경우에는 Java_sg_vantagepoint_uncrackable2_..
Frida : 쓸만한 스크립트 모음 클래스 추출 import frida, sys def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) PACKAGE_NAME = sys.argv[1] jscode = #""" Java.perform(function(){ var pattern = #\""""+sys.argv[2]+"""\" Java.enumerateLoadedClasses({ onMatch:function(aClass) { if (aClass.match(pattern)) { console.log(aClass); } }, onComplete: function() {} }); ..
안드로이드 쉘 스크립트 : 작성방법 안드로이드에서 스크립트 작성 안드로이드에서는 기본적으로 vi 명령어가 없기 때문에 외부에서 쉘스크립트를 작성 후 adb push 로 올려야 한다. 외부에서 작성 후 업로드하고 스크립트를 실행하려하면 쉘이 파일이나 디렉터리를 찾을 수 없다고 하는 경우가 있다. 1) 외부에서 작성 후 push 에러를 발생시켜보면 sh 프로그램이 /system/bin/sh 위치에 있는걸 확인할 수 있는데 그에 맞춰서 첫줄을 #!/system/bin/sh 로 작성해야 한다. 또한 윈도우(CRLF)와 리눅스(LF)의 개행문자가 다르기 때문에 에디터에서 작성할 때 변경해줘야 한다. (맥은 CR) 2) 내부에서 작성 cat 명령어와 Redirect를 통해 vi처럼 사용할 수 있다. # cat > test.sh 명령어를 사용하면 te..
Frida : 앱에 정의된 클래스, 호출된 메소드 출력 enumerateLoadedClasses 앱 실행 중 로드된 클래스를 전부 출력하는 함수. 결과값을 모두 출력하면 로드되는 안드로이드 내장 클래스까지 전부 출력하기 때문에 보기 불편하다. 실행 패키지의 내장 클래스만 추출. App Id는 2번째, 패키지명에 포함되는 단어는 3번째 인자로 입력하면 된다. 여러개의 단어를 입력받을 수 있도록 | 로 스플릿 한뒤 for문으로 정규식 규칙을 생성한다. frida-ps 의결과에서 나오는 App Id 값과 패키지명은 다를 수 있다. PACKAGE_NAME = sys.argv[1] jscode= """ Java.perform(function(){ var pattern = \""""+sys.argv[2]+"""\"; var pattern_list = pattern.sp..