GithubHelp home page GithubHelp logo

blacktop / ipsw Goto Github PK

View Code? Open in Web Editor NEW
1.5K 24.0 117.0 124.72 MB

iOS/macOS Research Swiss Army Knife

Home Page: https://blacktop.github.io/ipsw

License: MIT License

Makefile 0.20% Shell 0.48% Go 93.69% Dockerfile 0.04% C 4.19% Python 0.05% Ruby 0.02% JavaScript 0.99% TypeScript 0.09% CSS 0.25% Objective-C 0.01%
apple ios firmware ipsw golang lzss kernelcache macho dyld macho-parser

ipsw's Introduction

IPSW Logo

ipsw

iOS/macOS Research Swiss Army Knife


What is ipsw 🤔

  • IPSW downloader/exploder
  • OTA downloader/exploder
  • macho parser
  • ObjC class-dump
  • Swift class-dump 🚧
  • dyld_shared_cache parser
  • kernelcache parser
  • img4 parser/decrypter
  • device-tree parser
  • ARM v9-a disassember
  • research tool

Install

macOS

brew install blacktop/tap/ipsw

Linux

sudo snap install ipsw

Windows

scoop bucket add blacktop https://github.com/blacktop/scoop-bucket.git 
scoop install blacktop/ipsw

Getting Started

❯ ipsw

Download and Parse IPSWs (and SO much more)

Usage:
  ipsw [command]

