首页
社区
课程
招聘
[旧帖] 本人新手,请帮忙分析一下注册算法,应该比较简单的 0.00雪花
发表于: 2014-2-17 10:25 7313

[旧帖] 本人新手,请帮忙分析一下注册算法,应该比较简单的 0.00雪花

2014-2-17 10:25
7313
0040DB59   .^\7C E4         jl      short 0040DB3F
0040DB5B   .  803D 40184700>cmp     byte ptr [471840], 31
0040DB62   .  0F85 C8000000 jnz     0040DC30
0040DB68   .  B9 02000000   mov     ecx, 2
0040DB6D   .  BA 40184700   mov     edx, 00471840                    ;  000000000000
0040DB72   .  33C0          xor     eax, eax
0040DB74   .  2BD1          sub     edx, ecx
0040DB76   >  0FBE3C0A      movsx   edi, byte ptr [edx+ecx]
0040DB7A   .  83EF 30       sub     edi, 30
0040DB7D   .  0FAFF9        imul    edi, ecx
0040DB80   .  03C7          add     eax, edi
0040DB82   .  41            inc     ecx
0040DB83   .  8D79 FE       lea     edi, dword ptr [ecx-2]
0040DB86   .  83FF 0C       cmp     edi, 0C
0040DB89   .^ 7C EB         jl      short 0040DB76
0040DB8B   .  99            cdq
0040DB8C   .  B9 64000000   mov     ecx, 64
0040DB91   .  8B1D 4C184700 mov     ebx, dword ptr [47184C]
0040DB97   .  F7F9          idiv    ecx
0040DB99   .  B8 67666666   mov     eax, 66666667
0040DB9E   .  8BCA          mov     ecx, edx
0040DBA0   .  F7E9          imul    ecx
0040DBA2   .  C1FA 02       sar     edx, 2
0040DBA5   .  8BC2          mov     eax, edx
0040DBA7   .  C1E8 1F       shr     eax, 1F
0040DBAA   .  8D5402 30     lea     edx, dword ptr [edx+eax+30]
0040DBAE   .  0FBEC3        movsx   eax, bl
0040DBB1   .  3BC2          cmp     eax, edx
0040DBB3   .  75 7B         jnz     short 0040DC30
0040DBB5   .  8BC1          mov     eax, ecx
0040DBB7   .  B9 0A000000   mov     ecx, 0A
0040DBBC   .  99            cdq
0040DBBD   .  F7F9          idiv    ecx
0040DBBF   .  0FBEC7        movsx   eax, bh
0040DBC2   .  83C2 30       add     edx, 30
0040DBC5   .  3BC2          cmp     eax, edx
0040DBC7   .  75 67         jnz     short 0040DC30
0040DBC9   .  B9 05000000   mov     ecx, 5
0040DBCE   .  BA 40184700   mov     edx, 00471840                    ;  000000000000
0040DBD3   .  33C0          xor     eax, eax
0040DBD5   .  2BD1          sub     edx, ecx
0040DBD7   >  0FBE3C0A      movsx   edi, byte ptr [edx+ecx]
0040DBDB   .  83EF 30       sub     edi, 30
0040DBDE   .  0FAFF9        imul    edi, ecx
0040DBE1   .  03C7          add     eax, edi
0040DBE3   .  41            inc     ecx
0040DBE4   .  8D79 FB       lea     edi, dword ptr [ecx-5]
0040DBE7   .  83FF 0E       cmp     edi, 0E
0040DBEA   .^ 7C EB         jl      short 0040DBD7
0040DBEC   .  99            cdq
0040DBED   .  B9 64000000   mov     ecx, 64
0040DBF2   .  F7F9          idiv    ecx
0040DBF4   .  B8 67666666   mov     eax, 66666667
0040DBF9   .  8BCA          mov     ecx, edx
0040DBFB   .  F7E9          imul    ecx
0040DBFD   .  C1FA 02       sar     edx, 2
0040DC00   .  8BC2          mov     eax, edx
0040DC02   .  C1E8 1F       shr     eax, 1F
0040DC05   .  8D5402 30     lea     edx, dword ptr [edx+eax+30]
0040DC09   .  0FBE05 4E1847>movsx   eax, byte ptr [47184E]
0040DC10   .  3BC2          cmp     eax, edx
0040DC12   .  75 1C         jnz     short 0040DC30
0040DC14   .  8BC1          mov     eax, ecx
0040DC16   .  B9 0A000000   mov     ecx, 0A
0040DC1B   .  99            cdq
0040DC1C   .  F7F9          idiv    ecx
0040DC1E   .  0FBE05 4F1847>movsx   eax, byte ptr [47184F]
0040DC25   .  83C2 30       add     edx, 30
0040DC28   .  3BC2          cmp     eax, edx
0040DC2A   .  0F84 29010000 je      0040DD59
0040DC30   >  68 FF000000   push    0FF
0040DC35   .  68 FF000000   push    0FF
0040DC3A   .  68 FF000000   push    0FF
0040DC3F   .  6A 5A         push    5A
0040DC41   .  6A 00         push    0
0040DC43   .  6A 00         push    0
0040DC45   .  6A 48         push    48
0040DC47   .  68 D8010000   push    1D8
0040DC4C   .  6A 07         push    7
0040DC4E   .  6A 28         push    28
0040DC50   .  8BCE          mov     ecx, esi
0040DC52   .  E8 A989FFFF   call    00406600
0040DC57   .  51            push    ecx
0040DC58   .  8BCC          mov     ecx, esp
0040DC5A   .  896424 14     mov     dword ptr [esp+14], esp
0040DC5E   .  68 A8C24600   push    0046C2A8                         ;  注册码输入有误,请仔细核对注册码
0040DC63   .  E8 7E690400   call    004545E6

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
\\\\\\\
2014-2-17 14:20
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请问是哪个程序?  1.exe??
2014-2-17 16:59
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
SSCBZ.exe
2014-2-17 17:39
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
0040DB59   .^\7C E4         jl      short 0040DB3F
0040DB5B   .  803D 40184700>cmp     byte ptr [471840], 31           ;注册码第一位必须为1

