首先还是查看文件:
输入name和key,不输入的话,旁边的OK按钮是不能使用的。
然后输入假码:
这个应该不是英文,但是毕竟是假码,所以这个应该是表示的错误。
然后用die查看一下:
看到是vb编译,这下我们就要注意一下vb的特点,比如函数的名称,入口处的特点等等
然后就是od打开:
我们刚刚搜到了字符串,所以还是查找字符串:
还是上下查看一下,正确的字符串在哪里:
我们往上找到了正确的字符和关键跳。
好到这里就是爆破的过程了,下面我们来找注册机
根据关键跳,所以我们可以知道关键call也在上面,所以我们还是往上面找:
首先我们找到一个将我们所输入的字符串的ASCII码相加的循环:
00402134 . /0F84 9C000000 je Andréna.004021D6
0040213A . |8D55 94 lea edx,dword ptr ss:[ebp-0x6C]
0040213D . |8D45 DC lea eax,dword ptr ss:[ebp-0x24]
00402140 . |52 push edx ; Andréna.<ModuleEntryPoint>
00402141 . |50 push eax ; kernel32.BaseThreadInitThunk
00402142 . |C745 9C 01000>mov dword ptr ss:[ebp-0x64],0x1
00402149 . |895D 94 mov dword ptr ss:[ebp-0x6C],ebx
0040214C . |FF15 90414000 call dword ptr ds:[<&MSVBVM50.__vbaI4Var>; 取字符串
00402152 . |8D4D BC lea ecx,dword ptr ss:[ebp-0x44] ; |
00402155 . |50 push eax ; |Start = 0x7DD733B8
00402156 . |8D55 84 lea edx,dword ptr ss:[ebp-0x7C] ; |
00402159 . |51 push ecx ; |dString8 = NULL
0040215A . |52 push edx ; |RetBUFFER = Andréna.<ModuleEntryPoint>
0040215B . |FF15 38414000 call dword ptr ds:[<&MSVBVM50.#rtcMidCha>;
tcMidCharVar
00402161 . |8D45 84 lea eax,dword ptr ss:[ebp-0x7C]
00402164 . |8D4D A8 lea ecx,dword ptr ss:[ebp-0x58]
00402167 . |50 push eax ; /String8 = kernel32.BaseThreadInitThunk
00402168 . |51 push ecx ; |ARG2 = NULL
00402169 . |FF15 70414000 call dword ptr ds:[<&MSVBVM50.__vbaStrVa>; \__vbaStrVarVal
0040216F . |50 push eax ; /String = "?U嬱吷卽."
00402170 . |FF15 0C414000 call dword ptr ds:[<&MSVBVM50.#rtcAnsiVa>; ASCII码
00402176 . |66:8985 4CFFF>mov word ptr ss:[ebp-0xB4],ax
0040217D . |8D55 CC lea edx,dword ptr ss:[ebp-0x34]
00402180 . |8D85 44FFFFFF lea eax,dword ptr ss:[ebp-0xBC]
00402186 . |52 push edx ; /var18 = Andréna.<ModuleEntryPoint>
00402187 . |8D8D 74FFFFFF lea ecx,dword ptr ss:[ebp-0x8C] ; |
0040218D . |50 push eax ; |var28 = kernel32.BaseThreadInitThunk
0040218E . |51 push ecx ; |saveto8 = NULL
0040218F . |899D 44FFFFFF mov dword ptr ss:[ebp-0xBC],ebx ; |
00402195 . |FF15 94414000 call dword ptr ds:[<&MSVBVM50.__vbaVarAd>; 相加
然后是将相加的结果乘上固定的值(0x499602D2):
004021DF . 51 push ecx ; /var18 = 0018F3CC
004021E0 . 8D45 94 lea eax,dword ptr ss:[ebp-0x6C] ; |
004021E3 . 52 push edx ; |var28 = 0000003A
004021E4 . 50 push eax ; |SaveTo8 = 0018F3CC
004021E5 . C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],0x499602D2 ; |
004021EF . C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],0x3 ; |
004021F9 . FF15 5C414000 call dword ptr ds:[<&MSVBVM50.__vbaVarMul>] ; 相乘
123
最后再将输入的字符串中的第四位和第九位变为“-”。
00402210 . 6A 04 push 0x4
00402212 . 8D95 54FFFFFF lea edx,dword ptr ss:[ebp-0xAC]
00402218 . 6A 01 push 0x1
0040221A . 52 push edx
0040221B . C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],Andréna.00401C34 ; -
00402225 . C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],0x8
0040222F . FFD3 call ebx ; 变化字符; <&MSVBVM50.__vbaMidStmtVar>
00402231 . 8D45 CC lea eax,dword ptr ss:[ebp-0x34]
00402234 . 8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-0xAC]
0040223A . 50 push eax
0040223B . 6A 09 push 0x9
0040223D . 6A 01 push 0x1
0040223F . 51 push ecx
00402240 . C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],Andréna.00401C34 ; -
所以最后总结一下,key的生成流程就是:name的各位ascii码相加×0x499602D2,再把第四位和第九位换位“-”
最后输出的就是key了。