sdrf5678lk 发表于 2011-4-30 10:37:23

发表下自己写的CrackMe

觉得论坛有点冷~
就想活跃一下哈哈~~
另外想发表下自己写的CrackMe,
一是想看看论坛大侠的算法分析能力。
二是希望大家指出我写的算法的不够地方。
1。都一个CrackMe是明码比较没有什么很难;
2. 第二CrackMe非明天比较的。
3.这个CrackMe也是没有有加壳,没有做防爆。因为我只是想和大家一起研究算法。也就什么也没有加了~
呵呵;):
4.这个CrackMe可以用任意的用户名进行注册,不像第一个CrackMe哪样限定了几个字符。

我说说我CrackMe思路:
1. 把用户名x进加密得到字符s。
2.把加密后在与用户名逻辑异或运算F;
3.在把X S F进行运算得到密文。
4.把注册码也做了个加密
5.最后两个加密的密文进行比较~
呵呵说的这么复杂~~
只认真看看就很容易写算法注册机了~~~~。

老万 发表于 2011-5-2 18:25:15

高手分析一下吧,LLLLLL。。。。。。555555

MOV 发表于 2011-5-2 20:42:06

我研究了下就是你输入的用户名的十六进制算出来的密文后为必须为双数
比如我输入用户名:az   real
                  53 59 62 56 53 3A                              
                  SY   bVS:
就拿 (r)来说明

r =b(经过算法计算得到的) = 62



这个call 00401201|.E8 FAFEFFFF   call    00401100是用户名计算出来的密和输入注册码计算出来密文作比较判断

好我们来看这个注册码计算关键代码:
004011D8|> /8A5404 30   /mov   dl, byte ptr 取假码
004011DC|. |0FBECA      |movsx   ecx, dl               
004011DF|. |81E1 0F000080 |and   ecx, 8000000F         取注册码十六进制与8000000F与为X1      比如 我输入 字符串 a = 61(十六进制)与8000000F进行与运算所以 ecx=1
004011E5|. |79 05         |jns   short 004011EC      
004011E7|. |49            |dec   ecx
004011E8|. |83C9 F0       |or      ecx, FFFFFFF0
004011EB|. |41            |inc   ecx
004011EC|> |02CA          |add   cl, dl               在就把注册码的十六进制+X1            dl= a =61 + X1=62(b)关键就是这里
004011EE|. |884C04 30   |mov   byte ptr , cl
004011F2|. |40            |inc   eax
004011F3|. |3BC6          |cmp   eax, esi
004011F5|.^\7C E1         \jl      short 00401

这样看就明白多了, 如果还不明白的就多调试几次 就明白了

就是输入用户名 (r)=通过用户名计算出来的密文(b(62))=   输入的注册码(a(61))=成功


月之精灵 发表于 2011-5-2 21:06:01

P
8

Nisy 发表于 2011-5-3 09:50:24

楼主可以多去玩下密码学库 三四行的代码 对于没基础过密码学库的人分析 将是非常痛苦的

PS: 有时间可以多接触写编程开发方面的东西

MOV 发表于 2011-5-3 10:00:53

和N大说的一样,你有很好的编程功底,多学习下密码学,那是很让人头痛的

sdrf5678lk 发表于 2011-5-3 12:10:04

~~
我正在学习~WIN32编程~
也看NISY
的C语言;

sdrf5678lk 发表于 2011-5-3 12:28:25

我开始时对注册码也进行了加密的用的是~~
jimei(char *s, char *y)
{
   int sum;
   while ( *s != '\0')
   {
       sum = *s%0X10;
       *s+=sum;
       s++;
   }
}
这样加出来的KEY2与用户名算出来的KEY2有很多是不相同的~。
要对KEY2作大量的判断处理.因此用间单的加密方式:
jimei(char *s, char *y)
{
   while ( *s != '\0')
   {
      *s +=1;
      s++;
   }
}
也是方便像我一样的新手可以写出注册机。。。。。/:018 /:018

lgjxj 发表于 2011-5-3 13:11:59

什么算法都不重要,关键如何让别人带KEY都无法爆破才是王道中的王道
(虽然没法做到,但还是尽可能去做)
页: [1]
查看完整版本: 发表下自己写的CrackMe