吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 16496|回复: 49
上一主题 下一主题

[其他] 来,放源码,大家一起玩

  [复制链接]
跳转到指定楼层
楼主
海风月影 发表于 2014-11-9 21:30 回帖奖励
本帖最后由 海风月影 于 2014-11-9 21:42 编辑

保护手段:特殊版的编译器,clang.exe cm.c,生成出来的bin,就是比赛用的
编译方式:普通编译器也可以编译,注释掉一行编译选项:cl.exe cm.c即可

下面放的源码是跨平台的,其实也可以做个Android版本,不过为了降低难度,只做了Windows版本
把源码里面关于Windows平台代码注释去掉,编译出来,就是比赛放出去的版本

说明一下,你们自己的编译器如果报错,注释掉下面一行就行了


  1. // 这行是特殊版编译器的选项,普通编译器编译,注释掉就行了
  2. #pragma obfuscate on

复制代码


源码如下:

  1. //#include <windows.h>
  2. #include <stdio.h>
  3. #include <math.h>

  4. #define PI 3.141592653589793238462643383279
  5. #define EPLISON        0.00001

  6. #define   R1   -0.1666665668e+0
  7. #define   R2     0.8333025139e-2
  8. #define   R3   -0.1980741872e-3
  9. #define   R4     0.2601903036e-5

  10. #define   INVSPI     0.31830988618379067153776752674508
  11. #define   HALFPI     (PI / 2)

  12. #define   C1     3.140625
  13. #define   C2     9.67653589793e-4

  14. #define                hashkey1        0xB4B2F8C2
  15. #define                hashkey2        0x2FF54B62
  16. #define                hashkey3        0x9639CE42
  17. #define                hashkey4        0x58ECCC20

  18. // 这行是特殊版编译器的选项,普通编译器编译,注释掉就行了
  19. #pragma obfuscate on

  20. char key[50] = {0};        //48位的key
  21. char name[35] = "";

  22. int vaild();

  23. int main(int argc, char *argv[])
  24. {
  25.         //HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);
  26.         //SetConsoleTitle("52Pojie CrackMe Contest 2014");
  27.         //SetConsoleTextAttribute(hd, 0xF);
  28.         printf("                         52Pojie CrackMe Contest 2014\n");
  29.         printf("                            [url]http://www.52pojie.cn[/url]\n\n");
  30.         printf("                               Author: 海风月影\n\n");
  31.         printf("Useage: \n  cm [name] [key]\n");
  32.         printf("\n");
  33.         if(argc < 2)
  34.         {
  35.                 printf("Please Input Name (length = [3, 32]): ");
  36.                 scanf("%32s", name);
  37.                 printf("Please Input Key (length = 48): ");
  38.                 scanf("%48s", key);
  39.                 printf("\n\n\n");
  40.         }
  41.         else
  42.         {
  43.                 strncpy(name, argv[1], 32);
  44.                 strncpy(key, argv[2], 48);
  45.         }
  46.         printf("Your name: %s\nYour key: %s\nChecking...", name, key);
  47.         //SetConsoleTextAttribute(hd, 12);
  48.         vaild();
  49.         //SetConsoleTextAttribute(hd, 0xF);
  50.         {
  51.                 char tmp[6] = {'D', 'o', 'n', 'e', '!', 0};
  52.                 printf("\n%s\n", tmp);
  53.         }
  54.         getchar();
  55.         return 0;
  56. }



  57. int vaild()
  58. {
  59.         unsigned int namelen;
  60.         unsigned int keylen;
  61.         unsigned char *pk;
  62.         unsigned int k;
  63.         unsigned int hash1 = 0;
  64.         unsigned int hash2 = 0;
  65.         unsigned int hash3 = 0;
  66.         unsigned int hash4 = 0;
  67.         float y;
  68.         float y1;
  69.         float y2;
  70.         float y3;
  71.         double x0;
  72.         float x1;
  73.         float x2;
  74.         float x4;
  75.         float *x;
  76.         unsigned int *xx;
  77.         unsigned int crc32;
  78.         unsigned char *lpData;
  79.         unsigned int i, j;
  80.         unsigned int n;
  81.         unsigned int sign;

  82.         unsigned int crcTable[256];
  83.         float xn, f, g, rg, result;
  84.         unsigned int rem;
  85.         unsigned int root;
  86.         unsigned int divisor;
  87.         unsigned int a;

  88.         unsigned short *d;
  89.         int B, C;

  90.         unsigned int ddd[6];
  91.         char szGood[12];

  92.           namelen = strlen(name);
  93.           keylen = strlen(key);
  94.         if (namelen < 3 || namelen > 32 || keylen != 48)
  95.         {
  96.                 return 6;
  97.         }

  98.         szGood[5] = 'c';

  99.         for(i = 0; i < namelen; i++)
  100.         {
  101.                 hash1 += hash1 * name[i] * (name[i] << 1) + hashkey1;
  102.                 hash2 += hash2 * name[i] * (name[i] >> 2) + hashkey2;
  103.                 hash3 += hash3 * name[i] * (name[i] << 3) + hashkey3;
  104.                 hash4 += hash4 * name[i] * (name[i] << 5) + hashkey4;
  105.         }
  106.         hash1 = ((hash1 & 0x00FFFFFF) ^ (unsigned int)0x3E000000);
  107.         hash2 = ((hash2 & 0x00FFFFFF) ^ (unsigned int)0x3F000000);
  108.         hash3 = ((hash3 & 0x00FFFFFF) ^ (unsigned int)0x40000000);

  109.         szGood[7] = '!';
  110.         
  111.         for(i = 0; i < keylen; i+= 8)
  112.                 sscanf((char*)&key[i], "%08X", &ddd[i / 8]);

  113.         szGood[8] = '\x0';

  114.     for( i = 0; i < 256; i ++ )
  115.         {
  116.         crc32 = i;
  117.         for( j = 0; j < 8; j ++ )
  118.                 {
  119.             if(crc32 & 1)
  120.                                 crc32 = (crc32 >> 1) ^ 0xEDB88320UL;
  121.             else
  122.                                 crc32 >>= 1;
  123.         }
  124.         crcTable[i] = crc32;
  125.     }


  126.         szGood[4] = 'e';
  127.         crc32 = ~hash4;
  128.         lpData = &ddd;

  129.         for(i = 0; i < 24; i ++)
  130.         {
  131.                 crc32 = (crc32 >> 8) ^ crcTable[ (crc32 ^ lpData[i]) & 0xFF ];
  132.         }
  133.                
  134.         szGood[3] = 'r';

  135.         crc32 = ~crc32;

  136.         for(i = 0; i < 6; i ++)
  137.         {
  138.                 ddd[i] ^= crc32;
  139.         }
  140.         
  141.         szGood[6] = 't';

  142.         xx = (unsigned int*)&y2;

  143.         y1 = 0.0;
  144.         x0 = 1.0;
  145.         y2 = x0;
  146.         x1 = *(float*)&ddd[0];
  147.         x2 = *(float*)&ddd[1];
  148.         x4 = x1;
  149.         for(i = 1; i <= 100000; i++)
  150.         {
  151.                 sign = (x4 < 0);
  152.                 x4 = sign?(-x4):x4;
  153.                 n = (int) ((x4 * INVSPI) + 0.5);
  154.                 xn = (double) n;

  155.                 sign ^= n % 2;
  156.                
  157.                 f = (x4 - xn * C1) - xn * C2;
  158.                 g = f * f;
  159.                 rg = (((R4 * g + R3) * g + R2) * g + R1) * g;
  160.                 result = f + f * rg;
  161.                 result = sign ? -result : result;

  162.                 y1 += result / i;
  163.                 x0 *= x2;
  164.                 y2 += x0;
  165.                 x4 += x1;
  166.         }
  167.         x = (float*)&hash1;

  168.         if(fabs(*x - y1) > EPLISON || fabs(y2 - *(float*)&hash2) > EPLISON)
  169.         {
  170.                 szGood[1] = '\x0';
  171.                 return 3;
  172.         }

  173.         szGood[0] = 'C';

  174.         x0 = 1.0;
  175.         y3 = 0.0;
  176.         x1 = *(float*)&ddd[2];
  177.         x4 = x1;
  178.         for(i = 1; i < 8000; i++)
  179.         {
  180.                 x4 = (x4 > 0)?(x4):(-x4);
  181.                 n = (int) (((x4 + HALFPI) * INVSPI) + 0.5);   
  182.                 xn = (double)n - 0.5;
  183.                 sign = n % 2;
  184.                 f = (x4 - xn * C1) - xn * C2;
  185.                 g = f * f;
  186.                 rg = (((R4 * g + R3) * g + R2) * g + R1) * g;
  187.                 result = f + f * rg;     
  188.                 result =  sign ? -result : result;
  189.                 y3 += x0 * result / (i * i);
  190.                 x0 = -x0;
  191.                 x4 += x1;
  192.         }
  193.         y3 = y3 * 4 + PI * PI / 3 * 2;

  194.         x = (float*)&hash3;
  195.         if(fabs(*x - y3) > EPLISON)
  196.         {
  197.                 szGood[0] = '\x0';
  198.                 return 1;
  199.         }

  200.         k = 0;
  201.         szGood[1] = 'o';
  202.         d = (unsigned short*)&ddd[4];
  203.         
  204.         for(i = 0; i < 4; i++)
  205.         {
  206.                 B = (int)d[i];

  207.                 if(B >= 0x8000)
  208.                 {
  209.                         B = (B * 2) & 0xFFFF;
  210.                         C = B + 1;
  211.                 }
  212.                 else
  213.                         C = B + 2;

  214.                 rem = 0;
  215.                 root = 0;
  216.                 divisor = 0;
  217.                 a = C * C - B * B;
  218.                 for(j = 0; j < 16; j++)
  219.                 {
  220.                         root <<= 1;
  221.                         rem = ((rem << 2) + (a >> 30));
  222.                         a <<= 2;
  223.                         divisor = (root << 1) + 1;
  224.                         if(divisor <= rem)
  225.                         {
  226.                                 rem -= divisor;
  227.                                 root ++;
  228.                         }
  229.                 }
  230.                 k = k | ((unsigned char)(root - 3)) << (i * 8);
  231.         }

  232.         if(k == hash4)
  233.         {
  234.                 szGood[2] = 'r';
  235.                 ;;;
  236.                 printf("%s", szGood);
  237.                 ;
  238.         }
  239.         ;
  240.         return 2;
  241. }

复制代码

免费评分

参与人数 4热心值 +4 收起 理由
codelive + 1 感谢分享!
轩少 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
蚯蚓翔龙 + 1 多谢分享出来
caijunqill + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Hmily 发表于 2014-11-9 21:39
@Kido 比赛源代码按规则应该发布了,正好放到之前帖子里把。
头像被屏蔽
3#
a1253960209 发表于 2014-11-9 22:09
4#
caijunqill 发表于 2014-11-9 22:25
开始以为是易语言的,进来一看晕了,膜拜大神,求大神带我开挂,带我飞{:1_931:}
5#
kindbigbear0 发表于 2014-11-9 22:28
好前排啊~~~~~~~第一次离大神这么近距离!!!!!!!!!好激动~
6#
鬼魅王子 发表于 2014-11-9 22:48
我也是啊 楼上的
7#
半世浮华 发表于 2014-11-9 22:58
大神牛XXX  沾神力
8#
sodiseng 发表于 2014-11-9 23:06
学习了,简直膜拜
9#
macfee 发表于 2014-11-10 10:30
我来支持楼这的实际行动
10#
阿萨德22 发表于 2014-11-10 11:18
不明觉厉啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-2-18 18:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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