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