OD载入程序后直接下bp GetModuleHandleA断点,按F9运行,我的电脑上按了31次程序跑了起来,重新载入,下bp GetModuleHandleA,按F9,30次,然后Ctrl+B查找FF 25,找到很多下面的东西:
************************************************************
... ....
004048B0 .- FF25 9C104000 jmp ds:[<&msvbvm60.__vbaVarCmpNe>] ;msvbvm60.__vbaVarCmpNe
004048B6 .- FF25 74114000 jmp ds:[<&msvbvm60.__vbaGosubFree>] ;msvbvm60.__vbaGosubFree
004048BC .- FF25 48104000 jmp ds:[<&msvbvm60.__vbaGosubReturn>] ;msvbvm60.__vbaGosubReturn
004048C2 .- FF25 2C124000 jmp ds:[<&msvbvm60.__vbaGosub>] ;msvbvm60.__vbaGosub
004048C8 .- FF25 00104000 jmp ds:[<&kernel32.RtlMoveMemory>] ;ntdll.RtlMoveMemory
004048CE .- FF25 5C104000 jmp ds:[<&msvbvm60.__vbaPut3>] ;msvbvm60.__vbaPut3
004048D4 .- FF25 A8114000 jmp ds:[<&msvbvm60.__vbaPutOwner4>] ;msvbvm60.__vbaPutOwner4
004048DA .- FF25 04104000 jmp ds:[<&kernel32.SetFileAttributesA>];kernel32.SetFileAttributesA
004048E0 .- FF25 0C124000 jmp ds:[<&msvbvm60.EVENT_SINK_QueryInter>;msvbvm60.EVENT_SINK_QueryInte**ce
004048E6 .- FF25 84114000 jmp ds:[<&msvbvm60.EVENT_SINK_AddRef>] ;msvbvm60.EVENT_SINK_AddRef
004048EC .- FF25 F4114000 jmp ds:[<&msvbvm60.EVENT_SINK_Release>];msvbvm60.EVENT_SINK_Release
004048F2 $- FF25 EC124000 jmp ds:[<&msvbvm60.ThunRTMain>] ;msvbvm60.ThunRTMain
****************************************************************
在最后一个jmp(也就是004048F2处)下硬件执行断点,重新载入程序,F9运行,会断在下断点处,这时看堆栈:
**************************************************************
0012FF90 009AE8B7TrashReg.009AE8B7
0012FF94 00404C58ASCII "VB5!6&*"
0012FF98 0098C41D返回到 TrashReg.0098C41D 来自 TrashReg.0098C7B2
********************************************************************
在补上被偷的代码时,push 的地址就是00404C58,也就是在入口处补上以下代码
push 00404c58
call 004048F2
然后脱壳,修复,程序正常运行.
区段减肥,就按楼主的方法了,呵呵 谢谢楼主的分享,顶一个 VB的程序偷代码,相当明显... 楼主好有耐心哦/:014 支持下,学习了。
页:
1
[2]