// addr[]为 23 1E 封包
// output[]为输出
int r_ecx, i;
DWORD r_edx;
BYTE r_cl;
r_edx = 0x0B;
for (i = 0; i < BYTE_PTR(addr[0x0A]); i++)
{
r_ecx = i;
r_ecx &= 0x80000001;
r_cl = BYTE_PTR(addr_ptr[r_edx]);
if (r_ecx < 0)
{
r_ecx --;
r_ecx |= 0xFFFFFFFE;
r_ecx ++;
}
if (r_ecx == 0)
{
r_cl &= 0x0F;
}
else{
r_cl >>= 4;
r_edx++;
}
output = r_cl;
}
测试数据:
接受的23 1E封包:
0012F854 23 1E C2 D1 00 00 C9 00 E5 00 05 56 55 F5 12 00
以上数据经过上面函数计算,其 56 55 F5 12 00 解密得到: 06 05 05 05 05 ,该序列就是走路过程的状
态序列,长度代表步数
路途每步的方向与数值对比:
左:04
右:00
下:06
上:02
左上:03
左下:05
右上:01
右下:07
处理23 1E :
0044ABA7 |> 0FB746 02 movzx eax,word ptr ds:[esi+2] ; Case 1E of switch 
00449D59
0044ABAB |. 50 push eax
0044ABAC |. E8 0FE7FEFF call TJ2Clien.004392C0
0044ABB1 |. 8BF8 mov edi,eax
0044ABB3 |. 83C4 04 add esp,4
0044ABB6 |. 3BFB cmp edi,ebx
具体计算:
004461B0 |> /8BC8 /mov ecx,eax
004461B2 |. |81E1 01000080 |and ecx,80000001
004461B8 |. |79 05 |jns short TJ2Clien.004461BF
004461BA |. |49 |dec ecx
004461BB |. |83C9 FE |or ecx,FFFFFFFE
004461BE |. |41 |inc ecx
004461BF |> |8A0A |mov cl,byte ptr ds:[edx]
004461C1 |. |75 05 |jnz short TJ2Clien.004461C8
004461C3 |. |80E1 0F |and cl,0F
004461C6 |. |EB 04 |jmp short TJ2Clien.004461CC
004461C8 |> |C0E9 04 |shr cl,4
004461CB |. |42 |inc edx
004461CC |> |880C30 |mov byte ptr ds:[eax+esi],cl
004461CF |. |0FB64F 0A |movzx ecx,byte ptr ds:[edi+A]
004461D3 |. |40 |inc eax
004461D4 |. |3BC1 |cmp eax,ecx
004461D6 |.^7C D8 jl short TJ2Clien.004461B0
030A19CB CC int3
030A19CC CB retf
030A19CD 38EF cmp bh,ch
030A28C1 CC int3
030A28C2 C010 03 rcl byte ptr ds:[eax],3
030A28C5 B1 54 mov cl,54
030A28C7 ^ E9 D1FDFFFF jmp 030A269D
作者:眼镜
4851

被折叠的 条评论
为什么被折叠?