0040DB62   .  0F85 C8000000 jnz     0040DC30
0040DB68   .  B9 02000000   mov     ecx, 2
0040DB6D   .  BA 40184700   mov     edx, 00471840                    ;  000000000000
0040DB72   .  33C0          xor     eax, eax
0040DB74   .  2BD1          sub     edx, ecx
0040DB76   >  0FBE3C0A      movsx   edi, byte ptr [edx+ecx]          ;
0040DB7A   .  83EF 30       sub     edi, 30
0040DB7D   .  0FAFF9        imul    edi, ecx
0040DB80   .  03C7          add     eax, edi
0040DB82   .  41            inc     ecx
0040DB83   .  8D79 FE       lea     edi, dword ptr [ecx-2]
0040DB86   .  83FF 0C       cmp     edi, 0C
0040DB89   .^ 7C EB         jl      short 0040DB76
0040DB8B   .  99            cdq
0040DB8C   .  B9 64000000   mov     ecx, 64
0040DB91   .  8B1D 4C184700 mov     ebx, dword ptr [47184C]
0040DB97   .  F7F9          idiv    ecx
0040DB99   .  B8 67666666   mov     eax, 66666667
0040DB9E   .  8BCA          mov     ecx, edx
0040DBA0   .  F7E9          imul    ecx
0040DBA2   .  C1FA 02       sar     edx, 2
0040DBA5   .  8BC2          mov     eax, edx
0040DBA7   .  C1E8 1F       shr     eax, 1F
0040DBAA   .  8D5402 30     lea     edx, dword ptr [edx+eax+30]
0040DBAE   .  0FBEC3        movsx   eax, bl
0040DBB1   .  3BC2          cmp     eax, edx
0040DBB3   .  75 7B         jnz     short 0040DC30                  ;这是第一个关键判断
0040DBB5   .  8BC1          mov     eax, ecx
0040DBB7   .  B9 0A000000   mov     ecx, 0A
0040DBBC   .  99            cdq
0040DBBD   .  F7F9          idiv    ecx
0040DBBF   .  0FBEC7        movsx   eax, bh     
0040DBC2   .  83C2 30       add     edx, 30
0040DBC5   .  3BC2          cmp     eax, edx
0040DBC7   .  75 67         jnz     short 0040DC30              ;这是第二个关键判断
0040DBC9   .  B9 05000000   mov     ecx, 5
0040DBCE   .  BA 40184700   mov     edx, 00471840                    ;  000000000000
0040DBD3   .  33C0          xor     eax, eax
0040DBD5   .  2BD1          sub     edx, ecx
0040DBD7   >  0FBE3C0A      movsx   edi, byte ptr [edx+ecx]
0040DBDB   .  83EF 30       sub     edi, 30
0040DBDE   .  0FAFF9        imul    edi, ecx
0040DBE1   .  03C7          add     eax, edi
0040DBE3   .  41            inc     ecx
0040DBE4   .  8D79 FB       lea     edi, dword ptr [ecx-5]
0040DBE7   .  83FF 0E       cmp     edi, 0E
0040DBEA   .^ 7C EB         jl      short 0040DBD7
0040DBEC   .  99            cdq
0040DBED   .  B9 64000000   mov     ecx, 64
0040DBF2   .  F7F9          idiv    ecx
0040DBF4   .  B8 67666666   mov     eax, 66666667
0040DBF9   .  8BCA          mov     ecx, edx
0040DBFB   .  F7E9          imul    ecx
0040DBFD   .  C1FA 02       sar     edx, 2
0040DC00   .  8BC2          mov     eax, edx
0040DC02   .  C1E8 1F       shr     eax, 1F
0040DC05   .  8D5402 30     lea     edx, dword ptr [edx+eax+30]
0040DC09   .  0FBE05 4E1847>movsx   eax, byte ptr [47184E]
0040DC10   .  3BC2          cmp     eax, edx
0040DC12   .  75 1C         jnz     short 0040DC30               ;这是第三个关键判断
0040DC14   .  8BC1          mov     eax, ecx
0040DC16   .  B9 0A000000   mov     ecx, 0A
0040DC1B   .  99            cdq
0040DC1C   .  F7F9          idiv    ecx
0040DC1E   .  0FBE05 4F1847>movsx   eax, byte ptr [47184F]
0040DC25   .  83C2 30       add     edx, 30
0040DC28   .  3BC2          cmp     eax, edx
0040DC2A   .  0F84 29010000 je      0040DD59
0040DC30   >  68 FF000000   push    0FF
0040DC35   .  68 FF000000   push    0FF
0040DC3A   .  68 FF000000   push    0FF
0040DC3F   .  6A 5A         push    5A
0040DC41   .  6A 00         push    0
0040DC43   .  6A 00         push    0
0040DC45   .  6A 48         push    48
0040DC47   .  68 D8010000   push    1D8
0040DC4C   .  6A 07         push    7
0040DC4E   .  6A 28         push    28
0040DC50   .  8BCE          mov     ecx, esi
0040DC52   .  E8 A989FFFF   call    00406600
0040DC57   .  51            push    ecx
0040DC58   .  8BCC          mov     ecx, esp
0040DC5A   .  896424 14     mov     dword ptr [esp+14], esp
0040DC5E   .  68 A8C24600   push    0046C2A8                         ;  注册码输入有误,请仔细核对注册码
0040DC63   .  E8 7E690400   call    004545E6

