2013年4月27日 星期六

【Java教學】天堂1 封包編密與解密的函式

天堂1 2.20c 台版
ida 4.17轉成的碼 配上S-ICE 找的
只有s-ice才不會被當掉

這是 把封包解密 

.text:00478B80 decode     proc near        ; CODE XREF: sub_0_46AD00+80 p
.text:00478B80         mov   al, [ecx+3]
.text:00478B83         push  ebx
.text:00478B84         mov   bl, byte ptr dword_0_6AF514+2
.text:00478B8A         push  esi
.text:00478B8B         push  edi
.text:00478B8C         mov   edi, edx
.text:00478B8E         mov   dl, al
.text:00478B90         mov   esi, 1
.text:00478B95         xor   dl, bl
.text:00478B97         mov   [ecx+3], dl
.text:00478B9A         mov   dl, [ecx+2]
.text:00478B9D         mov   bl, dl
.text:00478B9F         xor   bl, byte ptr dword_0_6AF514+3
.text:00478BA5         xor   bl, al
.text:00478BA7         mov   [ecx+2], bl
.text:00478BAA         mov   bl, [ecx+1]
.text:00478BAD         mov   al, bl
.text:00478BAF         xor   al, byte ptr dword_0_6AF518
.text:00478BB5         xor   al, dl
.text:00478BB7         mov   [ecx+1], al
.text:00478BBA         mov   al, [ecx]
.text:00478BBC         xor   al, byte ptr dword_0_6AF518+1
.text:00478BC2         xor   al, bl
.text:00478BC4         mov   [ecx], al
.text:00478BC6         mov   bl, byte ptr dword_0_6AF514
.text:00478BCC         mov   dl, al
.text:00478BCE         xor   al, bl
.text:00478BD0         cmp   edi, esi
.text:00478BD2         mov   [ecx], al
.text:00478BD4         jle   short loc_0_478BF2
.text:00478BD6 
.text:00478BD6 loc_0_478BD6:              ; CODE XREF: decode+70 j
.text:00478BD6         mov   al, [esi+ecx]
.text:00478BD9         mov   ebx, esi
.text:00478BDB         and   ebx, 7
.text:00478BDE         mov   bl, byte ptr dword_0_6AF514[ebx]
.text:00478BE4         xor   bl, al
.text:00478BE6         xor   bl, dl
.text:00478BE8         mov   dl, al
.text:00478BEA         mov   [esi+ecx], bl
.text:00478BED         inc   esi
.text:00478BEE         cmp   esi, edi
.text:00478BF0         jl   short loc_0_478BD6
.text:00478BF2 
.text:00478BF2 loc_0_478BF2:              ; CODE XREF: decode+54 j
.text:00478BF2         pop   edi
.text:00478BF3         pop   esi
.text:00478BF4         pop   ebx
.text:00478BF5         retn
.text:00478BF5 decode     endp
.text:00478BF5 
.text:00478BF5 ; 闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡?
.text:00478BF6         align 10h
.text:00478C00 
.text:00478C00 ; 詗詗詗詗詗詗詗?S U B R O U T I N E 詗詗詗詗詗詗詗詗詗詗詗詗詗詗詗詗詗詗詗?
.text:00478C00 
.text:00478C00 

這是把封包 邊密

.text:00478C00 encode     proc near        ; CODE XREF: SendAndEncode+40 p
.text:00478C00         mov   al, byte ptr dword_0_6AF51C
.text:00478C05         push  ebx
.text:00478C06         mov   bl, [ecx]
.text:00478C08         push  esi
.text:00478C09         xor   bl, al
.text:00478C0B         mov   esi, edx
.text:00478C0D         mov   eax, 1
.text:00478C12         mov   [ecx], bl
.text:00478C14         cmp   esi, eax
.text:00478C16         jle   short loc_0_478C34
.text:00478C18 
.text:00478C18 loc_0_478C18:              ; CODE XREF: encode+32 j
.text:00478C18         mov   bl, [eax+ecx-1]
.text:00478C1C         mov   edx, eax
.text:00478C1E         and   edx, 7
.text:00478C21         xor   bl, byte ptr dword_0_6AF51C[edx]
.text:00478C27         mov   dl, [eax+ecx]
.text:00478C2A         xor   dl, bl
.text:00478C2C         mov   [eax+ecx], dl
.text:00478C2F         inc   eax
.text:00478C30         cmp   eax, esi
.text:00478C32         jl   short loc_0_478C18
.text:00478C34 
.text:00478C34 loc_0_478C34:              ; CODE XREF: encode+16 j
.text:00478C34         mov   al, byte ptr dword_0_6AF51C+2
.text:00478C39         mov   bl, [ecx+3]
.text:00478C3C         mov   dl, [ecx+2]
.text:00478C3F         xor   bl, al
.text:00478C41         mov   al, bl
.text:00478C43         mov   [ecx+3], bl
.text:00478C46         mov   bl, byte ptr dword_0_6AF51C+3
.text:00478C4C         xor   dl, al
.text:00478C4E         mov   al, [ecx+1]
.text:00478C51         xor   dl, bl
.text:00478C53         mov   bl, [ecx]
.text:00478C55         mov   [ecx+2], dl
.text:00478C58         xor   al, dl
.text:00478C5A         mov   dl, byte ptr dword_0_6AF520
.text:00478C60         xor   al, dl
.text:00478C62         pop   esi
.text:00478C63         mov   [ecx+1], al
.text:00478C66         mov   dl, byte ptr dword_0_6AF520+1
.text:00478C6C         xor   al, bl
.text:00478C6E         pop   ebx
.text:00478C6F         xor   al, dl
.text:00478C71         mov   [ecx], al
.text:00478C73         retn
.text:00478C73 encode     endp

基本上加密演算法跟天2很像 ,但是填充盒子的碼看不懂
第一個收到的封包很重要 
0A 00 29 5E 8B E7 57 69 CC 3C

0a 00 
代表封包10 byte     10 - 2 = 8 byte 真正要傳的資料

29 
初始化KEY盒子的命令

5E 8B E7 57 
初始的KEY值, 還需要一個是客端自己帶的key

69 CC 3C 
無用 可能是要符合 blowfish 演算法的填充物

目前還是看不出如何初始化box 

0x4666f0 是初始化盒子的進入點

沒有留言:

張貼留言