- UID
- 73848
注册时间2014-2-6
阅读权限95
最后登录1970-1-1
超级版主
TA的每日心情 | 开心 2019-3-25 15:21 |
---|
签到天数: 487 天 [LV.9]以坛为家II
|
本帖最后由 Rooking 于 2015-1-1 16:33 编辑
首先恭祝各位兄弟姐妹,大叔大嫂,姥姥老爷,孙子孙女们,新年好,万事吉,行大运.
头一次这么认真的看一个CM 了 居然还是VB 程序 代码臭长 浪费了好久 算法 是不难 但是难找 (对于我来说 哈哈)
此CM 是GG 找来的放群共享的 于是下载下来练练手.
不多说了 来说说CM吧
首先CM加了UPX 上工具杀之
其次CM 编辑框 是灰色的 NND 上工具杀之
下来是算法了,拖入OD先
查找一下字符串 很好 有提示
高兴吧 双击进来,经过分析后第一个提示失败的是 检测用户名 不是7位 直接挂掉
那就输入7位吧 我的名字刚好七位 不信? Rooking 你数一下? 呵呵
直接贴代码吧
- 比较用户名是否7位 不等直接挂
- <font color="#ff0000">00401FE3 . FF15 28104000 call dword ptr ds:[0x401028] ; msvbvm60.__vbaHresultCheckObj
- 00401FE9 > 8B45 A8 mov eax,dword ptr ss:[ebp-0x58] ; 取用户名
- 00401FEC . 50 push eax ; /String
- 00401FED . FF15 10104000 call dword ptr ds:[0x401010] ; \__vbaLenBstr
- 00401FF3 . 33DB xor ebx,ebx ; 取长度
- 00401FF5 . 83F8 07 cmp eax,0x7
- 00401FF8 . 0F94C3 sete bl
- 00401FFB . 8D4D A8 lea ecx,dword ptr ss:[ebp-0x58]
- 00401FFE . 4B dec ebx
- 00401FFF . FF15 B8104000 call dword ptr ds:[0x4010B8] ; msvbvm60.__vbaFreeStr
- 00402005 . 8D4D A0 lea ecx,dword ptr ss:[ebp-0x60]
- 00402008 . FF15 BC104000 call dword ptr ds:[0x4010BC] ; msvbvm60.__vbaFreeObj
- 0040200E . 66:3BDF cmp bx,di
- 00402011 . 74 4A je short 0040205D ; gglhy-cr.0040205D \\\\\\\\\\\\\比较用户名是否7位 不等直接挂</font>
- 取用户名每一位ASC+1之后累计和
- <font color="#0000ff">7710A759 0FBF46 08 movsx eax,word ptr ds:[esi+0x8] ; 取用户名每一位ASC+1之后累计和
- 7710A75D 0FBF4F 08 movsx ecx,word ptr ds:[edi+0x8]
- 7710A761 03C1 add eax,ecx
- 7710A763 0FBFC8 movsx ecx,ax
- 7710A766 3BC1 cmp eax,ecx
- 7710A768 8B4D 10 mov ecx,dword ptr ss:[ebp+0x10]</font>
- 取用户名第一位ASC
- <font color="#008000">004022C2 . 50 push eax ; /String
- 004022C3 . FF15 20104000 call dword ptr ds:[0x401020] ; \rtcAnsiValueBstr
- 004022C9 . 8D4D AC lea ecx,dword ptr ss:[ebp-0x54] ; \\\\\\\\\\\\\取用户名第一位ASC
- 004022CC . 66:8985 68FFF>mov word ptr ss:[ebp-0x98],ax
- 004022D3 . 8D95 60FFFFFF lea edx,dword ptr ss:[ebp-0xA0]
- 004022D9 . 51 push ecx ; /var18
- 004022DA . 8D45 80 lea eax,dword ptr ss:[ebp-0x80] ; |
- 004022DD . 52 push edx ; |var28
- 004022DE . 50 push eax ; |SaveTo8
- 004022DF . 899D 60FFFFFF mov dword ptr ss:[ebp-0xA0],ebx ; |
- 004022E5 . FF15 68104000 call dword ptr ds:[0x401068] ; \\\\\\\\\\\__vbaVarMul \\\\\\\\\\相乘
- 004022EB . 8BD0 mov edx,eax
- 004022ED . 8D4D AC lea ecx,dword ptr ss:[ebp-0x54]</font>
- 取用户名最后一位ASC
- <font color="#696969">0040236F . FF15 48104000 call dword ptr ds:[0x401048] ; msvbvm60.rtcMidCharBstr
- 00402375 . 8BD0 mov edx,eax ; \\\\\\\\\\\\\\\\\最后一位
- 00402377 . 8D4D A4 lea ecx,dword ptr ss:[ebp-0x5C]
- 0040237A . FF15 A4104000 call dword ptr ds:[0x4010A4] ; msvbvm60.__vbaStrMove
- 00402380 . 50 push eax ; /String
- 00402381 . FF15 20104000 call dword ptr ds:[0x401020] ; \rtcAnsiValueBstr
- 00402387 . 66:8985 68FFF>mov word ptr ss:[ebp-0x98],ax ; \\\\\\\\\\\\\\\\\\(g)ASC=67
- 0040238E . 8D55 AC lea edx,dword ptr ss:[ebp-0x54]
- 00402391 . 8D85 60FFFFFF lea eax,dword ptr ss:[ebp-0xA0]
- 00402397 . 52 push edx
- 00402398 . 8D4D 80 lea ecx,dword ptr ss:[ebp-0x80]
- 0040239B . 50 push eax
- 0040239C . 51 push ecx
- 0040239D . 899D 60FFFFFF mov dword ptr ss:[ebp-0xA0],ebx
- 004023A3 . FF15 30104000 call dword ptr ds:[0x401030] ; msvbvm60.__vbaVarXor \\\\\\\\\\异或</font>
- 取注册码第三位并与上面异或结果相乘
- <font color="#800080">00402419 > \8B45 A8 mov eax,dword ptr ss:[ebp-0x58] ; \\\\\\\\\\\\\\\\\\\\\\\取注册码
- 0040241C . 8D55 90 lea edx,dword ptr ss:[ebp-0x70]
- 0040241F . 52 push edx
- 00402420 . 6A 03 push 0x3
- 00402422 . 50 push eax
- 00402423 . C745 98 01000>mov dword ptr ss:[ebp-0x68],0x1
- 0040242A . 895D 90 mov dword ptr ss:[ebp-0x70],ebx
- 0040242D . FF15 48104000 call dword ptr ds:[0x401048] ; msvbvm60.rtcMidCharBstr
- 00402433 . 8BD0 mov edx,eax ; \\\\\\\\\\\\\\\\\\\取注册码第3位
- 00402435 . 8D4D A4 lea ecx,dword ptr ss:[ebp-0x5C]
- 00402438 . FF15 A4104000 call dword ptr ds:[0x4010A4] ; msvbvm60.__vbaStrMove
- 0040243E . 50 push eax ; /String
- 0040243F . FF15 20104000 call dword ptr ds:[0x401020] ; \rtcAnsiValueBstr
- 00402445 . 8D4D AC lea ecx,dword ptr ss:[ebp-0x54] ; \\\\\\\\\\\\\\\\\\\\\取字符后转ASC
- 00402448 . 66:8985 68FFF>mov word ptr ss:[ebp-0x98],ax
- 0040244F . 8D95 60FFFFFF lea edx,dword ptr ss:[ebp-0xA0]
- 00402455 . 51 push ecx ; /var18
- 00402456 . 8D45 80 lea eax,dword ptr ss:[ebp-0x80] ; |
- 00402459 . 52 push edx ; |var28
- 0040245A . 50 push eax ; |SaveTo8
- 0040245B . 899D 60FFFFFF mov dword ptr ss:[ebp-0xA0],ebx ; |
- 00402461 . FF15 68104000 call dword ptr ds:[0x401068] ; \__vbaVarMul
- 00402467 . 8BD0 mov edx,eax</font>
- 与A相除,余数重新组合
- <font color="#008080">
- 770FA4ED 8B45 08 mov eax,dword ptr ss:[ebp+0x8] ; \\\\\\\\\\\\\\\\\相乘 结果放EAX
- 770FA4F0 33D2 xor edx,edx
- 770FA4F2 6A 0A push 0xA
- 770FA4F4 5B pop ebx
- 770FA4F5 F7F3 div ebx ; \\\\\\\\\\\\\\\\\\324C6F/A=4B1D3 余数7放ebx
- 770FA4F7 83C2 30 add edx,0x30 ; 取ASC
- 770FA4FA 66:8911 mov word ptr ds:[ecx],dx ; \\\\\\\\\\\\\\\\\\\\\\\\得到一组新的字符串
- 770FA4FD 41 inc ecx
- 770FA4FE 41 inc ecx
- 770FA4FF 85C0 test eax,eax
- 770FA501 8945 08 mov dword ptr ss:[ebp+0x8],eax
- 770FA504 ^ 77 E7 ja short 770FA4ED ; oleaut32.770FA4ED</font>
- 翻转结果(即真码)
- <font color="#0000ff">770FA50D 66:8B16 mov dx,word ptr ds:[esi] ; \\\\\\\\\\\\\\\\\\\\\\\\翻转字符串
- 770FA510 66:8B01 mov ax,word ptr ds:[ecx]
- 770FA513 66:8911 mov word ptr ds:[ecx],dx
- 770FA516 49 dec ecx
- 770FA517 66:8906 mov word ptr ds:[esi],ax
- 770FA51A 49 dec ecx
- 770FA51B 46 inc esi
- 770FA51C 46 inc esi
- 770FA51D 3BF1 cmp esi,ecx
- 770FA51F ^ 72 EC jb short 770FA50D ; oleaut32.770FA50D</font>
- 取第一位与假码比较
- <font color="#ff0000">7710A81F 56 push esi ; /////////////////////// 真码
- 7710A820 57 push edi ; ////////////////////////假码
- 7710A821 8B7D 0C mov edi,dword ptr ss:[ebp+0xC]
- 7710A824 8B75 08 mov esi,dword ptr ss:[ebp+0x8]
- 7710A827 8B4D 10 mov ecx,dword ptr ss:[ebp+0x10]
- 7710A82A 33C0 xor eax,eax
- 7710A82C 66:F3:A7 repe cmps word ptr es:[edi],word ptr ds:[esi] ; //////////////比较第一位
- 7710A82F 74 05 je short 7710A836 ; oleaut32.7710A836
- 7710A831 1BC0 sbb eax,eax
- 7710A833 83D8 FF sbb eax,-0x1
- 7710A836 5F pop edi
- 7710A837 5E pop esi
- 7710A838 5D pop ebp</font>
- 算法分析:
- 第一:比较用户名是否7位 不等直接挂
- 第二:(用户名转ASC 且每位ASC+1后累加和) * (用户名第一位ASC) xor (用户名最后一位ASC) =SS
- (SS * 注册码第三位ASC)循环/A 余数重新组合 = 字符串
- CMP [字符串new = 翻转 (字符串)] 是否 = 假码
- <font color="#808000">if 字符串new = 假码
- well done!
- else
- you failed!</font>
- <font color="#0000ff">例 : RoOking
- 3296367
- GgLHYgG
- 2399871</font>
- <font color="#ff0000" style="background-color: yellow;" size="5" face="楷体, 楷体_GB2312"><b>总结 : 注册码 = 翻转 [(用户名转ASC 且每位ASC+1后累加和) * (用户名第一位ASC) xor (用户名最后一位ASC) * 随机数) 循环/A 余数重新组合]</b></font>
复制代码
CM原形:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
评分
-
查看全部评分
|