리버싱

보호되어 있는 글입니다.
· 리버싱
오랜만에 카카오톡 분석과 함께 loco 통신을 후킹으로 가져와서 출력해보았다. 마지막으로 카톡을 분석한게 9.8버전때였나.. 기억도 가물가물한데,벌써 10.9.0이다. 다른건 별 관심이 없었지만 Loco 구현체 관련해서 변경사항이 있나 찾아보았다. 기존의 LocoClient는 request와 response 함수가 LocoClient 내부에 분리되어있던 거로 기억한다. 지금은 좀 바꼈더라. LocoClient의 한 함수에서 간편하게 req/res를 받아올수 있게 되었다. 덕분에 후킹도 더 깔끔해졌다. 프로토콜이 특별히 바뀐건.. 없어보인다. 간단한 frida 후킹 예제 스크립트를 첨부한다.Java.perform(function () { try { var locoClient = Java.use("c..
· 리버싱
2014년 3월 경 출시되어, 4월 무렵 "좀비고등학교" 로 바뀌게 되었던, 아오오니 레전드에 대해 간단하게 분석해보고 있다. 당시 개발진이었던 김원배, 송준원의 나이는 24살이었고,덤으로 14년도 당시에는 유니티 게임 개발에 대한 레퍼런스도 많이 적었는데도 게임 이론에 대해 모범적인 사례가 여럿 보였다. 1. 구조 아오오니 레전드는 2009년 개발되었던 레시아 온라인의 통신 구조를 그대로 사용하였다. - lesiam.dll레시아 모바일에서도 사용되었던 라이브러리로 보이며,모든 패킷의 DTO가 작성되어있다. - lesiamSerializer.dll통신에 사용되는 패킷들을 serialize/deserialize 한다.해당 라이브러리의 'LesiamSerializer' class는 protobuf-net의 ..
A* Pathfinding은 3개의 값을 가지고 최적의 경로를 도출해낸다. G = 시작점으로부터 이동한 거리H = 도착지점까지의 휴리스틱 거리F = G + H 여기서, 자연스러운 이동을 위해 dx, dy도 고려한다. dx = 도착지점까지의 x차dy = 도착지점까지의 y차 Grid 맵이므로 대각선 이동은 연산하지 않는다. 휴리스틱 거리는 맨하튼 계산을 사용했다.int Heuristic(Node node, Node dist) { return Math.abs(node.x - dist.x) + Math.abs(node.y - dist.y);}  이동경로의 우선순위는 아래와 같이 산출한다. 1. F값이 제일 작은 노드2. F값이 같다면 H값이 더 작은 노드3. F, H값이 같다면 부모 노드의 dx, dy 중 더 ..
좀비고의 이동 알고리즘은 꽤 특이하다. 다음과 같은 맵에서 S -> E로 경로를 찾아간다고 가정하겠다. 보통의 A* 알고리즘을 사용한다면 경로는 이렇게 된다. ( 사진1 )하지만 좀비고에서는 이렇게 이동하지 않는다. best next path 우선순위 설정에 따라 달라질수도 있지만, 원하는 좀비 이동 로직은 나오지 않는다. ( 사진2 )좀비고에서는 아마 이렇게 이동할 것이다. 일반적인 A* 알고리즘으로는 재현이 안되는 이유는, 좀비고의 로직은 거리의 dx, dy값을 알고리즘에 반영해서 이동하기 때문이다. 사진1 과 사진2 는 이동에 드는 cost가 동일하다. 어느 경로를 택하더라도 이동에 걸리는 시간은 동일하므로, 사진2 의 경로가 선택되지 않는다. 동일한 cost가 드는 next nodes중에서 dx,..
1. 이동경로좀비고등학교의 인간 추적 알고리즘은 AStar path finding을 변형해서 사용하고 있다. 아래는 좀비고의 좀비 이동 회로다. 주의 깊게 보아야할건 좀비와 인간이 1칸 대각선 위치에 서있는 상황이다. 인간이 정지한 상태일 경우, 좀비는 x, y 좌표중 랜덤하게 우선순위가 선택되어 이동한다. 그러나 이동중인 상태일때는 다르다. 인간이 좀비보다 한칸 아래에 있을때는 x좌표 우선, 위에 있을때는 y좌표 우선으로 움직인다.나머지 위치에 있을 경우는 정지된 상태와 동일하다. 이를 통해 인간과 좀비가 쉽게 겹쳐서 죽어버리는걸 방지했다. 인게임에서 좀비로 널뛰기가 가능한 이유도 위와 같다.  2. 알고리즘 좀비의 이동 루틴은 아래와 같다. 1. 타겟 플레이어의 위치와 이동중인지 여부 가져오기2. 이..
· 리버싱
Firefox의 쿠키와 local storage가 저장되는 기본 디렉토리는%APPDATA%\Roaming\Mozilla\Firefox\Profiles 이다. 1. Cookie폴더 내부에는 .default-release 폴더가 있는데,쿠키는 cookies.sqlite에 저장된다. 스키마 구조는 아래와 같이 되어있다. 통상적으로 name, value, host 값이 필요하다. host는 ".naver.com" 과 같이 hostname 앞에 "." 이 붙어서 저장된다. 2. LocalStorage localstorage db는 위의 base directory / storage / default / +++ / ls / data.sqlite 에 저장된다. Ex) storage/default/https+++nave..
· 리버싱
ld.exe는 ldplayer에서 내부적으로 실행중인 LDPlayer의 VitrualBox console에 접속하기 위해 사용된다. Default usage:.\ld.exe -s  session 값을 주지 않을 경우 모든 실행중인 에뮬레이터 중 하나에 연결된다. ld.exe는 어떻게 창에 attach할까. IDA로 분석해봤다. CPP로 작성되었고, start 함수에서 CRTStartup 함수로 이동한다. CRTStartup -> wmain wmain 함수는 두개의 int pointer를 인자로 받는데, 이 값은 pre_cpp_init에서 초기화된다. dword_406414에 *argc,dword_406418에 ***argv 가 담긴다. __tmainCRTStartup에서는 wmain에 env까지 인자로 ..
· 리버싱
API Host https://api.zeta-ai.io 1. 친구 목록 Zeta에서 대화 가능한 친구 목록은 아래 요청으로 받아온다. GET /v1/layouts/main 왜인지 몰라도 Authorization 없이도 접근이 가능하다. https://api.zeta-ai.io/v1/layouts/main 2. 대화창 특정 캐릭터 대화창을 열었을때, GET /v1/rooms?characterId= 로 요청이 간다. Response: {"rooms":[],"nextCursor":null} rooms가 비어있으면, POST 요청을 통해 방을 생성한다. POST /v1/rooms {"characterId": } Response: {"id": , "character": { "id": }} 3. 대화하기 Zeta..
· 리버싱
Zeta는 React native로 되어있으며, 데이터베이스로 mmkv를 사용하고 있다. 저장소 경로: /data/data/com.scatterlab.messenger/files/mmkv/mmkv.default 따로 암호화는 되어있지 않다. MMKV Parser를 사용해서 복호화 해 보자. Access Token KEY: TOKEN Refresh Token KEY: REFRESH_TOKEN 동일한 이름의 field로 두개가 나올건데, 둘다 동일하다.
0xff
'리버싱' 카테고리의 글 목록