zoukankan      html  css  js  c++  java
  • Ios App破解之路二 JJ斗地主

    前提条件:

    越狱手机里, 安装了 <JJ斗地主>

    使用砸壳工具clutch

    下载地址: https://github.com/KJCracks/Clutch/releases

    dzq:~/data root# Clutch -i | grep JJ
    57:  JJ斗地主-欢乐棋牌休闲合集 <cn.jj.TKLobby>
    
    [1]+  Stopped                 Clutch -i | grep JJ
    [1]+  Done                    Clutch -i | grep JJ
    dzq:~/data root# Clutch -d 57
    Zipping JJ斗地主.app
    Error: posix_spawn: No such file or directory (Error 2)
    
    Error: posix_spawn: No such file or directory (Error 2)
    
    Error: posix_spawn: No such file or directory (Error 2)
    
    Error: Failed to dump <RNCAsyncStorage> with arch arm64
    
    2020-04-26 12:04:51.272 Clutch[4652:115450] failed operation :(
    2020-04-26 12:04:51.272 Clutch[4652:115450] application <NSOperationQueue: 0x102077830>{name = 'NSOperationQueue 0x102077830'}
    Error: Failed to dump <RNCAsyncStorage>
    
    2020-04-26 12:04:51.273 Clutch[4652:115450] failed operation :(
    2020-04-26 12:04:51.273 Clutch[4652:115450] application <NSOperationQueue: 0x102077830>{name = 'NSOperationQueue 0x102077830'}
    Error: Failed to dump <react_native_image_picker> with arch arm64
    
    2020-04-26 12:04:51.274 Clutch[4652:115443] failed operation :(
    2020-04-26 12:04:51.274 Clutch[4652:115443] application <NSOperationQueue: 0x10212dcb0>{name = 'NSOperationQueue 0x10212dcb0'}
    Error: Failed to dump <react_native_image_picker>
    
    2020-04-26 12:04:51.274 Clutch[4652:115443] failed operation :(
    2020-04-26 12:04:51.274 Clutch[4652:115443] application <NSOperationQueue: 0x10212dcb0>{name = 'NSOperationQueue 0x10212dcb0'}
    Error: posix_spawn: No such file or directory (Error 2)
    
    Error: Failed to dump <react_native_view_shot> with arch arm64
    
    2020-04-26 12:04:51.275 Clutch[4652:115435] failed operation :(
    2020-04-26 12:04:51.275 Clutch[4652:115435] application <NSOperationQueue: 0x1021240c0>{name = 'NSOperationQueue 0x1021240c0'}
    Error: Failed to dump <react_native_view_shot>
    
    2020-04-26 12:04:51.276 Clutch[4652:115435] failed operation :(
    2020-04-26 12:04:51.276 Clutch[4652:115435] application <NSOperationQueue: 0x1021240c0>{name = 'NSOperationQueue 0x1021240c0'}
    Error: Failed to dump <react_native_sqlite_storage> with arch arm64
    
    Error: posix_spawn: No such file or directory (Error 2)
    
    Error: posix_spawn: No such file or directory (Error 2)
    

     很遗憾, 使用Clutch工具砸壳失败

    使用砸壳工具dumpdecrypted

    下载:git clone https://github.com/stefanesser/dumpdecrypted.git

    网上其他的教程都是直接把源码下载下来后,直接make,  然后生成了一个: dumpdecrypted.dylib 文件, 然后兴致勃勃scp到刚越狱的手机上, 开始砸壳

    我按照这个做了, 碰到了两个问题:  

    1,  签名问题

    2, libSystem.B.dylib 不匹配, 导致运行失败   报什么 __check_ 的什么玩意

    解决办法:

    1,  下载iPhoneOS12.4.sdk 

      下载源: https://github.com/xybp888/iOS-SDKs

      下载具体版本的SDK: svn checkout https://github.com/xybp888/iOS-SDKs/trunk/iPhoneOS12.4.sdk

      

      为什么下载这个版本? 

      因为本人的手机系统版本是12.4.5, 仅此而已

      

    2, 修改makefile文件  

    GCC_BIN=`xcrun --sdk iphoneos --find gcc`
    GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s -arch arm64
    SDK=iPhoneOS12.4.sdk
    
    CFLAGS = 
    GCC_BASE = $(GCC_BIN) -Os $(CFLAGS) -Wimplicit -isysroot $(SDK) -F$(SDK)/System/Library/Frameworks -F$(SDK)/System/Library/PrivateFrameworks
    
    all: dumpdecrypted.dylib
    
    dumpdecrypted.dylib: dumpdecrypted.o 
    	$(GCC_UNIVERSAL) -dynamiclib -o $@ $^
    
    %.o: %.c
    	$(GCC_UNIVERSAL) -c -o $@ $< 
    
    clean:
    	rm -f *.o dumpdecrypted.dylib
    

     然后重新执行make, 会生成 dumpdecrypted.dylib 文件

    3, 对其进行签名

    brew install ldid
    ldid -S dumpdecrypted.dylib
    

     4, 签名后, 将其拷贝到越狱手机上

    scp dumpdecrypted.dylib root@myiphone:/var/root/data
    

     提示:

      本人设置了ssh免密登录,

      本人修改了/etc/hosts文件.  新增myiphone域名解析.  对iPhone进行映射

      本人在苹果手机的root用户下新建了data目录.   以后传文件,或者拿破解文件 直接 ~/data/文件名

      本人设置了iphone ssh支持中文,   登录ssh

    echo "export LC_ALL='en_US.UTF-8'" > ~/.profile
    

    正式开始砸壳

    1, 拿到 JJ斗地主 可执行路径.

     先在手机上运行JJ斗地主, 然后 

    dzq:~/data root# ps -e | grep JJ
     4830 ??         0:05.17 /var/containers/Bundle/Application/742F31B2-EC2E-4FE3-842B-95DD145D1B15/JJ斗地主.app/JJ斗地主
     4832 ttys000    0:00.03 grep JJ
    

     2,  cd 到 data目录

    cd ~/data
    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/742F31B2-EC2E-4FE3-842B-95DD145D1B15/JJ斗地主.app/JJ斗地主
    

    3, 稍等片刻后,

    dzq:~/data root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/742F31B2-EC2E-4FE3-842B-95DD145D1B15/JJ斗地主.app/JJ斗地主 
    mach-o decryption dumper
    
    DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.
    
    [+] detected 64bit ARM binary in memory.
    [+] offset to cryptid found: @0x101084cf8(from 0x101084000) = cf8
    [+] Found encrypted data at address 00004000 of length 13336576 bytes - type 1.
    [+] Opening /private/var/containers/Bundle/Application/742F31B2-EC2E-4FE3-842B-95DD145D1B15/JJ斗地主.app/JJ斗地主 for reading.
    [+] Reading header
    [+] Detecting header type
    [+] Executable is a plain MACH-O image
    [+] Opening JJ斗地主.decrypted for writing.
    [+] Copying the not encrypted start of the file
    [+] Dumping the decrypted data into the file
    [+] Copying the not encrypted remainder of the file
    [+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset cf8
    [+] Closing original file
    [+] Closing dump file
    dzq:~/data root# ll
    -sh: ll: command not found
    dzq:~/data root# ls
    JJ斗地主.decrypted  dumpdecrypted.dylib*
    

     非常好, 拿到了砸壳后的文件《JJ斗地主.decrypted》 ,  之后就可以用反编译工具,分析一波了. 

    使用砸壳工具CrakerXI+

    安装CrakerXI+:

    打开cydia软件, 软件源, 右上角的编辑按钮,左上角的添加按钮,  输入: http://cydia.iphonecake.com,  然后完成

    点击搜索CrakerXI+安装.   

    打开软件, 设置选项卡里, 全部选择, 然后随便砸壳了,  我个人选择 选择 Full ipa   

    不全部选择会有坑: 每次打开被砸壳的软件都会重新砸壳. 把人搞吐血.

    砸壳之后存放的目录: /var/mobile/Documents/CrackerXI/

    总结:

    从appstore下载安装后的目录:

    应用程序安装目录:/private/var/containers/Bundle/Application/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXX/

    某个应用程序的可写目录:

    /var/mobile/Containers/Data/Application/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXX/

    /var/root/Containers/Data/Application/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXX/

    用的哪个目录取决于那个应用 是使用什么权限来运行的.

    具体确定输出目录:

    dzq:/var/containers/Bundle/Application/742F31B2-EC2E-4FE3-842B-95DD145D1B15 root# cycript -p JJ斗地主
    cy# NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    @["/var/mobile/Containers/Data/Application/00B2D6E5-E2A1-48FF-8743-55E34AA7B700/Documents"]
    cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]
    @[#"file:///var/mobile/Containers/Data/Application/00B2D6E5-E2A1-48FF-8743-55E34AA7B700/Documents/"]
    

     有两种方式: 随便用哪种都可以,  然后ctrl + D. 结束 cy

  • 相关阅读:
    linux基础知识
    linux运维指令
    redis的三种集群方式
    docker安装tomcat
    cetos7.7安装docker
    Redis和MySQL数据一致中出现的几种情况
    外行人都能看懂的 Spring Cloud,错过了血亏!
    交换机和猫、路由器到底有什么区别
    一次给女朋友转账引发我对分布式事务的思考
    sql merge
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/12778806.html
Copyright © 2011-2022 走看看