能力值:
( LV2,RANK:10 )
|
-
-
2 楼
连个悬赏都不发吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
0EDB88320h 这个number 来看。 估计是CRC32
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
看你回复的水平怎么样了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
看你回复的水平怎么样了
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
牛掰。。。
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
楼主这态度 想帮的也会到此停止
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
对不起啊,大牛。
帮一下忙吗
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
应该是计算参数指向字符串的 CRC32 吧
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
crc32的源文件
===========================分割线===========================
#include <stdio.h>
#include "crc32.h"
static uint CRC32[256];
static char init = 0;
//初始化表
static void init_table()
{
int i,j;
uint crc;
for(i = 0;i < 256;i++)
{
crc = i;
for(j = 0;j < 8;j++)
{
if(crc & 1)
{
crc = (crc >> 1) ^ 0xEDB88320;
}
else
{
crc = crc >> 1;
}
}
CRC32[i] = crc;
}
}
//crc32实现函数
uint crc32( uchar *buf, int len)
{
uint ret = 0xFFFFFFFF;
int i;
if( !init )
{
init_table();
init = 1;
}
for(i = 0; i < len;i++)
{
ret = CRC32[((ret & 0xFF) ^ buf[i])] ^ (ret >> 8);
}
ret = ~ret;
return ret;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
帮你把汇编逆向了 :)
这是一个字符串校验的函数,编码思路大体和楼上代码相同,不过很显然,作者融入了一些编码技巧
//代码中有取最后一位的操作
//感觉用联合体写看起来比较直观
union U1{
UINT buf;
char a[4];
};
UINT validFunc(char *p1)
{
char *ptmp1 = p1;
U1 tmp2;
tmp2.buf = 0;//eax
tmp2.buf = -1;
//for(int i1 = 0;p1[i1] != 0 ; i1++) //这样逆比较好看,不过漏了最后一个0没处理 - -,所以用do-while了
int i1 = -1;
do
{
i1++;
tmp2.a[0] = tmp2.a[0] ^ p1[i1];//这里
for (int i2 = 0; i2 < 8; i2++)
{
//最后一位bit
UCHAR t1 = tmp2.a[0] & 1;
if (t1 > 0)
{
tmp2.buf = tmp2.buf >> 1;
tmp2.buf = tmp2.buf ^ 0x0EDB88320;
} else {
tmp2.buf = tmp2.buf >> 1;
}
}
} while (p1[i1] != 0) ;
//tmp2 = !tmp2;
tmp2.buf = ~tmp2.buf;// = tmp2.buf;
return tmp2.buf;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *a = "hello!";
UINT a1 = validFunc(a);
}
|
|
|