opcode 찾는 부분이 궁금하신 분들이 많은것 같아서 씁니다.


일단 미터기 소스코드는 요기 : https://github.com/neowutran/ShinraMeter
테라 패킷 구조는 요기 : https://github.com/tera-proxy/tera-data


위 두곳에서 소스와 패킷 구조를 참조해서 초반 작업을 했어요.

미터기 소스코드가 C#이라, 저랑 안친해서 살짝 수정을 해서
패킷을 아래 형태로 텍스트 파일로 저장하도록 수정을 했습니다.


그래서 나온 결과물이 아래와 같은 숫자들의 나열이죠..ㅎ

어, 격납고 한번 돌고 나오면, 이런게 20M정도 쌓입니다. 패킷 덤프파일이죠..ㅎ


BC-4D-02-00-08-00-08-00-14-00-00-00-00-00-5D-93-05-00-14-00-00-00-01-00-00-00-A8-8E-05-00
60-66-17-00-2D-00-0A-02-00-00-00-00-00-01-00-00-00-55-24-00-00-32-00-30-00-39-00-37-00-37-00-31-00-34-...
BD-4D-01
FE-B6-00
D5-B2
ED-80-06-00-36-00-38-00-37-00-62-00-30-00-64-00-34-00-34-00-36-00-31-00-30-00-66-00-36-00-32-00-30-00-...
B2-ED-01-00-00-00-00-00-00
90-5F-06-00-00-00-00-00-00-00
34-C7-01-00-02-00-00-00-00-00-00-00-06-00-00-00-01-00-00-00-00
51-CB-12-00-01-97-08-7D-00-00-00-00-C9-04-05-00-47-00-61-00-6D-00-65-00-44-00-42-00-00-00
74-D2-C4-09-00-00
E1-9F
2C-CC-16-00-23-00-01-00-00-00-00-17-00-00-00-01-00-00-00-00-00-05-00-00-00-00-00-00-00-18-00-00-00-23-...


opcode라는게 이 숫자나열의 앞자리 2개의 Hex 값입니다.


BC-4D     --->   4DBC (16진수)   --->     19900 (10진수)
60-66     --->   6660 (16진수)   --->     26208 (10진수)
BD-4D     --->   4DBD (16진수)   --->     19901 (10진수)
FE-B6     --->   B6FE (16진수)   --->     46846 (10진수)
D5-B2     --->   B2D5 (16진수)   --->     45781 (10진수)
ED-80     --->   802D (16진수)   --->     42813 (10진수)


즉, 각 패킷앞 2바이트를 10진수로 표기해 놓은게 opcode 입니다.


패치 할때마다, 뒤쪽 바이트들(아마 payload라고 하죠)은 변하지 않는데, 앞쪽 2바이트만 변합니다.

그래서 이전 패킷덤프 정보와 바뀐 패킷덤프 정보를 비교해서, 변경된 opcode를 찾는거죠..

한마디로 닥질입니다..ㅋㅋㅋㅋ


맨땅에 헤딩하면, 답이 없죠.. 저도 첨에 2일동안 시도해보다 안되서 다른분이 찾아놓은 opcode보고
덤프 자료를 쌓아가면서, 점점 속도가 붙게 된거죠.


tera-data 에서 패킷 구조 찾은 이후로는 간단하게 패킷 구분해서 보여주는 프로그램 하나짜서
패킷 구조랑 정확히 일치되는 녀석들은 비교적 쉽게 찾고, 나머지 일치안되는 녀석들은
기존에 찾았던 기록을 바탕으로 검색해서 찾고 있어요.


아래는 지금까지 작업하면서 쌓아진 일부데이터 들이에요..


S_ABNORMALITY_BEGIN 24243 B3-5E
S_ABNORMALITY_BEGIN.3.def 검색이 빠를듯

      target                    source                    id            duration     unk          stacks       unk2         unk3:0
B3-5E -41-77-09-00-00-80-00-01- 00-00-00-00-00-00-00-00-  E0-EC-E6-05-  FF-FF-FF-7F- 00-00-00-00- 01-00-00-00- 00-00-00-00- 00-00-00-00
B3-5E -41-77-09-00-00-80-00-01- 00-00-00-00-00-00-00-00-  EA-EC-E6-05-  FF-FF-FF-7F- 00-00-00-00- 01-00-00-00- 00-00-00-00- 00-00-00-00
B3-5E -41-77-09-00-00-80-00-01- 00-00-00-00-00-00-00-00-  F4-EC-E6-05-  FF-FF-FF-7F- 00-00-00-00- 01-00-00-00- 00-00-00-00- 00-00-00-00

81-72 -B1-61-09-00-00-80-00-00- B1-61-09-00-00-80-00-00-  C7-D6-D5-04-  B8-0B-00-00- 00-00-00-00- 01-00-00-00- 00-00-00-00- 00-00-00-00
81-72 -B1-61-09-00-00-80-00-00- B1-61-09-00-00-80-00-00-  85-EC-9A-00-  FF-FF-FF-7F- 00-00-00-00- 01-00-00-00- 00-00-00-00- 00-00-00-00

AC-6D -5A-28-09-00-00-80-00-00- 00-00-00-00-00-00-00-00-  E0-EC-E6-05-  FF-FF-FF-7F- 00-00-00-00- 01-00-00-00- 00-00-00-00- 00-00-00-00


S_ABNORMALITY_REFRESH 43677  9D-AA
S_ABNORMALITY_REFRESH.1.def
    
      target                   id            duration     unk:0        stack
9D-AA -97-4D-09-00-00-80-00-01 -81-C3-C9-01- F4-01-00-00- 00-00-00-00 -01-00-00-00      355630
9D-AA -97-4D-09-00-00-80-00-01 -81-C3-C9-01- F4-01-00-00- 00-00-00-00 -01-00-00-00

15-57 -49-6B-09-00-00-80-00-00 -BA-8B-8B-3B- 00-DD-6D-00- 00-00-00-00- 01-00-00-00      356376
46-62 -27-31-09-00-00-80-00-00 -BE-0F-00-00- 40-77-1B-00- 00-00-00-00- 01-00-00-00
D2-7C -76-09-09-00-00-80-00-00 -C0-0F-00-00 -40-77-1B-00- 00-00-00-00- 01-00-00-00


이렇게 기존 자료들 정리한걸보면서 찾습니다.

혼자서 진행한 작업이라, 다른 opcode 찾는 분들 방식이랑은 틀릴거에요.

궁금하신분들이 많은거 같아서 올려봅니다.


tear proxy 사용하다, 블럭되는 분들이 있었던거 같은데..


전 다행이도 귀차니즘이 더 깊게 들어가는 것을 막아주네요..ㅋㅋ


아 귀차나..