iOS安全–使用static inline方式编译函数,防反编译
2017-08-14 11:15
281 查看
iOS安全–使用static inline方式编译函数,防止静态分析
标签:
static inline
2015-12-21 17:43
462人阅读 评论(0)收藏举报
分类:
小知识(159)
作者同类文章X
我们知道一般的函数调用都会通过call的方式来调用,这样让攻击很容易对一个函数做手脚,如果是以inline的方式编译的会,会把该函数的code拷贝到每次调用该函数的地方。而static会让生成的二进制文件中没有清晰的符号表,让逆向的人很难弄清楚逻辑。
下面我们来看看一个普通函数及其反汇编代码:
编译,反汇编结果如下:
这样可以很明显的看到isValidate的调用,而且很容易使用断点+commands的方法让其始终返回1.
下面使用inline的方式来编译:
编译,反汇编结果如下:
在每次调用的时候都会把代码拷贝一次。
再来看看static inline的方式来编译的反汇编代码:
现在没有符号表了。
本文转载于:http://www.blogfshare.com/ioss-static-inline.html
标签:
static inline
2015-12-21 17:43
462人阅读 评论(0)收藏举报
分类:
小知识(159)
作者同类文章X
我们知道一般的函数调用都会通过call的方式来调用,这样让攻击很容易对一个函数做手脚,如果是以inline的方式编译的会,会把该函数的code拷贝到每次调用该函数的地方。而static会让生成的二进制文件中没有清晰的符号表,让逆向的人很难弄清楚逻辑。
下面我们来看看一个普通函数及其反汇编代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | int isValidate(int id){ if(id > 5) return 1; else return 0; } int main(int argc, const char * argv[]) { int id = 3; int a=1,b=2,c=3; if(!isValidate(id)) return 0; a = b + c; if(!isValidate(id)) return 0; c = a/2 * b; if(!isValidate(id)) return 0; b = c / a*2; return 1; } |
这样可以很明显的看到isValidate的调用,而且很容易使用断点+commands的方法让其始终返回1.
下面使用inline的方式来编译:
1 | int isValidate(int id) __attribute__ ((always_inline)); |
在每次调用的时候都会把代码拷贝一次。
再来看看static inline的方式来编译的反汇编代码:
1 | static int isValidate(int id) __attribute__ ((always_inline)); |
现在没有符号表了。
本文转载于:http://www.blogfshare.com/ioss-static-inline.html
相关文章推荐
- iOS安全–使用static inline方式编译函数,防止静态分析
- iOS安全–使用static inline方式编译函数,防止静态分析
- iOS安全:反汇编(inline编译方式)
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++ 函数的编译方式与调用约定以及extern “C”的使用
- 《IOS_C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全
- iOS中使用opencv碰到这样的编译错误:non-const static data member must be initialized out of line
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- iOS简单封装网络请求,使用block回掉函数方式
- iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全
- iOS安全攻防(二)使用iOSOpenDev开发、编译、部署
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- 《IOS_作业C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)
- 整理MINGW编译dll使用JNI被java调用的几种方式
- 封装make, rm, 提高编译的安全, 防止意外使用root权限.