飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5721|回复: 11

[原创] 还没开始就已经结束了,哈哈

  [复制链接]
  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2018-12-9 21:02:49 | 显示全部楼层 |阅读模式
    正如标题所说,这是前几天小马哥刚刚发的一个帖子里的软件Video Splitter Business/Home Edition 6.1 优雅补丁 By Smallhorsehttps://www.chinapyg.com/thread-121590-1-1.html
    抽空分析了一下算法,然而刚刚分析完后作者就升级了新版本,用了VMP的注册,算法也改变了,新版我是搞不定了。不过没关系,我只是玩玩,打发时间,说一下6.1版本的算法分析吧,应该还是比较简单吧
    关键算法应该很容易就定位到,是这里
    [Asm] 纯文本查看 复制代码
    0044E4C0  /$  55            push ebp
    0044E4C1  |.  8BEC          mov ebp,esp
    0044E4C3  |.  81EC 08040000 sub esp,0x408
    0044E4C9  |.  A1 34C5BC00   mov eax,dword ptr ds:[0xBCC534]
    0044E4CE  |.  33C5          xor eax,ebp
    0044E4D0  |.  8945 FC       mov [local.1],eax
    0044E4D3  |.  56            push esi                                 ;  SMMVSpli.007EE7B8
    0044E4D4  |.  C685 FCFDFFFF>mov byte ptr ss:[ebp-0x204],0x0
    0044E4DB  |.  68 FF010000   push 0x1FF
    0044E4E0  |.  6A 00         push 0x0
    
    


    会得到一个字符串0012E848   02E7F878  ASCII "SolveigMM Video Splitter Business Edition6",下面会对字符串转大写和MD5
    [Asm] 纯文本查看 复制代码
    0044E528  |.  E8 B5735B00   call SMMVSpli.00A058E2                   ;  转大写
    0044E52D  |.  83C4 04       add esp,0x4
    0044E530  |.  8D95 FCFBFFFF lea edx,[local.257]
    0044E536  |.  52            push edx
    0044E537  |.  E8 541D0000   call SMMVSpli.00450290                   ;  MD5
    0044E53C  |.  83C4 04       add esp,0x4
    
    

    下面有个关键的call,是这样子的,看一下注释
    [Asm] 纯文本查看 复制代码
    0044E551  |.  E8 FA060000   call SMMVSpli.0044EC50                   ;  注册码每位减去md5的值后得到新的字符串
    
    

    F7跟进去可以看一下过程,关键就这么多
    [Asm] 纯文本查看 复制代码
    0044EBFF  |.  0FB655 0C     movzx edx,byte ptr ss:[ebp+0xC]
    0044EC03  |.  52            push edx
    0044EC04  |.  E8 77FFFFFF   call SMMVSpli.0044EB80
    0044EC09  |.  83C4 04       add esp,0x4
    0044EC0C  |.  2BF0          sub esi,eax
    0044EC0E  |.  8975 F8       mov [local.2],esi                        ;  SMMVSpli.007EE7B8
    0044EC11  |.  79 09         jns short SMMVSpli.0044EC1C
    0044EC13  |.  8B45 F8       mov eax,[local.2]
    0044EC16  |.  83C0 10       add eax,0x10
    0044EC19  |.  8945 F8       mov [local.2],eax
    0044EC1C  |>  8B4D F8       mov ecx,[local.2]
    
    

    然后将新的字符串转大写,这是过程
    [Asm] 纯文本查看 复制代码
    0044E565  |> /8B85 F8FBFFFF /mov eax,[local.258]
    0044E56B  |. |83C0 01       |add eax,0x1
    0044E56E  |. |8985 F8FBFFFF |mov [local.258],eax
    0044E574  |> |8D8D FCFDFFFF  lea ecx,[local.129]
    0044E57A  |. |51            |push ecx
    0044E57B  |. |E8 600F5800   |call SMMVSpli.009CF4E0                  ;  得到变换后新字符串的长度
    0044E580  |. |83C4 04       |add esp,0x4
    0044E583  |. |3985 F8FBFFFF |cmp [local.258],eax
    0044E589  |. |0F83 95000000 |jnb SMMVSpli.0044E624
    0044E58F  |. |8B95 F8FBFFFF |mov edx,[local.258]
    0044E595  |. |0FBE8415 FCFD>|movsx eax,byte ptr ss:[ebp+edx-0x204]
    0044E59D  |. |83F8 61       |cmp eax,0x61                            ;  a
    0044E5A0  |. |74 5F         |je short SMMVSpli.0044E601
    0044E5A2  |. |8B8D F8FBFFFF |mov ecx,[local.258]
    0044E5A8  |. |0FBE940D FCFD>|movsx edx,byte ptr ss:[ebp+ecx-0x204]
    0044E5B0  |. |83FA 62       |cmp edx,0x62
    0044E5B3  |. |74 4C         |je short SMMVSpli.0044E601
    0044E5B5  |. |8B85 F8FBFFFF |mov eax,[local.258]
    0044E5BB  |. |0FBE8C05 FCFD>|movsx ecx,byte ptr ss:[ebp+eax-0x204]
    0044E5C3  |. |83F9 63       |cmp ecx,0x63
    0044E5C6  |. |74 39         |je short SMMVSpli.0044E601
    0044E5C8  |. |8B95 F8FBFFFF |mov edx,[local.258]
    0044E5CE  |. |0FBE8415 FCFD>|movsx eax,byte ptr ss:[ebp+edx-0x204]
    0044E5D6  |. |83F8 64       |cmp eax,0x64
    0044E5D9  |. |74 26         |je short SMMVSpli.0044E601
    0044E5DB  |. |8B8D F8FBFFFF |mov ecx,[local.258]
    0044E5E1  |. |0FBE940D FCFD>|movsx edx,byte ptr ss:[ebp+ecx-0x204]
    0044E5E9  |. |83FA 65       |cmp edx,0x65
    0044E5EC  |. |74 13         |je short SMMVSpli.0044E601
    0044E5EE  |. |8B85 F8FBFFFF |mov eax,[local.258]
    0044E5F4  |. |0FBE8C05 FCFD>|movsx ecx,byte ptr ss:[ebp+eax-0x204]
    0044E5FC  |. |83F9 66       |cmp ecx,0x66                            ;  f
    0044E5FF  |. |75 1E         |jnz short SMMVSpli.0044E61F
    0044E601  |> |8B95 F8FBFFFF |mov edx,[local.258]
    0044E607  |. |0FBE8415 FCFD>|movsx eax,byte ptr ss:[ebp+edx-0x204]
    0044E60F  |. |83E8 20       |sub eax,0x20
    0044E612  |. |8B8D F8FBFFFF |mov ecx,[local.258]
    0044E618  |. |88840D FCFDFF>|mov byte ptr ss:[ebp+ecx-0x204],al
    0044E61F  |>^\E9 41FFFFFF   \jmp SMMVSpli.0044E565
    
    


    接下来就是比较关键的部分了,对新字符串的第18位做了个判断,然后再做了一系列的处理
    [Asm] 纯文本查看 复制代码
    0044E641  |.  6BC8 11       imul ecx,eax,0x11
    0044E644  |.  0FBE940D FCFD>movsx edx,byte ptr ss:[ebp+ecx-0x204]    ;  取新字符串的第18位
    0044E64C  |.  83FA 30       cmp edx,0x30                             ;  0
    0044E64F  |.  0F84 9B000000 je SMMVSpli.0044E6F0
    0044E655  |.  B8 01000000   mov eax,0x1
    
    


    代码者类似,如这样子
    [Asm] 纯文本查看 复制代码
    0044E6F0  |> \B8 01000000   mov eax,0x1
    0044E6F5  |.  6BC8 14       imul ecx,eax,0x14
    0044E6F8  |.  0FB6940D FCFD>movzx edx,byte ptr ss:[ebp+ecx-0x204]    ;  取新字符串的第21位
    0044E700  |.  52            push edx
    0044E701  |.  E8 7A040000   call SMMVSpli.0044EB80                   ;  字符串转16进制
    0044E706  |.  83C4 04       add esp,0x4
    0044E709  |.  83C0 17       add eax,0x17                             ;  加上23
    0044E70C  |.  8BF0          mov esi,eax
    0044E70E  |.  81E6 0F000080 and esi,0x8000000F
    0044E714  |.  79 05         jns short SMMVSpli.0044E71B
    0044E716  |.  4E            dec esi                                  ;  SMMVSpli.007EE7B8
    0044E717  |.  83CE F0       or esi,-0x10
    0044E71A  |.  46            inc esi                                  ;  SMMVSpli.007EE7B8
    0044E71B  |>  B8 01000000   mov eax,0x1
    0044E720  |.  D1E0          shl eax,1
    0044E722  |.  0FB68C05 FCFD>movzx ecx,byte ptr ss:[ebp+eax-0x204]    ;  取新字符串的第3位
    0044E72A  |.  51            push ecx
    0044E72B  |.  E8 50040000   call SMMVSpli.0044EB80
    0044E730  |.  83C4 04       add esp,0x4
    0044E733  |.  3BF0          cmp esi,eax
    0044E735  |.  74 07         je short SMMVSpli.0044E73E
    0044E737  |.  33C0          xor eax,eax
    0044E739  |.  E9 25040000   jmp SMMVSpli.0044EB63
    0044E73E  |>  BA 01000000   mov edx,0x1
    
    

    应该是比较长吧,我总结了一下是这样子
    取新字符串的第18位
               如果是02468ACE的话
               取新字符串的第21位转成16进制后加上23再取结果的最后一位记为N1,
               取新字符串的第3位记为N2   
                        要求N1==N2
               取新字符串的第13位转成16进制后加上27,再取结果的最后一位,记为N3
               取新字符串的第7位转成16进制后记为N4
                        要求N3==N4
               取新字符串的第1位转16进制后加上21,再取结果的最后一位,记为N5
               取新字符串的第14位转16进制后记为N6
                        要求N5==N6
               取新字符串的第10位转16进制后加上29,再取结果的最后一位,记为N7
               取新字符串的第19位转16进制后记为N8
                        要求N7==N8
               取新字符串的第2位转16进制后加上17,再取结果的最后一位,记为N9
               取新字符串的第25位转16进制后记为N10
                        要求N9==N10
               取新字符串的第12位转16进制后加上25,再取结果的最后一位,记为N11
               取新字符串的第30位转16进制后记为N12
                        要求N11==N2



               如果是13579BDF的话,
               取新字符串的第16位转成16进制后加上26再取结果的最后一位记为S1,
               取新字符串的第3位记为S2   
                        要求S1==S2
               取新字符串的第4位转成16进制后加上18,再取结果的最后一位,记为S3
               取新字符串的第6位转成16进制后记为S4
                        要求S3==S4
               取新字符串的第9位转16进制后加上19,再取结果的最后一位,记为S5
               取新字符串的第15位转16进制后记为S6
                        要求S5==S6
               取新字符串的第22位转16进制后加上22,再取结果的最后一位,记为S7
               取新字符串的第17位转16进制后记为S8
                        要求S7==S8
               取新字符串的第11位转16进制后加上31,再取结果的最后一位,记为S9
               取新字符串的第23位转16进制后记为S10
                        要求S9==S10
               取新字符串的第32位转16进制后加上23,再取结果的最后一位,记为S11
               取新字符串的第29位转16进制后记为S12
                        要求S11==S12
    根据上面的意思,就可以得到一组注册码了:730b65b8ce5fe5bb39c0af483367eaa5

                              再次感谢GG老师及一起玩游戏小组全体成员!

    来自群组: 一起玩游戏

    评分

    参与人数 4威望 +8 飘云币 +4 收起 理由
    Anewbie + 2 感谢发布原创作品,PYG有你更精彩!
    飞天 + 2 + 2 感谢发布原创作品,PYG有你更精彩!
    smallhorse + 2 + 2 吃水不忘打井人,给个评分懂感恩!
    不破不立 + 2 感谢发布原创作品,PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 2205 天

    [LV.Master]伴坛终老

    发表于 2018-12-9 21:34:29 | 显示全部楼层
    wgz001  666
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-1-8 09:17
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2018-12-9 22:20:01 | 显示全部楼层
    #在这里快速回复#                         再次感谢
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 1828 天

    [LV.Master]伴坛终老

    发表于 2018-12-10 00:21:00 | 显示全部楼层
    wgz001  v587
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 19:54
  • 签到天数: 1378 天

    [LV.10]以坛为家III

    发表于 2018-12-10 08:11:26 | 显示全部楼层
    求大腿,王哥,带我玩keygen

    点评

    算法都分析完了,keygen可以自己写一写了啊  详情 回复 发表于 2018-12-10 08:45
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-19 19:02
  • 签到天数: 1673 天

    [LV.Master]伴坛终老

    发表于 2018-12-10 08:31:35 | 显示全部楼层
    有水平!谢谢
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

     楼主| 发表于 2018-12-10 08:45:53 | 显示全部楼层
    smallhorse 发表于 2018-12-10 08:11
    求大腿,王哥,带我玩keygen

    算法都分析完了,keygen可以自己写一写了啊
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-1-5 11:28
  • 签到天数: 1312 天

    [LV.10]以坛为家III

    发表于 2018-12-10 17:06:45 | 显示全部楼层
    老王又要玩JJ了吗
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2018-12-10 17:20:13 | 显示全部楼层
    玩公子,v587,6666666666
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 1405 天

    [LV.10]以坛为家III

    发表于 2018-12-10 19:55:49 | 显示全部楼层
    wgz威武,感谢分享过程。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表