| 
注册时间2005-8-29
阅读权限20
最后登录1970-1-1UID2927 以武会友  
 
 该用户从未签到 | 
 
| 软件没有加壳,明码比较,很容易找到关键处, 
 0040F970  /$  53            push    ebx                              ;  算法CALL开始
 0040F971  |.  55            push    ebp
 0040F972  |.  56            push    esi
 0040F973  |.  57            push    edi
 0040F974  |.  BF 54C64100   mov     edi, 0041C654                    ;  ASCII "@!SDVXFGUHbvnc908 *&)5 fjd095j90kcf ja%JKeSFAKDJSLJgJDF 2k34lsdjfkldjf jdsklfjadskgl;jafdkl;gjasdkl;r568r;jvggfl;kd4ui12098  vlkjfdlk;sfjgklfdgjlejt03456erjgrj"
 0040F979  |.  83C9 FF       or      ecx, FFFFFFFF
 0040F97C  |.  33C0          xor     eax, eax
 0040F97E  |.  F2:AE         repne   scas byte ptr es:[edi]
 0040F980  |.  F7D1          not     ecx
 0040F982  |.  49            dec     ecx
 0040F983  |.  8BF8          mov     edi, eax
 0040F985  |.  8BF0          mov     esi, eax
 0040F987  |.  74 26         je      short 0040F9AF
 0040F989  |.  8D99 53C64100 lea     ebx, [ecx+41C653]
 0040F98F  |>  0FBE86 54C641>/movsx   eax, byte ptr [esi+41C654]      ;  取密串中的开始一个字符
 0040F996  |.  0FBE13        |movsx   edx, byte ptr [ebx]             ;  取密串结尾一个字符
 0040F999  |.  0FAFC2        |imul    eax, edx                        ;  两个相乘放EAX
 0040F99C  |.  03C7          |add     eax, edi                        ;  加上EDI
 0040F99E  |.  33D2          |xor     edx, edx                        ;  EDX清零,准备放/结果
 0040F9A0  |.  BF 00286BEE   |mov     edi, EE6B2800                   ;  EDI赋值ee6b2800
 0040F9A5  |.  F7F7          |div     edi                             ;  eax/edi,改变edx
 0040F9A7  |.  46            |inc     esi                             ;  向前移动开始指针指向下一个
 0040F9A8  |.  4B            |dec     ebx                             ;  向后移动结尾指针,指向上一个
 0040F9A9  |.  3BF1          |cmp     esi, ecx                        ;  比较是否移动完
 0040F9AB  |.  8BFA          |mov     edi, edx                        ;  edi保存最终计算结果
 0040F9AD  |.^ 72 E0         \jb      short 0040F98F                  ;  edi==0011C198
 0040F9AF  |>  8B4424 14     mov     eax, [esp+14]
 0040F9B3  |.  33F6          xor     esi, esi
 0040F9B5  |.  8B18          mov     ebx, [eax]                       ;  用户名地址放ebx
 0040F9B7  |.  8B6B F8       mov     ebp, [ebx-8]                     ;  用户名长度放ebp
 0040F9BA  |.  85ED          test    ebp, ebp                         ;  测试是否输入了用户名
 0040F9BC  |.  7E 26         jle     short 0040F9E4
 0040F9BE  |>  8BC6          /mov     eax, esi
 0040F9C0  |.  33D2          |xor     edx, edx
 0040F9C2  |.  F7F1          |div     ecx                             ;  ecx是上面加密串的长度
 0040F9C4  |.  0FBE82 54C641>|movsx   eax, byte ptr [edx+41C654]      ;  取加密串开始的一个字符到eax
 0040F9CB  |.  0FBE1433      |movsx   edx, byte ptr [ebx+esi]         ;  取用户名的一个字符到edx
 0040F9CF  |.  0FAFC2        |imul    eax, edx                        ;  两个相乘放eax
 0040F9D2  |.  03C7          |add     eax, edi                        ;  eax再加上上面循环计算的结果
 0040F9D4  |.  33D2          |xor     edx, edx                        ;  清除edx
 0040F9D6  |.  BF 00286BEE   |mov     edi, EE6B2800
 0040F9DB  |.  F7F7          |div     edi                             ;  除Edi结果在edx:eax
 0040F9DD  |.  46            |inc     esi
 0040F9DE  |.  3BF5          |cmp     esi, ebp                        ;  和用户名长度比较
 0040F9E0  |.  8BFA          |mov     edi, edx                        ;  edi放最张结果
 0040F9E2  |.^ 7C DA         \jl      short 0040F9BE
 0040F9E4  |>  8BC7          mov     eax, edi                         ;  edi是最后结果,通过EAX返回
 0040F9E6  |.  5F            pop     edi
 0040F9E7  |.  5E            pop     esi
 0040F9E8  |.  5D            pop     ebp
 0040F9E9  |.  5B            pop     ebx
 0040F9EA  \.  C3            retn
 
 
 
 复制代码
/****
 * 代码本地校验软件A Real Validator
 *  [url]http://arealvalidator.com/download/arv112.msi[/url]
    * 软件名称:A Real Validator
    * 开发者主页:[url]www.arealvalidator.com[/url]
    * 软件大小:2.28MB
    * 安装环境:Microsoft Windows 95/98/Me/NT4/2000/xp ;IE 4.0 以上浏览器
    * 版本:1.12(30天试用版)
 * 软件说明
 * 我们在制作符合web标准网站的过程中,
 * 总要不断的到W3C网站来校验自己制作的页面是否符合XHTML 1.0,这样比较麻烦。
 * A Real Validator就是一款本地校验软件,允许你在本机直接校验页面而不需要再联网校验,
 * 它校验的结果与W3C完全一致。
 */
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
  char * about = "\
  ***************************************\n\
  A Real Validator V1.12\n\
  代码本地校验软件注册机\n\
  作者: surge[PYG]\n\
  ***************************************\n";  
  char * key = "@!SDVXFGUHbvnc908 *&)5 fjd095j90kcf ja%JKeSFAKDJSLJgJDF 2k34lsdjfkldjf jdsklfjadskgl;jafdkl;gjasdkl;r568r;jvggfl;kd4ui12098  vlkjfdlk;sfjgklfdgjlejt03456erjgrj";
  int i=0;
  int j=0;
  int num=0;
  int k=0;
  int z=0;
  char username[256];
  printf(about);
  memset(username,0,sizeof(username));  
  printf("  输入用户名:");
  gets(username);
  num =strlen(key)-1;
  for(i=0,j=num; i<=num; i++,j--){
    z = (key[i]*key[j])+k;
    k = 0xee6b2800;
    k = z%k;
  }
  for(i=0; i<strlen(username); i++){
    z = key[i]*username[i]+k;
    k = 0xee6b2800;
    k = z%k;
  }
  printf("  注册码是: %d\n",k);
  getchar();
  return 0;
}
 | 
 |