芯晴笔记——temp临时

共计1624字,阅读大约6分钟。

先找到OEP。停下来后。看IAT起始位置。

校验

0F 82 ?? ?? ?? ??

在无加密入口前面345A左右(左右)可以在| F3:A4 | rep movsb |三次断下后,进行F7,直到走到校验

无加密入口

因为第一个肯定是加密的。我们在这个加密iat下一个硬件写入断点。

来到一个典型的 | F3:A4 | rep movsb |
F7 F8 F9
然后查看堆栈,看哪个引用的。回到引用地址。就是加密入口了。

往前33df左右的。搜索(0f 82 ?? ?? ?? ??)找到jb 0x?????的地方。(注意这里的jb要远一点。如果是很近的那种花指令是不对的)就是校验了。

在加密入口上面,找到一个超长jne (夹在1 0 1的0下面)点击这个,进去就是无加密入口。

无加密api获取

eax是iat入口地址。

无加密iat获取

无加密iat获取,程序来到这里的时候。edi的地址是指向这个iat函数入口地址的。而EAX指向的是他要填充到哪个地址,也就是IAT表真实地址。

也就是说,记录此时的EDI和EAX。把此时的edi数据填充到eax地址里就对了。

无加密call api获取

此时ecx就是指向无加密函数地址。同时看EDI地址,此时EDI地址就是原来call api(反编译)的地址。

然后注意。因为一个函数。他填充完普通的就接着填充call,所以我们之前获取的这个函数入口地点。就是call IAT的了。

加密API获取

来到这里。eax就是iat函数入口地址。同样的edi就是iat地址。

加密iat获取

这里,EDX地址里的数据就是要填充的iat表的地址。

检查此时的基址。看看和ebx进行对比是不是一样的。就是看ebx是不是0x400000

看 edx 寄存器指向的内存地址读取一个双字(32位)数据(也就是看他的地址)是不是在我们的IAT表范围内。

加密IAT填充完毕

此时我们看exc,他这里显示的是加密的iat地址。ebx显示的是IAT填充的地址(EBX地址就是这个函数的iat表了)。也就是说,他会把加密的地址(EXC)填充到(EBX)里

到这里,我们就可以把(加密api)的eax的真实iat地址,填进EBX(IAT表)里了。


加密 call api获取

这里看ebx(但是不一定的,大概率是ebx) 这个ebx的地址就是原来call xxxx的反汇编地址。(到OEP后可以搜索查看跨域调用的)
006457F4

加密 call iat填充完毕

这个时候还是一样的,因为之前的没call之前是同一个iat,所以这里我们直接把call xxxx修改成正确的。

循环。直到完成所有修复

来到OEP,进行dump

赋值,直接就是mov XXX,#909090#(这里的##里面的内容就是机器码)

温馨提示:
本文最后更新于2024-09-23 00:17:11,本文具有时效性,若有错误或已失效,请在下方留言或联系站长
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容