知识巩固之 精装友情通讯录 算法详细分析 与注册机编写

知识巩固之 精装友情通讯录 算法详细分析 与注册机编写
此软件是一款老软件,为明码比较,追码太简单,不过一味想追明码,破解提高不了,现在软件越来算法越复杂,根本看不到明码,所以分析算法编写注册机,才是硬道理,并不搞懂算法编写了注册机,软件就可以达到完美破解,毕竟有些软件爆破后不稳定,有些功能会丧失,ok,废话不说了,此分析仅供学习,一起努力!
根据弹窗提示来到如下:


00514CA4    55              push    ebp
00514CA5    8BEC            mov     ebp, esp
00514CA7    B9 17000000     mov     ecx, 0x17
00514CAC    6A 00           push    0x0
00514CAE    6A 00           push    0x0
00514CB0    49              dec     ecx
00514CB1  ^ 75 F9           jnz     short jzyq.00514CAC
00514CB3    53              push    ebx
00514CB4    56              push    esi
00514CB5    8BD8            mov     ebx, eax
00514CB7    33C0            xor     eax, eax
00514CB9    55              push    ebp
00514CBA    68 294F5100     push    jzyq.00514F29
00514CBF    64:FF30         push    dword ptr fs:[eax]
00514CC2    64:8920         mov     dword ptr fs:[eax], esp
00514CC5    68 80000000     push    0x80
00514CCA    8D85 7BFFFFFF   lea     eax, dword ptr ss:[ebp-0x85]
00514CD0    50              push    eax
00514CD1    E8 D625EFFF     call    <jmp.&kernel32.GetSystemDirector>
00514CD6    8D45 FC         lea     eax, dword ptr ss:[ebp-0x4]
00514CD9    8D95 7BFFFFFF   lea     edx, dword ptr ss:[ebp-0x85]
00514CDF    B9 81000000     mov     ecx, 0x81
00514CE4    E8 07FFEEFF     call    jzyq.00404BF0
00514CE9    8D95 74FFFFFF   lea     edx, dword ptr ss:[ebp-0x8C]
00514CEF    8B83 34030000   mov     eax, dword ptr ds:[ebx+0x334]
00514CF5    E8 2AD8F2FF     call    jzyq.00442524                    ; 取注册码长度
00514CFA    83BD 74FFFFFF 0>cmp     dword ptr ss:[ebp-0x8C], 0x0     ; 判断是否输入注册码
00514D01    74 1A           je      short jzyq.00514D1D
00514D03    8D95 70FFFFFF   lea     edx, dword ptr ss:[ebp-0x90]
00514D09    8B83 10030000   mov     eax, dword ptr ds:[ebx+0x310]
00514D0F    E8 10D8F2FF     call    jzyq.00442524                    ; 取订单号长度
00514D14    83BD 70FFFFFF 0>cmp     dword ptr ss:[ebp-0x90], 0x0     ; 看是否输入订单号
00514D1B    75 0F           jnz     short jzyq.00514D2C
00514D1D    B8 404F5100     mov     eax, jzyq.00514F40               ; 注册信息没有填写齐全
00514D22    E8 F169F2FF     call    jzyq.0043B718
00514D27    E9 80010000     jmp     jzyq.00514EAC
00514D2C    8D95 6CFFFFFF   lea     edx, dword ptr ss:[ebp-0x94]
00514D32    8B83 34030000   mov     eax, dword ptr ds:[ebx+0x334]
00514D38    E8 E7D7F2FF     call    jzyq.00442524                    ; 取注册码长度
00514D3D    8B85 6CFFFFFF   mov     eax, dword ptr ss:[ebp-0x94]     ; 注册码给eax
00514D43    50              push    eax
00514D44    8D95 60FFFFFF   lea     edx, dword ptr ss:[ebp-0xA0]
00514D4A    8B83 10030000   mov     eax, dword ptr ds:[ebx+0x310]
00514D50    E8 CFD7F2FF     call    jzyq.00442524                    ; 取订单号长度
00514D55    8B85 60FFFFFF   mov     eax, dword ptr ss:[ebp-0xA0]     ; 订单号给eax
00514D5B    E8 9447EFFF     call    jzyq.004094F4                    ; 订单号取十六进制给eax,订单号给ecx
00514D60    B9 D3000000     mov     ecx, 0xD3                        ; d3给ecx
00514D65    99              cdq
00514D66    F7F9            idiv    ecx                              ; 给假订单号的十六进制除以d3,商给eax,余数给edx
00514D68    8BC2            mov     eax, edx                         ; eax=edx
00514D6A    8D95 64FFFFFF   lea     edx, dword ptr ss:[ebp-0x9C]
00514D70    E8 1B47EFFF     call    jzyq.00409490
00514D75    FFB5 64FFFFFF   push    dword ptr ss:[ebp-0x9C]
00514D7B    8D95 54FFFFFF   lea     edx, dword ptr ss:[ebp-0xAC]
00514D81    8B83 10030000   mov     eax, dword ptr ds:[ebx+0x310]
00514D87    E8 98D7F2FF     call    jzyq.00442524                    ; 取订单号长度
00514D8C    8B85 54FFFFFF   mov     eax, dword ptr ss:[ebp-0xAC]     ; 假订单号给eax
00514D92    E8 5D47EFFF     call    jzyq.004094F4                    ; 假订单号的十六进制给eax,订单号给ecx
00514D97    8D95 58FFFFFF   lea     edx, dword ptr ss:[ebp-0xA8]
00514D9D    E8 C6FCFFFF     call    jzyq.00514A68                    ; 算法call
00514DA2    8B85 58FFFFFF   mov     eax, dword ptr ss:[ebp-0xA8]     ; 十进制字符串连接上1,2位3,4位计算的结果,组成新的字符串给eax
00514DA8    E8 4747EFFF     call    jzyq.004094F4
00514DAD    8D95 5CFFFFFF   lea     edx, dword ptr ss:[ebp-0xA4]
00514DB3    E8 90FDFFFF     call    jzyq.00514B48                    ; 算法call
00514DB8    FFB5 5CFFFFFF   push    dword ptr ss:[ebp-0xA4]          ; 在四个位置分辨加上计算后的字符,压入字符串
00514DBE    68 604F5100     push    jzyq.00514F60                    ; 压入预设1
00514DC3    8D85 68FFFFFF   lea     eax, dword ptr ss:[ebp-0x98]
00514DC9    BA 03000000     mov     edx, 0x3                         ; 3给edx
00514DCE    E8 2DFFEEFF     call    jzyq.00404D00
00514DD3    8B95 68FFFFFF   mov     edx, dword ptr ss:[ebp-0x98]     ; 假订单号的十六进制除以d3,取余数的值,并且取是进制,将十进制的值放在已经计算补位后的字符串前面,后面加预设1,就是真注册码了
00514DD9    58              pop     eax
00514DDA    E8 A5FFEEFF     call    jzyq.00404D84                    ; 比较kall
00514DDF    0F85 A3000000   jnz     jzyq.00514E88                    ; 爆破点,不等就挂啦
00514DE5    B8 6C4F5100     mov     eax, jzyq.00514F6C               ; 注册码正确,感谢你的注册!


