环境:
Windows xp sp3
打开,这次的界面炫酷多了,就像输保险箱密码。
旁边一个“UNREGISTRIERT”表示还没注册
输入个666666,没反应又没有确认按钮,可以猜测是用timer来检测输入的正确性
查壳,无壳的VB程序
OD载入,继续是查字符串:
00404A6B mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C"
00404AA3 push Andréna.00401EBC UNICODE "REGISTRIERT"
00404C88 mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E747D7A7D7C7F82836D74747A7F7E7G7C7D826D817E7B7C"
00404CC0 push Andréna.00401EBC UNICODE "REGISTRIERT"
00404EA5 mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "Q817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KEZB7C"
00404EDD push Andréna.00401EBC UNICODE "REGISTRIERT"
004050C2 mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E747D7AFP7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C"
004050FA push Andréna.00401EBC UNICODE "REGISTRIERT"
004052DF mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E747G7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C"
00405317 push Andréna.00401EBC UNICODE "REGISTRIERT"
004054FC mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E747D"
00405534 push Andréna.00401EBC UNICODE "REGISTRIERT"
00405719 mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E7WOD7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C"
00405751 push Andréna.00401EBC UNICODE "REGISTRIERT"
00405936 mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "http://beam.to/cugABCDEFGHIJKLMNOPQRSTUVWXYZ1234567"
0040596E push Andréna.00401EBC UNICODE "REGISTRIERT"
00405B53 mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E747D7AFF7C7F82836D74RR7A7F7E7B7C7D826D8KKE7B7C"
00405B8B push Andréna.00401EBC UNICODE "REGISTRIERT"
00405D70 mov dword ptr ss:[ebp-0xAC],Andréna.004 UNICODE "0817E747$7AFF7C7F82836D74RR7A7F7E7B7C7D826D81KE7B7C"
00405DA8 push Andréna.00401EBC UNICODE "REGISTRIERT"
省略下面内容...
这么多个注册,随便跟一个进去:
00404C7D > \8D45 CC lea eax,dword ptr ss:[ebp-0x34]
00404C80 . 8D8D 4CFFFFFF lea ecx,dword ptr ss:[ebp-0xB4]
00404C86 . 50 push eax ; /var18
00404C87 . 51 push ecx ; |var28
00404C88 . C785 54FFFFFF>mov dword ptr ss:[ebp-0xAC],Andréna.0040>; |UNICODE "0817E747D7A7D7C7F82836D74747A7F7E7G7C7D826D817E7B7C"
00404C92 . C785 4CFFFFFF>mov dword ptr ss:[ebp-0xB4],0x8008 ; |
00404C9C . FF15 5C104000 call dword ptr ds:[<&MSVBVM60.__vbaVarTs>; \__vbaVarTstEq
00404CA2 . 66:85C0 test ax,ax ; 这个很样子很熟悉吧
00404CA5 . 74 4C je XAndréna.00404CF3
00404CA7 . 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
00404CAA . 50 push eax
00404CAB . 8B10 mov edx,dword ptr ds:[eax]
00404CAD . FF92 38030000 call dword ptr ds:[edx+0x338]
00404CB3 . 50 push eax
00404CB4 . 8D45 AC lea eax,dword ptr ss:[ebp-0x54]
00404CB7 . 50 push eax
00404CB8 . FF15 3C104000 call dword ptr ds:[<&MSVBVM60.__vbaObjSe>; MSVBVM60.__vbaObjSet
00404CBE . 8B08 mov ecx,dword ptr ds:[eax]
00404CC0 . 68 BC1E4000 push Andréna.00401EBC ; UNICODE "REGISTRIERT"
又是通过输入的内容来计算一个值,然后和那一大串字符进行比较。
关键这个值是怎么来的,这次不能“goodname”了,那就“123456789”,在[ebp-2c]就可以看到你输入的内容计算出来的值了。
居然是“032333435363738393A”,居然只是转成16进制然后在前加个0而已。这样的话搞不到一个“81”出来啊,试一下
“987654321”,结果还是一样。那就应该和那两个“*”“#”有关了。换成“1#23456789”和“1*23456789”还是没有“81”出来。
那就“9*87654321”吧,这次居然不一样了,变成了“042341403F3E3D3C3B3A”,那“98*7654321”计算出来的结果又太大了。
终于,“87*654321”搞出一个“08F”来,这样就可以猜出来,还是通过映射出来的字符串与字符串进行比较。映射出来的字符串
可以肯定是16进制范围的,也就是“0-F”。仔细观察用来比较的字符串,符合规定的只有两个:
004065E4 "0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C“
004054FC “0817E747D”
但是短的那个是不行的,至于原因不清楚,猜测应该是有个长度要求。
映射关系可以通过多次输入的出(我觉得比看程序更有意思):
1 7B 5 7F 9 83
2 7C 6 80 * 74
3 7D 7 81 # 6D
4 7E 8 82 0 7A
参照这个表,对着上面[004065E4]的内容,就可以得出:
74*3032589#**0541238#7412