某机器人编程软件注册算法分析

本软件是一个机器人编程软件,VC6的程序,软件保护方式是每台机子有一个机器码,然后根据这个机器

码得到一个序列号。
入口:messageboxa
00423FC8  |.  50            push eax                                                     ;

/Arg2
00423FC9  |.  8B4D FC       mov ecx,dword ptr ss:[ebp-4]                                 ; |
00423FCC  |.  83C1 68       add ecx,68                                                   ; |
00423FCF  |.  51            push ecx                                                     ;

|Arg1
00423FD0  |.  E8 DBE5FDFF   call software.004025B0                                          

; /software.004025B0
00423FD5  |.  25 FF000000   and eax,0FF
00423FDA  |.  85C0          test eax,eax
00423FDC  |.  74 1E         je short software.00423FFC  <------爆破改这里改掉

密码写在注册表里
cur/software/roboto/
password=284248195480218

004015AF  |.  8985 F0FEFFFF mov dword ptr ss:[ebp-110],eax                               ; |
004015B5  |.  8D4D A8       lea ecx,dword ptr ss:[ebp-58]                                ; |
004015B8  |.  51            push ecx  <-----参数"kMPB3LAX5JTGE1M"
                                                 KMPB3LAX5JTGE1M                            

                      ; |Arg1
004015B9  |.  E8 84FCFFFF   call software.00401242                                          

; /这个call里出现了注册码,这个call就是计算注册码的地方,跟踪进去得到注册机算法
004015BE  |.  83C4 08       add esp,8

跟踪进去这个关键的call:
00401242  /$  55            push ebp
00401243  |.  8BEC          mov ebp,esp
00401245  |.  6A FF         push -1
00401247  |.  68 895A4300   push software.00435A89                              ;  SE

handler installation
0040124C  |.  64:A1 0000000>mov eax,dword ptr fs:[0]
00401252  |.  50            push eax
00401253  |.  64:8925 00000>mov dword ptr fs:[0],esp
0040125A  |.  83EC 24       sub esp,24
0040125D  |.  C745 D0 00000>mov dword ptr ss:[ebp-30],0
00401264  |.  C745 FC 01000>mov dword ptr ss:[ebp-4],1
0040126B  |.  8D4D E0       lea ecx,dword ptr ss:[ebp-20]
0040126E  |.  E8 113A0300   call <jmp.&MFC42.#540>
00401273  |.  C645 FC 02    mov byte ptr ss:[ebp-4],2
00401277  |.  8D4D 0C       lea ecx,dword ptr ss:[ebp+C]
0040127A  |.  E8 C1120000   call software.00402540
0040127F  |.  8945 D8       mov dword ptr ss:[ebp-28],eax                   ;  机器码长度
00401282  |.  C745 D4 07000>mov dword ptr ss:[ebp-2C],7
00401289  |.  C745 F0 05000>mov dword ptr ss:[ebp-10],5
00401290  |.  C745 EC 03000>mov dword ptr ss:[ebp-14],3
00401297  |.  C745 E8 02000>mov dword ptr ss:[ebp-18],2
0040129E  |.  C745 E4 01000>mov dword ptr ss:[ebp-1C],1
004012A5  |.  C745 DC 00000>mov dword ptr ss:[ebp-24],0
004012AC  |.  EB 09         jmp short software.004012B7
004012AE  |>  8B45 DC       /mov eax,dword ptr ss:[ebp-24]
004012B1  |.  83C0 01       |add eax,1
004012B4  |.  8945 DC       |mov dword ptr ss:[ebp-24],eax
004012B7  |>  8B4D DC        mov ecx,dword ptr ss:[ebp-24]
004012BA  |.  3B4D D8       |cmp ecx,dword ptr ss:[ebp-28]                  ;  比较长度
004012BD  |.  0F8D 5F010000 |jge software.00401422
004012C3  |.  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
004012C6  |.  99            |cdq
004012C7  |.  B9 07000000   |mov ecx,7     //判断是否是7的倍数
004012CC  |.  F7F9          |idiv ecx
004012CE  |.  85D2          |test edx,edx
004012D0  |.  75 1C         |jnz short software.004012EE                        ; 
004012D2  |.  8B55 DC       |mov edx,dword ptr ss:[ebp-24]
004012D5  |.  52            |push edx                                       ; /Arg1
004012D6  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
004012D9  |.  E8 B2120000   |call <software.GetSysCodeBin>                      ; /得到每一

