常见软件保护技术

1.  序列号保护机制

    俗称注册码。验证用户名和序列号之间的书写映射关系。有以下几种分类:

  1.     以用户名作为自变量,用过函数F变换后得到注册码。序列号= F(用户名)
  2.     通过注册码验证用户的正确性。 用户名 = F-1(序列号)
  3.     通过对等函数检查注册码。F1(用户名) = F2(序列号)
  4.     同时采用用户名和序列号作为自变量。特定值=F3(用户名, 序列号)

下面是一个通过对等函数检查注册码的列子:

我们反汇编下代码:

image

这里是得到用户名和密码。

然后:

image

这样就可以着重分析

CALL serial.0040137E                     ;  用户名转换

CALL serial.004013D8                     ;  转换后的用户名和密码作为参数进行比较

这两个函数了。

继续往下分析,看看 0040137E内部做了什么:

image

image

这里可以写出转换用户名的代码:

string translateUserName(string  name)

{

    name = name.to_upper;

    int tmp(0);

    for (int i =0; i < name .lenght(); ++i)

         tmp += name.at(i);

   return tmp^0x5678

}

分析完毕用户名的转换之后, 我们再来分析下:

CALL serial.004013D8                     ;  转换后的用户名和密码作为参数进行比较

image

反汇编的一下代码为:

string translatePassword(string password)

{

    int tmp(0);

    for (int i = 0; i < password.lenght(); ++i)

        {

              char al(0x0A);

               char ch = password[i];

               if (0 == ch)

                    break;

              ch –= 0x30;

               tmp*= al;

               tmp += ch;        

         }

}

转载于:https://www.cnblogs.com/sld666666/archive/2011/05/03/2035697.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值