飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3547|回复: 1

[C/C++] 关于wsprintf函数中一些疑问

[复制链接]
  • TA的每日心情

    昨天 17:47
  • 签到天数: 914 天

    [LV.10]以坛为家III

    发表于 2010-7-23 14:24:27 | 显示全部楼层 |阅读模式
    unsigned char Table[8]={0xc,0xA,0x13,0x9,0xc,0xB,0xA,0x8};
    Bool GenRegCode(Tchar *rcode,Tchar *name,int len)
    {   int i,j;
        unsigned long code=0;
        for(i=3,j=0;i<len;i++,j++)
        {if(j>7)
           j=0;
           code+=((BYTE)name[i])*Table[j];
         }
        wsprintf(name,TEXT("%ld"),code);
        if(lstrcmp(rcode,name)==0)
           return true;
        else
           return false;
    }
    上面一段代码是加密与解密第三版中动态分析技术中的crackme中注册码的C表示代码!!!如果name[]="abcdef",因code+=((BYTE)name[i])*Table[j];
    则应该是code=d*0xc+e*0xA+f*0x13;即:
    64*c+65*a+66*13=4B0+3F2+792=1034,问题在于:wsprintf函数把十六进制1034以长整形有符号十进制数转化
    后输入到name缓冲区的字符串数组中,到底是如何转化的呢?1034转化为字符串后是多少,如何验证1034转化后
    后的字符串对不对,有没有办法求逆,就是说再把这个字符串转化为十六进制,看是否还是1034!!!
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-7-25 13:32:41 | 显示全部楼层
    本帖最后由 whypro 于 2010-7-25 19:55 编辑

    与TCHAR.H一样,WINNT.H将TCHAR定义为一般的字符类型。如果定义了标识符UNICODE(没有底线),则TCHAR和指向TCHAR的指标就分别定义为WCHAR和指向WCHAR的指标;如果没有定义标识符UNICODE,则TCHAR和指向TCHAR的指标就分别定义为char和指向 char的指标。

    UNICODE简介:

    http://www.cppblog.com/sunraiing9/archive/2007/01/05/17306.html
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表