<보안 study> 54

Android/iOS Inline Hook

Type 1base opcode0x90000011 : adrp x17, (base+0)0x91000231 : add  x17, x17, #00xD61F0220 : br   x17+0 : ADRP X17, (distance to hook func)+4 : ADD X17, X17, Hook Func+8 : BR X17 Type 2base opcode0x58000051 : ldr X17, (base+8)0xd61f0220 : br X17+0 : LDR X17, (position of Hook Func)+4 : BR X17...+n : POSITION OF HOOK FUNC 원하는 주소랑 비트 연산 먹여서 범용 후킹용도로 사용 Original Code BackupOverwrite한 만큼 bss에 백업하고 그 뒤..

[Unity] global-metadata.dat 추출

대 Unity 요금 징수의 시대가 밝았습니다 *_* (요금제 완화되긴함) https://www.gameple.co.kr/news/articleView.html?idxno=207223 유니티 신규 요금제 '완화' 발표... 여론 여전히 뿔난 이유는 - 게임플 [게임플] 업체들의 반발에 휘말린 유니티가 신규 요금 정책을 완화했다. 하지만 논란의 핵심인 \'기업용 라이선스 런타임 요금제\'는 그대로 추가되어 반발이 이어질 전망이다.유니티 마크 휘튼 www.gameple.co.kr 그럼에도 최근 게임들 까지는 unity 엔진 기반이 많은 것 같아서, 어떻게 운용되고 있는지 가볍게 분석해보았다. 그 과정에서 global-metadata 파일을 사용하려 하였는데, 아무래도 구 unity 게임들과는 다르게 암호화가 ..

Galaxy S20(SM-G981N) 루팅

새로 장만한 공기계 루팅 방법 정리 기종마다 미묘하게 차이가 있어서 Galaxy S20 을 기준으로 타 기종 루팅 시에도 참고 예정 # 1 부트로더 해제 ## 1-(1). 설정 - 개발자모드 - OEM 잠금해제 ## 1-(2). 휴대폰 OFF - 부트로더 해제 모드 실행(S20 기준으로 볼륨 상하 동시에 누르기) 여기까지 하면 부트로더 해제 된다. # 2 vbmeta.img 덮어씌우기 S10 기종에서는 이 과정은 필요없던 것으로 기억하는데, S20은 필요한 듯... 각 기종에 맞는 vbmeta_disabled tar 파일 찾아서 odin 의 USER_DATA 로 플래싱 진행한다. 이후, 공장초기화 화면이 나오면 공초하고 reboot 하면 된다. ※참고 : https://forum.xda-developer..

MFC 프레임워크 기반 앱 시작지점

#MFC #리버싱 #Reversing MFC 프레임 워크 기반 앱의 경우, MFC 에서 선언 해놓은 클래스들을 상속 받아서 사용자 클래스를 정의하는 식의 개발이 이루어진다. 그만큼 MFC 프레임 워크에서 기본적으로 제공해주는 기반이 상당한데, 최근 MFC 관련 앱을 리버싱해본 결과 리버싱 과정에서도 그러한 기반 클래스들이 어떻게 동작하고, Dialog 까지 생성하는지 등등 알아야할 것이 많아보였다. 흔히 금방 찾을 수 있는 main 함수의 경우에도 함수 vtable 어딘가에 심볼이 깨진채로 들어가있어서 정적분석으로는 금방 가늠하기 어렵고, 동적분석으로 해당 함수를 찾아야한다고 판단하였다. 수 많은 문서를 탐색하면서 main 포인트를 찾는 과정을 간략히 정리해보겠다. int start() { _securi..

공유메모리 매핑

메모리 매핑 작은 버퍼 대신 Page 단위로 큰 데이터를 빠르게 처리가능한 방식 파일이 매핑된 가상메모리와 파일은 커널에 의해 동기화 되기 전까지는 불일치할 수도 있음. 공유 메모리 매핑 방식 메모리 맵의 데이터를 변경하면, 그 즉시 커널에 의해 원본 파일과 데이터가 동기화되는 방식. 프로세스간 메모리 공유에 특화된 방식이기 때문에 IPC 통신에서도 주로 쓰인다. "ZwMapViewOfSection" 을 통한 공유 메모리 매핑 예제 // 물리 메모리를 사용하겠습니다. 선언. UNICODE_STRING DestinationString; RtlInitUnicodeString(&DestinationString, L"\\Device\\PhysicalMemory"); /* 중략 */ *a4 = 0; // 얻어올 ..

Cracking Example

Javascript 코드를 통해 Activation 체크를 하는 경우가 종종있습니다. 공부용도로 그런 경우, 크래킹이 어떻게 이루어지는지에 대한 예시를 적어봅니다. 아래예시는 premium 유저에 대한 권한을 활성화하는 함수입니다. 상세 서술하자면, LICENSE_ACTIONS 라는 객체에서 ACTIVATE 함수를 트리거하는 것입니다. a.handle(y.LICENSE_ACTIONS, async (e, { type: t, ...r }) => { switch (t) { /* 생략 */ case "ACTIVATE": { const { key: e } = r; return (async ({ key: e }) => { r = process.platform, // Windows, Mac, Linux a = awa..

반응형