crackvip 发表于 2015-5-8 16:12:44

Smart Install Maker 5.04算法分析

本帖最后由 crackvip 于 2015-5-8 16:28 编辑

【文章标题】: Smart Install Maker 5.04算法分析
【文章作者】: Crackvip
【作者主页】: http://www.sminstall.com
【软件名称】: Smart Install Maker
【下载地址】: 自己搜索下载
【保护方式】: 无
【使用工具】: OD+XP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一开始是找关键点难,找到关键点了之后是很容易找到算法CALL的

首先看了下,无壳,直接打开相应目录下的语言文件,
直接C:\Program Files\Smart Install Maker\Language\Interface\English.lng

找到这一处

...
170=Thank you for registering!

这个就是注册成功的标志,我是怎么知道,呵呵,因为你输错注册码他不会提示你,所以那肯定是正确了才会提示你

================================
好,OD载入软件,直接搜索全部常量,输入0xAA----因为--->>>0xAA=170,所以搜索0xAA






参考位于 SIM:CODE 到常量 0xAA
地址       反汇编                                    注释
...
004EF44F   MOV   EDX, 0xAA                         这里就是注册成功的提示
00505ACC   MOV   EDX, 0xAA
00505B03   MOV   EDX, 0xAA

我们看到这三个比较可疑,一个个点进去,看然看上面有没有跳转

------------
第1处
004EF41B|.E8 CCC30100      CALL    SIM.0050B7EC                     ;   
004EF420|.84C0               TEST    AL, AL
004EF422|.74 4B            JE      SHORT SIM.004EF46F               ;这里有,直接下断
004EF424|.A1 341F5100      MOV   EAX, DWORD PTR DS:
004EF429|.C600 01            MOV   BYTE PTR DS:[EAX], 0x1
004EF42C|.A1 7C235100      MOV   EAX, DWORD PTR DS:
004EF431|.8B55 FC            MOV   EDX, DWORD PTR SS:[EBP-0x4]
004EF434|.E8 F355F1FF      CALL    SIM.00404A2C
004EF439|.E8 32630000      CALL    SIM.004F5770
004EF43E|.6A 40            PUSH    0x40
004EF440|.68 28F54E00      PUSH    SIM.004EF528                     ;Smart Install Maker
004EF445|.8D4D EC            LEA   ECX, DWORD PTR SS:[EBP-0x14]
004EF448|.A1 A41E5100      MOV   EAX, DWORD PTR DS:
004EF44D|.8B00               MOV   EAX, DWORD PTR DS:[EAX]
004EF44F|.BA AA000000      MOV   EDX, 0xAA                        ;第1处


------------
第2,3处,相隔很近

00505ABC   . /74 6D            JE      SHORT SIM.00505B2B               ;这里有跳,F2下断
00505ABE   . |B2 01            MOV   DL, 0x1
00505AC0   . |A1 D8584200      MOV   EAX, DWORD PTR DS:       ;$YB
00505AC5   . |E8 2E67F2FF      CALL    SIM.0042C1F8
00505ACA   . |8BF8               MOV   EDI, EAX
00505ACC   . |BA AA000000      MOV   EDX, 0xAA                        ;第2处
00505AD1   . |8BC7               MOV   EAX, EDI
...
00505AFE   . |B9 3A000000      MOV   ECX, 0x3A
00505B03   . |BA AA000000      MOV   EDX, 0xAA                        ;第3处


好,我们F9运行,直接随便输入用户名和注册码,点注册
断下来了

断在第1处,,好由此可见,我们找到的第1处是关键

好,重新标注一下,这次,我们找到断首下断

