環境:
windows xp sp 3
工具:
Ollydbg 和 exeinfo pe
查殼,還是無殼的vb程序。
打開,有一個nag窗口,點擊”確認”的話才會彈出輸入serial的窗口,點“取消”的話會關閉程序
OD載入,運行到彈出nag窗口的時候,F12停下來,然后ALT+ F9,點“確認”。
00402CF0 . 8D45 DC lea eax,dword ptr ss:[ebp-0x24]
00402CF3 . 50 push eax
00402CF4 . E8 21E4FFFF call <jmp.&MSVBVM50.__vbaI4Var>
00402CF9 . 50 push eax
00402CFA . 8D45 AC lea eax,dword ptr ss:[ebp-0x54]
00402CFD 50 push eax
00402CFE E8 1DE4FFFF call <jmp.&MSVBVM50.#595> ;這是個MessageBox
00402D03 . 8D95 5CFFFFFF lea edx,dword ptr ss:[ebp-0xA4] ;停在這里
00402D09 . 8D4D BC lea ecx,dword ptr ss:[ebp-0x44]
00402D0C . 8985 64FFFFFF mov dword ptr ss:[ebp-0x9C],eax
然后往上翻一翻看看有什么:
00402A69 ? . ?C785 7CFFFFFF>mov dword ptr ss:[ebp-0x84],blaster9.004>; ?UNICODE "Error ! Das Passwort ist falsch !"
00402A73 ? . ?C785 74FFFFFF>mov dword ptr ss:[ebp-0x8C],0x8
00402A7D ? . ?E8 AAE6FFFF ? call <jmp.&MSVBVM50.__vbaVarCopy>
00402A82 ? . ?8D95 74FFFFFF lea edx,dword ptr ss:[ebp-0x8C]
00402A88 ? . ?8D4D DC ? ? ? lea ecx,dword ptr ss:[ebp-0x24]
00402A8B ? . ?C785 7CFFFFFF>mov dword ptr ss:[ebp-0x84],0x10
00402A95 ? . ?899D 74FFFFFF mov dword ptr ss:[ebp-0x8C],ebx
00402A9B ? . ?E8 86E6FFFF ? call <jmp.&MSVBVM50.__vbaVarMove>
00402AA0 ? . ?8D95 74FFFFFF lea edx,dword ptr ss:[ebp-0x8C]
00402AA6 ? . ?8D4D CC ? ? ? lea ecx,dword ptr ss:[ebp-0x34]
00402AA9 ? . ?C785 7CFFFFFF>mov dword ptr ss:[ebp-0x84],blaster9.004>; ?UNICODE "PASSWORT FALSCH !"
00402AB3 ? . ?C785 74FFFFFF>mov dword ptr ss:[ebp-0x8C],0x8
有個錯誤信息內容,可以猜測上面就是serial的比較地方。
突然間出現了這個:
00402A2A . 68 DC1D4000 push blaster9.00401DDC ; UNICODE "2G83G35Hs2"
將這個輸入進去看看是什么東西:
雖然看不懂消息框彈出的內容,但是顯然消息框的內容不一樣了。應該就是成功了。
這次比較簡單。
004028BA > \FF75 A8 push dword ptr ss:[ebp-0x58] ; 輸入的serial
004028BD . 68 DC1D4000 push blaster9.00401DDC ; UNICODE "2G83G35Hs2"
004028C2 . E8 83E8FFFF call <jmp.&MSVBVM50.__vbaStrCmp>
004028C7 . 8BF8 mov edi,eax ; 比較結果存放到edi
004028C9 . 8D4D A8 lea ecx,dword ptr ss:[ebp-0x58]
004028CC . F7DF neg edi ; 取補
004028CE . 1BFF sbb edi,edi ; edi - edi - cf
004028D0 . 47 inc edi ; edi + 1
004028D1 . F7DF neg edi ; 取補
004028D3 . E8 60E8FFFF call <jmp.&MSVBVM50.__vbaFreeStr>
004028D8 . 8D4D A4 lea ecx,dword ptr ss:[ebp-0x5C]
004028DB . E8 52E8FFFF call <jmp.&MSVBVM50.__vbaFreeObj>
004028E0 . 66:3BFE cmp di,si ; si 為0
004028E3 . 0F84 F3000000 je blaster9.004029DC ; 不能跳
上面的計算過程可以看出,假如比較結果不為0時,一系列運算導致edi變成0
假如比較結果不為0,一系列運算會使得edi為非0
明文比較:2G83G35Hs2