環境:
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