吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4322|回复: 2
收起左侧

[分享] zapline转载CM(第十天)分析

[复制链接]
yangjt 发表于 2009-2-6 11:00
先说明昂……半原创,算法分析是自己来得……注册机不会写……从网上so来的……

看到这个东西我就晕倒了……=.=咳……

直接IDA对付……

载入后找到处理窗口回调的地方……,在这里……
CODE:004010CE ; signed int __stdcall WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM a4)
CODE:004010CE WndProc         proc near               ; DATA XREF: start+5Eo
CODE:004010CE
CODE:004010CE hWnd            = dword ptr  8
CODE:004010CE iMsg            = dword ptr  0Ch
CODE:004010CE wParam          = dword ptr  10h
然后F5之,修修改改后代码变成了这样……嗯……我这篇文章唯一有用的地方就在这里了……好好看哦~~
signed int __stdcall WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM a4)
{
  UINT ST10_4_0; // ST10_4@0
  signed int result; // eax@4
  int pIndex; // esi@7
  int index; // ecx@8

  if ( iMsg == WM_COMMAND )
  {
    if ( wParam == 1 )                                          //  If the message is from an accelerator, this value is 1
                                                                // 即鼠标点击……
    {
      pIndex = 0;
      Temp = 0;
      Score = 0;                                                // 等于207102就成功……
      while ( 1 )
      {
        index = CharTable[pIndex];
        if ( index == 77 )
          break;
        Temp = CharTable[pIndex++];
        if ( IsDlgButtonChecked(hWnd, index) )
          Score += pIndex * CharTable[pIndex] * Temp;           // 做一些乘法和加法累加到某个地方……
      }
      if ( 77 * Score == 15946854 )                             // 这个地方等于多少?选中的东西经过某些运算等于207102就好了……可惜俺不会算……
      {
        MessageBoxA(
          0,
          "Congratulations! Please send a screenshot of your solution to duelist@beer.com!",
          "Duelist's Crackme #3",
          0x2000u);
        result = 1;
      }
看到这里我就晕倒了……嗯……不会做了……:'( 咳……不得不承认我数学水平之差……想了半个多小时也没想明白……:L
不过看到了CrackME的标题就想到办法了~~
既然是Duelist's Crackme #3 所以就百度之……果然让我找到了……

下面内容转自看雪……
  算法比较简单,地址[4020FE]处为一个19个字节的表0x16, 0x49, 0x5E, 0x15, 0x27, 0x26, 0x21, 0x25, 0x1D, 0x59, 0x53, 0x37, 0x31, 0x48, 0x5D, 0x0C, 0x61, 0x52, 0x4D。
  进一步跟踪发现各按钮对应的代号,为了和注册机一致,我把每个代号都减了1,18个按钮的代号如下:
  16  1   2   0   7   5   6  9  10
  3  11  12  13  14  15  17  4  8  
  如我用注册机算出的一个号码为25726,转化为二进制110010001111110,把对应1位的选中就可以了,如
   
  注册机源码如下:
  #include<iostream.h>
  void main()
  {
    long unsigned loop=262143;
    long unsigned i,itemp,EAX,count,sum;
    char table[19]={0x16, 0x49, 0x5E, 0x15, 0x27, 0x26, 0x21, 0x25, 0x1D, 0x59, 0x53, 0x37, 0x31, 
  
      0x48, 0x5D, 0x0C, 0x61, 0x52, 0x4D};
    for(i=0;i<loop;i++)
    {
      sum=0;
      count=0;itemp=i;
      do
      {
        if(itemp%2==1){EAX=table[count]*table[count+1]*(count+1);sum+=EAX;}
        count++;
        itemp/=2;
      }
      while(itemp);
      if(sum*0x4d==0xf35466)
      {
        cout<<i<<endl;
      }
    }
  }
  我只找到了一个正确答案,可能也只有一个正确答案。
可怜我到现在还是没看明白算法到底啥意思……:'(
:Q 咳……可怜的我……

[ 本帖最后由 yangjt 于 2009-2-6 11:04 编辑 ]

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

zapline 发表于 2009-2-6 13:41
[s:9] 分析得太不清楚了啊
zhang0101 发表于 2009-2-7 11:50
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 20:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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