解密试分析(本文在看雪论坛已经发布过,只是本人收藏在此)

来源:互联网 发布:基调网络监测挂机 编辑:程序博客网 时间:2024/06/06 09:18
【文章标题】:  解密试分析
【文章作者】: 北极狐狸
【作者邮箱】: eug3@163.com
【作者主页】: nothing
【作者QQ号】: 87201014
【软件名称】: 应答此贴(http://bbs.pediy.com/showthread.php?t=55973)
【软件大小】: 1.81M
【下载地址】: 求助应答
【加壳方式】: nothing
【保护方式】: nothing
【编写语言】: Borland Delphi 4.0 - 5.0
【使用工具】: PeID v0.95,OllyDbg v1.10
【操作平台】: winxp
【软件介绍】:  双色球
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
 单步执行找到算法计算处
  我看这个算法的时候没有用什么流行的方法!由于大多都不会!
  下面的是算法的主要内容!
  0048AF2D  |> /8B4D EC       /mov     ecx, dword ptr [ebp-14]             ;计数器 0~15 (注册号是16位的)
  0048AF30  |. |BA 09000000   |mov     edx, 9                              ;这个数字是用来计算的(在下面我称它为a).. 下面雷同
  0048AF35  |. |8B45 F4       |mov     eax, dword ptr [ebp-C]              ;这是个也是用于计算的(在下面我称它为b)...{二进制16}
  0048AF38  |. |E8 73F6FFFF   |call    0048A5B0                            ;这里应该跟进的....
  0048AF3D  |. |8A4405 D2     |mov     al, byte ptr [ebp+eax-2E] ;这里用到机器码,安计算出的数字选泽相对应得数
                                                                    ;比如:
                                                                    ;call 中计算出是2 选择机器码中第2个为计算结果
                                                                   ;以下前三个call计算雷同!
  0048AF41  |. |8845 E7       |mov     byte ptr [ebp-19], al
  0048AF44  |. |8B4D EC       |mov     ecx, dword ptr [ebp-14]
  0048AF47  |. |BA 05000000   |mov     edx, 5
  0048AF4C  |. |8B45 F4       |mov     eax, dword ptr [ebp-C]
  0048AF4F  |. |E8 5CF6FFFF   |call    0048A5B0
  0048AF54  |. |8A4405 D2     |mov     al, byte ptr [ebp+eax-2E]
  0048AF58  |. |8845 E6       |mov     byte ptr [ebp-1A], al
  0048AF5B  |. |8B4D EC       |mov     ecx, dword ptr [ebp-14]
  0048AF5E  |. |BA 02000000   |mov     edx, 2
  0048AF63  |. |8B45 F4       |mov     eax, dword ptr [ebp-C]
  0048AF66  |. |E8 45F6FFFF   |call    0048A5B0
  0048AF6B  |. |8A4405 D2     |mov     al, byte ptr [ebp+eax-2E]
  0048AF6F  |. |8845 E5       |mov     byte ptr [ebp-1B], al
  0048AF72  |. |8B4D EC       |mov     ecx, dword ptr [ebp-14]
  0048AF75  |. |BA 08000000   |mov     edx, 8
  0048AF7A  |. |8B45 F0       |mov     eax, dword ptr [ebp-10]      ;此值为19(二进制)
  0048AF7D  |. |E8 2EF6FFFF   |call    0048A5B0                    ;以下两call的计算结果是在密码表中选对应的结果
  0048AF82  |. |BA 50B04800   |mov     edx, 0048B050                密码表地址 0048B050~0048B063
  0048AF87  |. |8A4402 FF     |mov     al, byte ptr [edx+eax-1]
  0048AF8B  |. |8845 E4       |mov     byte ptr [ebp-1C], al
  0048AF8E  |. |8B4D EC       |mov     ecx, dword ptr [ebp-14]
  0048AF91  |. |BA 01000000   |mov     edx, 1
  0048AF96  |. |8B45 F0       |mov     eax, dword ptr [ebp-10]
  0048AF99  |. |E8 12F6FFFF   |call    0048A5B0
  0048AF9E  |. |BA 50B04800   |mov     edx, 0048B050
  0048AFA3  |. |8A4402 FF     |mov     al, byte ptr [edx+eax-1]
  0048AFA7  |. |8845 E3       |mov     byte ptr [ebp-1D], al       --------------
  0048AFAA  |. |33C0          |xor     eax, eax                                 |
  0048AFAC  |. |8A45 E4       |mov     al, byte ptr [ebp-1C]                    |
  0048AFAF  |. |33D2          |xor     edx, edx                                 |
  0048AFB1  |. |8A55 E7       |mov     dl, byte ptr [ebp-19]
  0048AFB4  |. |F7EA          |imul    edx
  0048AFB6  |. |33D2          |xor     edx, edx
  0048AFB8  |. |8A55 E6       |mov     dl, byte ptr [ebp-1A]
  0048AFBB  |. |33C9          |xor     ecx, ecx                       ;   这之间的计算是{[ebp-1C]*[ebp-19]+[ebp-1A]*[ebp-1D]+[ebp-1B]}/10的余数
  0048AFBD  |. |8A4D E3       |mov     cl, byte ptr [ebp-1D]
  0048AFC0  |. |0FAFD1        |imul    edx, ecx                         ; 这边的计算时把机器码的字符换成ASCII码!
  0048AFC3  |. |03C2          |add     eax, edx
  0048AFC5  |. |33D2          |xor     edx, edx
  0048AFC7  |. |8A55 E5       |mov     dl, byte ptr [ebp-1B]                     |
  0048AFCA  |. |03C2          |add     eax, edx                                  |
  0048AFCC  |. |B9 0A000000   |mov     ecx, 0A                                   |
  0048AFD1  |. |33D2          |xor     edx, edx                                  |
  0048AFD3  |. |F7F1          |div     ecx                       -----------------
  0048AFD5  |. |8955 E8       |mov     dword ptr [ebp-18], edx
  0048AFD8  |. |8B45 E8       |mov     eax, dword ptr [ebp-18]
  0048AFDB  |. |E8 00F6FFFF   |call    0048A5E0
  0048AFE0  |. |8B55 F8       |mov     edx, dword ptr [ebp-8]
  0048AFE3  |. |8B4D EC       |mov     ecx, dword ptr [ebp-14]
  0048AFE6  |. |88440A 01     |mov     byte ptr [edx+ecx+1], al
  0048AFEA  |. |FF45 EC       |inc     dword ptr [ebp-14]
  0048AFED  |. |837D EC 10    |cmp     dword ptr [ebp-14], 10
  0048AFF1  |.^/0F85 36FFFFFF /jnz     0048AF2D
  
  
  -----------------------------------------------------------------------
  下面是跟进的内容
  0048A5B0  /$  55            push    ebp
  0048A5B1  |.  8BEC          mov     ebp, esp
  0048A5B3  |.  83C4 F0       add     esp, -10
  0048A5B6  |.  894D F4       mov     dword ptr [ebp-C], ecx
  0048A5B9  |.  8955 F8       mov     dword ptr [ebp-8], edx
  0048A5BC  |.  8945 FC       mov     dword ptr [ebp-4], eax
  0048A5BF  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
  0048A5C2  |.  0345 F4       add     eax, dword ptr [ebp-C]
  0048A5C5  |.  99            cdq
  0048A5C6  |.  F77D FC       idiv    dword ptr [ebp-4]
  0048A5C9  |.  8955 F0       mov     dword ptr [ebp-10], edx
  0048A5CC  |.  837D F0 00    cmp     dword ptr [ebp-10], 0
  0048A5D0  |.  75 06         jnz     short 0048A5D8
  0048A5D2  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  0048A5D5  |.  8945 F0       mov     dword ptr [ebp-10], eax
  0048A5D8  |>  8B45 F0       mov     eax, dword ptr [ebp-10]
  0048A5DB  |.  8BE5          mov     esp, ebp
  0048A5DD  |.  5D            pop     ebp
  0048A5DE  /.  C3            retn
  
  
  这个计算没有什么大用处!
  主要是把 (a+计数器值)/b的余数作为结果返回
  --------------------------------------------------------------------------
  复制下面的代码放入 文本文件中后缀名改为vbs 双击执行.为注册机
  --------------------------------------------------------------------------
  db=array(211,162,186,192,203,171,201,171,199,242,214,208,189,177,180,243,202,166,32,0)
dim strar(16)
  dim temp(16)
  str1=inputbox("输入机器码"," 双色球中奖 ------计算器")
  for i = 0 to 15
  strar(i)=left(str1,1)
  str1=right(str1,len(str1)-1)
  next
  for i = 0 to 15
  
  a=(9+i) mod 16
  if a=0 then
  a=16
  end if
  
  b=(5+i) mod 16
  if b=0 then
  b=16
  end if
  
  c=(2+i) mod 16
  if c=0 then
  c=16
  end if
  
  d=(8+i) mod 19
  if d=0 then
  d=19
  end if
  
  e=(1+i) mod 19
  if e=0 then
  e=19
  end if 
  an= p(strar(a-1))
  bn= p(strar(b-1))
  cn= p(strar(c-1))
  dn=db(d-1)
  en=db(e-1)
  temp(i)=(dn*an+bn*en+cn) mod 10
  temps=temps & temp(i)
  next

  i=inputbox("注册码"," 双色球中奖 ------计算器", temps)
  
  Public function p(s)
  select case s
   case 0
   p=asc("0")
   case 1
   p=asc("1")
   case 2
   p=asc("2")
   case 3
   p=asc("3")
   case 4
   p=asc("4")
   case 5
   p=asc("5")
   case 6
   p=asc("6")
   case 7
   p=asc("7")
   case 8
   p=asc("8")
   case 9
   p=asc("9")
  end select
  end function 
  
--------------------------------------------------------------------------------
【经验总结】
  仔细慢慢分析,连蒙代猜!就可以读懂代码了!
  
-------------------------------------------------------------------------------- 
原创粉丝点击