灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2428回复:0

[系统教程]objective-c runtime安全措施之六:反汇编(-funroll-loops编译选项)

楼主#
更多 发布于:2012-09-10 17:40

《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







作者  danqingd




喜欢0 评分0
游客

返回顶部