=========================================================================================================================================


f7进入第一算法call:


00514A6D    51              push    ecx
00514A6E    51              push    ecx
00514A6F    51              push    ecx
00514A70    51              push    ecx
00514A71    53              push    ebx
00514A72    56              push    esi
00514A73    8BF2            mov     esi, edx
00514A75    8BD8            mov     ebx, eax                         ; ebx等于eax位假订单号
00514A77    33C0            xor     eax, eax                         ; eax清零
00514A79    55              push    ebp
00514A7A    68 384B5100     push    jzyq.00514B38
00514A7F    64:FF30         push    dword ptr fs:[eax]
00514A82    64:8920         mov     dword ptr fs:[eax], esp
00514A85    81F3 F1250B00   xor     ebx, 0xB25F1                     ; 假订单号十六进制和b25f1异或
00514A8B    8BC3            mov     eax, ebx                         ; 结果给eax
00514A8D    33D2            xor     edx, edx                         ; edx清零
00514A8F    52              push    edx
00514A90    50              push    eax
00514A91    8D45 FC         lea     eax, dword ptr ss:[ebp-0x4]
00514A94    E8 274AEFFF     call    jzyq.004094C0                    ; 对假订单号十六进制和b25f1异或后的结果  取十进制
00514A99    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 十进制的结果给eax
00514A9C    0FB600          movzx   eax, byte ptr ds:[eax]           ; 开始取十进制字符串第一位的十六进制给eax
00514A9F    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 十进制字符串给edx
00514AA2    0FB652 01       movzx   edx, byte ptr ds:[edx+0x1]       ; 取第二位十六进制给edx
00514AA6    03C2            add     eax, edx                         ; eax=eax+edx 第一位十六进制和第二位十六进制相加
00514AA8    B9 05000000     mov     ecx, 0x5                         ; 5给ecx
00514AAD    99              cdq
00514AAE    F7F9            idiv    ecx                              ; eax除以5,商给eax,余数给edx
00514AB0    80C2 34         add     dl, 0x34                         ; edx=edx+34 余数加34给edx
00514AB3    8855 F8         mov     byte ptr ss:[ebp-0x8], dl        ; edx给0018faf8这个地址
00514AB6    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 十进制字符串给eax
00514AB9    0FB640 02       movzx   eax, byte ptr ds:[eax+0x2]       ; 取第三位十六进制给eax
00514ABD    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 字符串给edx
00514AC0    0FB652 03       movzx   edx, byte ptr ds:[edx+0x3]       ; 第四位十六进制给edx
00514AC4    03C2            add     eax, edx                         ; 三位和四位十六进制相加
00514AC6    B9 05000000     mov     ecx, 0x5                         ; 5给ecx
00514ACB    99              cdq
00514ACC    F7F9            idiv    ecx                              ; eax除以5,商给eax,余数给edx
00514ACE    8BDA            mov     ebx, edx                         ; ebx=edx 把余数给ebx
00514AD0    80C3 33         add     bl, 0x33                         ; ebx=ebx+33
00514AD3    885D F9         mov     byte ptr ss:[ebp-0x7], bl        ; ebx给0018faf9地址
00514AD6    8D45 F4         lea     eax, dword ptr ss:[ebp-0xC]
00514AD9    8A55 F8         mov     dl, byte ptr ss:[ebp-0x8]        ; 把十进制字符串的前两位计算结果给edx 在0018faf8这个地址
00514ADC    E8 8700EFFF     call    jzyq.00404B68
00514AE1    8B45 F4         mov     eax, dword ptr ss:[ebp-0xC]      ; 取结果为字符 给eax
00514AE4    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]      ; 十进制字符串给edx地址
00514AE7    B9 1B000000     mov     ecx, 0x1B                        ; 1b给ecx
00514AEC    E8 2F04EFFF     call    jzyq.00404F20
00514AF1    8D45 F0         lea     eax, dword ptr ss:[ebp-0x10]
00514AF4    8BD3            mov     edx, ebx                         ; edx=ebx 为十进制字符串3位和4位十六进制计算后的余数加33
00514AF6    E8 6D00EFFF     call    jzyq.00404B68
00514AFB    8B45 F0         mov     eax, dword ptr ss:[ebp-0x10]     ; 取计算结果后的十六进制转化成字符,给eax
00514AFE    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]      ; 字符串给edx 地址,在字符串连接上第1位和第2位的计算结果的余数加33 对结果取字符
00514B01    B9 19000000     mov     ecx, 0x19                        ; 19 给ecx
00514B06    E8 1504EFFF     call    jzyq.00404F20                    ; 3位和4 位计算的结果 取字符给edx
00514B0B    8BC6            mov     eax, esi
00514B0D    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 十进制字符串连接上1位和2位,3位和4位计算的结果,给edx
00514B10    E8 C7FEEEFF     call    jzyq.004049DC
00514B15    33C0            xor     eax, eax                         ; 清零 eax
00514B17    5A              pop     edx


