飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3926|回复: 2

[原创] 某视频转换软件算法分析

[复制链接]
  • TA的每日心情
    开心
    2019-2-6 23:35
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-1-10 15:36:10 | 显示全部楼层 |阅读模式
    1. 【破文标题】某视频转换软件算法分析
    2. 破解工具】OD
    3. 【破解平台】Windows
    4. 【软件名称】某视频转换软件
    5. 【软件简介】https://www.chinapyg.com/viewthread.php?tid=53247&extra=page%3D1
    6. 【破解声明】
    7. ------------------------------------------------------------------------
    8. 【破解过程】004D6E62      00            db      00
    9. 004D6E63      90            nop
    10. 004D6E64  /$  55            push    ebp                              ;  算法入口
    11. 004D6E65  |.  8BEC          mov     ebp, esp
    12. 004D6E67  |.  51            push    ecx
    13. 004D6E68  |.  B9 04000000   mov     ecx, 4
    14. 004D6E6D  |>  6A 00         /push    0
    15. 004D6E6F  |.  6A 00         |push    0
    16. 004D6E71  |.  49            |dec     ecx
    17. 004D6E72  |.^ 75 F9         \jnz     short 004D6E6D                  ;  push 8 0
    18. 004D6E74  |.  51            push    ecx
    19. 004D6E75  |.  874D FC       xchg    dword ptr [ebp-4], ecx
    20. 004D6E78  |.  53            push    ebx
    21. 004D6E79  |.  56            push    esi
    22. 004D6E7A  |.  57            push    edi
    23. 004D6E7B  |.  8BF9          mov     edi, ecx
    24. 004D6E7D  |.  8955 FC       mov     dword ptr [ebp-4], edx           ;  edx -- name
    25. 004D6E80  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  eax -- name
    26. 004D6E83  |.  E8 08DBF2FF   call    00404990
    27. 004D6E88  |.  33C0          xor     eax, eax
    28. 004D6E8A  |.  55            push    ebp
    29. 004D6E8B  |.  68 25704D00   push    004D7025
    30. 004D6E90  |.  64:FF30       push    dword ptr fs:[eax]
    31. 004D6E93  |.  64:8920       mov     dword ptr fs:[eax], esp
    32. 004D6E96  |.  8BC7          mov     eax, edi
    33. 004D6E98  |.  E8 43D6F2FF   call    004044E0
    34. 004D6E9D  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  [ebp-4] --- name
    35. 004D6EA0  |.  E8 FBD8F2FF   call    004047A0                         ;  len(eax) --- 9
    36. 004D6EA5  |.  8BF0          mov     esi, eax
    37. 004D6EA7  |.  85F6          test    esi, esi
    38. 004D6EA9  |.  7E 26         jle     short 004D6ED1                   ;  if len(name) <= 0, then jump
    39. 004D6EAB  |.  BB 01000000   mov     ebx, 1                           ;  ebx = 1
    40. 004D6EB0  |>  8D4D EC       /lea     ecx, dword ptr [ebp-14]
    41. 004D6EB3  |.  8B45 FC       |mov     eax, dword ptr [ebp-4]          ;  eax -- name
    42. 004D6EB6  |.  0FB64418 FF   |movzx   eax, byte ptr [eax+ebx-1]       ;  eax = name[ebx-1]
    43. 004D6EBB  |.  33D2          |xor     edx, edx
    44. 004D6EBD  |.  E8 E222F3FF   |call    004091A4                        ;  eax to ASCII string (16进制大写)
    45. 004D6EC2  |.  8B55 EC       |mov     edx, dword ptr [ebp-14]         ;  edx -- ASCII string of eax
    46. 004D6EC5  |.  8D45 F8       |lea     eax, dword ptr [ebp-8]          ;  eax -- some buffer
    47. 004D6EC8  |.  E8 DBD8F2FF   |call    004047A8                        ;  strcat(eax, edx)
    48. 004D6ECD  |.  43            |inc     ebx
    49. 004D6ECE  |.  4E            |dec     esi
    50. 004D6ECF  |.^ 75 DF         \jnz     short 004D6EB0
    51. 004D6ED1  |>  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  [ebp-8] --- AsciiString of name --- NameAscii
    52. 004D6ED4  |.  E8 C7D8F2FF   call    004047A0                         ;  eax = len(eax)
    53. 004D6ED9  |.  8BF0          mov     esi, eax
    54. 004D6EDB  |.  85F6          test    esi, esi
    55. 004D6EDD  |.  7E 2C         jle     short 004D6F0B
    56. 004D6EDF  |.  BB 01000000   mov     ebx, 1
    57. 004D6EE4  |>  8B45 F8       /mov     eax, dword ptr [ebp-8]
    58. 004D6EE7  |.  E8 B4D8F2FF   |call    004047A0                        ;  eax = len(eax) -- len([ebp-8])
    59. 004D6EEC  |.  2BC3          |sub     eax, ebx                        ;  eax = eax - ebx
    60. 004D6EEE  |.  8B55 F8       |mov     edx, dword ptr [ebp-8]          ;  edx -- [ebp-8] -- NameAscii
    61. 004D6EF1  |.  8A1402        |mov     dl, byte ptr [edx+eax]          ;  dl = NameAscii[eax]
    62. 004D6EF4  |.  8D45 E8       |lea     eax, dword ptr [ebp-18]         ;  [ebp-18] -- some buffer
    63. 004D6EF7  |.  E8 CCD7F2FF   |call    004046C8
    64. 004D6EFC  |.  8B55 E8       |mov     edx, dword ptr [ebp-18]
    65. 004D6EFF  |.  8D45 F4       |lea     eax, dword ptr [ebp-C]
    66. 004D6F02  |.  E8 A1D8F2FF   |call    004047A8                        ;  strcat(eax, edx)
    67. 004D6F07  |.  43            |inc     ebx
    68. 004D6F08  |.  4E            |dec     esi
    69. 004D6F09  |.^ 75 D9         \jnz     short 004D6EE4                  ;  以上 反转(NameAscii) -- NameAscii2
    70. 004D6F0B  |>  8D45 F8       lea     eax, dword ptr [ebp-8]
    71. 004D6F0E  |.  50            push    eax                              ;  eax -- some buffer
    72. 004D6F0F  |.  B9 04000000   mov     ecx, 4
    73. 004D6F14  |.  BA 01000000   mov     edx, 1
    74. 004D6F19  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  [ebp-c] -- NameAscii2
    75. 004D6F1C  |.  E8 DFDAF2FF   call    00404A00                         ;  substring(NameAscii2, 1, 4)
    76. 004D6F21  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
    77. 004D6F24  |.  50            push    eax
    78. 004D6F25  |.  B9 04000000   mov     ecx, 4
    79. 004D6F2A  |.  BA 05000000   mov     edx, 5
    80. 004D6F2F  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
    81. 004D6F32  |.  E8 C9DAF2FF   call    00404A00                         ;  substring(NameAscii2, 5, 4)
    82. 004D6F37  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  [ebp-8] -- NameAscii2 前4位
    83. 004D6F3A  |.  E8 61D8F2FF   call    004047A0
    84. 004D6F3F  |.  83F8 04       cmp     eax, 4
    85. 004D6F42  |.  7D 2F         jge     short 004D6F73                   ;  if >= 4, jmp
    86. 004D6F44  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
    87. 004D6F47  |.  E8 54D8F2FF   call    004047A0
    88. 004D6F4C  |.  8BD8          mov     ebx, eax                         ;  ebx = len(前几位)
    89. 004D6F4E  |.  83FB 03       cmp     ebx, 3
    90. 004D6F51  |.  7F 20         jg      short 004D6F73                   ;  if >= 3 , jmp
    91. 004D6F53  |>  8D4D E4       /lea     ecx, dword ptr [ebp-1C]
    92. 004D6F56      8BC3          mov     eax, ebx                         ;  eax = 2/3
    93. 004D6F58  |.  C1E0 02       |shl     eax, 2                          ;  eax = eax * 4
    94. 004D6F5B  |.  33D2          |xor     edx, edx
    95. 004D6F5D  |.  E8 4222F3FF   |call    004091A4                        ;  eax to AsciiString
    96. 004D6F62  |.  8B55 E4       |mov     edx, dword ptr [ebp-1C]         ;  可能是8 C
    97. 004D6F65  |.  8D45 F8       |lea     eax, dword ptr [ebp-8]
    98. 004D6F68  |.  E8 3BD8F2FF   |call    004047A8                        ;  strcat(eax, edx)
    99. 004D6F6D  |.  43            |inc     ebx
    100. 004D6F6E  |.  83FB 04       |cmp     ebx, 4
    101. 004D6F71  |.^ 75 E0         \jnz     short 004D6F53                  ;  凑够4位
    102. 004D6F73  |>  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  [ebp-c] NameAscii2 第二个前4位
    103. 004D6F76  |.  E8 25D8F2FF   call    004047A0
    104. 004D6F7B  |.  83F8 04       cmp     eax, 4
    105. 004D6F7E  |.  7D 2F         jge     short 004D6FAF
    106. 004D6F80  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
    107. 004D6F83  |.  E8 18D8F2FF   call    004047A0
    108. 004D6F88  |.  8BD8          mov     ebx, eax
    109. 004D6F8A  |.  83FB 03       cmp     ebx, 3
    110. 004D6F8D  |.  7F 20         jg      short 004D6FAF
    111. 004D6F8F  |>  8D4D E0       /lea     ecx, dword ptr [ebp-20]
    112. 004D6F92  |.  8BC3          |mov     eax, ebx                        ;  可能是 0 1 2 3
    113. 004D6F94  |.  C1E0 02       |shl     eax, 2
    114. 004D6F97  |.  33D2          |xor     edx, edx
    115. 004D6F99  |.  E8 0622F3FF   |call    004091A4
    116. 004D6F9E  |.  8B55 E0       |mov     edx, dword ptr [ebp-20]         ;  0 4 8 C
    117. 004D6FA1  |.  8D45 F4       |lea     eax, dword ptr [ebp-C]
    118. 004D6FA4  |.  E8 FFD7F2FF   |call    004047A8
    119. 004D6FA9  |.  43            |inc     ebx
    120. 004D6FAA  |.  83FB 04       |cmp     ebx, 4
    121. 004D6FAD  |.^ 75 E0         \jnz     short 004D6F8F                  ;  凑够4位
    122. 004D6FAF  |>  8D45 F0       lea     eax, dword ptr [ebp-10]
    123. 004D6FB2  |.  BA 3C704D00   mov     edx, 004D703C                    ;  lenomp4888
    124. 004D6FB7  |.  E8 BCD5F2FF   call    00404578                         ;  store something to [ebp-10]
    125. 004D6FBC  |.  8D45 DC       lea     eax, dword ptr [ebp-24]          ;  buff
    126. 004D6FBF  |.  50            push    eax
    127. 004D6FC0  |.  B9 04000000   mov     ecx, 4
    128. 004D6FC5  |.  BA 01000000   mov     edx, 1
    129. 004D6FCA  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
    130. 004D6FCD  |.  E8 2EDAF2FF   call    00404A00                         ;  取 1234 位 到 [ebp-24]
    131. 004D6FD2  |.  FF75 DC       push    dword ptr [ebp-24]
    132. 004D6FD5  |.  68 50704D00   push    004D7050                         ;  -
    133. 004D6FDA  |.  FF75 F8       push    dword ptr [ebp-8]
    134. 004D6FDD  |.  8D45 D8       lea     eax, dword ptr [ebp-28]          ;  buff
    135. 004D6FE0  |.  50            push    eax
    136. 004D6FE1  |.  B9 05000000   mov     ecx, 5
    137. 004D6FE6  |.  BA 05000000   mov     edx, 5
    138. 004D6FEB  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
    139. 004D6FEE  |.  E8 0DDAF2FF   call    00404A00                         ;  从 [ebp-10]的 56789 位 到[epb-28]
    140. 004D6FF3  |.  FF75 D8       push    dword ptr [ebp-28]
    141. 004D6FF6  |.  68 50704D00   push    004D7050                         ;  -
    142. 004D6FFB  |.  FF75 F4       push    dword ptr [ebp-C]
    143. 004D6FFE  |.  8BC7          mov     eax, edi
    144. 004D7000  |.  BA 06000000   mov     edx, 6
    145. 004D7005  |.  E8 56D8F2FF   call    00404860
    146. 004D700A  |.  33C0          xor     eax, eax
    147. 004D700C  |.  5A            pop     edx
    148. 004D700D  |.  59            pop     ecx
    149. 004D700E  |.  59            pop     ecx
    150. 004D700F  |.  64:8910       mov     dword ptr fs:[eax], edx
    151. 004D7012  |.  68 2C704D00   push    004D702C
    152. 004D7017  |>  8D45 D8       lea     eax, dword ptr [ebp-28]
    153. 004D701A  |.  BA 0A000000   mov     edx, 0A
    154. 004D701F  |.  E8 E0D4F2FF   call    00404504
    155. 004D7024  \.  C3            retn
    156. 004D7025   .^ E9 FACDF2FF   jmp     00403E24
    157. 004D702A   .^ EB EB         jmp     short 004D7017
    158. 004D702C   .  5F            pop     edi
    159. 004D702D   .  5E            pop     esi
    160. 004D702E   .  5B            pop     ebx
    161. 004D702F   .  8BE5          mov     esp, ebp
    162. 004D7031   .  5D            pop     ebp
    163. 004D7032   .  C3            retn
    164. 004D7033      00            db      00


    165. ------------------------------------------------------------------------
    166. 【破解总结】算法比较简单,伪码如下:

    167. name // 用户名
    168. NameAscii = AsciiString(name)// 去用户名的Ascii大写字符串
    169. NameAscii2 = 反转(NameAscii) // 反转用户名Ascii字符串
    170. N1 = 取子串(NameAscii2, 1, 4) // 1到4位
    171. N2 = 取子串(nameascii2, 5,4)// 5 到8位
    172. 如果 取 长度(N1)不大于3 或 4, 补齐{
    173.    补 0 4 8 C
    174.   ...
    175. }
    176. Code = "lenomp4888"
    177. C1 = 取子串(Code,1,4)// 取 1 到 4 位
    178. C1 入栈
    179. "-"入栈
    180. N1入栈
    181. C2 = 取子串(Code,5, 5) // 取 5 到 9 位
    182. C2入栈
    183. "-"入栈
    184. N2入栈
    185. 连接以上6个入栈的字符串
    186. ------------------------------------------------------------------------
    187. 【版权声明】本文只是出于学习和交流目的,请勿用于商业用途,否则后果自负。软件版权归作者所有。
    复制代码
    软件在https://www.chinapyg.com/viewthr ... &extra=page%3D1里有介绍
    tianxj老大说有暗桩,不过那就不是我这个小菜鸟能解决的了,^_^

    [ 本帖最后由 liuyun213 于 2010-1-10 16:27 编辑 ]

    评分

    参与人数 1飘云币 +20 收起 理由
    sjh717142 + 20 感谢您发布的原创作品!

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-2-23 13:57:10 | 显示全部楼层
    /:010 貌似算法很复杂..
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-3-7 16:11:13 | 显示全部楼层

    回复 2# 明次 的帖子

    学习中,这个不错
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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