2013-08-16 2 views
8

guarded_open_np 함수가 libsqlite3.dylib에서 데이터베이스 파일을 여는 데 사용됨을 발견했습니다. 나는 sqlite3 오픈 소스를 살펴 봤는데, 그런 건 없었다. 그래서 확실히 애플은 유닉스의 open 대신에 guarded_open_np을 사용하도록 수정했다.guarded_open_np의 매개 변수

저는 guarded_open_np이 비공개 API이며, 헤더와 문서를 찾지 못했습니다. guarded_open_np에 차단 (Cydia의 MSFunctionHook)을하고 싶습니다. 그래서 함수 이름뿐만 아니라 매개 변수도 알아야합니다.

나는 IDA Pro를 사용 libsqlite3.dylib 리버스 엔지니어링

이는 guarded_open_np라고하는 방법입니다

sub_79c1c: 
push {r7, lr} 
mov r7, sp 
sub sp, #0x4 
mov r3, r1 
movw r1, #0xc57e 
movt r1, #0x0 
str r2, [sp, #0x4 + var_0] 
add r1, pc 
movs r2, #0xf 
blx imp___picsymbolstub4__guarded_open_np 
add sp, #0x4 
pop {r7, pc}  

그러나, 걸릴 수 PARAMS 무엇인지 아직 명확하지 않다. 모든 매개 변수가있는 guarded_open_np을 언급하는 공식 사이트가있는 경우 많은 도움이됩니다.

+3

가장 좋은 추측은 UNIX의 open (3)처럼 보입니다 : https://gist.github.com/CodaFi/7c73abd9dfb602dcc26e – CodaFi

+1

@Krypton이 디버거에 연결하여 레지스터의 내용을 확인할 수 있습니까? r0 ~ r3 (그리고 그들이 메모리를 가리키고 있다면, 메모리 내용) blx 명령문 바로 전에? 호출 규칙은 일반적으로 첫 번째 인수에 r0을 사용하고 두 번째 인수에는 r1을 사용합니다. – Ncat

답변

2

여기에있는 정보를 통해 CodaFi가 좋은 제안이지만 확실한 답을 줄 수는 없을 것이라고 생각합니다. 말했다

, 여기에 자신을 찾을 수있는 도구를 제공하는데 도움이 될 수있는 몇 가지 참조입니다 :

첫째, 당신은 아마 이미 알고 있지만 레지스터와 스택에 대해 알아보세요.

어셈블리에서 함수를 호출하려면 함수 호출이 허용되는 함수가 인수 (레지스터, 스택 등)를 기대하는 것과 같은 규칙을 설정하는 Application Binary Interface (ABI) 변경하려면 .

iOS이므로 Procedure Call Standard for ARM ArchitectureiOS ABI Function Call Guide을 확인해야합니다.

위의 첫 번째 링크에서 "기본 프로 시저 호출 표준"절을 보면 함수 호출이 처음 네 개의 인수가 각각 r0 ~ r4 레지스터에 있어야한다고 알 수 있습니다.

그래서 조사를 위해 guarded_open_np 스텁으로 분기하기 직전에이 레지스터에 무엇이 있는지 알아야 할 것입니다. XCode는 당신을 위해 파일의 어셈블리를 뱉을 수 있고, 당신은 그것에 브레이크 포인트를 설정할 수 있어야한다; llvm에서 register read 명령을 사용하여 모든 레지스터 내용을 표시하십시오 (레지스터 중 일부는 memory read lldb 명령으로 검사하려는 메모리 위치를 포함 할 수도 있음).

iOS 어셈블리에 대해 자세히 살펴 보려면 Mike Ash의 3 부 블로그 게시물 인 "어셈블리 해체"1, 23을 권장합니다. 그렇다면 ARM 64 bit updates에 대한 그의 최근 소식을 좋아할 것입니다. 이들은 비공식적 인 자원이지만 스캐닝 어셈블리 및 전반적인 상황을 파악하는 데 도움이됩니다.

+0

자료 및 참조는 Wilson에게 감사드립니다. 나는 물건을 소화하는 데 꽤 많은 시간이 걸릴 것 같아요 : D – Krypton

+0

@Krypton 신용 감사! 기대하지 않았어.위에서 언급 한 블로그 게시물은 실제로 꽤 괜찮은 시작 장소입니다 (ABI 참조 및 내용은 어셈블리를 배우기에는 너무 치밀하고 실제로는 없습니다). 그러나 실제로 물건을 알고 싶다면 Randall Hyde의 책인 The Assembly of Assembly Language가 좋습니다. – Ncat