2017-10-23 19 views
0

zlib는 alghorithm을 사용하여 몇 주 동안 고생하고 있습니다.Zlib은 예기치 않은 압축 해제 오류를 부풀려합니다.

인기있는 게임 인 경골 (Tibia)에서 패킷을 압축 해제하고 싶습니다. 그들은 zlib가 alghorithms를 부풀려 압축했습니다. 그러나 무언가가 변경된 것 같습니다. 그것을 확인해 주시겠습니까? 내가 놓친 것을 발견 할 수 있을까요?

패킷 압축 - 직접적으로 팽창 될 수없는 (원시 허프만 고정 코딩 - 아마)

DA 22 A6 CB 10 99 5F AA 50 9C 9A AA 90 A8 90 05 B4 2F B5 44 41 C3 B1 28 D7 CA 50 53 8F CB B3 44 A1 3C 35 33 3D A3 58 C1 C8 44 CF C0 40 21 BF 4A 0F 

패킷이 역 엔지니어링을 이용하여 압축 해제 :

B4 16 2D 00 59 6F 75 20 73 65 65 20 61 20 6A 61 63 6B 65 74 20 28 41 72 6D 3A 31 29 2E 0A 49 74 20 77 65 69 67 68 73 20 32 34 2E 30 30 20 6F 7A 2E 

압축 해제 된 패킷을 사용 ZLIB를 DEFLATE 압축 사이버 쉐프는 수축/php 수축 기능 :

db 22 a6 cb 10 99 5f aa 50 9c 9a aa 90 a8 90 95 98 9c 9d 5a a2 a0 e1 58 94 6b 65 a8 a9 c7 e5 59 a2 50 9e 9a 99 9e 51 ac 60 64 a2 67 60 a0 90 5f a5 07 00 

데이터는 일부 장소에서 일치하지만 일반적으로 다릅니다. 무슨 일이 일어날 지 아십니까?

가 나는 팽창 기능을 RE에서 사진을 첨부 : Screenshot from IdaPro

/// 편집 : 내가 몇 패킷 이전 00 00 FF FF로를 추가하고 그것을 다시 설정하라는없이 패킷와 zstream을 공급함으로써이 문제를 해결하기 위해 관리했다. 어쨌든, 나는 아직도 모든 패킷을 팽창시킬 수 없다.

여기 올바른 순서로 패킷이다 : - 정확하게

  • http://wklej.org/hash/bd371e7f510/txt/ 비정상적 -

    1. http://wklej.org/hash/6aee9e223f0/txt/
    2. http://wklej.org/hash/8f15935dc15/txt/ 올바르게 팽창 - 정확하게

    를 팽창 여기 팽창 될 수없는 패킷을 인 ...

    CA059BC6043619009FC9FFFFE831 
    
  • 답변

    0

    팽창 할 수없는 패킷은 압축 된 데이터의 긴 스트림의 일부일 가능성이 높습니다. 다른 패킷은 그 다음에 이어지는 패킷입니다. 압축 해제를 성공시키기 위해서는 모두 단일 스트림으로 압축을 풀어야합니다.

    +0

    솔직하게 말해서, 입력 된 16 진수 스트림을 메모리에서 복사하고 길이가 매개 변수 길이로 확인한 다음 출력 버퍼를 복사했습니다. 이상하게도 나는 그것을 팽창시킬 수 없다. 그것은 zlib가 팽창하고, inflate가 -15 param으로 시작되었다. 이것은 패킷으로 패킷을 압축 할 필요가 있는가? ... 내가 추출한 것을 알아야한다. – Mateusz

    +0

    압축 기능은 이전 데이터를 참조하여 작동합니다. 해당 패킷은 이전 패킷에 있어야하는 데이터를 나타냅니다. 또한 패킷에는 마지막 블록이 아닌 고정 블록이 있으므로 뒤 따르는 압축 데이터가 있어야합니다. –

    +0

    음, 패킷을 팽창시키기 전에 00 00 ff ff를 추가하여 해결책을 찾았습니다. 그러나 모든 패킷에 대해 작동하지는 않습니다 ... Z_SYNC_FLUSH를 사용하여 zlib 스트림에 대한 신뢰할 수있는 설명서를 알고 계십니까? 짧은 패킷에서 "잘못된 저장 블록 길이"를 수신합니다. 내 질문을 예제로 업데이트했습니다. – Mateusz