Themida/WinLicense3.0 IAT修复脚本(x64)(x64dbg)

不知道rafael在干什么,3.0的壳完全是倒退。。。
3.0的TM/WL没有混淆iat call,还把API代码抽取给删了。API出现的特征代码也不见得加强了多少
 
 

修iat最难的就是
1.定位API出现的时机
2.识别并还原iat call
 
这里第2难点由于3.0没有混淆iat call,所以不存在。想学习的请看这篇文章及其脚本(用x64dbg单步走脚本看,别瞪代码)SE_IAT修复
 

来说说第一点
说第一点之前,我还是想先给出我的思考。
iat call的流程是:
iat call>>进入混淆后的壳代码>>取出要调用的API地址>>调用API
  

这里我们要关注的就是 取出要调用的API地址
壳代码必然会在某一个时机将API地址取出来,并放在寄存器或者栈(甚至是堆)中
而我们要做的就是定位到这个时机。
老方法都是用代码特征码,根据API地址出现的时机,将周围的代码作为特征码。当脚本检测到这片代码时,便停下来取API地址。
但是这个方法存在一个问题:
代码各种不同的混淆,取API地址的代码特征码千变万化,怎么办

 
当时我想到这个问题时,我不禁在想:
我是怎么知道API地址出现了?
仔细一想,可不就是x64dbg的注释信息告诉我了吗?那么说明x64dbg是自带API识别功能的。
可惜我查过所有脚本命令后,发现没有这个识别API的命令。无奈向Mr.mrexodia提问
Themida/WinLicense3.0 IAT修复脚本(x64)(x64dbg)_第1张图片
Mr.mrexodia半月后就提供了一个API:
mod.isexport()
参数为寄存器或者内存地址。
如果是API地址,则返回1,否则返回0
例如要判断eax/rax是否为API地址:
mod.isexport(cax)==1

 
至此,大麻烦已经解决了。
只要一直步进跟踪iat call,并用这个命令做为判断条件即可找出API地址了,而不用再定位代码的特征码。

ticnd (mod.isexport(cax)==1),0x100
步进跟踪0x100步,当cax为API地址时停下

 
这里放一个Themida/WinLicense3.0 IAT修复脚本(x64)
仅供学习参考,不保证伸手党能直接用
脚本链接

你可能感兴趣的:(Themida/WinLicense3.0 IAT修复脚本(x64)(x64dbg))