-
-
[原创]linux下调用共享库非导出函数
-
发表于:
2016-7-29 13:55
10316
-
在逆向共享库(.so)时,有时候需要逐一的验证函数的正确性,需要单独调用共享库中的函数(解决该问题,可以更方便的验证逆向结果),对于导出函数,没什么可说,使用dlopen、dlsym等,可以直接调用,那么非导出函数怎么调用呢?
解决该问题,可以从两方面入手:
1.修改.so文件中各个函数的属性,把所有函数全部导出
2.尝试获取到非导出函数在虚拟内存中的地址,使用函数地址调用该函数
由于.so可能面临加密等问题,我们暂时不讨论第一种方法,本文先介绍第二种方法。导出函数和非导出函数的差别不外乎就是函数的visibility属性,直观上,我们可以获取到库的基址和导出函数的相对地址,这是我们的已知信息。
先做一下准备工作,1.建库---2.获取地址信息
共享库:share
#include <stdio.h>
///print大写的ABCD
void PrintABCD()//__attribute__((visibility("hidden")))
{
printf("ABCD\n");
sleep(-1);
}
///print小写的abcd
__attribute__((visibility("hidden"))) void Printabcd()//
{
printf("abcd\n");
sleep(-1);
}
///根据参数来确定print ABCD or abcd
void PrintIt(int isPrintCapital)
{
if(isPrintCapital)
{
PrintABCD();
}
else
{
Printabcd();
}
printf("over!\n");
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课