iOS逆向课程笔记(五)

dumdecrpted 砸壳工具
  • dumpdecrypted 砸壳工具
    下载最新源码: git clone https://github.com/stefanesser/dumpdecrypted.git
    编译动态库文件(dumpdecrypted.dylib): make
    定位要砸壳的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: cp  dumpdecrypted.dylib .

    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
 
  • theos(作者:@DHowett)
    越狱开发工具包
  • xcode工具集的路径需要设置正确
    查看命令: xcode-select --print-path

    设置命令: xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer

  • 通过github安装theos
    https://github.com/theos/theos/wiki/Installation

  • 修改所有者
    sudo chown -R $(id -u):$(id -g) theos

    theos维基百科:
    http://iphonedevwiki.net/index.php/Theos/Setup#For_Mac_OS_X
    http://iphonedevwiki.net/index.php/Theos

  • 环境变量
    export THEOS=/opt/theos

    可以写入~/.bash_profile
    source ~/.bash_profile

    echo $THEOS

  • ldid(作者:saurik )
    维基百科:http://iphonedevwiki.net/index.php/Ldid

    越狱iPhone下的签名工具(更改授权entitlements),可以为thos开发的程序进程签名(支持在OS X和iOS上运行)。

  • 安装ldid
    $ brew install ldid fakeroot

  • 加密算法

  • 对称加密算法:RC4、DES、3DES、AES128、AES256等。加解密双方密钥相同。

  • 非对称加密算法:RSA、Elgamal等。加解密双方使用密钥对。

  • 哈希算法:MD5(16Byte)、SHA1(20Byte)等。任意长度的信息转换成到某一固定长度的信息摘要(具有唯一性,不可逆性),主要作用是对数据数据完整性校验。

  • 数字签名 (苹果官方的私钥签名,公钥验证)

    • 数字签名是非对称密钥加密技术与数字摘要技术的应用。对指定信息使用哈希算法,得到一个固定长度的信息摘要,然后再使用 私钥 (注意必须是私钥)对该摘要加密,就得到了数字签名。
  • 数字证书
    数字证书是一个文件,由苹果的 Apple Worldwide Developer Relations Certification Authority(WWDR)证书认证中心进行签名,其的主要作用是用来标示身份。证书文件主要包含两部分内容:证书信息和证书签名

    • 证书信息
      包含用户的公钥、用户个人信息、证书颁发机构信息、证书有效期等信息。(这里的用户主要指开发者)

    • 证书签名
      WWDR将上述证书本身内容的使用哈希算法得到一个固定长度的信息摘要,然后使用自己的私钥对该信息摘要加密生成数字签名。

    • 证书的验证
      iOS系统原本就持有WWDR的公钥,系统首先会对证书内容通过指定的哈希算法计算得到一个信息摘要;然后使用WWDR的公钥对证书中包含的数字签名解密,从而得到经过WWDR的私钥加密过的信息摘要;最后对比两个信息摘要,如果内容相同就说明该证书可信。在验证了证书是可信的以后,iOS系统就可以获取到证书中包含的开发者的公钥,并使用该公钥来判断代码签名的可用性了。

    • 证书存在的意义
      通过证书使用过程可以看出,证书本身只是一个容器,用来承载开发者的公钥。iOS通过验证证书的合法性来确保开发者公钥的合法性。

  • 代码签名与验证(开发者的私钥签名,公钥验证)
    打包过程中使用开发者私钥对应用进行签名。

    开发者的公钥被包含在数字证书里,数字证书又被包含在描述文件(Provisioning File)中,描述文件在应用被安装的时候会被拷贝到iOS设备中。iOS安全系统通过证书就能够确定开发者身份,就能够通过从证书中获取到的公钥来验证开发者用该公钥对应的私钥签名后的代码、资源文件等有没有被更改破坏,最终确定应用能否合法的在iOS设备上合法运行。

  • 工具的使用

    查看codesign load command 
    otool -l WeChat | grep -A 5 SIGNATURE
    
    查看签名信息
    ➜  tmp codesign -dvvv WeChat
    Executable=/private/tmp/WeChat
    Identifier=com.tencent.xin
    Format=Mach-O universal (armv7 arm64)
    CodeDirectory v=20200 size=448783 flags=0x0(none) hashes=14017+5 location=embedded
    Hash type=sha256 size=32
    CandidateCDHash sha1=6e2f8a93dbe63c17ea3b3a3dc032826b9eddf2b7
    CandidateCDHash sha256=d6f1afe23b598a76301711a4a62a5505a749a12a
    Hash choices=sha1,sha256
    CDHash=d6f1afe23b598a76301711a4a62a5505a749a12a
    Signature size=3925
    Authority=Apple iPhone OS Application Signing
    Authority=Apple iPhone Certification Authority
    Authority=Apple Root CA
    Info.plist=not bound
    TeamIdentifier=88L2Q4487U
    Sealed Resources=none
    Internal requirements count=1 size=96
    
    查看entitlement内容 
    codesign -d --entitlements - WeChat
    ldid -e WeChat
    
    修改entitlement内容 
    ldid -Sentitlement.xml  WeChat
    
  • dpkg工具

  • 安装

$ brew install --from-bottle https://raw.githubusercontent.com/Homebrew/homebrew-core/7a4dabfc1a2acd9f01a1670fde4f0094c4fb6ffa/Formula/dpkg.rb
$ brew pin dpkg
  • 使用
dpkg -i/-r file.deb  deb包安装/卸载
dpkg -s com.iosre.myiosreproject 查看安装包信息

你可能感兴趣的:(iOS逆向课程笔记(五))