飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3218|回复: 9

[原创] 新年某CM第一篇菜鸟级算法分析

[复制链接]
  • TA的每日心情
    开心
    2019-3-25 15:21
  • 签到天数: 487 天

    [LV.9]以坛为家II

    发表于 2015-1-1 16:26:55 | 显示全部楼层 |阅读模式
    本帖最后由 Rooking 于 2015-1-1 16:33 编辑

    首先恭祝各位兄弟姐妹,大叔大嫂,姥姥老爷,孙子孙女们,新年好,万事吉,行大运.

    头一次这么认真的看一个CM 了 居然还是VB 程序 代码臭长 浪费了好久 算法 是不难 但是难找 (对于我来说 哈哈)

    此CM 是GG 找来的放群共享的 于是下载下来练练手.
    不多说了 来说说CM吧
    首先CM加了UPX 上工具杀之
    其次CM 编辑框 是灰色的 NND 上工具杀之
    下来是算法了,拖入OD先
    查找一下字符串 很好 有提示




    高兴吧 双击进来,经过分析后第一个提示失败的是 检测用户名 不是7位 直接挂掉

    那就输入7位吧 我的名字刚好七位 不信?   Rooking 你数一下? 呵呵

    直接贴代码吧

    1. 比较用户名是否7位 不等直接挂

    2. <font color="#ff0000">00401FE3   .  FF15 28104000 call dword ptr ds:[0x401028]                     ;  msvbvm60.__vbaHresultCheckObj
    3. 00401FE9   >  8B45 A8       mov eax,dword ptr ss:[ebp-0x58]                  ;  取用户名
    4. 00401FEC   .  50            push eax                                         ; /String
    5. 00401FED   .  FF15 10104000 call dword ptr ds:[0x401010]                     ; \__vbaLenBstr
    6. 00401FF3   .  33DB          xor ebx,ebx                                      ;  取长度
    7. 00401FF5   .  83F8 07       cmp eax,0x7
    8. 00401FF8   .  0F94C3        sete bl
    9. 00401FFB   .  8D4D A8       lea ecx,dword ptr ss:[ebp-0x58]
    10. 00401FFE   .  4B            dec ebx
    11. 00401FFF   .  FF15 B8104000 call dword ptr ds:[0x4010B8]                     ;  msvbvm60.__vbaFreeStr
    12. 00402005   .  8D4D A0       lea ecx,dword ptr ss:[ebp-0x60]
    13. 00402008   .  FF15 BC104000 call dword ptr ds:[0x4010BC]                     ;  msvbvm60.__vbaFreeObj
    14. 0040200E   .  66:3BDF       cmp bx,di
    15. 00402011   .  74 4A         je short 0040205D                                ;  gglhy-cr.0040205D     \\\\\\\\\\\\\比较用户名是否7位 不等直接挂</font>


    16. 取用户名每一位ASC+1之后累计和

    17. <font color="#0000ff">7710A759    0FBF46 08       movsx eax,word ptr ds:[esi+0x8]                  ; 取用户名每一位ASC+1之后累计和
    18. 7710A75D    0FBF4F 08       movsx ecx,word ptr ds:[edi+0x8]
    19. 7710A761    03C1            add eax,ecx
    20. 7710A763    0FBFC8          movsx ecx,ax
    21. 7710A766    3BC1            cmp eax,ecx
    22. 7710A768    8B4D 10         mov ecx,dword ptr ss:[ebp+0x10]</font>


    23. 取用户名第一位ASC

    24. <font color="#008000">004022C2   .  50            push eax                                         ; /String
    25. 004022C3   .  FF15 20104000 call dword ptr ds:[0x401020]                     ; \rtcAnsiValueBstr
    26. 004022C9   .  8D4D AC       lea ecx,dword ptr ss:[ebp-0x54]                  ;  \\\\\\\\\\\\\取用户名第一位ASC
    27. 004022CC   .  66:8985 68FFF>mov word ptr ss:[ebp-0x98],ax
    28. 004022D3   .  8D95 60FFFFFF lea edx,dword ptr ss:[ebp-0xA0]
    29. 004022D9   .  51            push ecx                                         ; /var18
    30. 004022DA   .  8D45 80       lea eax,dword ptr ss:[ebp-0x80]                  ; |
    31. 004022DD   .  52            push edx                                         ; |var28
    32. 004022DE   .  50            push eax                                         ; |SaveTo8
    33. 004022DF   .  899D 60FFFFFF mov dword ptr ss:[ebp-0xA0],ebx                  ; |
    34. 004022E5   .  FF15 68104000 call dword ptr ds:[0x401068]                     ; \\\\\\\\\\\__vbaVarMul     \\\\\\\\\\相乘
    35. 004022EB   .  8BD0          mov edx,eax
    36. 004022ED   .  8D4D AC       lea ecx,dword ptr ss:[ebp-0x54]</font>




    37. 取用户名最后一位ASC

    38. <font color="#696969">0040236F   .  FF15 48104000 call dword ptr ds:[0x401048]                     ;  msvbvm60.rtcMidCharBstr
    39. 00402375   .  8BD0          mov edx,eax                                      ;            \\\\\\\\\\\\\\\\\最后一位
    40. 00402377   .  8D4D A4       lea ecx,dword ptr ss:[ebp-0x5C]
    41. 0040237A   .  FF15 A4104000 call dword ptr ds:[0x4010A4]                     ;  msvbvm60.__vbaStrMove
    42. 00402380   .  50            push eax                                         ; /String
    43. 00402381   .  FF15 20104000 call dword ptr ds:[0x401020]                     ; \rtcAnsiValueBstr
    44. 00402387   .  66:8985 68FFF>mov word ptr ss:[ebp-0x98],ax                    ;         \\\\\\\\\\\\\\\\\\(g)ASC=67
    45. 0040238E   .  8D55 AC       lea edx,dword ptr ss:[ebp-0x54]
    46. 00402391   .  8D85 60FFFFFF lea eax,dword ptr ss:[ebp-0xA0]
    47. 00402397   .  52            push edx
    48. 00402398   .  8D4D 80       lea ecx,dword ptr ss:[ebp-0x80]
    49. 0040239B   .  50            push eax
    50. 0040239C   .  51            push ecx
    51. 0040239D   .  899D 60FFFFFF mov dword ptr ss:[ebp-0xA0],ebx
    52. 004023A3   .  FF15 30104000 call dword ptr ds:[0x401030]                     ;  msvbvm60.__vbaVarXor \\\\\\\\\\异或</font>


    53. 取注册码第三位并与上面异或结果相乘

    54. <font color="#800080">00402419   > \8B45 A8       mov eax,dword ptr ss:[ebp-0x58]                  ;  \\\\\\\\\\\\\\\\\\\\\\\取注册码
    55. 0040241C   .  8D55 90       lea edx,dword ptr ss:[ebp-0x70]
    56. 0040241F   .  52            push edx
    57. 00402420   .  6A 03         push 0x3
    58. 00402422   .  50            push eax
    59. 00402423   .  C745 98 01000>mov dword ptr ss:[ebp-0x68],0x1
    60. 0040242A   .  895D 90       mov dword ptr ss:[ebp-0x70],ebx
    61. 0040242D   .  FF15 48104000 call dword ptr ds:[0x401048]                     ;  msvbvm60.rtcMidCharBstr
    62. 00402433   .  8BD0          mov edx,eax                                      ;                                                     \\\\\\\\\\\\\\\\\\\取注册码第3位
    63. 00402435   .  8D4D A4       lea ecx,dword ptr ss:[ebp-0x5C]
    64. 00402438   .  FF15 A4104000 call dword ptr ds:[0x4010A4]                     ;  msvbvm60.__vbaStrMove
    65. 0040243E   .  50            push eax                                         ; /String
    66. 0040243F   .  FF15 20104000 call dword ptr ds:[0x401020]                     ; \rtcAnsiValueBstr
    67. 00402445   .  8D4D AC       lea ecx,dword ptr ss:[ebp-0x54]                  ;     \\\\\\\\\\\\\\\\\\\\\取字符后转ASC
    68. 00402448   .  66:8985 68FFF>mov word ptr ss:[ebp-0x98],ax
    69. 0040244F   .  8D95 60FFFFFF lea edx,dword ptr ss:[ebp-0xA0]
    70. 00402455   .  51            push ecx                                         ; /var18
    71. 00402456   .  8D45 80       lea eax,dword ptr ss:[ebp-0x80]                  ; |
    72. 00402459   .  52            push edx                                         ; |var28
    73. 0040245A   .  50            push eax                                         ; |SaveTo8
    74. 0040245B   .  899D 60FFFFFF mov dword ptr ss:[ebp-0xA0],ebx                  ; |
    75. 00402461   .  FF15 68104000 call dword ptr ds:[0x401068]                     ; \__vbaVarMul
    76. 00402467   .  8BD0          mov edx,eax</font>


    77. 与A相除,余数重新组合
    78. <font color="#008080">
    79. 770FA4ED    8B45 08         mov eax,dword ptr ss:[ebp+0x8]                   ;                \\\\\\\\\\\\\\\\\相乘 结果放EAX
    80. 770FA4F0    33D2            xor edx,edx
    81. 770FA4F2    6A 0A           push 0xA
    82. 770FA4F4    5B              pop ebx
    83. 770FA4F5    F7F3            div ebx                                          ; \\\\\\\\\\\\\\\\\\324C6F/A=4B1D3  余数7放ebx
    84. 770FA4F7    83C2 30         add edx,0x30                                     ; 取ASC
    85. 770FA4FA    66:8911         mov word ptr ds:[ecx],dx                         ; \\\\\\\\\\\\\\\\\\\\\\\\得到一组新的字符串
    86. 770FA4FD    41              inc ecx
    87. 770FA4FE    41              inc ecx
    88. 770FA4FF    85C0            test eax,eax
    89. 770FA501    8945 08         mov dword ptr ss:[ebp+0x8],eax
    90. 770FA504  ^ 77 E7           ja short 770FA4ED                                ; oleaut32.770FA4ED</font>


    91. 翻转结果(即真码)

    92. <font color="#0000ff">770FA50D    66:8B16         mov dx,word ptr ds:[esi]                         ; \\\\\\\\\\\\\\\\\\\\\\\\翻转字符串
    93. 770FA510    66:8B01         mov ax,word ptr ds:[ecx]
    94. 770FA513    66:8911         mov word ptr ds:[ecx],dx
    95. 770FA516    49              dec ecx
    96. 770FA517    66:8906         mov word ptr ds:[esi],ax
    97. 770FA51A    49              dec ecx
    98. 770FA51B    46              inc esi
    99. 770FA51C    46              inc esi
    100. 770FA51D    3BF1            cmp esi,ecx
    101. 770FA51F  ^ 72 EC           jb short 770FA50D                                ; oleaut32.770FA50D</font>


    102. 取第一位与假码比较

    103. <font color="#ff0000">7710A81F    56              push esi                                         ; /////////////////////// 真码
    104. 7710A820    57              push edi                                         ;   ////////////////////////假码
    105. 7710A821    8B7D 0C         mov edi,dword ptr ss:[ebp+0xC]
    106. 7710A824    8B75 08         mov esi,dword ptr ss:[ebp+0x8]
    107. 7710A827    8B4D 10         mov ecx,dword ptr ss:[ebp+0x10]
    108. 7710A82A    33C0            xor eax,eax
    109. 7710A82C    66:F3:A7        repe cmps word ptr es:[edi],word ptr ds:[esi]    ; //////////////比较第一位
    110. 7710A82F    74 05           je short 7710A836                                ; oleaut32.7710A836
    111. 7710A831    1BC0            sbb eax,eax
    112. 7710A833    83D8 FF         sbb eax,-0x1
    113. 7710A836    5F              pop edi
    114. 7710A837    5E              pop esi
    115. 7710A838    5D              pop ebp</font>


    116. 算法分析:

    117. 第一:比较用户名是否7位 不等直接挂

    118. 第二:(用户名转ASC 且每位ASC+1后累加和) * (用户名第一位ASC) xor (用户名最后一位ASC) =SS

    119. (SS * 注册码第三位ASC)循环/A 余数重新组合 = 字符串

    120. CMP [字符串new = 翻转 (字符串)] 是否 = 假码


    121. <font color="#808000">if 字符串new = 假码

    122.    well done!

    123. else

    124.   you failed!</font>



    125. <font color="#0000ff">例 : RoOking
    126.      3296367

    127.     GgLHYgG
    128.     2399871</font>

    129. <font color="#ff0000" style="background-color: yellow;" size="5" face="楷体, 楷体_GB2312"><b>总结 : 注册码 = 翻转 [(用户名转ASC 且每位ASC+1后累加和) * (用户名第一位ASC) xor (用户名最后一位ASC) * 随机数) 循环/A 余数重新组合]</b></font>
    复制代码


    CM原形:


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x

    点评

    新年新气象!顶!  发表于 2015-1-1 16:37

    评分

    参与人数 4威望 +32 飘云币 +32 收起 理由
    GeekCat + 8 + 8 很给力!
    sgw888 + 8 + 8 赞一个!
    Dxer + 8 + 8 很给力!
    pentium450 + 8 + 8 很给力!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-25 15:21
  • 签到天数: 487 天

    [LV.9]以坛为家II

     楼主| 发表于 2015-1-1 16:28:18 | 显示全部楼层
    貌似还校验了最后一位,前面看到了 后面居然找不到了 哪位大牛找到 贴出来 3Q
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-3-30 09:43
  • 签到天数: 155 天

    [LV.7]常住居民III

    发表于 2015-1-1 16:35:58 | 显示全部楼层
    坐不了沙发,板凳也行,赞一个!
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-3-10 19:49
  • 签到天数: 473 天

    [LV.9]以坛为家II

    发表于 2015-1-1 16:42:50 | 显示全部楼层
    谢谢rooking带来简单算法分析教程。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2015-1-1 17:22:58 | 显示全部楼层
    {:soso_e154:} 这里也有一个CM :https://www.chinapyg.com/thread-75778-1-1.html

    点评

    脱了壳 点注册报错 果断搞不定的节奏啊  发表于 2015-1-1 20:15
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2023-12-1 15:26
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2015-1-1 20:21:50 | 显示全部楼层
    顶一个,支持技术贴~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-25 14:18
  • 签到天数: 881 天

    [LV.10]以坛为家III

    发表于 2015-1-1 21:44:03 | 显示全部楼层
    我等小前来学习
    前排坐
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-4-17 21:48
  • 签到天数: 1853 天

    [LV.Master]伴坛终老

    发表于 2015-1-3 20:26:48 | 显示全部楼层
    呵呵,楼主以后的新星啊
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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