位,放在al里
004012DE  |.  0FBEC0        |movsx eax,al                                   ;  eax除了al外高

位清零
004012E1  |.  8B4D E4       |mov ecx,dword ptr ss:[ebp-1C]
004012E4  |.  03C8          |add ecx,eax
004012E6  |.  894D E4       |mov dword ptr ss:[ebp-1C],ecx                  ;  ebp_1c := k +

ebp_1c;
004012E9  |.  E9 94000000   |jmp software.00401382
004012EE  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
004012F1  |.  99            |cdq
004012F2  |.  B9 05000000   |mov ecx,5  <-----------------------判断是5的倍数
004012F7  |.  F7F9          |idiv ecx
004012F9  |.  85D2          |test edx,edx
004012FB  |.  75 19         |jnz short software.00401316
004012FD  |.  8B55 DC       |mov edx,dword ptr ss:[ebp-24]
00401300  |.  52            |push edx                                       ; /Arg1
00401301  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
00401304  |.  E8 87120000   |call <software.GetSysCodeBin>                      ;

/software.00402590
00401309  |.  0FBEC0        |movsx eax,al
0040130C  |.  8B4D E8       |mov ecx,dword ptr ss:[ebp-18]
0040130F  |.  03C8          |add ecx,eax
00401311  |.  894D E8       |mov dword ptr ss:[ebp-18],ecx
00401314  |.  EB 6C         |jmp short software.00401382
00401316  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
00401319  |.  99            |cdq
0040131A  |.  B9 03000000   |mov ecx,3<---------------------------判断是否是3的倍数
0040131F  |.  F7F9          |idiv ecx
00401321  |.  85D2          |test edx,edx
00401323  |.  75 19         |jnz short software.0040133E
00401325  |.  8B55 DC       |mov edx,dword ptr ss:[ebp-24]
00401328  |.  52            |push edx                                       ; /Arg1
00401329  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
0040132C  |.  E8 5F120000   |call <software.GetSysCodeBin>                      ;

/software.00402590
00401331  |.  0FBEC0        |movsx eax,al
00401334  |.  8B4D EC       |mov ecx,dword ptr ss:[ebp-14]
00401337  |.  03C8          |add ecx,eax
00401339  |.  894D EC       |mov dword ptr ss:[ebp-14],ecx
0040133C  |.  EB 44         |jmp short software.00401382
0040133E  |>  8B55 DC       |mov edx,dword ptr ss:[ebp-24]
00401341  |.  81E2 01000080 |and edx,80000001 《---------------判断是否大于等于0
00401347  |.  79 05         |jns short software.0040134E
00401349  |.  4A            |dec edx
0040134A  |.  83CA FE       |or edx,FFFFFFFE
0040134D  |.  42            |inc edx
0040134E  |>  85D2          |test edx,edx
00401350  |.  75 19         |jnz short software.0040136B
00401352  |.  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
00401355  |.  50            |push eax                                       ; /Arg1
00401356  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
00401359  |.  E8 32120000   |call <software.GetSysCodeBin>                      ;

/software.00402590
0040135E  |.  0FBEC8        |movsx ecx,al
00401361  |.  8B55 F0       |mov edx,dword ptr ss:[ebp-10]
00401364  |.  03D1          |add edx,ecx
00401366  |.  8955 F0       |mov dword ptr ss:[ebp-10],edx
00401369  |.  EB 17         |jmp short software.00401382
0040136B  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
0040136E  |.  50            |push eax                                       ; /Arg1
0040136F  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
00401372  |.  E8 19120000   |call <software.GetSysCodeBin>                      ;

