枭晓岚 发表于 2017-1-15 11:52

【代发】三分钟内写的CM,求追码

本帖最后由 枭晓岚 于 2017-1-15 12:26 编辑

发一个CM,没有调用任何不可解的算法, 就采用了几句加减乘除,全部加起来不超过十句代码 ,爆破不算
另外:@三千亿少女的梦 大菜比师傅,你HD的本地DLL外链失效了~
楼下有作者补的链接

我是一只小白 发表于 2017-1-15 12:14

补一波链接

爱阴湿毯 发表于 2017-1-15 14:25

密码1234鉴定完毕{:6_221:}

Icc 发表于 2017-1-15 16:20



本菜能力有限
只能爆破了。。。
话说回来
爆破点挺多的233

李沉舟 发表于 2017-1-15 16:57

大致搞明白了,程序输入注册码,加上0040112A这个函数的返回值,然后减去的值,结果(绝对值)要等于0,否则失败。

那个0040112A函数我逆向出来了,不过的生成算法还有待逆向。

目前成功了一次。


那个0040112A函数:
unsigned int func1(int a1, int a2) //这个函数里面居然有VMP保护标记,但是没有加壳,也是醉了
{
    unsigned int result;
    unsigned long int v3;
    unsigned long int *p = &v3;
    if ( a2 >= a1 )
    {
      _asm
      {
            pushad
            mov esi,p
            rdtsc
            mov dword ptr,eax
            mov dword ptr,edx
            popad
      } //__rdstc,取纳秒数

      result = a1 + (23 * (signed int)v3 + 7) % (unsigned int)(a2 - a1 + 1);
    }
    else
    {
      result = 0;
    }
    return result;
}

Sky__Mo 发表于 2017-1-15 17:32

注册码输入的时候 会依次进行不同的变换 第一位数 31二位 63三位 96依次 输入 依次会不同
把注册码转换为 16进制压入十进制9999    压入1   
运算   最后与 十进制 65进行比较

李沉舟 发表于 2017-1-15 17:40

我还以为是很复杂的算法,只能怪易语言的浮点运算啊。唉先贴上两个函数,我还原出来的。

大概验证就是这个流程,首先,编辑框有一个OnKeyDown事件,每当按下一个键的时候,就把键代码和原有的一个全局变量的值相加,这个是浮点运算,搞得我分析半天,汗……然后就是比较,会调用一个函数,得到系统启动的纳秒数,然后进行一系列运算,详情看我贴出的func1函数(C++描述),再把编辑框里输入的注册码转换成双精度小数型(double),所得到的值和那个func1的返回值相加,结果再减去全局变量的值。如果相等,则注册成功,否则注册失败。

所以,综上所述,我觉得注册机是没戏的……

unsigned int func1(int a1, int a2) //这个函数里面居然有VMP保护标记,但是没有加壳,也是醉了
{
    unsigned int result;
    unsigned long int v3;
    unsigned long int *p = &v3;
    if ( a2 >= a1 )
    {
      _asm
      {
            pushad
            mov esi,p
            rdtsc
            mov dword ptr,eax
            mov dword ptr,edx
            popad
      } //__rdstc,取纳秒数
      result = a1 + (23 * (signed int)v3 + 7) % (unsigned int)(a2 - a1 + 1);
    }
    else
    {
      result = 0;
    }
    return result;
}

long int turn(int a1, int dword_4A45B0) //应该是编辑框的OnKeyDown事件,每当有键按下时,就把键值和原有的数据相加
{
long int result;
result = long int((double)dword_4A45B0 + (double)a1);
dword_4A45B0 = result;
return result;
}

李沉舟 发表于 2017-1-15 17:42

本帖最后由 镜中神无 于 2017-1-15 17:44 编辑

我还以为是很复杂的算法,只能怪易语言的浮点运算啊。唉先贴上两个函数,我还原出来的。
不好意思,网络卡了,发了两次,汗……
大概验证就是这个流程,首先,编辑框有一个OnKeyDown事件,每当按下一个键的时候,就把键代码和原有的一个全局变量的值相加,把结果保存到全局变量,这个是浮点运算,搞得我分析半天,汗……然后就是比较,会调用一个函数,得到系统启动的纳秒数,然后进行一系列运算,详情看我贴出的func1函数(C++描述),再把编辑框里输入的注册码转换成双精度小数型(double),所得到的值和那个func1的返回值相加,结果再减去全局变量的值。如果相等,则注册成功,否则注册失败。

所以,综上所述,我觉得注册机是没戏的……那个追码什么的也感觉没戏啊,我特么总感觉这个CM是不可能注册成功的。

unsigned int func1(int a1, int a2) //这个函数里面居然有VMP保护标记,但是没有加壳,也是醉了
{
    unsigned int result;
    unsigned long int v3;
    unsigned long int *p = &v3;
    if ( a2 >= a1 )
    {
      _asm
      {
            pushad
            mov esi,p
            rdtsc
            mov dword ptr,eax
            mov dword ptr,edx
            popad
      } //__rdstc,取纳秒数
      result = a1 + (23 * (signed int)v3 + 7) % (unsigned int)(a2 - a1 + 1);
    }
    else
    {
      result = 0;
    }
    return result;
}

long int turn(int a1, int dword_4A45B0) //应该是编辑框的OnKeyDown事件,每当有键按下时,就把键值和原有的数据相加
{
long int result;
result = long int((double)dword_4A45B0 + (double)a1);
dword_4A45B0 = result;
return result;
}

我是一只小白 发表于 2017-1-15 17:44

Sky__Mo 发表于 2017-1-15 17:32
注册码输入的时候 会依次进行不同的变换 第一位数 31二位 63三位 96依次 输入 依次会不同
把注册码 ...

分析的不对,test指令和cmp指令是不一样的。别的你再试试就能看出一些问题{:5_124:}

李沉舟 发表于 2017-1-15 17:48

我是一只小白 发表于 2017-1-15 17:44
分析的不对,test指令和cmp指令是不一样的。别的你再试试就能看出一些问题

兄弟,看看我分析的对吗。我缺HB啊,想买改名卡
页: [1] 2 3
查看完整版本: 【代发】三分钟内写的CM,求追码