一个国产文件夹锁的注册算法简单分析

主程序加了简单的壳:
ASPack 2.12 -> Alexey Solodovnikov

没想脱,直接搜索:
push 0
retn

然后在retn上下断,F9运行,然后再单步就到了程序的OEP了,呵呵

让程序运行起来,随意的输入假码,利用万能断点就能找到程序的算法关键所在!
这是一个典型的查表注册机制,代码如下:


00586D5B     8B45 FC       mov eax,dword ptr ss:[ebp-4]        ; 将EAX指向机器码
00586D5E     0FB64438 FF   movzx eax,byte ptr ds:[eax+edi-1]   ; 以EDI为索引逐一取机器码的ASCII值
00586D63     2B45 F0       sub eax,dword ptr ss:[ebp-10]
00586D66     03C7          add eax,edi
00586D68     8B55 F8       mov edx,dword ptr ss:[ebp-8]        ; 将EDX指向用户名
00586D6B     0FB6541A FF   movzx edx,byte ptr ds:[edx+ebx-1]   ; 以EBX不索引逐一取用户名的ASCII码值
00586D70     33C2          xor eax,edx                         ; 将两者进行或运算
00586D72     03C3          add eax,ebx                         ; 加上用户名的索引值(从1开始)
00586D74     99            cdq
00586D75     33C2          xor eax,edx
00586D77     2BC2          sub eax,edx
00586D79     8BF0          mov esi,eax
00586D7B     8BC6          mov eax,esi
00586D7D     B9 24000000   mov ecx,24
00586D82     99            cdq
00586D83     F7F9          idiv ecx                            ; 除以0x24求余
00586D85     8BF2          mov esi,edx
00586D87     8D45 E0       lea eax,dword ptr ss:[ebp-20]
00586D8A     8A96 90C75A00 mov dl,byte ptr ds:[esi+5AC790]     ; 将余数作为索引从字符表中取字符
00586D90     E8 07DEF8FF   call etdirloc.00514B9C
00586D95     8B55 E0       mov edx,dword ptr ss:[ebp-20]
00586D98     8D45 E4       lea eax,dword ptr ss:[ebp-1C]
00586D9B     E8 DCDEF8FF   call etdirloc.00514C7C
00586DA0     3B7D EC       cmp edi,dword ptr ss:[ebp-14]       ; 判断是否超出机器码长度
00586DA3     7D 03         jge short etdirloc.00586DA8
00586DA5     47            inc edi                             ; 不是则增1
00586DA6     EB 05         jmp short etdirloc.00586DAD
00586DA8     BB 01000000   mov ebx,1                           ; 否则将用户名的索引设为1,
00586DAD     3B5D E8       cmp ebx,dword ptr ss:[ebp-18]       ; 判断是否超出用户名长度
00586DB0     7D 03         jge short etdirloc.00586DB5
00586DB2     43            inc ebx                             ; 不是则增1
00586DB3     EB 05         jmp short etdirloc.00586DBA
00586DB5     BB 01000000   mov ebx,1
00586DBA     FF45 F0       inc dword ptr ss:[ebp-10]
00586DBD     837D F0 15    cmp dword ptr ss:[ebp-10],15
00586DC1   ^ 75 98         jnz short etdirloc.00586D5B

通过mov dl,byte ptr ds:[esi+5AC790] 这句,我们可以知道,所要查找表的是在位置5AC790处:


005AC790  30 43 4D 35 45 51 39 52 50 5A 36 44 56 34 42 33  0CM5EQ9RPZ6DV4B3
005AC7A0  55 4C 43 37 59 53 47 38 4B 46 4E 41 31 48 49 47  ULC7YSG8KFNA1HIG
005AC7B0  32 4A 4F 54 00 00 00 00                          2JOT....

存放在一个全局变量里,呵呵!
现在可以动手写注册机了,代码如下是:


#include
#include
using namespace std;

const char gString[]="0CM5EQ9RPZ6DV4B3ULC7YSG8KFNA1HIG2JOT";

int main()
{
  cout<<"不支持用户名中带空格!\n";
  char username[20]={0};
  cout<<"请输入你的用户名:";
  cin>>username;

  char strM[32]={0};
  cout<<"请输入你的机器码:";
  cin>>strM;

  cout<<"你的注册码是:(填写时请按5位一组填写)\n";
  char strCode[32]={0};
  
  int len=strlen(username);
  for(int i=0,j=0;i<20;i++){
    int tmp=strM[i] ^ username[j];
    tmp+=(j+1);
    tmp %= 0x24;
    strCode[i]=gString[tmp];
    j++;
    if(j>=len)
      j=0;
  }
  cout<
  return 0;
}

在我电脑上运行如下([color=#0000FF]注意是在命令行下运行[/color]):


G:\TDDOWNLOAD>keyGen
不支持用户名中带空格!
请输入你的用户名:iawen
请输入你的机器码:1412101181315857262915313
你的注册码是:(填写时请按5位一组填写)
L3C71C6CF176JFK8427Y

即注册码为:[color=#FF0000]L3C71-C6CF1-76JFK-8427Y[/color]

点击下载注册机:
keyGen.rar

“一个国产文件夹锁的注册算法简单分析”的10个回复

  1. 网上没有新的破解,找到的都是注册之后,然后运行都会自动关闭在注册的,如果可以能麻烦你在破一下v6.7.1.1吗?谢谢!

    iawen于2009-04-25 21:03:23回复:

    最近恐怕没时间,要等一阵子再看了,呵呵

  2. 你好,注册成功之后,在运行的时候会自动关闭,然后在运行的时候又要重新注册,有什么好的解决办法吗?谢谢!

    iawen于2009-04-24 20:53:01回复:

    汗,已经N久了,不记得了哦!去网上搜索一下,看看有没有新的破解版

  3. 还是得麻烦您!

    感谢您给我算了注册码,但仍未注册成功!!不但如此,还出现了一个新问题,我发现,下载的绿色版本的软件都不能在后台运行,也就是说,只要一点“关闭”,程序就自动退出了,这样是无论如何也起不到保护作用的!我原来还担心是杀软的问题,为此,我重装了系统,在安装杀软前运行软件,也一样不能驻留内存,不知是什么原因。

    还有,如果可能的话,麻烦您把包含注册机的软件给我发一个完整的压缩包好吗?我的邮箱是:ssqh@163.com。我的QQ:10548756,联系我好吗?

    再次感谢您!

  4. 再次留言!

    已在CMD命令下解决了窗口停留问题,但是,所得出的注册码并没有注册成功!!!!

    唉,伤心啊

    若博主肯费心,我的注册码为:915231192343;注册姓名:sqh(或你随便取一个也行),我将非常感谢!

    iawen于2009-02-05 10:28:15回复:

    注册机已经修改过,要在软件下载页面下!还有请注意软件版本。我用你提供的算的是:5IGI2-NGM8H-TKJIG-KFG8Y
    如果不行,请将用户名长度增长!

  5. 按您说的运行程序,输入用户名和机器码,回车后窗口不见了,根本就没看见注册码

    iawen于2009-02-04 23:31:51回复:

    请在控制台命令行下运行

  6. 这个可以成功注册电脑锁2007,但是注册不了文件夹锁2006,说注册码非法。请站长做个文件夹锁2006的keygen,感谢之极!

    iawen于2009-01-04 09:55:09回复:

    是需要算2次的,而不是同个一个注册码!
    2个的机器码是不相同的!在我电脑上测试OK的

发表评论