/software.00402590
00401377  |.  0FBEC8        |movsx ecx,al
0040137A  |.  8B55 D4       |mov edx,dword ptr ss:[ebp-2C]
0040137D  |.  03D1          |add edx,ecx
0040137F  |.  8955 D4       |mov dword ptr ss:[ebp-2C],edx
00401382  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
00401385  |.  50            |push eax                                       ; /Arg1
00401386  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
00401389  |.  E8 02120000   |call <software.GetSysCodeBin>                      ;

/software.00402590
0040138E  |.  0FBEC8        |movsx ecx,al
00401391  |.  83E1 01       |and ecx,1
00401394  |.  85C9          |test ecx,ecx
00401396  |.  74 09         |je short software.004013A1
00401398  |.  8B55 E4       |mov edx,dword ptr ss:[ebp-1C]
0040139B  |.  83C2 01       |add edx,1
0040139E  |.  8955 E4       |mov dword ptr ss:[ebp-1C],edx
004013A1  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
004013A4  |.  50            |push eax                                       ; /Arg1
004013A5  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
004013A8  |.  E8 E3110000   |call <software.GetSysCodeBin>                      ;

/software.00402590
004013AD  |.  0FBEC8        |movsx ecx,al
004013B0  |.  83E1 02       |and ecx,2
004013B3  |.  85C9          |test ecx,ecx
004013B5  |.  74 09         |je short software.004013C0
004013B7  |.  8B55 E8       |mov edx,dword ptr ss:[ebp-18]
004013BA  |.  83C2 01       |add edx,1
004013BD  |.  8955 E8       |mov dword ptr ss:[ebp-18],edx
004013C0  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
004013C3  |.  50            |push eax                                       ; /Arg1
004013C4  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
004013C7  |.  E8 C4110000   |call <software.GetSysCodeBin>                      ;

/software.00402590
004013CC  |.  0FBEC8        |movsx ecx,al
004013CF  |.  83E1 04       |and ecx,4
004013D2  |.  85C9          |test ecx,ecx
004013D4  |.  74 09         |je short software.004013DF
004013D6  |.  8B55 EC       |mov edx,dword ptr ss:[ebp-14]
004013D9  |.  83C2 01       |add edx,1
004013DC  |.  8955 EC       |mov dword ptr ss:[ebp-14],edx
004013DF  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
004013E2  |.  50            |push eax                                       ; /Arg1
004013E3  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
004013E6  |.  E8 A5110000   |call <software.GetSysCodeBin>                      ;

/software.00402590
004013EB  |.  0FBEC8        |movsx ecx,al
004013EE  |.  83E1 08       |and ecx,8
004013F1  |.  85C9          |test ecx,ecx
004013F3  |.  74 09         |je short software.004013FE
004013F5  |.  8B55 F0       |mov edx,dword ptr ss:[ebp-10]
004013F8  |.  83C2 01       |add edx,1
004013FB  |.  8955 F0       |mov dword ptr ss:[ebp-10],edx
004013FE  |>  8B45 DC       |mov eax,dword ptr ss:[ebp-24]
00401401  |.  50            |push eax                                       ; /Arg1
00401402  |.  8D4D 0C       |lea ecx,dword ptr ss:[ebp+C]                   ; |
00401405  |.  E8 86110000   |call <software.GetSysCodeBin>                      ;

