Admin | Write | GuestBook
[공지] 해당 블로그에 용건이 있으신 분께서는 http://blog.fore.kr/ 의 방명록(Guestbook)으로 부탁드립니다.
네○파라 vol.1 암호화 루틴
Category : Programming/Programming Talk | URL : | Written by 포레 ( 2014. 12. 31. 11:34 ) | 신고

 

 

"""

 Python 2.7 pseudocode

 Present by FORE

"""

from struct import pack, unpack

from ctypes import *

 

class ELIF(Structure):

 _fields_ = [ ('Signature',c_uint),

 ('ullStructSize',c_ulonglong),

 ('dwEncryptKey',c_uint),

 ('wFileName',c_ushort),

 ('FileName',c_wchar_p) ]

 

def get_encrypt_key(key):

 key ^= 0x1548E29C

 key ^= ((key>>0x18)^(key>>0x10)^(key>>0x08))

 return key and key&0x000000FF or 0xD7

 

def decode(buf,key):

 key = get_encrypt_key(key)

 length = len(buf)

 buf = list(unpack('B'*length,buf))

 for i in range(length):

  buf[i] ^= key

 buf = pack('B'*length,*buf)

 return buf

 

def main():

 elif = ELIF()

 # ... read something

 buf = decode(buf,eilf.dwEncryptKey)

 

 

최근들어 이런 암호화 루틴이 많이 쓰는듯 . . .

( 그 외에도 테이블 생성해서 별짓 다하는 색히들도 존재함 -_- . . . 최근 발매한 발○ 스위치라던가 . . . )

 

get_encrypt_key 함수에 첫줄의 xor 값이 변경될 수 있으므로 모든 엔진에 적용된다고 보장할 수 없지만

 

적절히 바이너리 서치하면 아마 위와 같은 암호화 쓰는 거의 모든 엔진에서 먹히지 않을까 하는게 결론.

 

참고로 data 어카이브 경우 오프닝 엔딩 동영상이 400mb 넘어가므로 한번에 언팩하면 상당한 렉을 유발하니

 

분할시켜서 처리하거나, 근성을 갖고 그냥 풀어버리는 수 밖에 없을듯함.

 

근데, 왜 한국어는 없는거죠 . . .

 

'Programming > Programming Talk' 카테고리의 다른 글

미연시계의 횡포. 2***AME  (0) 2015.05.08
엔스크립트에 대해서 잠깐 분석해봄.  (0) 2015.05.01
[Python] pf2  (8) 2014.12.16
[C/C++] 한글 판별 코드.  (2) 2014.12.16
[Python] 파이썬 2.7 유니코드 관계  (6) 2014.12.13
Category
분류 전체보기 (605)
Notice (6)
Programming (79)
DISKER (1)
FSCH (7)
Caption (0)
Rest Time ! (443)
Hobby (64)
Tour (5)
Blind Post (0)
Recent Post
Recent Comment
Link
Calender
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Total :
Today :
Yesterday :