linux下SO中INIT函数中添加自己的代码
2014-08-28 13:55
1096 查看
转载自:http://0nly3nd.sinaapp.com/?p=642
so文件是一个elf格式的文件
通过对elf文件格式的了解。so在被加载之前,会执行init段的代码。在结束的时候,会执行fini段的代码。
上次分析过360的加固,他们采用的就是在init中执行代码的解密函数。(这也是为什么在jni_onload中无需解密的原因)
今天就展示一下怎么将自己的函数放入init段,并执行。
so代码
s.c
编译生成so:
调用so
ts.c
C++
s.h
编译生成可执行文件:
运行
终端中输入:./e &
可以看出,最新执行的是Init,最后执行的是Fini。
今天了解到一种动态调试手法,据说能够断在init中,明天再来试试。
参考文章:mypyg.iteye.com/blog/845915
0×1
so文件是一个elf格式的文件通过对elf文件格式的了解。so在被加载之前,会执行init段的代码。在结束的时候,会执行fini段的代码。
上次分析过360的加固,他们采用的就是在init中执行代码的解密函数。(这也是为什么在jni_onload中无需解密的原因)
今天就展示一下怎么将自己的函数放入init段,并执行。
0×2
so代码s.c
12345678910111213141516171819202122 | #include <stdio.h> void my_init(void) __attribute__((constructor)); //告诉gcc把这个函数扔到init section void my_fini(void) __attribute__((destructor)); //告诉gcc把这个函数扔到fini section void out_msg(const char *m){ printf(" Our_Func \n"); } void my_init(void) { printf("\n Init \n"); } void my_fini(void) { printf(" Fini \n"); } |
1 2 | gcc -fPIC -g -c s.c -o libs.o gcc -g -shared -Wl,-soname,libs.so -o libs.so libs.o -lc |
0×3
调用sots.c
C++
123456789101112 | #include <stdio.h> #include "s.h" int main(int argc, char** argv) { printf(" Main Start \n"); out_msg("main"); printf(" Main Quit \n"); } |
1 2 3 4 | #ifndef _MY_SO_HEADER_ #define _MY_SO_HEADER_ void out_msg(const char *m); #endif |
1 | gcc -g ts.c -o ts -L. -ls |
0×4
指定程序加载so的路径新建名为e的文件:1 2 3 | #!/bin/sh export LD_LIBRARY_PATH=${pwd}:${LD_LIBRARY_PATH} ./ts |
0×5
运行终端中输入:./e &
1 2 3 4 5 6 7 8 9 10 11 | xxx@xxx-ubuntu:~/桌面/test$ gcc -fPIC -g -c s.c -o libs.o xxx@xxx-ubuntu:~/桌面/test$ gcc -g -shared -Wl,-soname,libs.so -o libs.so libs.o -lc xxx@xxx-ubuntu:~/桌面/test$ gcc -g ts.c -o ts -L. -ls xxx@xxx-ubuntu:~/桌面/test$ ./e & [2] 5756 xxx@xxx-ubuntu:~/桌面/test$ Init Main Start Our_Func Main Quit Fini |
今天了解到一种动态调试手法,据说能够断在init中,明天再来试试。
参考文章:mypyg.iteye.com/blog/845915
相关文章推荐
- 初识linux chmod命令/函数时我就产生一个有趣疑问:既然chmod可以改变权限, 那即使某用户原来没有某文件的权限, 也可以自己添加权限啊!
- linux i2c子系统代码分析2 ---操作函数i2c_init介绍
- 自己写 localtime 函数(含完整注释,代码)
- HTML格式的语法高亮类库代码,内置对C, C++, VBScript, JScript, xml的支持,可扩展,自己添加语法定义。
- HTML格式的语法高亮类库代码,内置对C, C++, VBScript, JScript, xml的支持,可扩展,自己添加语法定义。
- 将自己的代码自动添加版权信息
- Linux系统中如何添加自己的库文件路径
- 在水晶报表中动态的添加自己所需要的的字段的代码
- 将自己的代码自动添加版权信息
- 如何将自己的代码自动添加版权信息
- 如何将自己的代码自动添加版权信息
- 将自己的代码自动添加版权信息
- 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印)
- 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印)
- 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印) 【转载】
- 如何将自己的代码自动添加版权信息的及其扩展
- 自己写 localtime 函数(含完整注释,代码)
- 在水晶报表中动态的添加自己所需要的的字段的代码
- 在水晶报表中动态的添加自己所需要的的字段的代码
- 使用 Linux 系统调用的内核命令--探究 SCI 并添加自己的调用