飘云 发表于 2015-7-21 18:46:03

iOS裸函数应用实战 -- by 飘云


//
//main.c
//iOS_ARM
//
//Created by piao on 15/7/21.
//Copyright (c) 2015年 __MyCompanyName__. All rights reserved.
//

#if defined (__arm64__) /*|| defined (__aarch64__)*/

static __attribute__((naked)) long getLR(){
    long lr = 0;
    __asm__ volatile("mov       x0, lr\n\r"
                     "mov       %, x0\n\r"
                     "ret"
                     :"=r"(lr));
    return lr;
}

static __attribute__((naked)) long getSP(){
    long sp = 0;
    __asm__ volatile("mov       x0, sp\n\r"
                     "mov       %, x0\n\r"
                     "ret"
                     :"=r"(sp));
    return sp;
}
#else
static __attribute__((naked)) int getLR(){
    int lr = 0;
    __asm__ volatile("mov      r0, lr\n\r"
                     "mov      %, r0\n\r"
                     "bx         lr"// 别偷懒,自己返回
                     :"=r"(lr));
   
    return lr;
}

static __attribute__((naked)) int getSP(){
    int sp = 0;
    __asm__ volatile("mov      r0, sp\n\r"
                     "mov      %, r0\n\r"
                     "bx         lr"
                     :"=r"(sp));
   
    return sp;
}

#endif


static void piaoyun(char *s)
{
#if defined (__arm64__)
    long lr = getLR();
    printf("[++++]return = %lx\n", lr);
#else
    int lr = getLR();
    printf("[++++]return = %x\n", lr);
#endif
   
    char ss = {0};
    strncpy(ss, s, sizeof(ss));
    printf("[++++]ss = %s\n\n", ss);
}

int main( int argc, char ** argv )
{
    piaoyun("piaoyun");

}


至于能干什么 ,还是不说~~~ 和破解有关~{:soso_e104:}

0xcb 发表于 2015-7-21 21:38:59

至于能干什么,还是{:soso_e133:}

wangwei628 发表于 2015-7-22 08:21:19

飘哥的东西都很有用,只是现在还不知道怎么用

Dxer 发表于 2015-7-22 20:37:27

偷偷说下,看的通了六窍。剩下的一窍。估计快通了,看到那么多的获取和返回。瞬间感觉自己太白了,加强学习啊!!!

熊猫正正 发表于 2015-8-21 00:08:53

谢谢分享{:soso_e100:}

menglv 发表于 2015-10-9 22:45:09

谢谢楼主分享
页: [1]
查看完整版本: iOS裸函数应用实战 -- by 飘云