飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4221|回复: 9

[macOS] OSX裸函数应用实战 -- by 飘云

[复制链接]
  • TA的每日心情
    难过
    4 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2015-7-20 18:30:18 | 显示全部楼层 |阅读模式
    1. //
    2. //  main.m
    3. //  debug
    4. //
    5. //  Created by piao on 15/7/20.
    6. //  Copyright (c) 2015年 piao. All rights reserved.
    7. //

    8. #import <Foundation/Foundation.h>

    9. __attribute__((naked)) uint64_t getRbp()
    10. {
    11.     __asm__("mov %rbp, %rax\n\n\r"
    12.             "ret");
    13. }

    14. // 嘿嘿,shellcode经常用到滴...
    15. __attribute__((naked)) uint64_t getRip()
    16. {
    17.     __asm__("call 0f\n\n\r"
    18.             "0:pop %rax\n\n\r"
    19.             //"sub $5, %rax\n\n\r"   // 减去指令长度
    20.             "ret");
    21. }

    22. __attribute__((naked)) uint64_t getRsp()
    23. {
    24.     __asm__("mov %rsp, %rax\n\n\r"
    25.             "ret");
    26. }

    27. void piaoyun(){

    28.     NSLog(@"[++++]一层返回 = %llx", getRip() - 5);
    29.     NSLog(@"[++++]二层返回 = %llx", *(uint64_t *)(getRbp() + 0x8));
    30.      
    31. }

    32. int main(int argc, const char * argv[]) {
    33.     @autoreleasepool {
    34.         piaoyun();
    35.     }
    36.     return 0;
    37. }
    复制代码
    嘿嘿,至于能干嘛,我就不说了。我经常用到,屡试不爽~~

    评分

    参与人数 1威望 +16 飘云币 +16 收起 理由
    alexwang + 16 + 16 很给力!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 14:25
  • 签到天数: 462 天

    [LV.9]以坛为家II

    发表于 2015-7-20 19:11:23 | 显示全部楼层
    这个高级
    看不懂
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2021-9-29 15:05
  • 签到天数: 114 天

    [LV.6]常住居民II

    发表于 2015-7-21 00:37:38 | 显示全部楼层
    本帖最后由 wx_f1Jji177 于 2015-7-21 01:50 编辑

    一层的getRIP怎么个玩法,没搞懂,{:soso_e117:}//"sub $5, %rax\n\n\r"   // 减去指令长度
    就是在这里可以放入shellcode来加入自己的代码段?
    学习新单词啦:naked~, naked~, naked~,{:soso_e113:}, naked属性,编译器不会生成任何函数入口代码和退出代码,不写return也可以编译过,
    QQ20150721-1.png

    点评

    自己写ret是个良好的习惯,你恰好遇到的是GCC会给你提供ret,某些编译器不会添加任何返回代码  详情 回复 发表于 2015-7-21 09:43
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2015-10-29 08:08
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2015-7-21 09:26:09 | 显示全部楼层
    不错不错、、、、{:soso_e163:}
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    4 天前
  • 签到天数: 11 天

    [LV.3]偶尔看看II

     楼主| 发表于 2015-7-21 09:43:42 | 显示全部楼层
    wx_f1Jji177 发表于 2015-7-21 00:37
    一层的getRIP怎么个玩法,没搞懂,//"sub $5, %rax\n\n\r"   // 减去指令长度
    就是在这里可 ...

    自己写ret是个良好的习惯,你恰好遇到的是GCC默认编译。。会给你提供ret,某些编译器不会添加任何返回代码

    点评

    的确,编译器还是会自动加结尾: mov %rax, %rbp ret [attachimg]65503[/attachimg] [attachimg]65504[/attachimg]  详情 回复 发表于 2015-7-21 10:00
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2021-9-29 15:05
  • 签到天数: 114 天

    [LV.6]常住居民II

    发表于 2015-7-21 10:00:41 | 显示全部楼层
    飘云 发表于 2015-7-21 09:43
    自己写ret是个良好的习惯,你恰好遇到的是GCC默认编译。。会给你提供ret,某些编译器不会添加任何返回代 ...

    的确,编译器还是会自动加结尾:
    mov %rax, %rbp
    ret
    QQ20150721-3.png
    QQ20150721-2.png
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 769 天

    [LV.10]以坛为家III

    发表于 2015-7-21 11:33:24 | 显示全部楼层
    gao高端,看不懂~~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-1-20 17:13
  • 签到天数: 291 天

    [LV.8]以坛为家I

    发表于 2015-7-21 14:17:09 | 显示全部楼层
    表示看不懂
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-17 22:44
  • 签到天数: 132 天

    [LV.7]常住居民III

    发表于 2015-7-21 14:24:46 | 显示全部楼层
    shellcode,很爽~~~
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表