环境:
Windows xp sp3
打开,这次升级了,有个Name和一个Key,输入:
Name:goodname
Key:12345678
肯定错误。拿到错误信息的字符串
查壳,无壳的VB程序。
直接OD载入,字符串搜索,找到刚刚得错误信息的字符串
00402308 UNICODE "RiCHTiG !" ;这个和之前那个一个样嘛
00402327 UNICODE " RiCHTiG !!!! .... weiter mit dem N"
004023C2 UNICODE "LEiDER Falsch ! "
004023E1 UNICODE "Leider Falsch! Nochmal veruschen ! Wenn Du es nicht schaffen solltest, schreib mir ! Andrenalin@g"
00402176 . 66:8985 4CFFF>mov word ptr ss:[ebp-0xB4],ax ; 上面一个函数是取Name的字符的值,保存到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
00402187 . 8D8D 74FFFFFF lea ecx,dword ptr ss:[ebp-0x8C] ; |
0040218D . 50 push eax ; |var28
0040218E . 51 push ecx ; |saveto8
0040218F . 899D 44FFFFFF mov dword ptr ss:[ebp-0xBC],ebx ; |
00402195 . FF15 94414000 call dword ptr ds:[<&MSVBVM50.__vbaVarAd>; \__vbaVarAdd
0040219B . 8BD0 mov edx,eax ; 这个是将当前字符的值和前面字符的值之和加起来
0040219D . 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
004021A0 . FFD6 call esi
004021A2 . 8D4D A8 lea ecx,dword ptr ss:[ebp-0x58]
004021A5 . FF15 B8414000 call dword ptr ds:[<&MSVBVM50.__vbaFreeS>; MSVBVM50.__vbaFreeStr
004021D1 .^\E9 5CFFFFFF jmp Andréna.00402132 ; 这个jmp上面的内容是将Name输入的字符都加起来,goodname是:34A,保存在[ebp-2C]中
004021D6 > 8D4D CC lea ecx,dword ptr ss:[ebp-0x34]
004021D9 . 8D95 54FFFFFF lea edx,dword ptr ss:[ebp-0xAC]
004021DF . 51 push ecx ; /var18
004021E0 . 8D45 94 lea eax,dword ptr ss:[ebp-0x6C] ; |
004021E3 . 52 push edx ; |var28
004021E4 . 50 push eax ; |SaveTo8
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.__vbaVarMu> ; \__vbaVarMul
004021FF . 8BD0 mov edx,eax ; 上面这个Mul是将加起来的值乘以0x499602D2
上面那一段内容是算出用到的值X。
下面的内容是往X里面添加“-”,让它看上去更像Key
00402204 . FFD6 call esi
00402206 . 8B1D A0414000 mov ebx,dword ptr ds:[<&MSVBVM50.__vbaMi>; MSVBVM50.__vbaMidStmtVar
0040220C . 8D4D CC lea ecx,dword ptr ss:[ebp-0x34] ; 加-
0040220F . 51 push ecx
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.0040>; 这是"-"
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.0040>
0040224A . C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],0x8
00402254 . FFD3 call ebx ; 这个调用的函数和上面的一样
总结就是:
设:
输入的字符串为Name,
X是Name每一位加起来的结果
sum_1是最后计算的结果,sum_1 = X*0x499602D2 (转成10进制就是1234567890)
然后再对sum_1进行修改,在第4个数字和第9个数字位置改为“-”
于是:
Name::goodname
X = 34A
sum_1 = 1039506163380
sum_2 = 103-5061-3380
所以:
Key :103-5061-3380