看流星社区

 找回密码
 注册账号
查看: 1946|回复: 0

ColorSchemer Studio 2 破解

[复制链接]

该用户从未签到

发表于 2017-6-2 11:00:53 | 显示全部楼层 |阅读模式
软件介绍:
ColorSchemer Studio 2 is a professional color matching application for anyone from hobbyists to advanced professionals.


Work with a dynamic visual color wheel, instantly explore harmony relationships and even let ColorSchemer Studio intelligently suggest color schemes for you!



官网:http://www.colorschemer.com/


从一个论坛上看到的一篇文章,尝试了下,发现这个版本和他的那个版本不同,算法也有些不同。所以就自己尝试破解了下。
软件注册时明文比较,加载起来后直接读取内存就能读到真正的注册码,我们跟踪一下算法。。。。


1. 加载后,使用字符串找注册的关键字,就可以找到这个地方


可以看出注册过程是,先算出一大坨数据,然后取注册时输入的code1和code2,连接code1和code2记为CODE,然后比较算出的这一大坨数据是不是和CODE相等,相等则注册成功,不相等就注册失败。。
2. 来到算出一大坨数据的地方


来到算法的第一部分,计算出一个key1(中间值),它是怎么计算的呢?事情的经过是这个的:取出输入的用户名的每一位,乘以1024后,求和。然后表示成十进制。结果记为KEY1。


3. 接着向后走,来到


上面的计算过程是这样的:每次计算一个数,(name % 10 + key1) % 10,然后这个数通过下面的CALL 00404DCC进行赋值。




4. 赋值的过程


进入00405150后




5.根据用户名的长度为8,生成的这八位数字全部赋完值后,就生成了注册码的后八位。而注册码的前面的八位又是两部分来的:第一部分是固定的“CSS”,第二部分是key1的前五位。


看上图,堆栈中三个串凑齐了,连接起来就是注册码。。。。


自己逆向出来的算法:
  1.         TCHAR szUserName[256] = {0};
  2.         ::GetDlgItemText(this->m_hWnd, IDC_EDT_UserName, szUserName, 256);
  3.         if (strlen(szUserName) != 8)
  4.         {
  5.                 AfxMessageBox("用户名必须为八位的字母或数字...:)");
  6.                 return ;
  7.         }
  8.         DWORD key1 = 0;
  9.         for (int i = 0; i < strlen(szUserName) ; i++)
  10.         {
  11.                 DWORD dwTemp =   (TCHAR)szUserName[i] * pow(2, 16);
  12.                 key1 += dwTemp;
  13.         }
  14.        
  15.         TCHAR szTempResult[10] = {0};
  16.         itoa(key1, (TCHAR*)szTempResult, 10);
  17.        
  18.         TCHAR strResult[17] = {0};
  19.        
  20.         for (i = 0; i < strlen(szUserName); i++)
  21.         {
  22.                 DWORD dwTemp1 = szUserName[i] % 10;
  23.                 DWORD dwTemp2 = szTempResult[i] - 0x30;
  24.                 DWORD dwTemp3 = dwTemp1 + dwTemp2;
  25.                 DWORD dwTemp4 = dwTemp3 % 10;
  26.                
  27.                 strResult[i+8] = dwTemp4 + 0x30;
  28.         }
  29.         for (i = 0; i < 5; i++)
  30.         {
  31.                 strResult[i+3] = szTempResult[i];
  32.         }
  33.         strResult[0] = &#39;C&#39;;
  34.         strResult[1] = &#39;S&#39;;
  35.         strResult[2] = &#39;S&#39;;
  36.         ::SetDlgItemText(this->m_hWnd, IDC_EDT_Code, strResult);
复制代码
程序和代码都在下面的链接中
下载地址:http://download.csdn.net/detail/xiaocaiju/7493841 压缩密码:xiaoju
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 18:29

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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