Elf 如何检测函数是否调用fopen?
我正在尝试编写一个pam后门扫描程序,它可以在pam_sm_authenticate中调用fopen函数(普通文件在此函数中不会调用fopen)来存储用户名和密码,但我不能使用诸如“nm,readelf”之类的外部命令,因此,唯一的方法似乎是扫描pam_sm_authenticate函数,找到所有调用指令并计算地址以检查它是否正在调用fopen,但这太麻烦了,而且我对ELF文件不是很熟悉(我甚至不知道如何找到pam_sm_authenticate的偏移量,我正在使用dlopen和dlsym来获取地址..),所以我想知道是否有更好或更简单的方法来检测它?谢谢。TL;DR:从理论上讲,建立一个强大的“pam后门扫描仪”是不可能的,所以你现在应该放弃,考虑其他方法来解决你的问题 您的问题非常令人困惑,但我认为您要问的是:“我是否可以通过编程确定Elf 如何检测函数是否调用fopen?,elf,Elf,我正在尝试编写一个pam后门扫描程序,它可以在pam_sm_authenticate中调用fopen函数(普通文件在此函数中不会调用fopen)来存储用户名和密码,但我不能使用诸如“nm,readelf”之类的外部命令,因此,唯一的方法似乎是扫描pam_sm_authenticate函数,找到所有调用指令并计算地址以检查它是否正在调用fopen,但这太麻烦了,而且我对ELF文件不是很熟悉(我甚至不知道如何找到pam_sm_authenticate的偏移量,我正在使用dlopen和dlsym来获取
pam\u sm\u authenticate
调用fopen
”
出于以下几个原因,这是一个错误的问题:
- 如果
调用pam\u sm\u authenticate
,并且foo
调用foo
,那么您仍然存在问题,因此您确实应该扫描fopen
及其调用的每个函数(递归)pam\u sm\u authenticate
远非编写文件的唯一方式:您还可以使用fopen
,或open
(如system
,或直接系统(“echo$secret>/tmp/backdoor”)
syscall,或大量其他黑客攻击sysopen
- 最后,
可以使用技术在运行时构建任意代码(包括代码调用pam\u sm\u authenticate
),通过检查其代码来回答它是否这样做等同于解决问题(即不可能)fopen
pam\u sm\u authenticate
调用fopen
”
出于以下几个原因,这是一个错误的问题:
- 如果
调用pam\u sm\u authenticate
,并且foo
调用foo
,那么您仍然存在问题,因此您确实应该扫描fopen
及其调用的每个函数(递归)pam\u sm\u authenticate
远非编写文件的唯一方式:您还可以使用fopen
,或open
(如system
,或直接系统(“echo$secret>/tmp/backdoor”)
syscall,或大量其他黑客攻击sysopen
- 最后,
可以使用技术在运行时构建任意代码(包括代码调用pam\u sm\u authenticate
),通过检查其代码来回答它是否这样做等同于解决问题(即不可能)fopen
dlsym()
函数,或者在过程中通过迭代ELF符号表等直接查找它们。您的程序也可以dlsym()
函数,或者通过迭代ELF符号表等直接在过程中查找它们。