- UID
- 62966
注册时间2009-8-1
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2023-11-24 21:15 |
---|
签到天数: 4 天 [LV.2]偶尔看看I
|
发表于 2009-9-29 21:08:55
|
显示全部楼层
看了楼主的文章就自己按楼主的方法脱了一下,我觉得也可以这样做:
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 009AE8B7 TrashReg.009AE8B7
0012FF94 00404C58 ASCII "VB5!6&*"
0012FF98 0098C41D 返回到 TrashReg.0098C41D 来自 TrashReg.0098C7B2
********************************************************************
在补上被偷的代码时,push 的地址就是00404C58,也就是在入口处补上以下代码
push 00404c58
call 004048F2
然后脱壳,修复,程序正常运行.
区段减肥,就按楼主的方法了,呵呵 |
|