Creckme_Andrnalin.2

首先还是查看文件:

输入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了。

原文地址:https://www.cnblogs.com/lex-shoukaku/p/13305404.html