03 脱壳示例

有些函数混淆后,F8步过call就会跑飞,因为执行流程没有返回到下一条指令,此时可以F7步入。如果大量重复的操作,可以用插件来完成。

x64dbg安装x64dbgpy插件后,在C:\Users\Hang\Downloads\x64dbgpy-37d3f5bb\x32\plugins\x64dbgpy\x64dbgpy\pluginsdk\_scriptapi目录中有源码,可以查询到各接口。

 

 

 # -*- coding:utf-8 -*-

from x64dbgpy.pluginsdk._scriptapi import *

 

dwIatbase = 0x00475000 #iat表的首地址

dwIatCount = 0x48 #iat表中的个数

 

#循环取出iat表中的地址, 然后设为新eip,单步到ret

for i in range(0, dwIatCount+1):

    #读取IAT表中的地址

    dwAddr = ReadDword(dwIatbase + i*4)

 

    if(dwAddr == 0):

        continue

 

    #以此地址为新eip

    SetEIP(dwAddr)

 

    #单步执行

    while True:

        StepIn()

        

        # 判断是否是ret

        if(ReadByte(GetEIP()) == 0xC3):

            #从栈顶取出真正的API地址,存入IAT表中对应的位置

            WriteDword(dwIatbase + i*4, ReadDword(GetESP()))

            break

 

posted @ 2020-12-07 13:23  八转达人  阅读(138)  评论(0编辑  收藏  举报