第一个关键跳转的以上的执行过程如下:
首先注册码第一位必须为1

将输入的注册码(必须16位数字)的前12个数字进行一下运算:2*(1)+3*(2)+...+D*(12)
令其结果为X1。

再将X1除以64取余数---X2,X2赋值给了ECX,然后将X2乘以66666667,溢出的位为X3,X3先右移2位得X4然后左移1F位得X5,计算X6=30+X4+X5(当然这是一个数字的ASCII),X6与我们输入的注册码的第13个作比较。

第二个关键跳转的以上的执行过程如下:

将X2除以0A(十进制10)所得的余数加上30得Y1(当然这是一个数字的ASCII),Y1与我们输入的注册码的第14个数作比较。

第二个关键跳转的以上的执行过程如下:

类似于第一个跳转前的操作,这里是将输入的注册码(必须16位数字)的前14个数字进行一下运算:5*(1)+6*(2)+...+18*(14),令其结果为Z1。

接下来跟第二个跳转前的操作一样,只不过是和第15和第16个数作比较。

以上是楼主所给出代码的分析,之后的我过会再看= =
2014-2-17 18:59
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
6
算了一组:12345678abcd6828,但是不能正确注册。。地方没找对。
2014-2-17 19:37
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
7
吴妈...
2014-2-17 19:53
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那只是一部分密码,下面还有验证,应该会跟机子的注册码有关的,我初略的看了下貌似之后的验证算法很复杂,打算找个时间仔细研究。
2014-2-17 20:09
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
因为那只是一部分密码,下面还有验证,应该会跟机子的注册码有关的,我初略的看了下貌似之后的验证算法很复杂,打算找个时间仔细研究。
2014-2-17 20:10
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
因为那只是一部分密码,下面还有验证,应该会跟机子的注册码有关的,我初略的看了下貌似之后的验证算法很复杂,打算找个时间仔细研究。
新人不会回帖!!
2014-2-17 20:12
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢高手分享,学习了,希望高手们继续帮忙分析
2014-2-17 22:31
0
雪    币: 86
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
这个是什么算法?
2014-3-10 12:12
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
sidfate  继续啊,把算法算出来,让大伙学习一下
2014-3-31 00:28
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
关注一下。。
2014-3-31 15:07
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
关注一下
2014-4-18 16:29
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
[QUOTE=sidfate;1261740]0040DB59   .^\7C E4         jl      short 0040DB3F
0040DB5B   .  803D 40184700>cmp     byte ptr [471840], 31           ;注册码第一位必须为1

