长亭百川云 - 文章详情

用Frida检测Window API

木星安全实验室

74

2024-07-13

用Frida生成新进程

用Frida生成新进程进行检测:

frida c:\windows\system32\notepad.exe

添加Frida到现有进程

把Frida添加到现有进程:

frida -p 10964

挂钩函数

hooking.js的代码会找到Windows API WriteFile的地址(在kernel32.dll / kernelbase.dll中),通过十六进制把第一个参数的内容转储并传递给它:

hooking.js

var writeFile = Mode.geultExportByName(null, "WriteFile");

通过Frida生成一个新的notepad.exe,给它提供hooking.js的代码,以便我们检测WriteFile API,检查写入磁盘缓冲区的内容:

frida C:\windows\system32\notepad.exe -l .\hooking.js

请注意,我们可以更新hooking.js(在上面的GIF中,可以看到我们最后是如何打印出process.id)代码,检测会马上执行,无需重新生成记事本或重新添加Frida。

Frida-Trace

如果想查看某些特定进程是否调用了API,例如WriteFile,我们可以用frida-trace:

frida-trace -i "WriteFile" C:\windows\system32\notepad.exe

案例 —— 拦截凭证

把以上所讲的内容操作一遍,如下面的GIF所示。

用户以其他用户身份执行程序时,我们能否在用户凭证提示里截取纯文本凭证?

(出现“以其他用户身份运行”的凭证提示)

答案是可以,那么就来看下如何用Frida工具做到这一点。

调用凭证弹出窗口,用frida-trace 来查看explorer.exe会不会调用任何名为*Cred*的函数:

frida-trace -i "*Cred*" -p (ps explorer).id

从下面的GIF可以看到,第一次调用提示时,也会对CredUIPromptForWindowsCredentialsW进行调用:

输入虚假的凭证,会显示出Cred* API调用(如下图红框圈起来的部分所示):

尤其是CredUnPackAuthenticationBufferW,因为每个MSDN:

调用CredUIPromptForWindowsCredentials函数,返回到身份验证缓冲,CredUnPackAuthenticationBuffer函数把身份验证缓冲转换成用户名字符串和密码字符串。

在frida的java脚本里检测CredUnPackAuthenticationBufferW:

Credentials.js

var username;

给frida提供我们的检测脚本,钩住explorer.exe,如下所示:

frida -p (ps explorer).id -l C:\labs\frida\hello-world\credentials.js

检测了CredUnPackAuthenticationBufferW后,在explorer.exe启动的提示符中输入凭据,结果如我们所预料的那样 —— 凭证以纯文本形式显示:

资源:

JavaScript API:

https://frida.re/docs/javascript-api/#memory

木星安全实验室(MxLab),由中国网安·广州三零卫士成立,汇聚国内多名安全专家和反间谍专家组建而成,深耕工控安全、IoT安全、红队评估、反间谍、数据保护、APT分析等高级安全领域,木星安全实验室坚持在反间谍和业务安全的领域进行探索和研究。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2