Available Commands:
  appstore        Interact with the App Store Connect API
  class-dump      ObjC class-dump a dylib from a DSC or MachO
  device-list     List all iOS devices
  diff            Diff IPSWs
  download        Download Apple Firmware files (and more)
  dtree           Parse DeviceTree
  dyld            Parse dyld_shared_cache
  ent             Search IPSW filesystem DMG or Folder for MachOs with a given entitlement
  extract         Extract kernelcache, dyld_shared_cache or DeviceTree from IPSW/OTA
  help            Help about any command
  iboot           Dump firmwares
  idev            USB connected device commands
  img4            Parse Img4
  info            Display IPSW/OTA Info
  kernel          Parse kernelcache
  macho           Parse MachO
  mdevs           List all MobileDevices in IPSW
  mount           Mount DMG from IPSW
  ota             Parse OTAs
  plist           Dump plist as JSON
  pongo           PongoOS Terminal
  sepfw           Dump MachOs
  ssh             SSH into a jailbroken device
  swift-dump      🚧 Swift class-dump a dylib from a DSC or MachO
  symbolicate     Symbolicate ARM 64-bit crash logs (similar to Apple's symbolicatecrash)
  update          Download an ipsw update if one exists
  version         Print the version number of ipsw
  watch           Watch Github Commits

Flags:
      --color           colorize output
      --config string   config file (default is $HOME/.config/ipsw/config.yaml)
  -h, --help            help for ipsw
      --no-color        disable colorize output
  -V, --verbose         verbose output

Use "ipsw [command] --help" for more information about a command.

Documentation

graph TD
A[Download] --> B[Extract]
B --> C[Parse]
C --> D[Dump]
D --> E[Search]
E --> F[Symbolicate]

Community

You have questions, need support and or just want to talk about ipsw?

Here are ways to get in touch with the ipsw community:

Follow Twitter Follow Mastodon GitHub Discussions

Known Issues

  • macOS IPSW etc support is sometimes broken

    Automated testing of ipsw is challenging as it requires a lot of resources to test all the different IPSW flavors and OS versions etc. No CI/CD can really handle that unless I want to wait forever for it to run on each commit. Please create an issue and I'll fix it as soon as I can ❤️ (NOTE: a comprehensive test suite is in the roadmap so I can at least test on the few local IPSWs I have)

Credit

Big shout out to Jonathan Levin's amazing books and his legendary jtool

Stargazers

Stargazers over time

License

MIT Copyright (c) 2018-2024 blacktop

ipsw's People

Contributors

aixiansheng avatar arandomdev avatar blacktop avatar chichou avatar crkatri avatar dependabot[bot] avatar dzan avatar jevinskie avatar jprx avatar junjie1475 avatar liggitt avatar mrlnc avatar saagarjha avatar sagittarius-a avatar savage-waffle avatar supervacuus avatar t0rr3sp3dr0 avatar therealketo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ipsw's Issues

"download dev": two-factor authentication error 412 when many trusted phones

When many (for me it is 6 phones) trusted phones used in Apple ID and used phone with non first ID download dev finished with 412 error:

⨯ failed to verify code: response received 412

This caused with next code where ID=1 is hardcoded internal/download/dev_portal.go

func (app *App) verifyCode(codeType, code string) error {
	buf := new(bytes.Buffer)
	if codeType == "phone" {
		json.NewEncoder(buf).Encode(&phone{
			Number: phoneNumber{
				ID: 1,
			},
			Mode: "sms",
			SecurityCode: scode{
				Code: code,
			},
		})
...

download latest --black-list will only remove a single item

the iteration in 'download_latest.go' over --black-list will break when a match is found.
This is false as multiple items should be removed.

While fixing it I changed --black-list to support a list strings delimited with ','

diff --git a/cmd/ipsw/cmd/download_latest.go b/cmd/ipsw/cmd/download_latest.go
index 21c460c..c882b7c 100644
--- a/cmd/ipsw/cmd/download_latest.go
+++ b/cmd/ipsw/cmd/download_latest.go
@@ -74,12 +74,22 @@ var latestCmd = &cobra.Command{
 		}
 
 		if len(doNotDownload) > 0 {
-			for i, v := range builds {
-				if strings.Contains(v.Identifier, doNotDownload) {
-					builds = append(builds[:i], builds[i+1:]...)
-					break
+			var validBuilds []api.Build
+			doNot := strings.Split(doNotDownload, ",")
+			for _, v := range builds {
+				valid := true
+
+				for _, doNotDownload = range doNot {
+					if strings.Contains(v.Identifier, doNotDownload) {
+						valid = false
+						break
+					}
+				}
+				if valid {
+					validBuilds = append(validBuilds, v)
 				}
 			}
+			builds = validBuilds
 		}
 
 		log.Debug("URLs to Download:")

The following will now work

ipsw download -V latest --yes --black-list AppleTV,iPhone

Kernelcache does not contain LINKINFO.__

This is an old-style A9 kernelcache (Darwin Kernel Version 18.2.0: Wed Dec 19 20:28:52 PST 2018; root:xnu-4903.242.2~1/RELEASE_ARM64_S8000)
Screen Shot 2021-12-29 at 4 30 08 PM

Straight from the "/System/Library/caches/com.apple.kernelcaches"

This is what the segment names are when decompiled

SIGSEGV while extracting iOS 15.0.2 kernelcache

Hi
First time user here. Installed v3.1.80 from brew to my MacBook Pro. Ran and got:

$ ipsw extract -k iPhone_4.7_P3_15.0.2_19A404_Restore.ipsw
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x45db8e2]

goroutine 1 [running]:
github.com/blacktop/ipsw/pkg/info.(*Info).GetFolder(0xc0003cdd80)
	github.com/blacktop/ipsw/pkg/info/info.go:199 +0xc2
github.com/blacktop/ipsw/cmd/ipsw/cmd.glob..func40(0x557dda0, {0xc00024b8a0, 0x1, 0x2})
	github.com/blacktop/ipsw/cmd/ipsw/cmd/extract.go:196 +0x367
github.com/spf13/cobra.(*Command).execute(0x557dda0, {0xc00024b880, 0x2, 0x2})
	github.com/spf13/[email protected]/command.go:856 +0x60e
github.com/spf13/cobra.(*Command).ExecuteC(0x55814a0)
	github.com/spf13/[email protected]/command.go:974 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/[email protected]/command.go:902
github.com/blacktop/ipsw/cmd/ipsw/cmd.Execute()
	github.com/blacktop/ipsw/cmd/ipsw/cmd/root.go:57 +0x25
main.main()
	github.com/blacktop/ipsw/cmd/ipsw/main.go:27 +0x17

Print json output from `ipsw download dev`

You have to code to scrape developer.apple.com/download/, if you could make that data available it be parsed separately it would be wonderful. (I really don't want to write auth code)

subCacheUUID field should probably be subCachesOffset instead

ipsw/hack/extras/Dyld.bt

Lines 116 to 117 in 05af7d2

uint32 subCacheUUID;
uint32 numSubCaches; // number of dyld_shared_cache .1,.2,.3 files

It seems like the field before the numSubCaches field is pointing at a list of subcache info structs which has length numSubCaches. The subcache info struct is 24 bytes big, 16 bytes UUID + 8 bytes something else.

This allows you to get the UUID for each subcache.

Nitpick: Command help can be out of sync with the actual commands & online docs

Just a really small thing. The command help can be out of sync. Take for example the command:

$ ipsw download beta

Error: requires at least 1 arg(s), only received 0
   ⨯ requires at least 1 arg(s), only received 0

This is a command that exists, but when we try and get this command listed from the parent "download" command:

$ ipsw download

Download Apple Firmware files (and more)

Usage:
  ipsw download [flags]
  ipsw download [command]

Available Commands:
  dev         Download IPSWs (and more) from https://developer.apple.com/download
  git         Download github.com/orgs/apple-oss-distributions tarballs
  ipsw        Download and parse IPSW(s) from the internets
  macos       Download macOS installers
  oss         Download opensource.apple.com file list for macOS version
  ota         Download OTAs
  rss         Read Releases - Apple Developer RSS Feed
  tss         🚧 Download SHSH Blobs

Flags:
      --black-list stringArray   iOS device black list
  -b, --build string             iOS BuildID (i.e. 16F203)
  -y, --confirm                  do not prompt user for confirmation
  -d, --device string            iOS Device (i.e. iPhone11,2)
  -h, --help                     help for download
      --insecure                 do not verify ssl certs
  -m, --model string             iOS Model (i.e. D321AP)
      --proxy string             HTTP/HTTPS proxy
  -_, --remove-commas            replace commas in IPSW filename with underscores
      --restart-all              always restart resumable IPSWs
      --resume-all               always resume resumable IPSWs
      --skip-all                 always skip resumable IPSWs
  -v, --version string           iOS Version (i.e. 12.3.1)
      --white-list stringArray   iOS device white list

Global Flags:
      --config string   config file (default is $HOME/.ipsw.yaml)
  -V, --verbose         verbose output

Use "ipsw download [command] --help" for more information about a command.

the "beta" subcommand isn't listed

Crash Log Symbolication

C:\Users\turne>C:\Users\turne\Desktop\ipsw_3.1.21_windows_x86_64\ipsw.exe symbolicate C:\Users\turne\Downloads\locationd-2021-11-28-110434.ips.synced C:\Users\turne\dyld_shared_cache_arm64e -d -u -V
• Parsing Cache cache=C:\Users\turne\dyld_shared_cache_arm64e
panic: runtime error: index out of range [6] with length 0

goroutine 1 [running]:
github.com/blacktop/go-macho.(*File).LibraryOrdinalName(0xc0203c44e8, 0x7)
github.com/blacktop/[email protected]/file.go:2501 +0x130
github.com/blacktop/go-macho.(*File).parseBinds(0xc02037c0f0, 0xc0002f4c60)
github.com/blacktop/[email protected]/file.go:2217 +0x192
github.com/blacktop/go-macho.(*File).GetBindInfo(0xc02037c0f0)
github.com/blacktop/[email protected]/file.go:2114 +0x7a5
github.com/blacktop/ipsw/pkg/dyld.(*File).GetAllExportedSymbolsForImage(0xc00047a000, 0xc000003a40, 0x0)
github.com/blacktop/ipsw/pkg/dyld/symbols.go:454 +0x438
github.com/blacktop/ipsw/cmd/ipsw/cmd.glob..func61(0x16f92e0, {0xc0000ae0f0, 0x2, 0x5})
github.com/blacktop/ipsw/cmd/ipsw/cmd/symbolicate.go:214 +0xb1c
github.com/spf13/cobra.(*Command).execute(0x16f92e0, {0xc0000ae0a0, 0x5, 0x5})
github.com/spf13/[email protected]/command.go:856 +0x60e
github.com/spf13/cobra.(*Command).ExecuteC(0x16f88e0)
github.com/spf13/[email protected]/command.go:974 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)
github.com/spf13/[email protected]/command.go:902
github.com/blacktop/ipsw/cmd/ipsw/cmd.Execute()
github.com/blacktop/ipsw/cmd/ipsw/cmd/root.go:57 +0x25
main.main()
github.com/blacktop/ipsw/cmd/ipsw/main.go:27 +0x17

C:\Users\turne>C:\Users\turne\Desktop\ipsw_3.1.21_windows_x86_64\ipsw.exe symbolicate C:\Users\turne\Downloads\locationd-2021-11-28-110434.ips.synced C:\Users\turne\dyld_shared_cache_arm64e -d -u -V

Failed to parse iOS 15.0.1 kernelcache

Failed to parse kernelcache for iOS 15.0.1 on macOS Monterey beta 9.

$ ipsw kernel dec kernelcache.release.ipad6f
   • Decompressing kernelcache
Error: failed parse compressed kernelcache Img4: failed to ASN.1 parse kernelcache: asn1: structure error: length too large
$ ipsw kernel kexts kernelcache.release.ipad6b            
Error: section __PRELINK_INFO.__kmod_start not found

Win10 not working - cannot access the file because another process has locked a portion of the file.

Hi, the tool is unable to download any firmware. Each attempt i try, it gives the following error and makes a 0kb file:
"failed to download file: write iPadPro_9.7_13.1.3_17A878_Restore.ipsw.download: The process cannot access the file because another process has locked a portion of the file."

I don't have any antiviruses running, so i', not sure what process could be blocking it. I tried running it as admin but still no luck. Any ideas? Cheers.

brew install fail

Issue:

==> Downloading https://github.com/blacktop/ipsw/releases/download/v3.0.71/ipsw_
Already downloaded: /Users/gumingjun/Library/Caches/Homebrew/downloads/cf3b3a77e11173cdf291efe4579989d22801842cde309d29766f2e33f682a1b2--ipsw_3.0.71_macOS_x86_64.tar.gz
==> Installing ipsw from blacktop/tap
Error: An exception occurred within a child process:
  NoMethodError: undefined method `path' for nil:NilClass
Did you mean?  paths

I install other packages well

Add ability to dump cert from MachOs

Discussed in #73

Originally posted by kushalagrawal January 20, 2022
Hi blacktop,

we have multiple maco and fat binaries which are internal binaries. These binaries are signed by the internal CA and then uploaded to a remote location.
before I serve it to end user, I wants to make sure they are not tempered therefore I wants to validate using the internal CA's public key. if they are signed by that internal CA. Is There any direct way that I can extract the certificate chain associate with maco and fat binary.

Thanks
Kushal

Feature request: dyld macho --extract --create-symtab

Reversing dylibs from the DSC can be tiresome. Each dylib references another, and without loading each one's dependencies you get an image with too many invalid pointers.
I think ipsw could create a .symtab section where every extracted image has references to all the rest of the exported symbols from the other dylibs. That way, We could reverse only one image with all its required dependencies without loading each one individually.

If this works well, I'll also attempt writing an IDA plugin to load modules from the iOS 15 DSC based on ipsw.

Add update option

Hi! Would be possible to add a update.go file under /cmd/ipsw/cmd as Cobra option to download the latest version?

It would be something like this:

package main

import (
	"crypto/tls"
	"encoding/json"
	"errors"
	"flag"
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"net/url"
	"os"
	"path"
	"strings"

	"github.com/AlecAivazis/survey"
)

type Assets []struct {
	AssetsURL string `json:"assets_url"`
}

type Autogenerated []struct {
	BrowserDownloadURL string `json:"browser_download_url"`
}

var (
	platform string
)

func init() {
	flag.StringVar(&platform, "platform", "", "platform")
}

func main() {

	if platform == "" {
		platform = SelectPlatform()
	}

	var data Assets
	var assetsUrl = `https://api.github.com/repos/blacktop/ipsw/releases`
	response := MakeRequest(assetsUrl)
	bodyBytes, err := ioutil.ReadAll(response.Body)
	defer response.Body.Close()
	err = json.Unmarshal(bodyBytes, &data)
	CheckErr(err)

	var download Autogenerated
	response = MakeRequest(data[0].AssetsURL)
	bodyBytes, err = ioutil.ReadAll(response.Body)
	defer response.Body.Close()
	err = json.Unmarshal(bodyBytes, &download)
	CheckErr(err)
	for k := range download {
		if strings.Contains(download[k].BrowserDownloadURL, platform) {
			myUrl, err := url.Parse(download[k].BrowserDownloadURL)
			CheckErr(err)
			fmt.Printf("Downloading ipsw as %v in the current working directory\n", path.Base(myUrl.Path))
			downloadFile(download[k].BrowserDownloadURL, path.Base(myUrl.Path))
		}
	}
}

func SelectPlatform() string {
	var choice = 0
	var options = []string{"linux_arm64", "linux_x86_64", "macOS_arm64", "macOS_x86_64", "windows_x86_64"}
	prompt := &survey.Select{
		Message: fmt.Sprintf("Select Platform to download:"),
		Options: options,
	}
	survey.AskOne(prompt, &choice)

	return options[choice]

}

func MakeRequest(host string) *http.Response {
	tr := &http.Transport{
		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
	}
	client := &http.Client{Transport: tr}

	request, _ := http.NewRequest("GET", host, nil)
	request.Header.Set("Accept", "application/vnd.github.v3+json")
	response, err := client.Do(request)
	CheckErr(err)
	return response
}

func downloadFile(URL, fileName string) error {
	//Taken from https://golangbyexample.com/download-image-file-url-golang/
	response, err := http.Get(URL)
	CheckErr(err)
	defer response.Body.Close()

	if response.StatusCode != 200 {
		return errors.New("Received non 200 response code")
	}
	//Create a empty file
	file, err := os.Create(fileName)
	CheckErr(err)
	defer file.Close()

	//Write the bytes to the fiel
	_, err = io.Copy(file, response.Body)
	CheckErr(err)

	return nil
}

func CheckErr(err error) {
	if err != nil {
		fmt.Printf("Error: %v\n", err)
	}
}

So, it is using surveys to choose which version to download:

image

And downloading it to the current directory:

image

Thanks!

Can't combine download filters

This command downloads just the kernel

ipsw download --iversion 12.0.1 --kernel --dec

But this similar command downloads the entire cache

ipsw download --device iPhone11,2 --build 16B92 --kernel --dec

Also, it seems possible to download all builds of a particular version

ipsw download --iversion 12.0 --dec

But downloading all kernels for a particular device just fails silently

ipsw download --device iPhone8,2 --kernel --dec

`ipsw download dev` fails with app specific password

> ipsw download dev
? Please type your username: <REDACTED>
? Please type your password: appspecificpassword
Usage:
  ipsw download dev [flags]

<SNIP>

   ⨯ failed to sign in; expected status code 409 (for two factor auth): response received 401

generate command failure

Running under windows. First command I executed was:

 ./ipsw.exe generate

Which resulted in

   ⨯ parsing table row failed  error=this is the table header
   ⨯ parsing table row failed  error=this is the table header
   ⨯ parsing table row failed  error=this is the table header
   ⨯ parsing table row failed  error=this is the table header
...
   ⨯ parsing table row failed  error=this is the table header
   ⨯ parsing table row failed  error=this is the table header
   ⨯ parsing table row failed  error=this is the table header
   ⨯ parsing table row failed  error=this is the table header
   ⨯ parsing table row failed  error=this is the table header

__OBJC_RO doesn't exist

bootywarrior@Bootys-MacBook-Air ~ % /Users/bootywarrior/Downloads/ipsw_3.1.19_macOS_arm64/ipsw symbolicate /Users/bootywarrior/Desktop/web.ips /Users/bootywarrior/Downloads/dyld_shared_cache_arm64

  • No selectors.
    Error: failed to parse objc selectors: segment __OBJC_RO does not exist
    Usage:
    ipsw symbolicate <dyld_shared_cache> [flags]

Flags:
-d, --demangle Demangle symbol names
-h, --help help for symbolicate
-u, --unslide Unslide the crashlog for easier static analysis

Global Flags:
--config string config file (default is $HOME/.ipsw.yaml)
-V, --verbose verbose output

⨯ failed to parse objc selectors: segment __OBJC_RO does not exist

To help you further based off our last interaction when I had an issue on windows.
This isn't a cache off the ipsw it's from the iOS Device itself this time it's for the iPhone8,1 running 12.1.4 (16D57) dyld_shared_cache from "/System/Library/caches/com.apple.dyld"

Add option for choosing what to do with existing file

Currently, the only option is to skip-all I would like an option for the others. See command:

ipsw download --verbose latest --yes --device iPhone11,2
   • Latest release found is: 14.7.1
   • URLs to Download:        
   • https://updates.cdn-apple.com/2021SummerFCS/fullrestores/071-73966/B2F4517C-A57C-48D3-88B6-9A718A774EA6/iPhone11,2,iPhone11,4,iPhone11,6,iPhone12,3,iPhone12,5_14.7.1_18G82_Restore.ipsw
   • Getting IPSW              build=18G82 device=iPhone11,2 version=14.7.1
? Previous download of iPhone11,2,iPhone11,4,iPhone11,6,iPhone12,3,iPhone12,5_14.7.1_18G82_Restore.ipsw can be resumed:  [Use arrows to move, type to filter]
  resume
  skip
> skip all
  restart

Feature request: ipsw download rss --download DOWNLOAD_DIR --match REGEX

Hi :)

Great work for the newly added RSS feed. I'd like to use it to automate download of newly released versions of iOS and macOS images (and possibly other releases also).
Can you implement a feature to download each product when it's released? I have no problem supplying the required credentials (which I guess are required to download the beta releases)

download specific beta ipsw instead of all

Hello, I accidentally found this project, it really helps me a lot.I wonder if I could download only one specific beta ipsw for one specific device model, now it is asking me to download 16 ipsw files, which are too much, looking forward to your reply.

ipsw download --build filter should only download that build

I think the way it works now, is it uses the BuildID to lookup the iOS version and then grabs all those, but if someone set a --build it doesn't make sense that they would get another build associated with that iOS version. They just want the one.

ipsw version shows blank string, consequently update command errors

Latest release for linux (v3.1.45)
When running: 'ipsw version' the following is output:

dan@ubuntu-test:~/Downloads/ipsw$ ./ipsw version
Version:   , BuildTime: 

This then results in the 'ipsw update' command fails with the following error:

dan@ubuntu-test:~/Downloads/ipsw$ ./ipsw update
Error: Malformed version: 
Usage:
  ipsw update [flags]

Flags:
      --detect            detect my platform
  -h, --help              help for update
      --insecure          do not verify ssl certs
  -p, --platform string   ipsw platform binary to update
      --proxy string      HTTP/HTTPS proxy
      --replace           overwrite current ipsw

Global Flags:
      --config string   config file (default is $HOME/.ipsw.yaml)
  -V, --verbose         verbose output

   ⨯ Malformed version:       

Checking the latest pipeline for building the following error is displayed:
image

If you re-run the same echo command with the "--insecure" flag set it can successfully obtain the latest iOS version from Apple:

dan@ubuntu-test:~/Downloads/ipsw$ echo ::set-output name=version::$(LD_LIBRARY_PATH=/usr/local/lib ./ipsw download ipsw --show-latest --insecure)
::set-output name=version::15.2.1

update README to support github's new clipboard copy

Hi! :)

I'm not sure if you've noticed but github added a copy-to-clipboard option on markdown code snippets.
The current snippets in the README start with >, but when copying it into terminal we have to go back and delete it.
Please remove the prefix just so it's more convinient :)

Arbitrary single-file extraction

Right now the ipsw tool supports extracting the kernelcache from the ipsw, but it seems like it should be possible to extract any file from the kernelcaches using this technique. Perhaps generalizing the kernelcache code to an arbitray file selector might be useful (i.e., for downloading iBoot binaries)

"ipsw info" Command Panics for AppleTV IPSWs

Not sure if it's meant to work, but it probably at least shouldn't panic.

Output (verbose does not give any more output):

[IPSW Info]
===========
%!v(PANIC=String method: runtime error: invalid memory address or nil pointer dereference)

Files tested:
AppleTV3,1_8.4.3_12H876_Restore.ipsw
AppleTV3,1_8.4.3_12H885_Restore.ipsw
AppleTV3,1_8.4.3_12H903_Restore.ipsw

feature request: add `dyld uuid` command

It would be really nice if ipsw could extract all UUIDs of the different images from the dyld_shared_cache_arm64*. Maybe also include several export functions? like into json?

I'm planning to implement a feature for pymobiledevice3 which allows to see which images are loaded to currently running process. The only problem is that the pymobiledevice3 developer dvt core-profile-session stackshot currently gives all the loaded images as UUIDs and not by their names.

macos beta images download

Hi again :)

Is it possible to download macos beta images also? I tried both ipsw download beta <build> and ipsw download macos --build <build> but with no success.

Feature request: permit downloading all macos ipsws for a single --device

Hey! Just something that would be of use:

$ ipsw download ipsw --macos --device Macmini9,1                    
                                                                                                                                         
x  you must also supply a --version OR a --build (or use --latest)

Would it be possible for this to download all ipsws for that specific device?

Also would it be possible to add the --dyld flag to download just the DSC?

issues on BVX compress

iOS 13.2 using bvx compress, good news is that ipsw still can decompress it, but the decompressed kernel can not parsed as kernel cache by IDA

Downloading latest IPSW for devices that cant install iOS 13

The "latest" command only attempts to download the current version of iOS 13, even when specifying a device such as iPad Air which can only install 12.4.3 currently.

Is there a way to automate downloading the latest supported version per device?

add more commands for iOS 15

I can not use ipsw dyld symaddr --image <image> <dscpath> <symbol> because iOS 15 beta has new dsc format.
Can you add command to extract dyld_shared_cache(like dsc_extractor) and lookup symbols?

like:
ipsw extract --dsc < dscpath> <outputdir>
ipsw macho <image> -symaddr <symbol>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.