用命令编译iosapp_mac 反编译iosapp - CSDN
  • project目录构建应用 xcodebuild -sdk $(sdkname) build 通过 xcodebuild -showsdks得到 sdkname 启动模拟器 xcrun instruments -w 'iPhone 6 Plus' ... simctl install booted /build/Release-ip

    project目录构建应用

    xcodebuild -sdk $(sdkname) build

    通过 xcodebuild -showsdks得到sdkname


    启动模拟器

    xcrun instruments -w 'iPhone 6 Plus'


    安装应用包

    xcrun simctl install booted /build/Release-iphonesimulator/YPTabBarController.app 


    启动模拟器中安装好的应用

    xcrun simctl lauch booted com.tester.Test

    com.tester.Test为应用bundle Identifier


    删除模拟器中安装好的应用

    xcrun simctl uninstal booted com.tester.Test

    展开全文
  • pngcrush反编译ios app 资源文件 时间:2012-12-27 11:56:45 类别:ios开发 访问: 3705 次 要提高app制作水平,最好的方法就是学习领先者,pngcrush反编译ios app 资源文件,步骤很简单 在电脑的...
    
    

    要提高app制作水平,最好的方法就是学习领先者,用pngcrush反编译ios app 资源文件,步骤很简单

    1. 在电脑的itunes中下载你选中的app,下载完成之后,然后在finder里面找到对应的ipa包,也可以在91等市场中直接下载ipa文件

    2. ipa文件其实是zip包,重命名为zip后缀文件之后,双击打开

    3. 找到 xxx.app 文件,这其实是个目录,点击右键,在菜单中选中“查看包内容”,就可以进入目录,然后看到大量的资源文件,这些png文件都直接放在app的根目录,你可以在finder中直接浏览
    4. 但是这些png文件都是打包过程中被压缩过的,photoshop无法正确识别 ( 注:打包app的时候,你可以在xcode project选项中选择对png文件不压缩)
    5. 要把这些png文件还原,可以通过一个名叫 pngcrush 的开源软件,你可以到 sourceforge 下载,实际上ios的sdk也提供了这个程序(xcode就是利用它压缩png的)

      1. xcrun -sdk iphoneos -find pngcrush 可以获得 pngcrush的安装目录,然后直接使用,或者在你的$PATH目录里面做一个符号链接,这样可以在console窗口直接敲pngcrush
      2. 进入资源文件存放目录,打开对应的命令行窗口,执行下面的命令即可
      3. pngcrush -d xxx reverted -revert-iphone-optimizations -q *.png
        pngcrush -e xxx reverted -revert-iphone-optimizations -q *.png

    上面提到的方法都是在mac操作系统下面,如果是windows/linux也可以用,pngcrush也提供了对应的版本

    本文地址: http://lutaf.com/100.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接

    展开全文
  • 编译 iOS APP

    2019-03-04 16:04:26
    本文主要介绍软件的破解ipa的方式,一共两种,Hopper disassembler和class-dump。由于APP Store上的ipa都是加过密的,需要砸壳,比较麻烦,所以我们直接选用各大应用市场,或者各类助手中的越狱商店里的APP作为...

    本文主要介绍用软件的破解ipa的方式,一共两种,Hopper disassembler和class-dump。由于APP Store上的ipa都是加过密的,需要砸壳,比较麻烦,所以我们直接选用各大应用市场,或者各类助手中的越狱商店里的APP作为实验对象,减轻工作量。先声明下,此教程仅作为兴趣研究。 ###1.Hopper Disassembler 非常强大,非常无脑,非常适合新手,操作非常简单。当然也有其局限性,只能看到伪代码,无法完全看到源码。不过基本够用了,可以根据知道的方法名去检索伪代码实现。首先去下载个Hopper disassembler破解版,然后我们解压ipa找到里面的可执行文件,这就不提了。然后直接拖进Hopper disassembler里面,OK~这时候,你会看到满屏的汇编源码...别慌,点击右上角(版本不同可能位置不大相同)的if(b) f(x); 按钮,如下图,就可以看到伪代码了。需要破解版的自己找找网上有。

    ###2.class-dump ####2.1安装class-dump 比较难以上手安装麻烦,但是可以看到.h文件,当然.m你是没法看到的。很久之前是能反编译出.m的,但是激起群愤了,后来就只能反编译出.h了。不废话了,说下使用方法,这里我下载的是 class-dump-3.5.dmp,然后把 img放到/usr/local/bin目录下,然后问题来了,你会发现并不能拖进去。因为***MacOS 10.11***之后,这个目录设置了环境变量,所以无法拖文件进去了,解决办法:class-dump 复制到/usr/bin目录不可写,Operation not permitted 解决办法。但这个教程,我第一次看的时候懵逼了,卡在移动文件到目录那个命令那里,其实mv那条命令压根可以不用输入,直接把文件拷贝到你刚刚创建的文件夹下就行了,当然你在根目录直接新建文件夹不用命令行也是一样的。按教程搞定后,我们测试下class-dump是不是真的可用,在终端输入class-dump,如果能看到版本信息,就是成功了。
    安装好class-dump仅仅是开端,接下来我们要干正事了。反编译出源码。 ####2.2class-dump 使用方法 在桌面建两个文件夹,一个把app的可执行文件放进去,另一个用来待会放导出的.h文件。 cd到可执行文件所在的文件夹,然后class-dump -H mouapp -o /Users/apple/Desktop/pojie 命令如下:class-dump -H mouapp -o /Users/apple/Desktop/pojie ​ 注释: mouapp就是这个app的可执行文件名称

    /Users/apple/Desktop/pojie 是存放dump出来头文件的文件夹路径,当然你也可以不用写输出目录,那就默认输出到mouapp所在的文件夹下。

    好了,一切搞定请看成果。

    娱乐为主,用作他途的后果自负。

    展开全文
  • 开篇通过本文你能了解 iOS 逆向的基本知识,对 iOS App 的安全有一定了解。然后能举一反三,在自家 App 找到危险漏洞加以预防,保证用户数据安全。在安全领域,攻与防永远存在。哪怕是 iPhone 有着强大的安全防护...


    开篇


    通过本文你能了解 iOS 逆向的基本知识,对 iOS App 的安全有一定了解。然后能举一反三,在自家 App 找到危险漏洞加以预防,保证用户数据安全。

    在安全领域,攻与防永远存在。哪怕是 iPhone 有着强大的安全防护机制,也挡不住那些极客们一次又一次的好奇,开发了很多强大且便利的工具。本文就是在这些极客们提供的工具的基础上完成的!

    准备工具


    HTTP(S) 抓包


    HTTP 抓包

    第一步:获取 MAC IP

    按下Option键,同时点击 Mac 菜单栏上的无线网 Icon,能看到当前电脑的 IP 地址。 或在终端输入 ifconfig en0 也可查看。

    第二步:设置代理

    保证手机和电脑在同一 WIFI 下,在手机上,点击“设置->无线局域网->连接的WiFi”,设置HTTP代理:

    服务器:为 Mac 电脑 IP 地址(如192.168.1.122)

    端口:8888

    第三步:抓包

    在电脑端,打开 Charles。使手机发生网络请求,Charles 会弹出一个询问的对话框

    点击“Allow”允许,Charles 会出现手机的 HTTP 请求记录列表。

    HTTPS 抓包

    第一步: 获取证书安装地址

    安装 SSL 证书到手机设备。点击 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device

    出现弹窗得到地址 chls.pro/ssl

    第二步:iPhone 安装证书

    在手机 Safari 浏览器输入地址 chls.pro/ssl,出现证书安装页面,点击安装,手机设置有密码的输入密码进行安装

    第三步:配置代理 host

    Charles 设置 Proxy。选择 Proxy -> SSL Proxying Settings...

    勾选 Enable SSL Proxying,点击 Add

    Host 设置要抓取的 HTTPS 接口,Port 填写 443。

    让手机重新发送 HTTPS 请求,可看到抓包。

    注意:不抓包请关闭手机 HTTP 代理,否则断开与电脑连接后会连不上网! 

    拿到 .h 头文件

    从 AppStore 直接下载的 ipa, 苹果公司对其做了 FairPlay DRM 技术进行加密保护,无法直接使用 class-dump 工具获取头文件。但是如果是通过 development 打包出来的话的 App 的话,是可以直接使用 class-dump 查看所有头文件的,此部分介绍就是通过此情况来说明如何获取 .h 文件的。

    此处不再介绍 class-dump 工具的安装过程,具体步骤请直接百度。

    进入到 appName.ipa 所在目录,修改扩展名为 .zip,然后解压文件,得到 appName.app。

    然后执行:

    class-dump -H appName.app -o ./headers/

    命令执行完成后,会在当前目录下的 headers 目录里看到 app 所有头文件。

    如果添加参数 -A -S 会在头文件里标记处类方法和属性的 IMP 地址(模块偏移前基地址)。

    class-dump -H -A -S appName.app -o ./headers/

    SSH 访问手机文件目录


    在你的越狱手机上使用 Cydia 应用市场安装 OpenSSH,并保证 Mac 和 iPhone 处于同一个WIFI下,在 MAC 终端输入:

    ssh root@IP ,IP 替换为 iPhone 的 IP 地址

    输入默认密码:alpine

    即可进入 iPhone 终端。

    使用 Clutch 反编译 App


    第一步:重新签名 debugserver

    取得 debugserver 有两种方式。

    第一种是在 Mac 电脑中拿到

    进入路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.3/DeveloperDiskImage.dmg(其中路径里 8.3,代表 iOS 系统版本,需与准备的越狱手机系统版本保持一致)。双击 DeveloperDiskImage.dmg,将目录里的 usr/bin/debugserver 复制到指定文件夹中。

    第二种是在越狱手机里拿到

    如果手机连接过手机并通过 XCode 调试过 app,会在手机里的 /Developer/usr/bin/ 目录下生成一个 debugserver 文件。通过 iFunbox 导出至 Mac 桌面。或使用 scp 命令 cpoy 出来。

    重签名 debugserver

    即给 debugserver 添加 task_for_pid 权限

    创建 entitlements.plist,添加如下四个 key:

    key 对应的 value 都设为设为 ture

    将 entitlements.plist 和 debugserver 放在同一个目录下,执行以下命令:

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

    此命令会重新签名 debugserver,将签名后的 debugserver 拷贝至手机系统的 /usr/bin/ 目录下。

    注意:不要将 debugserver 拷贝至 /Developer/usr/bin/ 路径下

    第二步: 通过 Clutch 拿到反编译后的 App 可执行文件

    将下载好的 Clutch 放入手机的 /usr/bin/ 路径下。然后,给 Clutch 赋予权限,通过 SSH 登录到手机,进入 /usr/bin/ 执行 chmod a+x ./Clutch

    通过命令 Clutch -i,列出所有的可被 Clutch 的应用。

    对指定序号的应用进行脱壳,如企业微信,序号是1,命令是 Clutch -d 1。执行完成后,会得到脱壳后的 ipa。

    第三步:使用 class-dump 拿到 .h 头文件

    使用上文 【拿到.h头文件】 介绍的方法拿到脱壳后的 App 头文件和并记下要打断点的方法的 IMP 地址。

    动态调试 App

    本文动态调试用到的调试器是 lldb。

    第一步:使 iPhone 进入等待挂载状态

    SSH 登录到手机,执行 ps -e 命令得到 App PID 或项目名称。

    进入 /usr/bin/ 执行 ./debugserver IP:port -a PID|appProjectName。 其中第一个参数 IP 可以替换为 Mac 电脑 IP地址,或者使用 * 通配符,允许所有 IP 调试;第二个参数 port 随便写一个就行。第四个参数 可以指定要调试 App 的 PID 或项目名称。比如要调试的 PID 为 6019 的搜狗输入法项目名称为SogouInput,则命令即为:

    ./debugserver *:1234 -a 6019 或 ./debugserver *:1234 -a ‘SogouInput’

    此命令执行完成后,app会进入等到挂载状态,app会被卡住点击无反应。正常现象!

    如果此命令报错,如出现 Segmentation fault: 11 等情况,说明 App 做了反动态调试保护。遇到此种情况,需先确定 App 采用了哪种保护方案,然后进一步找到对应措施,干掉它的反动态调试保护。

    第二步:监听进程,进入挂载状态

    重新打开一个 Mac 终端执行 lldb 进入 lldb 调试状态。然后输入

    process connect connect://iPhoneIP:port

    iPhoneIP 替换为 iPhone 的 IP 地址;port 改为刚才指定的端口,即 1234。

    待命令执行完成后,App 即进入挂载状态。

    第三步:获取 App 的 ASLR 偏移量

    ASLR偏移量其实就是虚拟内存的地址相对于模块基地址的偏移量。有两个概念需要熟悉一下:

    • 模块在内存中的起始地址 ---- 模块基地址
    • ASLR偏移 ---- 虚拟内存起始地址与模块基地址的偏移量

    在 lldb 调试器模式下,执行 imge list -o -f

    模块偏移后的基地址 = ASLR 偏移量 + 模块偏移前基地址(方法的 IMP 地址)

    上面这个公式是尤为重要的,因为 Class-dump 中显示的都是“模块偏移前基地址”,而 lldb 要操作的都是“模块偏移后的基地址”。所以从 Class-dump 到 lldb 要做一个地址偏移量的转换。

    至此,已得到了 App 的 ASLR 偏移量和方法的 IMP 地址。

    第四步:打断点,调试

    在 lldb 模式下执行,br s -a 'ASLR 偏移量+ IMP',然后执行 c,使 App 跑起来,触发一个方法调用,就会进入断点模式。输入 po $arg1 打印第一个参数。

    然后,配合着抓包工具 Charles(比如分析网络请求加密逻辑) 和 Class-dump(比如修改某个类的方法返回值)等工具,你就可以随意动态调试 App 了,就像在 XCode 里调试一样!

    br 命令说明

    br dis 1 -- 禁用(disable)编号为1的断点

    br en 1 -- 启用(enable)编号为1的断点

    br dis -- 禁用所有断点

    br en -- 启用所有断点

    br del 1 -- 删除(delete)编号为1的断点

    br del -- 删除所有断点

    br list -- 列出所有断点

    使用 dumpdecrypted 破壳 App


    dumpdecrypted 脱壳工具的原理是:将应用程序运行起来(iOS 系统会先解密程序再启动),然后将内存中的解密结果 dump 写入文件中,得到一个新的可执行程序。

    第一步:生成 .dylib 文件

    在终端进入到下载后的目录中,cd dumpdecrypted-master,然后执行 make,即可生成 dumpdecrypted.dylib

    第二步:找到 App 的 Documents 文件夹路径

    通过 SSH 登录到 iPhone,然后执行 ps -e 查看进程,获取要破壳的进程 PID。然后执行 cycript -p PID 附加到 PID 进程上。最后执行 [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]得到 Documents 文件夹路径。

    第三步:开始破壳

    将第一步生成的 dumpdecrypted.dylib 拷贝到第二步得到的 .../Documents/ 路径下,命令如下:scp ~/dumpdecrypted.dylib root@IP:/var/mobile/Containers/Data/Application/2B4C6281-C015-4FF3-A8EC-5E5C7554D447/Documents(将路径里的 UDID 替换为你的要破壳的 App 的 UDID)

    进入 Documents 目录下,执行DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/ Application/BFED82A3-3238-4F41-B797-C1CB584CBE05/appProjectName.app/appProjectName(将路径里的 UDID 替换为你的要破壳的 App 的 UDID;将 appProjectName 替换为要破壳 App 的项目名称)

    待命令执行完,会在当前目录生成一个名为 appProject.decrypted 的文件,这个就是破壳后的 App 可执行文件,要的就是它!使用 Class-dump 即可得到头文件。或使用 Hopper 或 IDA Pro 进行反编译。

    给你的 App 添加反动态调试机制


    ptrace

    为了方便应用软件的开发和调试,从Unix的早期版本开始就提供了一种对运行中的进程进行跟踪和控制的手段,那就是系统调用 ptrace()。 通过 ptrace 可以对另一个进程实现调试跟踪,同时 ptrace 还提供了一个非常有用的参数那就是 PTDENYATTACH,这个参数用来告诉系统,阻止调试器依附。

    所以最常用的反调试方案就是通过调用ptrace来实现反调试。

    sysctl

    当一个进程被调试的时候,该进程会有一个标记来标记自己正在被调试,所以可以通过 sysctl 去查看当前进程的信息,看有没有这个标记位即可检查当前调试状态。

    检测到调试器就退出,或者制造崩溃,或者隐藏工程,当然也可以定时去查看有没有这个标记。

    syscall

    为从实现从用户态切换到内核态,系统提供了一个系统调用函数 syscall,上面讲到的 ptrace 也是通过系统调用去实现的。

    在Kernel Syscalls27这里可以找到 ptrace 对应的编号。

    26. ptrace 801e812c T

    所以如下的调用等同于调用 ptrace:

    syscall(26,31,0,0,0);

    arm 

    syscall 是通过软中断来实现从用户态到内核态,也可以通过汇编 svc 调用来实现。

    觉得不错的话,欢迎关注我的公众号哦!

    展开全文
  • iOS App编译过程

    2017-11-22 17:45:56
    iOS 开发的过程中,Xcode 为我们提供了非常完善的编译能力,正常情况下,我们只需要 Command + R 就可以将应用运行到设备上,即使打包也是一个相对愉快的过程。但正如我们写代码无法避开 Bug 一样,项目在编译的...
  • 五分钟学会ios编译

    2018-10-31 16:37:03
    iOS app可以“有条件”地被反编译 脱掉App Store给“二级制文件”穿上的外衣 如何利用工具去反编译 iOS app可以“有条件”地被反编译 首先,告诉大家一个不幸的消息,上架至App Store的app,被apple加密了。所以...
  • http://blog.sina.com.cn/s/blog_56ae1d5801017x3a.html... man xcodebuild 和 Xcode build settings  https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/
  • iOS APP安全杂谈之二

    2015-12-24 18:26:45
    0x00 序 ...自从上一篇文章发了以后,参加乌云众...但是我依然感到幸运,因为今天可以为IOS APP安全杂谈写个续集。 上一节我们主要说了三点:IOS APP本地文件安全;HTTP/HTTPS下通信数据安全性的思考;非安全从
  • IOS APP 架构设计一,APP架构概述 一,APP架构概述 IOS 架构的5中模式: 标准的CocoaModel-View-Controller(MVC)是Apple在示例项目中所采用的设计模 式。它是 Cocoa app 中最为常⻅的架构,同时也是在 Cocoa 中讨论...
  • iOS App的加固保护原理

    2017-04-05 16:05:27
    苹果系统的封闭性导致iOS APP安全性比较高,但是实际上iOS应用本身被破解的难度并不高,一旦在越狱设备上,ipa被分析就会变得很容易,本文通过讲解iOS APP的破解分析过程来引出我们要如何的保护我们的应用。...
  • 启动一个iOS模拟器 把该app应用安装到上面启动好的模拟器上面 运行安装好的app 从模拟器上卸载掉该app 收集以下的一些基本信息:需要构建的scheme(比如“AwesomeApp”) 应用bundle id(比如”com.awesome.app”)...
  • 编译IOS下Opus音频库

    2018-08-03 11:33:54
     首先要编译IOS的库,得找一个mac环境,并且下载了XCode,Linux或者Windows下未试过,暂时不知道怎么操作。  其次IOS需要的库比较特殊,它需要的是一个集大成者,意思是这个库中需要保护多个平台架构的各种库,...
  • 这里只最简单的结论给大家,具体原理以及工具的详细使用,请各位自行Google,为什么这么做呢,因为我想最简单的语言,让没有汇编基础的同学也能明白。 将以下几个方面来阐述我的观点: iOS app可以“有条件”...
  • iOS app瘦身优化之路

    2017-04-11 13:48:11
    缩减iOS安装包大小是很多中大型APP都要做的事,一般首先会对资源文件下手,压缩图片/音频,去除不必要的资源。这些资源优化做完后,我们还可以尝试对可执行文件进行瘦身,项目越大,可执行文件占用的体积越大,又...
  • ios APP性能检测

    2018-02-01 13:14:25
    CPU使用率 页面渲染时间,刷新帧率 网络请求时间,流量消耗 UI阻塞次数,不可操作时长,主线程阻塞超过400毫秒次数 耗电功率 对于静态页面来讲,页面的渲染时间就是从
1 2 3 4 5 ... 20
收藏数 18,883
精华内容 7,553
关键字:

用命令编译iosapp