004EF3B4/.55               PUSH    EBP                              ;注册 验证开始
004EF3B5|.8BEC               MOV   EBP, ESP
004EF3B7|.33C9               XOR   ECX, ECX
004EF3B9|.51               PUSH    ECX
004EF3BA|.51               PUSH    ECX
004EF3BB|.51               PUSH    ECX
004EF3BC|.51               PUSH    ECX
004EF3BD|.51               PUSH    ECX
004EF3BE|.53               PUSH    EBX
004EF3BF|.56               PUSH    ESI
004EF3C0|.8BD8               MOV   EBX, EAX
004EF3C2|.33C0               XOR   EAX, EAX
004EF3C4|.55               PUSH    EBP
004EF3C5|.68 1AF54E00      PUSH    SIM.004EF51A
004EF3CA|.64:FF30            PUSH    DWORD PTR FS:[EAX]
004EF3CD|.64:8920            MOV   DWORD PTR FS:[EAX], ESP
004EF3D0|.8D55 F4            LEA   EDX, DWORD PTR SS:[EBP-0xC]
004EF3D3|.8B83 F8020000      MOV   EAX, DWORD PTR DS:[EBX+0x2F8]
004EF3D9|.E8 62FDF7FF      CALL    SIM.0046F140                     ;取用户名
004EF3DE|.8B45 F4            MOV   EAX, DWORD PTR SS:[EBP-0xC]      ;用户名到EAX
004EF3E1|.8D55 FC            LEA   EDX, DWORD PTR SS:[EBP-0x4]
004EF3E4|.E8 6BFFFFFF      CALL    SIM.004EF354
004EF3E9|.8D55 F0            LEA   EDX, DWORD PTR SS:[EBP-0x10]
004EF3EC|.8B83 FC020000      MOV   EAX, DWORD PTR DS:[EBX+0x2FC]
004EF3F2|.E8 49FDF7FF      CALL    SIM.0046F140                     ;取假码
004EF3F7|.8B45 F0            MOV   EAX, DWORD PTR SS:[EBP-0x10]
004EF3FA|.8D55 F8            LEA   EDX, DWORD PTR SS:[EBP-0x8]
004EF3FD|.E8 52FFFFFF      CALL    SIM.004EF354                     ;应该是去首尾空格
004EF402|.837D FC 00         CMP   DWORD PTR SS:[EBP-0x4], 0x0      ;判断是否输入了用用户名
004EF406|.74 67            JE      SHORT SIM.004EF46F
004EF408|.8B45 F8            MOV   EAX, DWORD PTR SS:[EBP-0x8]
004EF40B|.E8 A458F1FF      CALL    SIM.00404CB4                     ;注册码长度
004EF410|.83F8 1D            CMP   EAX, 0x1D                        ;长度0x1D=29
004EF413|.75 5A            JNZ   SHORT SIM.004EF46F               ;长度不等于则直接跳出来,这个是长度爆破点
004EF415|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
004EF418|.8B45 FC            MOV   EAX, DWORD PTR SS:[EBP-0x4]
004EF41B|.E8 CCC30100      CALL    SIM.0050B7EC                     ;算法CALL,这个算法CALL有两个地方调用了
004EF420|.84C0               TEST    AL, AL
004EF422|.74 4B            JE      SHORT SIM.004EF46F               ;等于0,则表示不成功,所以AL必须不等于0
004EF424|.A1 341F5100      MOV   EAX, DWORD PTR DS:
004EF429|.C600 01            MOV   BYTE PTR DS:[EAX], 0x1
004EF42C|.A1 7C235100      MOV   EAX, DWORD PTR DS:
004EF431|.8B55 FC            MOV   EDX, DWORD PTR SS:[EBP-0x4]
004EF434|.E8 F355F1FF      CALL    SIM.00404A2C
004EF439|.E8 32630000      CALL    SIM.004F5770
004EF43E|.6A 40            PUSH    0x40
004EF440|.68 28F54E00      PUSH    SIM.004EF528                     ;Smart Install Maker
004EF445|.8D4D EC            LEA   ECX, DWORD PTR SS:[EBP-0x14]
004EF448|.A1 A41E5100      MOV   EAX, DWORD PTR DS:
004EF44D|.8B00               MOV   EAX, DWORD PTR DS:[EAX]
004EF44F|.BA AA000000      MOV   EDX, 0xAA                        ;这里就是注册成功的提示
004EF454|.8B30               MOV   ESI, DWORD PTR DS:[EAX]

=================================
我们判断004EF41B|.E8 CCC30100      CALL    SIM.0050B7EC 这处应该是算法CALL,所以,在此下断,F7跟进