=============================================================================================================================


继续进入第二个算法call


00514B4D    51              push    ecx
00514B4E    51              push    ecx
00514B4F    51              push    ecx
00514B50    51              push    ecx
00514B51    51              push    ecx
00514B52    51              push    ecx
00514B53    53              push    ebx
00514B54    56              push    esi
00514B55    8BF2            mov     esi, edx
00514B57    8BD8            mov     ebx, eax
00514B59    33C0            xor     eax, eax
00514B5B    55              push    ebp
00514B5C    68 944C5100     push    jzyq.00514C94
00514B61    64:FF30         push    dword ptr fs:[eax]
00514B64    64:8920         mov     dword ptr fs:[eax], esp
00514B67    81F3 8776FBDD   xor     ebx, 0xDDFB7687                  ; 上一个call的计算结果异或预设ddfb7687
00514B6D    8BC3            mov     eax, ebx                         ; eax=ebx
00514B6F    33D2            xor     edx, edx                         ; 清零
00514B71    52              push    edx
00514B72    50              push    eax
00514B73    8D45 FC         lea     eax, dword ptr ss:[ebp-0x4]
00514B76    E8 4549EFFF     call    jzyq.004094C0                    ; 上一个call的计算结果异或预设ddfb7687,结果取十进制
00514B7B    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 给eax
00514B7E    0FB600          movzx   eax, byte ptr ds:[eax]           ; 取十进制字符第一位十六进制给eax
00514B81    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 字符串给edx
00514B84    0FB652 01       movzx   edx, byte ptr ds:[edx+0x1]       ; 取第二位十六进制给edx
00514B88    03C2            add     eax, edx                         ; eax=eax+edx 第一位十六进制和第二位十六进制相加
00514B8A    B9 05000000     mov     ecx, 0x5                         ; 5给ecx
00514B8F    99              cdq
00514B90    F7F9            idiv    ecx                              ; eax除以5,商给eax,余数给edx
00514B92    80C2 66         add     dl, 0x66                         ; edx 余数加66,给edx
00514B95    8855 F8         mov     byte ptr ss:[ebp-0x8], dl        ; 对edx 计算结果取字符 放在0018faf8 地址中
00514B98    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 字符串给eax
00514B9B    0FB640 02       movzx   eax, byte ptr ds:[eax+0x2]       ; 取第三位十六进制给eax
00514B9F    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 字符串给edx
00514BA2    0FB652 03       movzx   edx, byte ptr ds:[edx+0x3]       ; 取第四位十六进制给edx
00514BA6    03C2            add     eax, edx                         ; eax=eax+edx 第三位十六进制和第四位十六进制相加
00514BA8    B9 05000000     mov     ecx, 0x5                         ; 5给ecx
00514BAD    99              cdq
00514BAE    F7F9            idiv    ecx                              ; eax除以5,商放在eax,余数放在edx
00514BB0    80C2 75         add     dl, 0x75                         ; 余数加75 给edx
00514BB3    8855 F9         mov     byte ptr ss:[ebp-0x7], dl        ; 将计算结果给0018faf9 地址
00514BB6    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 字符串给eax
00514BB9    0FB640 04       movzx   eax, byte ptr ds:[eax+0x4]       ; 取第五位给eax
00514BBD    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 字符串给edx
00514BC0    0FB652 05       movzx   edx, byte ptr ds:[edx+0x5]       ; 取第六位给edx
00514BC4    03C2            add     eax, edx                         ; eax=eax+edx 第五位十六进制和第六位十六进制相加
00514BC6    B9 05000000     mov     ecx, 0x5                         ; 5给ecx
00514BCB    99              cdq
00514BCC    F7F9            idiv    ecx                              ; eax除以5,商给eax,余数给edx
00514BCE    80C2 7A         add     dl, 0x7A                         ; 余数加7a
00514BD1    8855 FA         mov     byte ptr ss:[ebp-0x6], dl        ; 结果取字符给0018fafa地址里
00514BD4    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00514BD7    0FB640 06       movzx   eax, byte ptr ds:[eax+0x6]       ; 第7位给eax
00514BDB    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]
00514BDE    0FB652 07       movzx   edx, byte ptr ds:[edx+0x7]       ; 第8位给edx
00514BE2    03C2            add     eax, edx                         ; 7位和8位相加给eax
00514BE4    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]
00514BE7    0FB652 08       movzx   edx, byte ptr ds:[edx+0x8]       ; 第9为给edx
00514BEB    03C2            add     eax, edx                         ; 7位和8位相加给eax 在加上第9位
00514BED    B9 05000000     mov     ecx, 0x5                         ; 5给ecx
00514BF2    99              cdq
00514BF3    F7F9            idiv    ecx                              ; eax除以5,商给eax,余数给edx
00514BF5    80C2 69         add     dl, 0x69                         ; 余数加69 给edx
00514BF8    8855 FB         mov     byte ptr ss:[ebp-0x5], dl        ; 计算结果取字符给0018fafb地址
00514BFB    8D45 F4         lea     eax, dword ptr ss:[ebp-0xC]
00514BFE    8A55 F8         mov     dl, byte ptr ss:[ebp-0x8]        ; 1和2位结果给edx
00514C01    E8 62FFEEFF     call    jzyq.00404B68                    ; 对十六进制转化成字符
00514C06    8B45 F4         mov     eax, dword ptr ss:[ebp-0xC]      ; 给eax
00514C09    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]      ; 字符串给edx
00514C0C    B9 07000000     mov     ecx, 0x7                         ; 7给ecx
00514C11    E8 0A03EFFF     call    jzyq.00404F20                    ; 在字符串第七位插入1,2位的计算结果的字符
00514C16    8D45 F0         lea     eax, dword ptr ss:[ebp-0x10]
00514C19    8A55 FB         mov     dl, byte ptr ss:[ebp-0x5]        ; 3和4位计算结果字符给edx
00514C1C    E8 47FFEEFF     call    jzyq.00404B68
00514C21    8B45 F0         mov     eax, dword ptr ss:[ebp-0x10]     ; 结果的字符给eax
00514C24    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]      ; 把加过1,2位结果的字符串给edx地址
00514C27    B9 03000000     mov     ecx, 0x3                         ; 3给ecx
00514C2C    E8 EF02EFFF     call    jzyq.00404F20                    ; 将3和4位的结果字符插入在字符串的第三位
00514C31    8D45 EC         lea     eax, dword ptr ss:[ebp-0x14]
00514C34    8A55 F9         mov     dl, byte ptr ss:[ebp-0x7]        ; 5,6位结果给edx
00514C37    E8 2CFFEEFF     call    jzyq.00404B68                    ; 取结果字符
00514C3C    8B45 EC         mov     eax, dword ptr ss:[ebp-0x14]     ; 结果字符给eax
00514C3F    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]
00514C42    B9 05000000     mov     ecx, 0x5                         ; 5给ecx
00514C47    E8 D402EFFF     call    jzyq.00404F20                    ; 在第五位插入3,4位结果的字符
00514C4C    8D45 E8         lea     eax, dword ptr ss:[ebp-0x18]
00514C4F    8A55 FA         mov     dl, byte ptr ss:[ebp-0x6]        ; 7,8,9位结果字符给edx
00514C52    E8 11FFEEFF     call    jzyq.00404B68
00514C57    8B45 E8         mov     eax, dword ptr ss:[ebp-0x18]
00514C5A    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]
00514C5D    B9 09000000     mov     ecx, 0x9                         ; 9给ecx
00514C62    E8 B902EFFF     call    jzyq.00404F20                    ; 字符串第九位插入7,8,9位结果的字符
00514C67    8BC6            mov     eax, esi
00514C69    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 把所有字符串给edx(这里注册码基本完成,还有一部分跳出call后计算)
00514C6C    E8 6BFDEEFF     call    jzyq.004049DC


