注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

碳基体

http://weibo.com/tanjiti

 
 
 
 
 

日志

 
 

objective-c runtime安全措施之三:反汇编( -funroll-loops 编译选项)  

2012-04-01 11:28:54|  分类: iOS app security |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

《O'Reilly.Hacking.and.Securing.iOS.Applications>>读书笔记

反汇编:通过优化编译器选项、去除符号表来复杂化编译后生成的汇编代码(使用反汇编工具结合动态调试工具弄清并篡改程序逻辑)

方法4:使用编译器的 -funroll-loops 选项 完全展开循环结构

原理: -funroll-loops编译选项使得程序中的循环步骤完全展开。这样会增加汇编代码的长度,并且攻击者需要隔离出每个循环,进行单独的修改,从而增大了攻击难度。

问题:在linux环境下编译可以完全展开整个循环逻辑,但是在苹果编译器中目前是不能完全展开,不知道新版xcode中的gcc是否可以。

int main( ) {

int i = 0;

for(i=0; i<1000; ++i) {

puts("This is my loop of secure session checks");

}

}

例子1:在mac os x上使用 –funroll-loops编译选项

$ gcc -o main main.c -funroll-loops -funroll-all-loops

$ otool -tV main

_main:

0000000100000ef0 pushq %rbp

0000000100000ef1 movq %rsp,%rbp

0000000100000ef4 subq $0x10,%rsp

0000000100000ef8 movl $0x00000000,0xf8(%rbp)

0000000100000eff xorb %al,%al

0000000100000f01 leaq 0x00000054(%rip),%rcx

0000000100000f08 movq %rcx,%rdi

0000000100000f0b callq 0x100000f30 ; symbol stub for: _puts

0000000100000f10 movl 0xf8(%rbp),%eax

0000000100000f13 addl $0x01,%eax

0000000100000f16 movl %eax,0xf8(%rbp)

0000000100000f19 movl 0xf8(%rbp),%eax

0000000100000f1c cmpl $0x09,%eax

0000000100000f1f jle 0x100000eff

0000000100000f21 movl 0xfc(%rbp),%eax

0000000100000f24 addq $0x10,%rsp

0000000100000f28 popq %rbp

0000000100000f29 ret

即使使用了–funroll-loops选项,循环也未

例子2:在linux 上使用 –funroll-loops编译选项

080483f0 <main>:

80483f0: 55 push %ebp

80483f1: 89 e5 mov %esp,%ebp

80483f3: 83 e4 f0 and $0xfffffff0,%esp

80483f6: 53 push %ebx

80483f7: 31 db xor %ebx,%ebx

80483f9: 83 ec 1c sub $0x1c,%esp

80483fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi

8048400: 83 c3 08 add $0x8,%ebx

8048403: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

804840a: e8 09 ff ff ff call 8048318 <puts@plt>

804840f: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

8048416: e8 fd fe ff ff call 8048318 <puts@plt>

804841b: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

8048422: e8 f1 fe ff ff call 8048318 <puts@plt>

8048427: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

804842e: e8 e5 fe ff ff call 8048318 <puts@plt>

8048433: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

804843a: e8 d9 fe ff ff call 8048318 <puts@plt>

804843f: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

8048446: e8 cd fe ff ff call 8048318 <puts@plt>

804844b: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

8048452: e8 c1 fe ff ff call 8048318 <puts@plt>

8048457: c7 04 24 40 85 04 08 movl $0x8048540,(%esp)

804845e: e8 b5 fe ff ff call 8048318 <puts@plt>

8048463: 81 fb e8 03 00 00 cmp $0x3e8,%ebx

8048469: 75 95 jne 8048400 <main+0x10>

804846b: 83 c4 1c add $0x1c,%esp

804846e: 5b pop %ebx

804846f: 89 ec mov %ebp,%esp

8048471: 5d pop %ebp

8048472: c3 ret

  评论这张
 
阅读(1498)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017