/software.00402590
0040140A  |.  0FBEC8        |movsx ecx,al
0040140D  |.  83E1 10       |and ecx,10
00401410  |.  85C9          |test ecx,ecx
00401412  |.  74 09         |je short software.0040141D
00401414  |.  8B55 D4       |mov edx,dword ptr ss:[ebp-2C]
00401417  |.  83C2 01       |add edx,1
0040141A  |.  8955 D4       |mov dword ptr ss:[ebp-2C],edx
0040141D  |>^ E9 8CFEFFFF   /jmp software.004012AE  《---------------大循环
00401422  |>  8B45 D4       mov eax,dword ptr ss:[ebp-2C]
00401425  |.  0C 5A         or al,5A
00401427  |.  50            push eax
00401428  |.  8B4D E4       mov ecx,dword ptr ss:[ebp-1C]
0040142B  |.  81F1 FA000000 xor ecx,0FA
00401431  |.  51            push ecx
00401432  |.  8B55 F0       mov edx,dword ptr ss:[ebp-10]
00401435  |.  52            push edx
00401436  |.  8B45 E8       mov eax,dword ptr ss:[ebp-18]
00401439  |.  83F0 5F       xor eax,5F
0040143C  |.  50            push eax
0040143D  |.  8B4D EC       mov ecx,dword ptr ss:[ebp-14]
00401440  |.  51            push ecx
00401441  |.  68 D0304400   push software.004430D0                              ;  ASCII "%

d%d%d%d%d"
00401446  |.  8D55 E0       lea edx,dword ptr ss:[ebp-20]
00401449  |.  52            push edx
0040144A  |.  E8 2F380300   call <jmp.&MFC42.#2818>
0040144F  |.  83C4 1C       add esp,1C
00401452  |.  8D45 E0       lea eax,dword ptr ss:[ebp-20]
00401455  |.  50            push eax
00401456  |.  8B4D 08       mov ecx,dword ptr ss:[ebp+8]                    ;  得到了序列号

 

做注册机

procedure TfrmMain.btnGenClick(Sender: TObject);
var
  ebp_2c: integer;
  ebp_24: integer;
  ebp_1c: integer;
  ebp_18: integer;
  ebp_14: integer;
  ebp_10: integer;
  BinCode: byte;    //系统码每一位
  SysCode: string;//系统码
  SerialNo: string; //注册码
  len: integer; //系统码长度
  i: integer;

  eax,ecx,edx: integer;
begin
  ebp_2c := 7;
  ebp_24 := 0;
  ebp_1c := 1;
  ebp_18 := 2;
  ebp_14 := 3;
  ebp_10 := 5;
  SysCode := trim(edtSysCode.Text);
  len := length(SysCode);
  for i := 0 to len - 1 do
  begin
    ebp_24 := i;
    binCode := Ord(sysCode[ebp_24+1]);
    if ebp_24 mod 7=0 then
        ebp_1c := binCode+ebp_1c
    else if ebp_24 mod 5 = 0 then
        ebp_18 := binCode + ebp_18
    else if ebp_24 mod 3 = 0 then
         ebp_14 := binCode + ebp_14
    else begin
     if ebp_24 and $80000001=0 then
        ebp_10 := bincode+ ebp_10
     else ebp_2c := binCode + ebp_2c;
    end;
         //binCode := Ord(sysCode[ebp_24+1]);
         //ebp_1c := binCode + ebp_1c;
      ecx := binCode;
      if ecx and 1<>0 then
           inc(ebp_1c);
      ecx := binCode and 2;
      if ecx <> 0 then
          inc(ebp_18);

      ecx := binCode and 4;
      if ecx<>0 then
          inc(ebp_14);

      ecx := binCode and 8;
      if ecx<>0 then
          inc(ebp_10);

      ecx := binCode and $10;
      if ecx<>0 then
          inc(ebp_2c);
    end;
    ecx := ebp_14;        //11C  284
    serialNo := IntToStr(ecx);
    eax := ebp_18 xor $5f;  //F8   248
    SerialNo := SerialNo + IntToStr(eax);
    edx := ebp_10;        //C3   195
    SerialNo := SerialNo + IntToStr(edx);
    ecx := ebp_1c xor $0fa; //1E0  480
    SerialNo := SerialNo + IntToStr(ecx);
    eax := ebp_2c or $5a;  //DA  218
    SerialNo := SerialNo + IntToStr(eax);
    edtSerialNo.Text := SerialNo;
end;


 284248195480218

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值