• 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

  • 相关阅读:
    Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上
    异步FIFO结构及FPGA设计 跨时钟域设计
    FPGA管脚分配需要考虑的因素
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 上篇)
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 下篇)
    中国通信简史 (下)
    谈谈德国大学的电子专业
    中国通信简史 (上)
    Verilog学习笔记
    Verilog非阻塞赋值的仿真/综合问题(Nonblocking Assignments in Verilog Synthesis) 下
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/12778806.html
Copyright © 2020-2023  润新知