前言
如果第三方库依赖随机数生成器,如何屏蔽该随机数?
可行方法
第三方库:fath.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void external_fun()
{
time_t t;
time(&t);
srand(t);
printf("rand: %d\n", rand());
}
gcc -fPIC -shared -O2 -o libfath.so
strip libfath.so
用户方:main.c
#include <stdio.h>
#include <stdlib.h>
void _Z12external_funv();
__attribute__((visibility("default"))) void sranX (unsigned int __seed)
{
return;
}
__attribute__((visibility("default"))) int sranA ()
{
return 1;
}
asm(".symver sranX, sranX@GLIBC_2.2.5");
asm(".symver sranA, ranX@GLIBC_2.2.5");
int main()
{
srand(1);
_Z12external_funv();
}
gcc main.c -L./ -lfath -o c.out
// 使用asm指令重命名符号:使用asm指令将sranX 重命名为sranX@GLIBC_2.2.5,这样链接器就会将srand的调用指向sranX。
运行改程序,随机数的输出总是1
劫持系统库
LD_PRELOAD
通过劫持随机数函数实现?待验证

被折叠的 条评论
为什么被折叠?