0050B7EC/$55               PUSH    EBP                              ;算法CALL
0050B7ED|.8BEC               MOV   EBP, ESP
0050B7EF|.83C4 C0            ADD   ESP, -0x40
0050B7F2|.53               PUSH    EBX
0050B7F3|.56               PUSH    ESI
0050B7F4|.57               PUSH    EDI
0050B7F5|.8955 F8            MOV   DWORD PTR SS:[EBP-0x8], EDX
0050B7F8|.8945 FC            MOV   DWORD PTR SS:[EBP-0x4], EAX
0050B7FB|.8B45 FC            MOV   EAX, DWORD PTR SS:[EBP-0x4]
0050B7FE|.E8 A196EFFF      CALL    SIM.00404EA4
0050B803|.8B45 F8            MOV   EAX, DWORD PTR SS:[EBP-0x8]
0050B806|.E8 9996EFFF      CALL    SIM.00404EA4
0050B80B|.33C0               XOR   EAX, EAX
0050B80D|.55               PUSH    EBP
0050B80E|.68 A4BA5000      PUSH    SIM.0050BAA4
0050B813|.64:FF30            PUSH    DWORD PTR FS:[EAX]
0050B816|.64:8920            MOV   DWORD PTR FS:[EAX], ESP
0050B819|.BB 19000000      MOV   EBX, 0x19
0050B81E|>8BC3               /MOV   EAX, EBX
0050B820|.04 41            |ADD   AL, 0x41
0050B822|.BA 19000000      |MOV   EDX, 0x19
0050B827|.2BD3               |SUB   EDX, EBX
0050B829|.884415 C0          |MOV   BYTE PTR SS:[EBP+EDX-0x40], AL    ;ZYX
0050B82D|.4B               |DEC   EBX
0050B82E|.83FB FF            |CMP   EBX, -0x1
0050B831|.^ 75 EB            \JNZ   SHORT SIM.0050B81E                ;   Z-A,动态生成字母表,Z-A
0050B833|.33DB               XOR   EBX, EBX
0050B835|.8D45 DA            LEA   EAX, DWORD PTR SS:[EBP-0x26]
0050B838|>8BD3               /MOV   EDX, EBX
0050B83A|.80C2 30            |ADD   DL, 0x30
0050B83D|.8810               |MOV   BYTE PTR DS:[EAX], DL
0050B83F|.43               |INC   EBX
0050B840|.40               |INC   EAX
0050B841|.83FB 0A            |CMP   EBX, 0xA
0050B844|.^ 75 F2            \JNZ   SHORT SIM.0050B838                ;动态生成数字表0-9
0050B846|.8B45 FC            MOV   EAX, DWORD PTR SS:[EBP-0x4]      ;用户名到EAX
0050B849|.E8 6694EFFF      CALL    SIM.00404CB4                     ;用户名长度
0050B84E|.8945 F4            MOV   DWORD PTR SS:[EBP-0xC], EAX
0050B851|.33FF               XOR   EDI, EDI                           ;EDI清零了
0050B853|.33C0               XOR   EAX, EAX
0050B855|.8945 EC            MOV   DWORD PTR SS:[EBP-0x14], EAX       ;这里置0了
0050B858|.33C0               XOR   EAX, EAX
0050B85A|.8945 E8            MOV   DWORD PTR SS:[EBP-0x18], EAX
0050B85D|.C745 E4 01000000   MOV   DWORD PTR SS:[EBP-0x1C], 0x1       ;= 0x1
0050B864|.BB 01000000      MOV   EBX, 0x1                           ;计数器置1
0050B869|>8BC3               /MOV   EAX, EBX
0050B86B|.B9 06000000      |MOV   ECX, 0x6
0050B870|.33D2               |XOR   EDX, EDX
0050B872|.F7F1               |DIV   ECX
0050B874|.85D2               |TEST    EDX, EDX                        ;这里是MOD 6 之后的数,也就是说,是6的倍就,则跳过
0050B876|.0F84 8D000000      |JE      SIM.0050B909
0050B87C|.47               |INC   EDI                               ;这里将EDI加了1,也就是说,这个EDI最大可以到25,但这里在下面有个条件,如果你的这个数,大于用户名的长度,则又从0开始计算,因为6的倍数跳过,不累加
0050B87D|.8B45 FC            |MOV   EAX, DWORD PTR SS:[EBP-0x4]       ;用户名到EAX
0050B880|.0FB67438 FF      |MOVZX   ESI, BYTE PTR DS:[EAX+EDI-0x1]    ;逐字取ASCII,顺序取
0050B885|.0175 E8            |ADD   DWORD PTR SS:[EBP-0x18], ESI      ;相加
0050B888|.83FB 05            |CMP   EBX, 0x5                        ;这个EBX是,1-0x1E的循环,判断EBX是不是前5位
0050B88B|.76 65            |JBE   SHORT SIM.0050B8F2                ;不高于5则跳
0050B88D|.83FB 19            |CMP   EBX, 0x19                         ;判断是不是高于0x19
0050B890|.73 60            |JNB   SHORT SIM.0050B8F2                ;不低于则跳
0050B892|.8B45 F4            |MOV   EAX, DWORD PTR SS:[EBP-0xC]       ;前5位和0x19位后面的计算方法一样
0050B895|.8B55 F4            |MOV   EDX, DWORD PTR SS:[EBP-0xC]       ;用户名长度到EAX.EDX
0050B898|.2BD7               |SUB   EDX, EDI                        ;这句和下面这句的意思联起来就是0-EDI
0050B89A|.2BD0               |SUB   EDX, EAX                        ;上一行的这个EDI就是上面的累加的,非6的倍数的,下面又一个循环
0050B89C|.77 26            |JA      SHORT SIM.0050B8C4                ;高于则跳,这是一个无符号的比较,我的理解是大于0,则跳,有符号的话就是负数
0050B89E|.4A               |DEC   EDX                               ;减1,这里相当于0-EDI-1
0050B89F|.92               |XCHG    EAX, EDX                        ;交换位置
0050B8A0|.8955 F0            |MOV   DWORD PTR SS:[EBP-0x10], EDX      ;用户名 长度到
0050B8A3|>8B55 FC            |/MOV   EDX, DWORD PTR SS:[EBP-0x4]      ;用户名到EDX
0050B8A6|.8B4D F0            ||MOV   ECX, DWORD PTR SS:[EBP-0x10]   ;在下面递减
0050B8A9|.0FB6540A FF      ||MOVZX   EDX, BYTE PTR DS:[EDX+ECX-0x1]   ;逐位取,从后往前取ASCII
0050B8AE|.03D6               ||ADD   EDX, ESI                         ;相加,加上上面计算得到的ASCII的数
0050B8B0|.8D4C1F 07          ||LEA   ECX, DWORD PTR DS:[EDI+EBX+0x7]
0050B8B4|.03F1               ||ADD   ESI, ECX                         ;又相加,ESI+EDI+EBX+7,这个EDI是除6倍数以外的1-0x1E循环的数,而EBX就是1-0x1E循环的数,ESI是上面循环得到的字母的ASC
0050B8B6|.0FAF75 F4          ||IMUL    ESI, DWORD PTR SS:[EBP-0xC]      ;上一行计算得到的数乘以长度
0050B8BA|.03D6               ||ADD   EDX, ESI                         ;再与上面0050B8AE 处得到的EDX
0050B8BC|.8BF2               ||MOV   ESI, EDX                         ;把EDX和ESI的数据复制成一样
0050B8BE|.FF4D F0            ||DEC   DWORD PTR SS:[EBP-0x10]          ;用户名长度-1
0050B8C1|.40               ||INC   EAX                              ;这个EAx就是上面的0-EDI-1,直接+1,加到溢出为0,则跳出循环
0050B8C2|.^ 75 DF            |\JNZ   SHORT SIM.0050B8A3               ;这里又是一个循环,判断EAX是否为0
0050B8C4|>8BC6               |MOV   EAX, ESI                        ;上面是补位不?逆向取
0050B8C6|.B9 23000000      |MOV   ECX, 0x23                         ;除数
0050B8CB|.33D2               |XOR   EDX, EDX
0050B8CD|.F7F1               |DIV   ECX                               ;DIV计算
0050B8CF|.8BF2               |MOV   ESI, EDX                        ;余数到ESI
0050B8D1|.8D55 C0            |LEA   EDX, DWORD PTR SS:[EBP-0x40]      ;第一步计算出来的Z-A0-9的字串
0050B8D4|.8B45 F8            |MOV   EAX, DWORD PTR SS:[EBP-0x8]       ;假码到EAX
0050B8D7|.8A4418 FF          |MOV   AL, BYTE PTR DS:[EAX+EBX-0x1]   ;假码第2部分第1位
0050B8DB|.B9 23000000      |MOV   ECX, 0x23
0050B8E0|.E8 ABF4FFFF      |CALL    SIM.0050AD90                      ;在串码里找相应的位置,取出相应的字母
0050B8E5|.3BF0               |CMP   ESI, EAX                        ;是否为第6的位置的字母,这里是注册码的第2组到第4组
0050B8E7|.0F94C0             |SETE    AL                              ;判断我们输入的假码是否有其相同,是则在下面累加个数
0050B8EA|.25 FF000000      |AND   EAX, 0xFF                         ;and FF
0050B8EF|.0145 EC            |ADD   DWORD PTR SS:[EBP-0x14], EAX      ;相加,这个相加很关键,因为这里判断有注册码有几位与算出来的是一样的,是则加1,不是则加0
0050B8F2|>83FE 01            |CMP   ESI, 0x1                        ;这个ESI就有两个意思了,如果是从顶上跳下来的,则为ASCII,如果是顺序下来的,则是
0050B8F5|.76 08            |JBE   SHORT SIM.0050B8FF                ;不高于 1则跳到下一位
0050B8F7|.4E               |DEC   ESI                               ;ESI-1
0050B8F8|.0FAF75 E4          |IMUL    ESI, DWORD PTR SS:[EBP-0x1C]      ;-1相乘
0050B8FC|.8975 E4            |MOV   DWORD PTR SS:[EBP-0x1C], ESI
0050B8FF|>8B45 F4            |MOV   EAX, DWORD PTR SS:[EBP-0xC]       ;假码长度到EAX, 这个也很关键
0050B902|.48               |DEC   EAX                               ;用户名长度-1
0050B903|.3BF8               |CMP   EDI, EAX                        ;也就是说,当循环的EDI长度大于注册码长度时,则置0,从第1位开始取,这里的0代表第1位
0050B905|.72 02            |JB      SHORT SIM.0050B909
0050B907|.33FF               |XOR   EDI, EDI                        ;清零
0050B909|>43               |INC   EBX                               ;计数器加1
0050B90A|.83FB 1E            |CMP   EBX, 0x1E                         ;长度1E=30,循环,其中6的倍数去除
0050B90D|.^ 0F85 56FFFFFF      \JNZ   SIM.0050B869                      ;1-30,6,12,18,24,30,共计5个是6的倍数,所以最多循环计算可得出25个数据
0050B913|.8B45 E4            MOV   EAX, DWORD PTR SS:[EBP-0x1C]       ;以下为计算第一组和第五组注册码,这里要用到三个数,即,算码出来的累加和,累积和,以及用户名的长度
0050B916|.03C7               ADD   EAX, EDI                           ;这个为累积
0050B918|.83C0 02            ADD   EAX, 0x2                           ;加上上面的EDI,再+2,除0x23求余数,然后找字母
0050B91B|.B9 23000000      MOV   ECX, 0x23                        ;下面的基本上是一样的,关键是要算出上面的数,才可以计算后面的位置
0050B920|.33D2               XOR   EDX, EDX
0050B922|.F7F1               DIV   ECX                              ;余数
0050B924|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]
0050B928|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050B92B|.3A02               CMP   AL, BYTE PTR DS:[EDX]            ;T
0050B92D|.0F94C0             SETE    AL
0050B930|.83E0 7F            AND   EAX, 0x7F
0050B933|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050B936|.8B45 E4            MOV   EAX, DWORD PTR SS:[EBP-0x1C]
0050B939|.8D0440             LEA   EAX, DWORD PTR DS:[EAX+EAX*2]
0050B93C|.B9 23000000      MOV   ECX, 0x23
0050B941|.33D2               XOR   EDX, EDX
0050B943|.F7F1               DIV   ECX
0050B945|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]   ;Z
0050B949|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050B94C|.3A42 01            CMP   AL, BYTE PTR DS:[EDX+0x1]
0050B94F|.0F94C0             SETE    AL
0050B952|.83E0 7F            AND   EAX, 0x7F
0050B955|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050B958|.8B45 E4            MOV   EAX, DWORD PTR SS:[EBP-0x1C]
0050B95B|.F7EF               IMUL    EDI
0050B95D|.6BC0 0B            IMUL    EAX, EAX, 0xB
0050B960|.B9 23000000      MOV   ECX, 0x23
0050B965|.33D2               XOR   EDX, EDX
0050B967|.F7F1               DIV   ECX
0050B969|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]   ;这个地址是怎么来的呢?
0050B96D|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050B970|.3A42 02            CMP   AL, BYTE PTR DS:[EDX+0x2]          ;Z
0050B973|.0F94C0             SETE    AL
0050B976|.83E0 7F            AND   EAX, 0x7F
0050B979|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX       ;这里就11了
0050B97C|.8B45 E4            MOV   EAX, DWORD PTR SS:[EBP-0x1C]
0050B97F|.F76D F4            IMUL    DWORD PTR SS:[EBP-0xC]
0050B982|.83C0 0D            ADD   EAX, 0xD
0050B985|.B9 23000000      MOV   ECX, 0x23
0050B98A|.33D2               XOR   EDX, EDX
0050B98C|.F7F1               DIV   ECX
0050B98E|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]   ;M
0050B992|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050B995|.3A42 03            CMP   AL, BYTE PTR DS:[EDX+0x3]
0050B998|.0F94C0             SETE    AL
0050B99B|.83E0 7F            AND   EAX, 0x7F
0050B99E|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050B9A1|.8B45 E4            MOV   EAX, DWORD PTR SS:[EBP-0x1C]
0050B9A4|.03C0               ADD   EAX, EAX
0050B9A6|.03C7               ADD   EAX, EDI
0050B9A8|.83E8 03            SUB   EAX, 0x3
0050B9AB|.B9 23000000      MOV   ECX, 0x23
0050B9B0|.33D2               XOR   EDX, EDX
0050B9B2|.F7F1               DIV   ECX
0050B9B4|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]   ;Y
0050B9B8|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050B9BB|.3A42 04            CMP   AL, BYTE PTR DS:[EDX+0x4]
0050B9BE|.0F94C0             SETE    AL
0050B9C1|.83E0 7F            AND   EAX, 0x7F
0050B9C4|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050B9C7|.8B45 E8            MOV   EAX, DWORD PTR SS:[EBP-0x18]
0050B9CA|.8D0440             LEA   EAX, DWORD PTR DS:[EAX+EAX*2]
0050B9CD|.83C0 1B            ADD   EAX, 0x1B
0050B9D0|.B9 23000000      MOV   ECX, 0x23
0050B9D5|.33D2               XOR   EDX, EDX
0050B9D7|.F7F1               DIV   ECX
0050B9D9|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]   ;前面的为第一组注册码TZZMY
0050B9DD|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]      ;C
0050B9E0|.3A42 18            CMP   AL, BYTE PTR DS:[EDX+0x18]         ;最后一组的第1位
0050B9E3|.0F94C0             SETE    AL
0050B9E6|.83E0 7F            AND   EAX, 0x7F
0050B9E9|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050B9EC|.8B45 E8            MOV   EAX, DWORD PTR SS:[EBP-0x18]
0050B9EF|.C1E0 03            SHL   EAX, 0x3
0050B9F2|.83E8 02            SUB   EAX, 0x2
0050B9F5|.B9 23000000      MOV   ECX, 0x23
0050B9FA|.33D2               XOR   EDX, EDX
0050B9FC|.F7F1               DIV   ECX
0050B9FE|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]
0050BA02|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]      ;8
0050BA05|.3A42 19            CMP   AL, BYTE PTR DS:[EDX+0x19]         ;最后一组第2位 8
0050BA08|.0F94C0             SETE    AL
0050BA0B|.83E0 7F            AND   EAX, 0x7F
0050BA0E|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050BA11|.8B45 E8            MOV   EAX, DWORD PTR SS:[EBP-0x18]
0050BA14|.F76D F4            IMUL    DWORD PTR SS:[EBP-0xC]
0050BA17|.03C0               ADD   EAX, EAX
0050BA19|.8D0440             LEA   EAX, DWORD PTR DS:[EAX+EAX*2]
0050BA1C|.B9 23000000      MOV   ECX, 0x23
0050BA21|.33D2               XOR   EDX, EDX
0050BA23|.F7F1               DIV   ECX
0050BA25|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]   ;T
0050BA29|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050BA2C|.3A42 1A            CMP   AL, BYTE PTR DS:[EDX+0x1A]
0050BA2F|.0F94C0             SETE    AL
0050BA32|.83E0 7F            AND   EAX, 0x7F
0050BA35|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050BA38|.8B45 E8            MOV   EAX, DWORD PTR SS:[EBP-0x18]
0050BA3B|.0345 F4            ADD   EAX, DWORD PTR SS:[EBP-0xC]
0050BA3E|.83C0 04            ADD   EAX, 0x4
0050BA41|.B9 23000000      MOV   ECX, 0x23
0050BA46|.33D2               XOR   EDX, EDX
0050BA48|.F7F1               DIV   ECX
0050BA4A|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]   ;8
0050BA4E|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050BA51|.3A42 1B            CMP   AL, BYTE PTR DS:[EDX+0x1B]
0050BA54|.0F94C0             SETE    AL
0050BA57|.83E0 7F            AND   EAX, 0x7F
0050BA5A|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX       ;最后一个数要算到0x18
0050BA5D|.8B45 E8            MOV   EAX, DWORD PTR SS:[EBP-0x18]
0050BA60|.8D0440             LEA   EAX, DWORD PTR DS:[EAX+EAX*2]
0050BA63|.83C0 13            ADD   EAX, 0x13
0050BA66|.B9 23000000      MOV   ECX, 0x23
0050BA6B|.33D2               XOR   EDX, EDX
0050BA6D|.F7F1               DIV   ECX
0050BA6F|.8A4415 C0          MOV   AL, BYTE PTR SS:[EBP+EDX-0x40]
0050BA73|.8B55 F8            MOV   EDX, DWORD PTR SS:[EBP-0x8]
0050BA76|.3A42 1C            CMP   AL, BYTE PTR DS:[EDX+0x1C]         ;K
0050BA79|.0F94C0             SETE    AL
0050BA7C|.83E0 7F            AND   EAX, 0x7F                        ;这里计算出来的数据要比较?
0050BA7F|.0145 EC            ADD   DWORD PTR SS:[EBP-0x14], EAX
0050BA82|.837D EC 19         CMP   DWORD PTR SS:[EBP-0x14], 0x19      ;那就是这里的长度了,判断有几个字母与其是相同的,如果有0x19位相同,则表示成功,否则就不成功
0050BA86|.0F94C3             SETE    BL                                 ;那么,其实这就是一个爆破点,你只要把这里的94改95就可以爆破
0050BA89|.33C0               XOR   EAX, EAX
0050BA8B|.5A               POP   EDX
0050BA8C|.59               POP   ECX
0050BA8D|.59               POP   ECX
0050BA8E|.64:8910            MOV   DWORD PTR FS:[EAX], EDX
0050BA91|.68 ABBA5000      PUSH    SIM.0050BAAB
0050BA96|>8D45 F8            LEA   EAX, DWORD PTR SS:[EBP-0x8]
0050BA99|.BA 02000000      MOV   EDX, 0x2
0050BA9E|.E8 598FEFFF      CALL    SIM.004049FC                     ;这个CALL基本上不用看
0050BAA3\.C3               RETN
0050BAA4   .^ E9 0B89EFFF      JMP   SIM.004043B4
0050BAA9   .^ EB EB            JMP   SHORT SIM.0050BA96
0050BAAB   .8BC3               MOV   EAX, EBX                           ;这里就是把上面是否注册成功的标志给了EAX,用EAX来判断是否成功,当然你在这里爆破也是一样的,只要将它置0就可以
0050BAAD   .5F               POP   EDI
0050BAAE   .5E               POP   ESI
0050BAAF   .5B               POP   EBX
0050BAB0   .8BE5               MOV   ESP, EBP
0050BAB2   .5D               POP   EBP
0050BAB3   .C3               RETN







