这里是跟着上一篇
1。加密一定要自己申请空间 那就在申请空间那下 api 断点 单步退出函数就看了返回值给 eax 记下它返回时的地址 这里是 0x0047a37f
1。也一定会获取真正的 api 那就跟到获取地址那 记下它的地址 0x001614dc
由于地址会变 就记下相对地址同时是记它的下一条 所以偏移为 14E0
2。它一定会填充 IAT 那就跟到那 一样是下一条指令地址的偏移 所以为 0897
运行截图
VAR vOldOEP
VAR vAllocAddr
VAR vWriteIATAddr
VAR vGetAPIAddr
VAR vTmp
MOV vOldOEP,0047148B
MOV vAllocAddr, 0047A37F
MOV vGetAPIAddr, 14E0 //获取地址时的下一条指令地址
MOV vWriteIATAddr,0897 //写入 IAT 指令的下一条指令地址
// 2. 对申请空间的地方下断,取出基址
// 3. 设置其他的断点,让程序跑起来,对每一个断点进行处理
BPHWC // 清除硬件断点
BC //清除所有断点
BPHWS vOldOEP, "x" //当执行到此地址时产生中断.
BPHWS vAllocAddr, "x" //当执行到此地址时产生中断.
LOOP1:
RUN
CMP vAllocAddr,eip
JNZ CASE1
ADD vGetAPIAddr, eax
ADD vWriteIATAddr,eax
BPHWS vGetAPIAddr, "x" //当执行到此地址时产生中断.
BPHWS vWriteIATAddr, "x" //当执行到此地址时产生中断.
JMP LOOP1
CASE1:
CMP vGetAPIAddr,eip
JNZ CASE2
MOV vTmp,edx
JMP LOOP1
CASE2:
CMP vWriteIATAddr,eip
JNZ CASE3
MOV [edx],vTmp
JMP LOOP1
CASE3:
MSG "到达OEP!"
转载于:https://blog.51cto.com/haidragon/2120660