0040DB62   .  0...[/QUOTE]

##################################

牛!!分析正确!!!!
2014-4-23 15:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
关注,正在进行相关研究~
2014-4-29 21:17
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
关注一下,
2014-5-5 21:25
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
新手报到,过来看看!
2014-5-6 00:07
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我可以看看么?
2014-5-8 17:03
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
无意间看到帖子,不知道LZ还在继续不,小菜鸟拿来练手了
先说说结果吧:
1 LZ找到的是第一个校验,是验证输入的注册码是否符合输入规范
2 猜测后续可能含有与机器码相关联的校验(应该有),网络校验(没有跟到,不清楚)
3 过了这段校验后我没再继续。。

过程:
把LZ这段代码转成C++,扔到VS中,一步步F10,慢慢改改,走到那个printf("win");就能过这段校验了

#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>

using namespace std;

char gv471840[20] = "1155555555553037";

DWORD eaxTmp ;
DWORD ebxTmp ;
DWORD ecxTmp ;
DWORD edxTmp ;
DWORD esiTmp ;
DWORD ediTmp ;

void fencrypt()
{
        //0040DB5B
        if(gv471840[0] != '1') {
                printf("error");
                return ;
        }

        eaxTmp = 0;
        ecxTmp = 2;
        //edxTmp = 0 - ecxTmp;//  --> -2

        //0040DB76
        for( edxTmp = -2; ediTmp < 12;  ++ecxTmp,ediTmp = ecxTmp  - 2) {
                ediTmp = gv471840[edxTmp + ecxTmp];
                ediTmp -= 48;        //number
                ediTmp *= ecxTmp; //a1*2 + a2*3 + a3*4 + a4*5 + ........
                eaxTmp += ediTmp;
        }

        //0040DB8B
        VOID *p;
        p = &gv471840[12];
        ebxTmp = *(DWORD*)p; //4321
        edxTmp = eaxTmp % 100;  //
        ecxTmp = edxTmp;
        edxTmp = edxTmp / 10;       //
        //eaxTmp = edxTmp; //0040DBA7
        edxTmp = edxTmp + 0 + 48;   //0吧,是0吧,应该是。。。
        DWORD tmp1 = ebxTmp;
        tmp1 = tmp1 & 0xFF; //第4位,正向的第一位
        if(tmp1 != edxTmp)  //
        {
                printf("error1");
                return ;
        }

        //0040DBB5
        //eaxTmp = ecxTmp;
        edxTmp = ecxTmp % 10;

        //0000 0000 0000 0000, 1111 1111 0000 0000
        //                    ↑
        //左起第二位
        DWORD tmp = ebxTmp;
        tmp = tmp & 0xff00;
        tmp = tmp >> 8;
        eaxTmp = tmp;
        edxTmp += 48;

        if (eaxTmp != edxTmp)
        {
                printf("error2");
                return ;
        }

        //0040DBC9
        ecxTmp = 5;
        eaxTmp = 0;
        //0040DBD7
        for (edxTmp =  -5; ediTmp < 14; ++ecxTmp,ediTmp = ecxTmp - 5)
        {
                ediTmp = gv471840[edxTmp + ecxTmp];
                ediTmp -= 48;
                ediTmp *= ecxTmp;
                eaxTmp += ediTmp;
        }

        //0040DBEC
        edxTmp = eaxTmp % 100;
        ecxTmp = edxTmp;
        edxTmp = edxTmp / 10;
        if (gv471840[14] != edxTmp + 48)
        {
                printf("error3");
                return ;
        }

        //0040DC14
        edxTmp = ecxTmp % 10;
        eaxTmp = gv471840[15];
        if (eaxTmp == edxTmp + 48)
        {
                printf("win");
                return;
        }

        printf("error4");

}

int _tmain(int argc, _TCHAR* argv[])
{
        fencrypt();
         
        return 0;
}
2014-5-9 09:28
0
游客
登录 | 注册 方可回帖
返回
//