--------------------------------------------------------------------------------
【经验总结】
总结嘛,其实是有点晕的,因为里面有很多个循环,这里我上传我写的算法工具,在把计算过程输出来,供你一起研究

--------------------------------------------------------------------------------
【版权声明】: 本文原创于Crackvip, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2015年05月07日 23:44:05





**** Hidden Message *****



crackvip 发表于 2015-5-8 16:14:03

沙发是我的。。GGLHY你别抢

l0v3cr4ck 发表于 2015-5-8 16:16:14

永远坐在你腿上!我是来学习的!

kghong 发表于 2015-5-8 16:20:37

感谢分享,慢慢学习

namelessfirst 发表于 2015-5-8 16:45:40

感谢分享,慢慢学习

speedboy 发表于 2015-5-8 17:02:01

我现在越来越喜欢你了,哈哈

0xcb 发表于 2015-5-8 17:03:26

支持来啦

老万 发表于 2015-5-8 17:11:00

学习了,谢谢分享

回忆无法挽留 发表于 2015-5-8 17:16:43

看上去好复杂的算法{:soso_e134:}

GGLHY 发表于 2015-5-8 17:20:34

crackvip 发表于 2015-5-8 16:14
沙发是我的。。GGLHY你别抢

我不抢你的沙发,我只抢妹子{:soso_e120:}

真心赞一个了!
页: [1] 2 3 4 5 6
查看完整版本: Smart Install Maker 5.04算法分析