吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

简单字符解密CM的简单分析

[复制链接]
zapline 发表于 2009-7-27 20:11
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 zapline 于 2009-7-27 20:12 编辑

CM地址:http://bbs.52pojie.cn/thread-28917-1-1.html
有朋友让我写写过程 所以我简单的写一些

CM 无壳, VC编写,另外还有一个名为 mima 的文件
打开该文件 , 可以看到里面是一段加密数据

IDA,载入CM,在主函数的地方按一下F5
(不知写这个CM的怎么想的,里面很多重复无用的代码)
下面是F5出来的
int __cdecl main_0()
{
  size_t v1; // eax@1
  int v2; // eax@3
  FILE *v3; // eax@7
  size_t v4; // eax@13
  int v5; // eax@15
  size_t v6; // eax@19
  int v7; // eax@21
  size_t v8; // eax@25
  int v9; // eax@27
  char v10; // [sp+Ch] [bp-438h]@1
  char Buffer[500]; // [sp+24Ch] [bp-1F8h]@1
  size_t v12; // [sp+50h] [bp-3F4h]@1
  signed int v13; // [sp+54h] [bp-3F0h]@1
  signed int v14; // [sp+4Ch] [bp-3F8h]@3
  FILE *File; // [sp+440h] [bp-4h]@7
  char Str2; // [sp+58h] [bp-3ECh]@10

  memset(&v10, -858993460, 0x438u);
  printf("请输入密码:");
  gets(Buffer);
  v12 = strlen(Buffer);
  v1 = strlen(Buffer);
  sub_401A30(v1);
  v13 = 23;
  while ( v13 < 684 )
  {
    v2 = rand();
    sub_401A30(v2);
    v14 = 0;
    while ( v14 < (signed int)v12 )
      Buffer[v14++] += rand();
    v13 += 2;
  }
  v3 = fopen("mima", L"r");
  File = v3;
  if ( !v3 )
  {
    printf("文?);
    exit(1);
  }
  fgets(&Str2, 500, File);
  if ( strcmp(Buffer, &Str2) )
    printf("密码错?);
  else
    printf("密码?);
  v12 = strlen(Buffer);
  v4 = strlen(Buffer);
  sub_401A30(v4);
  v13 = 23;
  while ( v13 < 684 )
  {
    v5 = rand();
    sub_401A30(v5);
    v14 = 0;
    while ( v14 < (signed int)v12 )
      Buffer[v14++] += rand();
    v13 += 2;
  }
  v12 = strlen(Buffer);
  v6 = strlen(Buffer);
  sub_401A30(v6);
  v13 = 23;
  while ( v13 < 684 )
  {
    v7 = rand();
    sub_401A30(v7);
    v14 = 0;
    while ( v14 < (signed int)v12 )
      Buffer[v14++] += rand();
    v13 += 2;
  }
  v12 = strlen(Buffer);
  v8 = strlen(Buffer);
  sub_401A30(v8);
  v13 = 23;
  while ( v13 < 684 )
  {
    v9 = rand();
    sub_401A30(v9);
    v14 = 0;
    while ( v14 < (signed int)v12 )
      Buffer[v14++] += rand();
    v13 += 2;
  }
  fclose(File);
  printf("按任意?);
  sub_40D300();
  return _chkesp();
}
有用的就前面一些了
  printf("请输入密码:");
  gets(Buffer);
  v12 = strlen(Buffer);
  v1 = strlen(Buffer);
  sub_401A30(v1);
  v13 = 23;
  while ( v13 < 684 )
  {
    v2 = rand();
    sub_401A30(v2);
    v14 = 0;
    while ( v14 < (signed int)v12 )
      Buffer[v14++] += rand();
    v13 += 2;
  }
  v3 = fopen("mima", L"r");
  File = v3;
  if ( !v3 )
  {
    printf("文?);
    exit(1);
  }
  fgets(&Str2, 500, File);
  if ( strcmp(Buffer, &Str2) )
    printf("密码错?);
  else
    printf("密码?);
它是把输入的字符串加密后,再与密文进行比较
根据rand函数想像一下,或者看过srand函数的就可以判断出sub_401A30其实是srand函数了
不知道是srand也没关系,可以像发CM那个帖子里我写的那段代码那样,自己写两个函数
加密算法如下:
len = strlen(the_input);
        srand(len);
        n = 23;
        while ( n < 684 )
        {
                x = rand();
                srand(x);
                num = 0;
                while ( num < len )
                {
                        the_string[num++] += rand();
                }
                n += 2;
        }
所以,解密算法就是将the_string[num++] += rand();处的加号改成减号
完整的解密源码如下:
#include "stdio.h"
#include "windows.h"
#include "string.h"
void main()
{
        char a[500]="";
        unsigned x,num,n,len;
        FILE *fp;
        fp = fopen("mima", "r");
        fgets(a, 500, fp);
        printf("%s\n",a);
        len = strlen(a);
        srand(len);
        n = 23;
        while ( n < 684 )
        {
                x = rand();
                srand(x);
                num = 0;
                while ( num < len )
                {
                        a[num++] -= rand();
                }
                n += 2;
        }
        printf("%s\n",a);
}

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

CHHSun 发表于 2009-7-27 21:53
膜拜F5,膜拜z
ps520 发表于 2009-7-28 13:15
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 04:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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