论坛风格切换切换到宽版
  • 5653阅读
  • 7回复

C代码转化为VB6.0 [复制链接]

上一主题 下一主题
离线jfaumt
 

发帖
6
金钱
30
威望
3
只看楼主 倒序阅读 0 发表于: 2006-09-19
下面一段代码我看不懂,(呵呵,只会VB),请教大家,如何转化为VB6.0的代码?
谢谢大家帮助。
======================================================
void DataProcess(char *name,char *hdid,char *sn)
{
/*    
     name:用户名
     hdid:机器码
     sn:注册码
*/
     char buf[200];
     int hdidlen;
     int namelen;
     int len;
     char *p;
     hdidlen=strlen(hdid);
     namelen=strlen(name);
     memset(buf,0,sizeof(buf));
     memcpy((char *)&buf[100],hdid,hdidlen);
     memcpy((char *)&buf[76],name,namelen);
     strlwr((char *)&buf[76]);
     len =strlen((char *)&buf[100]);
     p=(char *)&buf[100];
     while(len<20)
     {
           BYTE num=(BYTE)(*p++);
           num+=(BYTE)*p;
           buf[100+len]=num;
           len++;
     }
     len=strlen((char *)&buf[76]);
     p=(char *)&buf[76];
     while(len<20)
     {
           BYTE num=(BYTE)(*p++);
           num+=(BYTE)*p;
           buf[76+len]=num;
           len++;
     }
     len=0;
     p=(char *)&buf[100];
     while(len<20)
     {
           BYTE tmp;
           BYTE num=(BYTE)(*p);
           _asm
           {
                 xor eax,eax
                 mov al,num
                 MOV ESI,EAX
                 MOV EAX,0x66666667
                 IMUL ESI
                 SAR EDX,0x2
                 MOV EAX,EDX
                 SHR EAX,0x1F
                 ADD EDX,EAX
                 MOV EAX,ESI
                 mov tmp,DL;
                 MOV ESI,0x0A
                 CDQ
                 IDIV ESI
                 INC ECX
                 mov num,DL;
           }
           *(p-44)=tmp;
           *(p-64)=num;
           p++;
           len++;
     }
     len=0;
     p=(char *)&buf[76];
     while(len<10)
     {
           BYTE num=(BYTE)p[len];
           BYTE num2=(BYTE)p[10+len];
           num=num^num2;
           p[len]=num;
           num2=num;
           num=p[34+len];
           num=num^num2;
           num2=p[24+len];
           num2=num2^num;
           p[24+len]=num2;
           len++;
     }
     len=0;
     p=(char *)&buf[36];
     while(len<20)
     {
           BYTE num=p[len];
           BYTE num2=p[num+64];
           num=p[len+20];
           num2=num+num2;
           p[len+88]=num2;
           len++;
     }
     len=0;
     p=(char *)&buf[124];
     while(len<20)
     {
           BYTE num=p[len];
           if(num<0x30)
           {
                 num+=0x30;
                 p[len]=num;
           }
           else if(num<=0x7a)
           {
           }
           else if(num>=0x30)
           {
                 num=num%0x4a+0x30;
                 p[len]=num;
           }
           len++;
     }
     len = strlen(p);
     memmove((char *)sn,p,len);
}
====================================================
离线wudeqian
发帖
37
金钱
0
威望
0
只看该作者 1 发表于: 2006-11-20
代码长了,看起来很烦
不同的语言,相同的思维[b][u][i]
离线蓝色网际
发帖
1795
金钱
0
威望
0
只看该作者 2 发表于: 2006-11-20
为什么不编译成一个 DLL 然后 VB 调用呢?
不要在 PM 里问问题,PM 不是用来问问题的。
离线laoxuetong
发帖
17
金钱
0
威望
0
只看该作者 3 发表于: 2006-12-12
QUOTE(jfaumt @ 2006年 09月 19日 01时 02分) [snapback]306884[/snapback]

下面一段代码我看不懂,(呵呵,只会VB),请教大家,如何转化为VB6.0的代码?
谢谢大家帮助。
======================================================
CODE
void DataProcess(char *name,char *hdid,char *sn)
{
/*      
    name:用户名
    hdid:机器码
    sn:注册码
*/
    char buf[200];
    int hdidlen;
    int namelen;
    int len;
    char *p;
    hdidlen=strlen(hdid);
    namelen=strlen(name);
    memset(buf,0,sizeof(buf));
    memcpy((char *)&buf[100],hdid,hdidlen);
    memcpy((char *)&buf[76],name,namelen);
    strlwr((char *)&buf[76]);
    len =strlen((char *)&buf[100]);
    p=(char *)&buf[100];
    while(len<20)
    {
        BYTE num=(BYTE)(*p++);
        num+=(BYTE)*p;
        buf[100+len]=num;
        len++;
    }
    len=strlen((char *)&buf[76]);
    p=(char *)&buf[76];
    while(len<20)
    {
        BYTE num=(BYTE)(*p++);
        num+=(BYTE)*p;
        buf[76+len]=num;
        len++;
    }
    len=0;
    p=(char *)&buf[100];
    while(len<20)
    {
        BYTE tmp;
        BYTE num=(BYTE)(*p);
        _asm
        {
            xor eax,eax
            mov al,num
            MOV ESI,EAX
            MOV EAX,0x66666667
            IMUL ESI
            SAR EDX,0x2
            MOV EAX,EDX
            SHR EAX,0x1F
            ADD EDX,EAX
            MOV EAX,ESI
            mov tmp,DL;
            MOV ESI,0x0A
            CDQ
            IDIV ESI
            INC ECX
            mov num,DL;
        }
        *(p-44)=tmp;
        *(p-64)=num;
        p++;
        len++;
    }
    len=0;
    p=(char *)&buf[76];
    while(len<10)
    {
        BYTE num=(BYTE)p[len];
        BYTE num2=(BYTE)p[10+len];
        num=num^num2;
        p[len]=num;
        num2=num;
        num=p[34+len];
        num=num^num2;
        num2=p[24+len];
        num2=num2^num;
        p[24+len]=num2;
        len++;
    }
    len=0;
    p=(char *)&buf[36];
    while(len<20)
    {
        BYTE num=p[len];
        BYTE num2=p[num+64];
        num=p[len+20];
        num2=num+num2;
        p[len+88]=num2;
        len++;
    }
    len=0;
    p=(char *)&buf[124];
    while(len<20)
    {
        BYTE num=p[len];
        if(num<0x30)
        {
            num+=0x30;
            p[len]=num;
        }
        else if(num<=0x7a)
        {
        }
        else if(num>=0x30)
        {
            num=num%0x4a+0x30;
            p[len]=num;
        }
        len++;
    }
    len = strlen(p);
    memmove((char *)sn,p,len);
}

====================================================


一般情况下,这段代码不可能用VB表示,VB不能处理嵌入汇编代码。
离线xsqhlf

发帖
44
金钱
0
威望
0
只看该作者 4 发表于: 2007-03-12
谢谢楼主分享!
离线LGJxj

发帖
12
金钱
70
威望
7
只看该作者 5 发表于: 2007-05-19
不会吧,VB 使用插件能内陷 ASM ,而且楼主只是要翻译成 VB 语言,那段 .asm 很容易就可以翻译吧
发帖
*
金钱
*
威望
*
只看该作者 6 发表于: 2007-05-21
复杂了。。。看不懂
离线donald.wang
发帖
18
金钱
0
威望
0
只看该作者 7 发表于: 2007-06-30
唯一的办法重写,

到目前为止好像还没有各种计算机语言之间相互转换的软件吧