<span class="pediy"><span class="pediy"> 使用方法
其实就简单嘛,设两个断点,填一下重定位指针的寄存器(或者可能是[ebp+somevalue],就要用上两条指令替换),举例:
fly文章中的upx 脱壳教程
代码:
-----------------------------------------------------------------
003B825E 8A07 mov al,byte ptr ds:[edi]
//EDI=003B7318-当前基址003B0000=00007318 ★ 这就是重定位表的RVA
003B8260 47 inc edi
003B8261 09C0 or eax,eax
003B8263 74 22 je short EdrLib.003B8287
//重定位数据处理完毕则跳转
003B8265 3C EF cmp al,0EF
003B8267 77 11 ja short EdrLib.003B827A
003B8269 01C3 add ebx,eax
003B826B 8B03 mov eax,dword ptr ds:[ebx]
003B826D 86C4 xchg ah,al//找到这里
003B826F C1C0 10 rol eax,10
003B8272 86C4 xchg ah,al
003B8274 01F0 add eax,esi
003B8276 8903 mov dword ptr ds:[ebx],eax
003B8278 EB E2 jmp short EdrLib.003B825C
003B827A 24 0F and al,0F
003B827C C1E0 10 shl eax,10
003B827F 66:8B07 mov ax,word ptr ds:[edi]
003B8282 83C7 02 add edi,2
003B8285 EB E2 jmp short EdrLib.003B8269
003B8287 61 popad
//此时EDI=003B74EA ★
003B8288 E9 3C8FFFFF jmp EdrLib.003B11C9
//飞向光明之点巅!
------------------------------------------------------------
003B8276 8903 mov dword ptr ds:[ebx],eax //这一行是写入新的重定位,而ebx是重定位需要的指针,是不断变化的
003B8287 61 popad //这行设断点是为了使脚本运行结束
因为我的脚本是对重定位的指针位置进行写入操作的指令进行下断,提取指针的部分有用数据……其他的按要求填就是了,到底能不能通用,大家测试吧,的确没太多时间进行(其他DLL)测试……
