annyoung

Unreal Engine 4.27.2 dump with split apk 본문

모의해킹

Unreal Engine 4.27.2 dump with split apk

nopsled 2024. 7. 25. 13:50

gname(NamePoolData) 구하기

NamePoolData를 얻는 방법은 버전에 따라 다르긴한데 FNamePool을 역추적해서 호출하는 녀석을 확인해야 한다.

 

대표적으로 하나를 확인해보면 FNamePool을 호출하면서 byte_D0DD440을 파라미터로 넘겨주는데(원래는 unk_D0DD440), 이게 NamePoolData라고 보면된다.

 

이렇게 NamePoolData의 offset은 0xD0DD440이다.

 

guobj(GUObjectArray) 구하기

Strings에서 GUObjectArray 검색해서 더블 클릭

 

여기서 xrefs로 참조하는 곳으로 간다음에

 

Export해서 사용하는걸 볼 수 있는데, 이거 다시 더블 클릭해서 들어가면

 

GUObjectArray의 offset을 구할 수 있고 0xD121928이다.

 

GUObjectArray는 export해서 사용하고 있으므로 frida에서 바로 가져올 수 있는데,

 

libUE4의 base address와 GUObjectArray와의 offset 차이를 보면 0xD2789A8로 나온다.

 

offset 차이

아이다에서는 GUObjecyArray가 0xD121928로 나오는데, frida에서 확인한 GUObjectArray는 0xD2789A8로 다소 차이가 있는데 그 이유는 다음과 같다.

/proc/[pid]/maps에서 lib가 올라간 apk로 검색하면 apk가 통째로 올라간걸 볼 수 있다. libUE4.so만 메모리에 올라갔다면 IDA에서 확인한 offset과 딱 맞을텐데 통째로 올라간 apk에서는 어느정도 갭이 발생한다.

 

그래서 메모리에 올라간 GUObjectArray와 IDA에서 확인한 offset을 비교해보면 1405056만큼 차이가 생기는걸 확인할 수 있다.

 

따라서 아이다에서 확인한 libUE4.so_baseAddress + (NamePoolData_offset + 1405056)만큼 더해주면 NamePoolData의 실제 주소를 얻을 수 있다.

 

덤프

덤프는 hackcatml님이 작성한 frida-ue4dump를 사용했다.

링크: https://github.com/hackcatml/frida-ue4dump

 

GitHub - hackcatml/frida-ue4dump: UE4 dump frida script

UE4 dump frida script. Contribute to hackcatml/frida-ue4dump development by creating an account on GitHub.

github.com

 

이렇게 모두 구해진 후에 dumpSdk() 해주면 덤프된다.

 

 

출처

https://hackcatml.tistory.com/152

 

Unreal Engine 4.27 Dump(Android)

※ frida ue4 dumper https://github.com/hackcatml/frida-ue4dump GitHub - hackcatml/frida-ue4dump: UE4 dump frida script UE4 dump frida script. Contribute to hackcatml/frida-ue4dump development by creating an account on GitHub. github.com 언리얼엔진

hackcatml.tistory.com

 

Comments