===============================================================================================================================


跳出call后,来到


00514DD3    8B95 68FFFFFF   mov     edx, dword ptr ss:[ebp-0x98]     ; 假订单号的十六进制除以d3,取余数的值,并且取是进制,将十进制的值放在已经计算补位后的字符串前面,后面加预设1,就是真注册码了

算法分析:
1、将假订单号作为十进制和730609( B25F1)异或,结果取十进制
2、对十进制结果 取前两位十六进制的和再除以5,取余数,再用余数加34
3、对十进制结果,取第3位和第4位十六进制的和再除以5,取余数,再用余数加33
4、将以上两个结果的十进制取字符,分别放在上面1的后面,成为一串字符
5、对4的结果和3724244615(ddfb7687)做异或,取十进制。
6、对5的结果1,2位十六进制取和,除以5,取余数加66,对结果取字符,将字符插入上面5得到的十进制字符串的第7位  
   对5的结果3,4位十六进制取和,除以5,取余数加75,对结果取字符,将字符查入上面5得到的十进制字符串的第5位     
   对5的结果5,6位十六进制取和,除以5,取余数加7a,对结果取字符,将字符插入上面5得到的十进制字符串的第9位     
   对5的结果7,8,9位十六进制取和,除以5,取余数加69,对结果取字符,将字符查入上面5得到的十进制字符串的第3位   


7、最后在6的结果,字符串前面加上,假订单号除以预设211(十六进制d3)的余数值的十进制,再在末尾加上预设1,就是注册码。



  几组注册码:


订单号:1234
注册码:17936l5w137{f28931


订单号:8888
注册码:2636k5x256|f24721


订单号:521521521
注册码:20641k2y608~g63461



注册机及工程文件.rar

(6.35 KB, 下载次数: 0)

2019-8-1 14:05 上传
点击文件名下载附件

下载积分: 吾爱币 -1 CB

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员

    昵称

  • 取消
    昵称