64,691
社区成员
发帖
与我相关
我的任务
分享
00171D80 push esi
00171D81 mov esi,dword ptr [esp+8]
00171D85 mov cl,byte ptr [esi]
00171D87 xor cl,0AAh
00171D8A push edi
00171D8B mov di,word ptr [esp+10h]
00171D90 mov byte ptr [esi],cl
00171D92 mov ecx,1
00171D97 cmp di,cx
00171D9A jbe 00171DB2
00171D9C lea edx,[esi+1]
00171D9F push ebx
00171DA0 mov al,byte ptr [esi]
00171DA2 mov bl,byte ptr [edx]
00171DA4 imul cl
00171DA6 xor bl,al
00171DA8 inc ecx
00171DA9 mov byte ptr [edx],bl
00171DAB inc edx
00171DAC cmp cx,di
00171DAF jb 00171DA0
00171DB1 pop ebx
00171DB2 pop edi
00171DB3 pop esi
00171DB4 ret
void unencode(char* pbuff,int size)
{
if (size>0)
{
byte tmp;
pbuff[0]^=0x0AA;
for (int i=1;i<size;i++)
{
tmp = pbuff[0] * i;
pbuff[i]^=tmp;
}
}
else
{
ASSERT(0);
}
}
void encode(char* pbuff,int size)
{
if (size>0)
{
byte tmp;
for (int i=1;i<size;i++)
{
tmp = pbuff[0] * i;
pbuff[i]^=tmp;
}
pbuff[0]^=0x0AA;
}
else
{
ASSERT(0);
}
}
自己解码了,那段会变化的字节,估计是,变量定义的时候,没有清零所导致的,谢谢大家
是调试的时候,跟进了汇编代码,大致看懂,就可以写出来了
学点汇编还是挺实用的