- UID
- 76030
注册时间2014-6-5
阅读权限30
最后登录1970-1-1
龙战于野
TA的每日心情 | 慵懒 2015-8-14 00:08 |
---|
签到天数: 25 天 [LV.4]偶尔看看III
|
本帖最后由 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
找到这一处
[Strings]
...
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:[0x511F34]
004EF429 |. C600 01 MOV BYTE PTR DS:[EAX], 0x1
004EF42C |. A1 7C235100 MOV EAX, DWORD PTR DS:[0x51237C]
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:[0x511EA4]
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:[0x4258D8] ; $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:[0x511F34]
004EF429 |. C600 01 MOV BYTE PTR DS:[EAX], 0x1
004EF42C |. A1 7C235100 MOV EAX, DWORD PTR DS:[0x51237C]
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:[0x511EA4]
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 ; [EBP-0x1C]= 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 ; 用户名 长度到[EBP-0x10]
0050B8A3 |> 8B55 FC |/MOV EDX, DWORD PTR SS:[EBP-0x4] ; 用户名到EDX
0050B8A6 |. 8B4D F0 ||MOV ECX, DWORD PTR SS:[EBP-0x10] ; [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 ; [ebp-0x1c]这个为累积
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
|
评分
-
查看全部评分
|