精华内容
下载资源
问答
  • iOS安全攻防

    2016-10-21 15:04:11
    iOS安全攻防(一):Hack必备的命令与工具 你的应用正在被其他对手反向工程、跟踪和操作!你的应用是否依旧裸奔豪不防御?   郑重声明一下,懂得如何攻击才会懂得如何防御,一切都是为了之后的防御作准备。废话...
     
    iOS安全攻防(一):Hack必备的命令与工具
    你的应用正在被其他对手反向工程、跟踪和操作!你的应用是否依旧裸奔豪不防御?
     
    郑重声明一下,懂得如何攻击才会懂得如何防御,一切都是为了之后的防御作准备。废话少说,进入正题。
     
    今天总结一下为hack而做的准备工作。
     
    常用的命令和工具
    ps         ——显示进程状态,CPU使用率,内存使用情况等
    sysctl       ——检查设定Kernel配置
    netstat     ——显示网络连接,路由表,接口状态等
    route        ——路由修改
    renice       ——调整程序运行的优先级
    ifconfig    ——查看网络配置
    tcpdump   ——截获分析网络数据包
    lsof           ——列出当前系统打开的文件列表,别忘记一切皆文件,包括网络连接、硬件等
    otool ①     ——查看程序依赖哪些动态库信息,反编代码段……等等等等
    nm ②        ——显示符号表
    ldid ③      ——签名工具
    gdb          ——调试工具
    patch       ——补丁工具
    SSH         ——远程控制
     
    备注:
    ① otool,可查看可执行程序都链接了那些库:
     otool  -L WQAlbum 
     
    可以得到:
    WQAlbum:
    /System/Library/Frameworks/StoreKit.framework/StoreKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AdSupport.framework/AdSupport (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /System/Library/Frameworks//MediaPlayer.framework/MediaPlayer (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices (compatibility version 1.0.0, current version 40.0.0)
    /System/Library/Frameworks/CoreMedia.framework/CoreMedia (compatibility version 1.0.0, current version 1.0.0)
    ……
     
    可以反编译WQAlbum的__TEXT__段内容, 截前10行:
    otool -tV WQAlbum |head -n 10 
     
    可以得到:
    WQAlbum:
    (__TEXT,__text) section
    start:
    00002de0 pushl $0x00
    00002de2 movl %esp,%ebp
    00002de4 andl $0xf0,%esp
    00002de7 subl $0x10,%esp
    00002dea movl 0x04(%ebp),%ebx
    ……
     
    ② nm,显示程序符号表,用我自己的应用程序私人相册现身说法一下:
    nm -g WQAlbum  ( -g 代表 global) 
     
    可以得到:
    001e5eec S _OBJC_IVAR_$_WQPhotoViewController.albumObject
    001e5efc S _OBJC_IVAR_$_WQPhotoViewController.int_current
    001e5f00 S _OBJC_IVAR_$_WQPhotoViewController.int_total
     
    其中,WQPhotoViewController为类名,albumObject为该类的成员
     
    ③ ldid,是iPhoneOS.platform提供的签名工具,我们自己编译的程序需要签上名才能跑在iPhone/iPad上,使用方法
    export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
    ldid -S helloworld 
     
    编译Hello world
     
    1.首先找到编译器:
    arm-apple-darwin10-llvm-gcc-4.2 就是了。
     
    为了方便起见,可以在.bashrc或者profile 配置下环境变量,方便编译。
     
    2.找到SDK 
    编译我们自己的程序的时候需要指定该目录下的SDK。
     
    3.来个经典Hello world :
     
    1. #include <stdio.h>                                                                                              
    2. int main(){   
    3.        printf("Hello world !!!\n");   
    4.        return 0;   
    5. }   
     
    4.编译
     
    其中 -isysroot用来指定build时的SDK
     
    5.校验 
     
    file查看一下类型,没问题。
     
    6.SCP给iPhone、iPad
    前提是,设备已经越狱并且安装了SSH,且必须在同一网段。
    $scp helloworld root@x.x.x.x:hello world
     
    7.登录设备签名
    $ssh -l root x.x.x.x
    #ldid -S helloworld
     
    8.执行程序
    #./helloworld
    Hello world !!!
     
    运行成功,这就完成了最简单的手动执行自己的应用程序。
    展开全文
  • iOS安全攻防-v1.1

    2018-06-22 22:01:25
    本课程主要适用于 iOS 的开发人员,希望对 iOS 应用的安全性有深入理解并能应用于实战。
  • iOS安全攻防(二十三):Objective-C代码混淆

    万次阅读 多人点赞 2014-06-07 17:00:47
    iOS安全攻防(二十三):Objective-C代码混淆class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们迫切的希望混淆自己的代码...
    iOS安全攻防(二十三):Objective-C代码混淆


    class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。

    所以,我们迫切的希望混淆自己的代码。



    混淆的常规思路


    混淆分许多思路,比如:

    1)花代码花指令,即随意往程序中加入迷惑人的代码指令

    2)易读字符替换

    等等

    防止class-dump出可读信息的有效办法是易读字符替换。




    Objective-C的方法名混淆



    混淆的时机

    我们希望在开发时一直保留清晰可读的程序代码,方便自己。

    同时,希望编译出来的二进制包含乱七八糟的混淆后的程序代码,恶心他人。

    因此,我们可以在Build Phrase 中设定在编译之前进行方法名的字符串替换。



    混淆的方法

    方法名混淆其实就是字符串替换,有2个方法可以,一个是#define,一个是利用tops。
    利用#define的方法有一个好处,就是可以把混淆结果合并在一个.h中,在工程Prefix.pch的最前面#import这个.h。不导入也可以编译、导入则实现混淆。

    单段的selector,如func: ,可以通过#define func 来实现字符串替换。
    多段的selector,如a:b:c: ,可以通过分别#define a 、b、c 来实现字符串替换。




    我的混淆工具


    我写了个简易的混淆脚本,主要思路是把敏感方法名集中写在一个名叫func.list的文件中,逐一#define成随机字符,追加写入.h。

    脚本如下:

    #!/usr/bin/env bash
    
    TABLENAME=symbols
    SYMBOL_DB_FILE="symbols"
    STRING_SYMBOL_FILE="func.list"
    HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
    export LC_CTYPE=C
    
    #维护数据库方便日后作排重
    createTable()
    {
        echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE
    }
    
    insertValue()
    {
        echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE
    }
    
    query()
    {
        echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE
    }
    
    ramdomString()
    {
        openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
    }
    
    rm -f $SYMBOL_DB_FILE
    rm -f $HEAD_FILE
    createTable
    
    touch $HEAD_FILE
    echo '#ifndef Demo_codeObfuscation_h
    #define Demo_codeObfuscation_h' >> $HEAD_FILE
    echo "//confuse string at `date`" >> $HEAD_FILE
    cat "$STRING_SYMBOL_FILE" | while read -ra line; do
        if [[ ! -z "$line" ]]; then
            ramdom=`ramdomString`
            echo $line $ramdom
            insertValue $line $ramdom
            echo "#define $line $ramdom" >> $HEAD_FILE
        fi
    done
    echo "#endif" >> $HEAD_FILE
    
    
    sqlite3 $SYMBOL_DB_FILE .dump
    


    操作步骤



    1.将混淆脚本confuse.sh放到工程目录下 
    mv confuse.sh your_proj_path/


    2.修改Prefix.pch
    打开Xcode,修改XXX-Prefix.ch ,添加混淆头文件:
    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
        //添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)
        #import "codeObfuscation.h"
    #endif


    3.配置Build Phase
    在工程Build Phase中添加执行脚本操作,执行confuse.sh脚本,如图:







    4.创建函数名列表func.list,写入待混淆的函数名,如:
    -(void)sample;
    -(void)seg1:(NSString *)string seg2:(NSUInteger)num;


    就这样写:
    sample
    seg1
    seg2


    并将文件放置于与confuse.sh脚本同级
    mv func.list your_proj_path/




    5.编译查看结果
    直接build,混淆脚本会在编译前运行,进行字符随机替换,并且每次build的随机字符不同,如图:








    展开全文
  • iOS安全攻防(二十四):敏感逻辑的保护方案(1)

    万次阅读 多人点赞 2014-06-07 19:04:38
    iOS安全攻防(二十四):敏感逻辑的保护方案(1)Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。本文就介绍一种低学习成本的,简易...

    iOS安全攻防(二十四):敏感逻辑的保护方案(1)



    Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!





    当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。

    本文就介绍一种低学习成本的,简易的,Objective-C逻辑代码重写为C代码的办法。


    也许,程序中存在一个类似这样的类:

    @interface XXUtil : NSObject
    
    + (BOOL)isVerified;
    + (BOOL)isNeedSomething;
    + (void)resetPassword:(NSString *)password;
    
    @end


    被class-dump出来后,利用Cycript很容易实现攻击,容易被hook,存在很大的安全隐患。

    想改,但是不想大改程序结构,肿么办呢?





    把函数名隐藏在结构体里,以函数指针成员的形式存储。

    这样做的好处是,编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。



    改写的程序如下:

    //XXUtil.h
    #import <Foundation/Foundation.h>
    
    typedef struct _util {
        BOOL (*isVerified)(void);
        BOOL (*isNeedSomething)(void);
        void (*resetPassword)(NSString *password);
    }XXUtil_t ;
    
    #define XXUtil ([_XXUtil sharedUtil])
    
    @interface _XXUtil : NSObject
    
    + (XXUtil_t *)sharedUtil;
    @end


    //XXUtil.m
    #import "XXUtil.h"
    
    static BOOL _isVerified(void)
    {
        //bala bala ...
        return YES;
    }
    
    static BOOL _isNeedSomething(void)
    {
        //bala bala ...
        return YES;
    }
    
    static void _resetPassword(NSString *password)
    {
        //bala bala ...
    }
    
    static XXUtil_t * util = NULL;
    @implementation _XXUtil
    
    +(XXUtil_t *)sharedUtil
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            util = malloc(sizeof(XXUtil_t));
            util->isVerified = _isVerified;
            util->isNeedSomething = _isNeedSomething;
            util->resetPassword = _resetPassword;
        });
        return util;
    }
    
    + (void)destroy
    {
        util ? free(util): 0;
        util = NULL;
    }
    @end
    



     最后,根据Xcode的报错指引,把以前这样的调用

    [XXUtil isVerified];
    

    对应改成:

    XXUtil->isVerified();

    就可以了。


    是的,绝不费一点脑子。




    展开全文
  • iOS安全攻防系列汇总

    2016-10-10 10:03:33
    iOS安全开发者眼中的越狱iPhone安全性 iOS安全开发防护摘要 Reveal查看任意app的高级技巧 书籍推荐: 《iOS应用逆向工程:分析与实战》 iOS越狱程序开发 工具篇 构建和部署 Your First Tweak 总结 ...

    iOS应用逆向工程

    知乎专栏:

    书籍推荐:

    iOS越狱程序开发

    1. 工具篇
    2. 构建和部署
    3. Your First Tweak
    4. 总结

    iOS应用程序安全

    1. 搭建移动渗透测试平台
    2. 获得iOS应用程序的类信息
    3. 理解Objective-C Runtime
    4. 用Cycript进行运行时分析(Yahoo天气应用)
    5. 用Cycript做运行时分析的高级技巧(Yahoo天气应
    6. iOS 7的新安全功能
    7. 不用证书安装应用到设备的方法
    8. 用Cycript进行Method Swizzling
    9. 用Snoop-it分析iOS应用的安全
    10. iOS文件系统和取证
    11. 分析使用HTTP/HTTPS的网络流量
    12. 导出Keychain数据
    13. 使用Sogeti Data Protection tools启动定制的Ramdisk
    14. 使用Sogeti Data Protection tools收集信息
    15. 使用iNalyzer对iOS应用进行静态分析
    16. 使用iNalyzer对iOS应用进行动态分析
    17. 使用Introspy对iOS应用进行黑盒测试
    18. 使用Introspy检测自定义签名
    19. 在程序中使用Introspy
    20. 本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)
    21. ARM和GDB基础
    22. 使用GDB进行运行时分析和操作
    23. 对抗运行时分析和操作
    24. 越狱检测与绕过
    25. iOS开发安全编程实践
    26. 使用IDA Pro给iOS应用打补丁
    27. 简要总结

    iOS安全攻防

    1. Hack必备的命令与工具
    2. 后台daemon非法窃取用户iTunesstore信息
    3. 使用Reveal分析他人app
    4. 阻止GDB依附
    5. 使用Cycript修改支付宝app运行时
    6. 使用class-dump-z分析支付宝app
    7. Hack实战——解除支付宝app手势解锁错误次数限制
    8. 键盘缓存与安全键盘
    9. 使用Keychain-Dumper导出keychain数据
    10. 二进制和资源文件自检
    11. Hack实战——探究支付宝app手势密码
    12. iOS7的动态库注入
    13. 数据擦除
    14. Hack实战——支付宝app手势密码校验欺骗
    15. 使用iNalyzer分析应用程序
    16. 使用introspy追踪分析应用程序
    17. Fishhook
    18. 数据保护API
    19. 基于脚本实现动态库注入
    20. 越狱检测的攻与防
    21. 废除应用程序的ASLR特性
    22. static和被裁的符号表

    苹果关于安全的文档

    1. Security Overview
    2. Secure Coding Guide
    3. iOS Security
    4. Cryptographic Services Guide
    5. Secure Transport Reference
    6. CFNetwork Programming Guide
    7. Certificate, Key, and Trust Services Reference
    8. Certificate, Key, and Trust Services Programming Guide
    9. Keychain Services Reference
    10. Keychain Services Programming Guide

     

    Posted by TracyYih - 2014-02-14
    如需转载,请注明: 本文来自 Esoft Mobile

    展开全文
  • iOS安全攻防—目录

    2018-09-07 18:17:32
    iOS安全攻防—常用工具篇-待完善 二.初识汇编 1.汇编概述 2.总线 3.进制 4.寄存器 三.函数的本质 1.栈 2.bl&ret指令 3.函数的参数和返回值 4.函数的局部变量与嵌套调用 四.还原高级代码&状态...
  • IOS安全攻防(二)

    2012-12-14 15:35:00
    后台daemon非法窃取用户...在iOS安全攻防(一):Hack必备的命令与工具中,介绍了如何编译自己的C程序并手动启动。今天介绍如何使程序变为开机自启动。 1.首先打开Xcode创建一个plist属性文件,如下图所示: ...
  • 一、“攻”应该包括这些在类  1、iOS逆向工程介绍  2、逆向工具与理论  3、项目实践,构建防护 二、“防”应该包括这些在类 1、加密与取证 2、反取证,运行时库安全 ...
  • iOS安全攻防-键盘安全

    千次阅读 2016-10-14 14:57:37
    使用iOS系统键盘时,系统会启动输入法的自动更正,并将记录缓存到设备上,在用户输入过程中系统键盘利用已经缓存的记录来更正用户的输入 缓存文件的地址:/var/mobile/Library/Keyboard/dynamic-text.dat 可以通过...
  • 工具: - Xcode9 - IDA7.0 硬件设备: iPhone5以上 常用工具: ...Alfred: 神器参考 ...Mac 系统上一款专注于效率提升的著名应用,它能帮你快速打开网页、快速进行自定义搜索、查看剪贴板历史、快速查询单词等等。...
  • iOS 代码安全之代码混淆实践:  前言:  在8月份的时候写了个关于 class-dump 反编译的文章(使用 Class-dump 反编译),利用 class-dump 工具可以反编译出工程的头文件,这样很方便“坏人”了解工程代码结构,...
  • iOS安全攻防必须掌握arm汇编,这里先简要介绍arm中寄存器。 这是第一篇帖子,简要说下arm的各个寄存器的功能。 R0-R3:用于函数参数及返回值的传递,调用函数的时候,参数先从R0依次传递 R4-R6, R8,R10-R11:没有...
  • iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携...手机越狱后会面临更多的安全风险,不建议对iOS设备进行越狱。在开发中可以针对越狱设备进行安全防范。  可以尝试用 NSFileManager 判断设备是否安装了越狱...
  • 在 iOS安全攻防(十二):iOS7的动态库注入 中,介绍了如果利用越狱大神们为我们开辟的iOS7动态库注入方法。 本文将继续深入hack实战,hook支付宝手势密码校验操作,欺骗其通过任意手势输入。
  • iOS系统及第三方应用都会使用Keychain来作为数据持久化存储媒介,或者应用间数据共享的渠道。 但是对于越狱机器来说,Keychain也是很容易暴露,Keychain-Dumper(传送门)可以轻松导出里面的数据。 Keychain...
  • 如果你已阅读了《iOS安全攻防》系列专栏之前的文章,一定已经对静态以及运行时分析app有了一定的了解。 我们可以借助的分析工具很多,工具和工具之间一般没有什么优劣比较性,完全看个人习惯什么擅长什么。 多个...
  • iOS安全攻防之反编译

    2019-09-24 17:45:30
    Class-dump 进行反编译:  之前做代码混淆, 首先了解了下反编译,使用入门级的反编译 class-dump.下载地址:最新版Class-dump. 首先需要注意的是,class-dump的作用对象必须是未经加密的可执行文件,而从App Store...
  • 在win下搞逆向需要看懂pe,同样搞iOS安全攻防必须看懂mach-o格式,水果的官方mach-o文档在此:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/index.html ...
  • iOS 安全攻防系列

    2014-03-06 18:03:36
    念茜的博客

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,743
精华内容 697
关键字:

ios安全攻防