精华内容
下载资源
问答
  • iOS逆向技术视频教程

    2018-11-05 21:57:12
    课时02.iOS系统安全机制 课时03.认识越狱设备 课时04.越狱环境配置 课时05.第一章文档总结 课时06.App结构与构建过程 课时07.寻找控件背后的代码 课时08.数据存储 课时09.类与方法 课时10.runtime特性 课时...
  • optool iOS 逆向工具

    2020-04-25 00:22:04
    optool iOS 逆向工具optool iOS 逆向工具optool iOS 逆向工具optool
  • iOS逆向工具

    2018-04-03 19:41:12
    iOS逆向相关的工具 如debugserver、lldb命令行、class-dump、cycript常用命令行
  • iOS hook逆向系列,入门级第一步,注入其他App实现hook App内文字修改,可自行添加弹窗成功提示!
  • 主要介绍了iOS逆向工程使用LLDB的USB连接调试第三方App,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • iOSRE:iOS逆向工程-源码

    2021-05-09 15:34:03
    iOS逆向工程 该项目的目的是提供有关iOS逆向工程和开发的有用且更新的工具和知识。 这是一项持续的工作,并且仍处于一个新的阶段。 您可以通过将实际文件添加到“ resources”文件夹中来进行贡献。 请注意,这些...
  • iOS逆向过程中,我们需要对整个iOS app进行充分的了解,因此需要将iOS app相关的文件都拷贝到电脑上,再对文件进行详细分析。因此,我介绍了如果从iOS设备中拷贝文件、传输数据到电脑上,使用更快速的方式进行传输...
  • 下载源:百度网盘逆向资料
  • 主要给大家介绍了关于iOS逆向教程之logify跟踪方法调用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 下面小编就为大家带来一篇基于ios逆向过程中lldb调试技巧(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 前言 今天学习的是跟踪函数调用,什么意思呢,举个例子,如果想做一个微信自动抢红包的插件,就需要写这么一个功能,当红包来了的时候,自动触发微信的抢红包函数。好,那咱就先找到这个函数。 ...
  • iOS逆向——砸壳与反编译-附件资源
  • iOS逆向工程pdf

    2018-02-01 17:47:33
    iOS逆向工程,下载了的都说好!!!!!!!!!!!!!!!!
  • 最全的iOS逆向工程书籍,涵盖了所有的逆向方法,还有逆向工具配套
  • iOS逆向工程

    2017-07-12 11:04:40
    iOS逆向,安全
  • theos是iOS系统越狱插件开发的集成环境。此文档详细介绍了在mac电脑中安装配置theos,及根据需求如何通过theos创建相应的插件工程对iOS app进行hook。
  • iOS逆向工程 pdf html

    2016-06-12 19:06:47
    iOS逆向工程 pdf html
  • 主要给大家介绍了关于iOS逆向解密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • iOS 逆向工程学习

    2018-06-04 22:57:47
    本书先授你以渔,再授你以鱼,多处独家内容首次公开,老少咸宜,童叟无欺,为想要从事iOS逆向工程学习/工作/研究的你量身打造,手把手带你进入iOS逆向工程的大门,确保你在阅读完本书后能够自主进行更深层次的研究,...
  • iOS逆向动态调试

    2019-05-09 17:43:36
    2.对debugserver进行瘦身(iOS11可以不用瘦身,因为只支持64位构架的程序),在debugserver所在目录输入lipo -info debugserver . 在终端输入:lipo -thinarmv7 debugserver -output debug-server 3.在xco...

    1.拷贝越狱手机/Developer/usr/bin目录下的debugserver到Mac电脑,在mac端输入

    scp -P 2222 root@localhost:/Developer/usr/bin/debugserver ~/debugserver
    

    2.对debugserver进行瘦身(iOS11可以不用瘦身,因为只支持64位构架的程序),在debugserver所在目录输入lipo -info debugserver . 在终端输入:lipo -thin armv7 debugserver -output debug-server

    3.在xcode里新建一个plist文件

    <plist version="1.0">
        <dict>
            <key>com.apple.springboard.debugapplications</key>
            <true/>
    
            <key>get-task-allow</key>
    
            <true/>
    
            <key>task_for_pid-allow</key>
    
            <true/>
    
            <key>run-unsigned-code</key>
    
            <true/>
        
        </dict>
    </plist>
    

    然后把plist文件拷贝到电脑的debugserver同一个目录下 ,在终端输入

    codesign -s - --entitlements en.plist -f debugserver

    可以给我们的debugserver赋上task_for_pid权限。

    4.然后在终端里输入: codesign -d --entitlements - ./debugserver

    查看授权文件描述, plist文件写入的东西

    5.终端里输入: scp -P 2222 ./debugserver root@localhost:/usr/bin/debugserver

    将debugserver拷贝到手机

    6.ps aux 查看手机进程

    7.Mac切换到手机 cd /usr/bin/ 以后, 输入chmod +x debugserver,给权限

    10.debugserver *:1234 -a WhatsApp

    11.新开一个终端,先做端口转发:iproxy 1234 1234,这样能更快的连接,新开一个终端:lldb 回车,做了端口转发输入: process connectconnect://localhost:1234,没做端口转发输入

    process connectconnect://IP

    12.连接成功后,输入c继续,然后image list -o -f ,获取基地址

    13.拷贝基地址,然后在Hopper里运行你砸完壳以后的 可执行文件,然后找你想调试的函数名,记录下这个函数名的偏移地址,

    然后在终端输入br s -a ’基地址+0x偏移地址’,开始断点调试。
    在这里插入图片描述如果报错:

    warning: failed to set breakpoint site at 0x00000000014cc35 for breakpoint 1.1: error: 0 sending the breakpoint request
    

    先试一下用image list 获取基地址,因为跟image list -o -f获取的地址是不一致的,在打一下断点试试, 如果还是失败,那么用ida去获取mach-o 头的偏移量
    在这里插入图片描述
    br s -a ’基地址+0x偏移地址-0x100000000’ 设置断点成功,
    使用

    di --start-address '0x0000000100da4000+0x00000000014cc3e4' -count 10
    

    查看,如果和hooper或者ida里的一致,说明打的断点的位置是正确的
    在这里插入图片描述
    如果不一致,那么你就需要用file 命令查看一下这个macho

    file xxFramework
    

    在这里插入图片描述dynamically说明是动态库,那么image list 就去找动态库的加载地址(而不是主二进制的)下断点

    Frameworks/xxramework.framework/xxFramework 
    
    展开全文
  • ios逆向入门笔记(详细到哭)

    千次阅读 2020-02-29 23:01:18
    ios逆向入门笔记 手机越狱 版本iphone5 ios8.4.1 遇到问题 1.Cydia跳出Failed to fetch http://repo666.ultrasn0w.com 的錯誤訊息 done! 解决方法 :删除这个源就行了 woc 买来的手机越狱过了然后被卖家...

    ios逆向入门笔记

     

    手机越狱

    版本iphone5 ios8.4.1

    遇到问题

    1.Cydia跳出Failed to fetch http://repo666.ultrasn0w.com 的錯誤訊息 done!

    解决方法 :删除这个源就行了

    woc 买来的手机越狱过了然后被卖家恢复出厂设置了== 坑死

    2.由于越狱后恢复出厂设置导致数据库错误 Cydia跳出Could not open file /var/lib/dpkg/status

    done!

    解决方法

    由于重置导致无法使用openssh 所以 这里有个无openssh 修复教程

    修复工具下载:

    上传有点慢麻烦 写完后再上传

    先利用ifunbox 将cydia-fix里的lib文件夹直接拖入ibooks

    接着利用impactor 导入ipa

    将ipa文件拖入这里 输入登录的id 密码 即可安装

    接着在手机端 进行命令输入

    先输入 su
    会提示要求输入密码 默认密码:alpine
    接着复制lib 创建log/apt文件夹
    cp -R /var/mobile/Media/Books/lib /var
    mkdir /var/log/apt

     

     

    重启cydia

    搞定!~~ 撒花撒花

     

    3.安装 dumpdecrypted 时遇到 SDK "iphoneos" cannot be located 问题

    产生原因:xcode 命令行目录不正确 可以使用命令查看当前 xcode路径

    xcode-select --print-path

     

    看到路径不正确 所以 我们指定下路径即可搞定

    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/

     

     

     

     

    4.遇到问题 安装openssh 插件后 还是无法使用内网连接ssh (手机 iphone5 美版 有锁 ios8.4.1)

    解决方法:

    我尝试了卸载本地的 openssh 和openssl 接着重装一下

    然后通过修改了系统语言为英文 搞定

     

    5.遇到iExplorer 安装时 显示dmg镜像损坏

     

    解决方法

    sudo spctl --master-disable

     

    再次安装即可

     

    6.ios ssh 如何改密码

    登录ssh 默认密码 alpine
    输入psswd
    根据提示输入change密码就可以啦

    7.Reveal Debug 教程

    https://blog.csdn.net/yinxuanwl/article/details/93474278

    打完patch 后输入注册码

     

    注册码:180999999999

    8.当编译获取appid程序时遇到

     

    Showing All Messages

    :-1: No profile for team '33SY35N4CB' matching 'greenboxDevelopment' found: Xcode couldn't find any provisioning profiles matching '33SY35N4CB/greenboxDevelopment'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor. (in target 'iOSAppsInfo') 

    该错误是由于没有修改id的原因

    解决方法:

    xcode 左侧搜索到teamid 双击后 左侧搜索id 或者 DEVELOPMENT_TEAM 接着在列表框更改为自己的id即可

    9.编译时遇到错误

     

    :-1: No profile for team xxx (Personal Team)' matching 'xxxxxx@xx.com' found: Xcode couldn't find any provisioning profiles matching '99994Y3DQ2/xxxxxxx@xx.com'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor. (in target 'iOSAppsInfo') 

    解决方法:

    找到项目配置 signing 接着 在 Automatically manage signing 处打勾 在team栏选择自己登录的账号

    注意方框里的内容 复制它

     

    54f11589-255a-47a3-beb1-3c68019bd296

    打开项目文件夹

     

    进入 project.pbxproj

    查找该字符串

    删除这两行

    删除后保存 重启项目

     

    重启项目后

    接着就可以正常生成啦

    10. 关于使用xcodebuild 的问题

     

    编译命令

     

    编译命令xcodebuild  -exportArchive -archivePath ~/Library/Developer/Xcode/Archives/2019-06-24/iosid.xcarchive -exportPath iosid.ipa -exportOptionsPlist ~/Library/Developer/Xcode/Archives/2019-06-24/iosid.xcarchive/info.plist

    这里要说明的是 xcodebuild利用 xxxx.xcarchive包导出成ipa文件命令格式

     

    xcodebuild  -exportArchive
    -archivePath <archivePath> #.xcarchive文件的全路径 例如: .../.../XXX.xcarchive
    -exportPath <exportPath> #ipa文件导出路径
    -exportOptionsPlist <exportOptionsPlistPath> #该文件info.plist文件全部路径 eg: .../.../info.plist
    

    根据命令自行修改目录即可

     

     

    11.当ssh 连接手机 执行ps命令发现提示 command not found

     

    解决方法

    打开手机端Cydia 搜索安装

    adv-cmds

     

    可以看到安装后可以执行的命令有 finger fingerd last lsvfs md ps

     

    接着在执行命令 就可以了

     待续。。。。

    展开全文
  • ”砸壳”在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解密的过程。未砸壳的App是无法在Class-dump、Hopper等工具中使用的。...
  • iOS逆向(七)常用逆向工具介绍

    千次阅读 2019-03-11 06:31:03
    iOS逆向工程的工具大致可分为四类: 检测工具 如:Reveal、tcpdump等 反编译工具(反汇编工具 - 分析二进制文件并得到一些信息) 如:IDA、Hopper Disassembler、classdump等 调试工具 如:lldb、Cycript等 开发...

    逆向工具集和安装和使用

    iOS逆向工程的工具大致可分为四类:

    • 检测工具 如:Reveal、tcpdump等
    • 反编译工具(反汇编工具 - 分析二进制文件并得到一些信息) 如:IDA、Hopper Disassembler、classdump等
    • 调试工具 如:lldb、Cycript等
    • 开发工具 如:Xcode、theos等

    1 、classdump介绍

    class-dump是用来dump目标文件的类信息的工具。它利用Objective-C语言的runtime的特性,将存储在mach-O文件中的@interface和@protocol信息提取出来,并生成对应的.h文件。

    注:class-dump只能导出未经加密的App的头文件。classdump是对"otool -ov" 信息的翻译,以一种我们熟悉的易读的方式呈现,官方介绍如下:

    This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using ‘otool -ov’, but presented as normal Objective-C declarations, so it is much more compact and readable.

    classdump官网地址

    打开链接后,选择class-dump-3.5.dmg,进行下载。下载完成之后,将dmg文件中的class-dump复制到/usr/bin目录,并在终端执行如下执行进行赋权:

    sudo chmod 777 /usr/bin/class-dump
    复制代码

    然后运行class-dump指令,即可看到如下结果:

    class-dump的简单使用

    class-dump -H /Applications/Calculator.app -o /Users/GofLee/Desktop/CalculateHeads
    复制代码

    【说明】

    • /Applications/Calculator.app:计算器app的路径;
    • /Users/GofLee/Desktop/CalculateHeads:存放dump结果的头文件文件夹路径。
    • 执行上面的指令之后,我们可以在
    • /Users/GofLee/Desktop/CalculateHeads 目录下看到生成的.h列表

    从上面的结果可以看到,我们有了这些.h文件之后,就可以初步了解目标App的程序结构。后面可以结合Reveal和cycript工具,更精准的分析目标App某个页面的功能实现。 同样的,我们也可以导出AppKit、UIKit的头文件:

    class-dump -H /System/Library/Frameworks/AppKit.framework -o /Users/GofLee/Desktop/AppKitHeaders
    复制代码

    【注意】:有时class-dump指令会执行失败,无法得到想要的头文件,或头文件的内容是加密的密文。出现这种情况是因为class-dump的作用对象必须是未经加密的可执行文件,一般App Store中下载的App都是经过签名加密的,这个时候需要先进行砸壳。

    class-dump-z 下载地址

    class-dump-z 是对 class-dump 和 class-dump-x 的改进版,完全用C++重写,避免动态调用,这使得 class-dump-z 比 class-dump 和 class-dump-x快10倍左右,并且可以在 Linux、Mac、 iPhone 上运行。

    dumpdecrypted 砸壳工具

    dumpdecrypted地址

    cd到 dumpdecrypted的目录下,然后运行如下命令
    
    make //make之后会生成dumpdecrypted.dylib动态库文件
    
    然后将该动态库文件拷贝到手机的tmp文件的目录下
    复制代码
    • 定位要砸壳的StoreApp的执行文件名字TargetApp (ps -e 可以得到全路径)
    • 定位要砸壳的StoreApp的Document目录:
    cycript -p TargetApp [[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] 
    复制代码
    • 得到路径:
     #"file:///var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/" 
    复制代码
    • 进入Document目录:
    cd /var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/
    复制代码
    • 拷贝dumpdecrypted.dylib:

    注意:作如下操作之前你如要使用scp将dumpdecrypted.dylib文件提前拷贝到手机

    scp dumpdecrypted.dylib . DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
    复制代码

    获取沙盒路径的方式

    ps -e | grep WeChat  //找到微信的进程  app路径
    
    cycript -p WeChat    //在进程中开启cycript
    
    dir = NSHomeDirectory() //获取沙盒路径
    
    control +D   关闭cycript
    复制代码
    • 获取沙盒路径之后 进入沙盒路径的Documents的路径之下 以上的具体操作如下
    Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB root# ls
    Documents/  Library/  tmp/
    Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB root# cd Documents/
    Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root# ls
    00000000000000000000000000000000/  MMResourceMgr/   app_tutt/
    079d66db896f66ef28a7e029c2eff367/  MMappedKV/       heavy_user_id_mapping.dat
    CrashReport/                       MemoryStat/      mmupdateinfo.archive
    LocalInfo.lst                      OpenImResource/
    LoginInfo2.dat                     SafeMode.dat
    Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root# cp /tmp/dumpdecrypted.dylib .      //这一步需要提前将dumpdecrypted.dylib文件拷贝到手机的/tmp文件夹下
    Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root# ls
    00000000000000000000000000000000/  MMResourceMgr/   app_tutt/
    079d66db896f66ef28a7e029c2eff367/  MMappedKV/       dumpdecrypted.dylib*
    CrashReport/                       MemoryStat/      heavy_user_id_mapping.dat
    LocalInfo.lst                      OpenImResource/  mmupdateinfo.archive
    LoginInfo2.dat                     SafeMode.dat
    Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root#
    复制代码
    • 使用如下命令进行 获取解密后程序
    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/E736B0BC-7ED4-42CE-8513-CE52F88F5F52/WeChat.app/WeChat
    复制代码

    如果以上命令运行完成之后报如下错误 表示dumpdecrypted.dylib 没有进行签名 需要先进行签名

    dyld: could not load inserted library 'dumpdecrypted.dylib' because no suitable image found.  Did find:
        dumpdecrypted.dylib: required code signature missing for 'dumpdecrypted.dylib'
    
        /private/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents/dumpdecrypted.dylib: required code signature missing for '/private/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents/dumpdecrypted.dylib'
    
    
    Abort trap: 6
    复制代码
    • 签名:
    ldid -S /private/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents/dumpdecrypted.dylib
    复制代码
    • 签名过后再次使用如下命令
    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/E736B0BC-7ED4-42CE-8513-CE52F88F5F52/WeChat.app/WeChat
    复制代码

    ls 后的目录结构 ,其中WeChat.decrypted是解密后的文件

    9-A7B1-AA3B8FD268CB/Documents root# ls
    00000000000000000000000000000000/  MMResourceMgr/   WeChat.decrypted
    079d66db896f66ef28a7e029c2eff367/  MMappedKV/       app_tutt/
    CrashReport/                       MemoryStat/      dumpdecrypted.dylib*
    LocalInfo.lst                      OpenImResource/  heavy_user_id_mapping.dat
    LoginInfo2.dat                     SafeMode.dat     mmupdateinfo.archive
    Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root#
    复制代码

    //将解密后的文件拷贝到mac

    scp WeChat.decrypted hexindai@172.20.8.179:/tmp
    复制代码

    注意:当砸壳完毕后,使用 class-dump 仍然只导出 CDStructures.h 一个文件,则可能架构选择错误;因为 dumpdecrypted 只会砸你手机处理器对应的那个壳,fat binary 的其它部分仍然是有壳的,而 class-dump 的默认目标又不是被砸壳的那个部分,因此很有可能就会报错;

    class-dump -s —arch armv7 -S -H WeChat.decrypted -o ./WCHeaderscd
    复制代码
    • 完成之后的头文件如下

    转载于:https://juejin.im/post/5c85f4405188257ded10d7a4

    展开全文
  • 主要介绍了iOS逆向开发之微信自动添加好友功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 提到iOS逆向,网上的文章铺天盖地,创作时间从2014年到2019年不等。绝大部分的工具或命令都过时了。书籍更不用说。 我刚刚结束了为期1月的零基础iOS逆向研究,现已经成功逆向了微信的一些复杂逻辑。现在分享一下我的...

    1、前言

    提到iOS逆向,网上的文章铺天盖地,创作时间从2014年到2019年不等。绝大部分的工具或命令都过时了。书籍更不用说。

    我刚刚结束了为期1月的零基础iOS逆向研究,现已经成功逆向了微信的一些稍复杂逻辑(复杂主要是因为我想hook的功能,微信有个小bug)。现在分享一下我的一些学习路线和心得。

    • 郑重声明:本次逆向仅限于对iOS底层知识的学习,无任何恶意行为

    2、工具篇

    2.1 MonkeyDev 逆向集成环境

    工欲善其事 必先利其器
    iOS后起之秀AloneMonkey在旧的逆向集成环境iOSOpenDev的基础上,进行了升级。变成了一款非越狱插件开发集成神器:MonkeyDev,它提供了我们一个像开发普通iOS应用一样简单的开发平台。
    源码地址
    安装和使用方法请看这里
    我们先看一眼项目的创建:
    跟创建其他iOS项目一样简单
    再来看一眼project结构目录:
    拖入无壳的app即可
    只需要拖入一个砸壳的应用即可。关于如何砸壳,这不是逆向的重点,所以本篇不教,有兴趣的同学可以自行查资料解决。可以先到PP助手的应用商店下载脱壳应用。

    该平台集成了以下hook工具:

    CaptainHook:
    利用c语言构造器( attribute(constructor) ) & dyld加载原理和时机,hook目标函数. CaptainHook基本原理

    fishhook:
    FaceBook出品,通过动态修改Mach-O(后面会提到该文件)懒加载、非懒加载函数表指针的途径,达到hook的功能 fishhook原理 & Mach-O动态加载过程

    theos:
    引擎会把logos语法写的.xm文件,结合c语言构造器,编译成.mm(纯c++函数)文件,加载到动态库。

    MonkeyDev动态库注入原理

    前面提到了,我们的代码都被做成动态库了,动态库要注入到APP才能生效。动态库如何注入到APP呢?
    目前常用的方法有三种

    方法1:将dylib文件放入DynamicLibraries目录
    比如Tweak 产生的 dylib 实际会安装到 /Library/MobileSubstrate/DynamicLibraries 目录,在这个目录的 dylib 会被应用加载,里面的 dylib 会有一个 plist 文件,标识哪些进程会加载,如图:在这里插入图片描述
    方法2:修改Mach-O文件
    只要我们在Mach-O文件中添加一条 LoadCommand,类型为 LC_LOAD_DYLIB,并将路径指定我们的dylib即可。

    方法3:设置 DYLD_INSERT_LIBRARIES 环境变量
    dumpdecrypted的脱壳原理,就是使用 DYLD_INSERT_LIBRARIES 注入进程,然后把文件从内存中给 dump 下来。
    DYLD_INSERT_LIBRARIES = test.dylib /var/mobile/Containers/Bundle/Application/143A710D-4395-4765-872C-148EA6C86936/WeChat.app/WeChat

    为什么 DYLD_INSERT_LIBRARIES 能够注入呢?这是苹果本身提供的一个功能,我们可以看苹果开源的 dyld 的源码,在 main 函数里相关的代码,判断了 DYLD_INSERT_LIBRARIES 环境变量,如果有的话就会加载。

    // load any inserted libraries
    if  ( sEnv.DYLD_INSERT_LIBRARIES != NULL ) {
        for (const char* const* lib = sEnv.DYLD_INSERT_LIBRARIES; *lib != NULL; ++lib) 
        loadInsertedDylib(*lib);
    }
    

    2.2 iOS基础篇

    A、初识 Mach-O
    什么是Mach-O 以及查看工具
    图标:烂苹果
    B、动态链接过程
    提到Mach-O就不得不提 动态链接
    因为看完这些资料,你可能会越来越懵逼,Mach-O是被谁加载的呢?Mach-O怎么跟我们的函数怎么关联上的呢?静态库和动态库的区别是什么呢?
    别急 回头看看 fishhook原理篇 ,这些问题基本就可以解答了,
    如果你还是不满足,想要更深入的理解动态链接过程,请看阿里iOSer 刘坤的这篇博客

    如果你想对Mach-O有更深入、全面的了解,可以看看这些:
    Mach-O分析:解析一个类 该篇讲较基础,作为入门比也较合适
    Mach-O 内存分布
    由App的启动说起
    深入剖析Macho (1)
    Mach-O文件格式

    2.3 必要辅助工具篇

    1、class-dump 分析mach-o 导出所有类的头文件(非开发中的头文件,它包括所有的属性、类方法、对象方法)
    同样,这里是它的安装和使用说明
    导出来之后 长这样:(建议用sublime打开,如果你用xcode打开该文件夹,你就会知道我这条建议有多么感人了)
    在这里插入图片描述
    2、反汇编工具:IDAHopper Disassembler
    Hopper可以试用大约20分钟?分析比IDA较快(不过也需要近半小时),但试用版不能保存分析结果,下次打开又要等待半小时。网上的破解版都不好用。
    所以我选择购买了IDA 破解版:购买地址
    当然,有钱的童鞋,还是建议支持买正版。也就¥900多。
    汇编指令和二进制机器码是一一对应的,所以有了Mach-O二进制文件,反汇编回汇编代码 也是可行的。
    至于为什么要使用反汇编工具,看看下面的图片就懂了。
    1、函数列表
    1、函数列表。不过看起来还不如我们class-dump导出的头文件包,别急,一旦双击某个函数名,就可以看到该函数的汇编代码了。见下图:
    doSearch函数汇编位置
    这是搜索好友的doSearch函数,如果你觉得汇编看不太懂,想要看点能看懂的,按F5IDA会帮你转成伪代码,如下图:
    这是之前用hopper工具转化的伪代码,IDA的差不多,就不另行截图了
    一个细节可以看出:函数地址在整个Mach-O中的偏移位置。

    好了,前期的工具和理论基础,先准备这些就够了,迫不及待的小伙伴们 你们可以开始动手试验了,请移步: iOS逆向学习二:上机调试

    展开全文
  • ios逆向入门教程(一)

    千次阅读 2019-03-01 13:04:18
    我们可以随机的选取一个节点不要太靠树叶,也不要太靠树根,例如我选的是标红的部分,把这个节点的内存地址copy出来,这个内存地址,就代表了这个节点的view对象,ios开发的老油条们都知道,通过view的nextResponder...
  • ios逆向-frida&环境

    千次阅读 2020-11-21 15:33:47
    拖到ida打开 错误锦集 unable to launch iOS app: The operation couldn’t be completed. Application “” is unknown to FrontBoard. 打开app,允许权限 2.如果frida无法连接手机,提示“Failed to enumerate ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,227
精华内容 5,690
关键字:

ios逆向