How to generate the unique identification of iOS apps - ios

Our iosapp has been cracked. Because on some jailbreak machines, hackers have modified UDID, IMEI, IDFA, idfv, serial number and other system information that you can think of. And it looks random. We want to get the unique identification code of the machine, I want to get these iPhones with cracked apps installed to ban the devices. So I have two questions. 1.My current idea is to generate the unique identification of iPhone by calling the private API to get the hardware information. 2. If you have a better way to identify these devices, please let me know, thank you very much

If you use any private API, it may get rejected by Apple.
You can refer these options to get the unique device.
https://codeburst.io/unique-identifier-for-the-ios-devices-590bb778290d

Related

Is there a way to get iPhone charger's information in iOS 10+ using private API?

I used to use an app called Battery Life on iOS which I believe was using https://github.com/eldade/UIDeviceListener as a method to retrieve the charger's information (as in the wattage amount, voltage, and amplitude). However, that app has since been pulled from App Store and was replaced with a new version without that functionality, and UIDeviceListener has a note saying that it's no longer working in iOS 10+.
Now, I currently have an iPhone X that I charge with Qi charger, and I'm just curious about how much wattage does my Qi charger supplies to my iPhone. I know that for a USB charging I could easily put a USB wattage meter and I could get the number that I want, but because this is an induction charger I feel like I have to test it on the device itself.
Has anybody found a API that would provide this information similar to what UIDeviceListener was reporting (IOKit?)? I'm planning to just side load it to my phone, so using private API wouldn't be an issue.
Thank you.
It seems you can do it with the private API IOKit as you suggested.
I found this project : https://github.com/ethan605/ios-battery-stat
It's old, so it might need some modifications
Edit : I found this one, much more recent : https://github.com/eldade/EEIOKitListener

How did Uber fingerprint iPhones to identify them even after the Uber app was deleted?

In 2015 Uber was fingerprinting iPhones to reduce fraud in China.
What methods were they using to do this? Was it as simple as recording the serial number in a database? Were they using private methods?
From the NYT article:
"To halt the activity, Uber engineers assigned a persistent identity to iPhones with a small piece of code, a practice called “fingerprinting.” Uber could then identify an iPhone and prevent itself from being fooled even after the device was erased of its contents.
There was one problem: Fingerprinting iPhones broke Apple’s rules. Mr. Cook believed that wiping an iPhone should ensure that no trace of the owner’s identity remained on the device.
So Mr. Kalanick told his engineers to “geofence” Apple’s headquarters in Cupertino, Calif., a way to digitally identify people reviewing Uber’s software in a specific location. Uber would then obfuscate its code for people within that geofenced area, essentially drawing a digital lasso around those it wanted to keep in the dark. Apple employees at its headquarters were unable to see Uber’s fingerprinting."
Found more info and a potential method on this article.
Will Strafach examined a 2014 build of the Uber iOS app and found them using private APIs to use IOKit to pull the device serial number from the device registry.
https://twitter.com/chronic/status/856250223777206273
There might be more, but this alone is a blatant violation of App Store policy. Strafach confirms that the technique Uber was using no longer works in iOS 10.]
Github project here - https://github.com/erica/uidevice-extension/blob/7adc1d13946fca6fcb4b5f0b6e45911ab4a9a671/UIDevice-IOKitExtensions.m
Even I was too curious to know. I read a tweet, that basically hints that they exploited IOKits registries to do this.
Seems like they got some identifier from IOKits internals and saved it at their end to identify as device.
https://twitter.com/chronic/status/856250223777206273

WiFi Authentication Without MAC Address (iOS)

I’m currently working on a small project with the goal of using an iOS App to provide a secure, centralized login for a network of WiFi hotspots in small and medium sized businesses. The plan was to configure the routers as open networks and DHCP forward all the traffic from the router to our (cloud-hosted) server, where each query is authenticated and the user’s query is allowed to pass to its intended destination.
Our current problem is that in order to configure the server to know which users are accessing it we need the Mac Addresses of the users, which the Apple API requires they type in manually the first time they use the app (which is a lot of work) so we are trying to come up with a work around.
Any thoughts or suggestions would be hugely appreciated.
Thanks,
Alex
:)
Since iOS 7 you can no longer get the MAC Address. Based on what you are trying to do, I would recommend using one of the device identifiers available through iOS like identifierForVendor which will give you an unique id.
as per Apple Docs:
In iOS 7 and later, if you ask for the MAC address of an iOS device,
the system returns the value 02:00:00:00:00:00. If you need to
identify the device, use the identifierForVendor property of UIDevice
instead. (Apps that need an identifier for their own advertising
purposes should consider using the advertisingIdentifier property of
ASIdentifierManager instead.)

iOS app review process: app requires external hardware (connecting over WiFi)

We've written an app for our clients that connects to external hardware over Wifi (hardware designed by our client). My question is, how do we go about submitting this for review? The software won't do very much without the hardware. Just to be clear, the hardware does not connect directly to the iPad with a cable, it connects over WiFi only.
I just want to get some clarity on what we need to do to get this app through the review process and into the App Store.
Any insight will be appreciated.
I'm one of the authors of StageMix for M7CL, LS9 and CL and it has exactly this issue - the hardware it works with is a somewhat expensive dongle ;)
We added disconnected demo mode where all of the application's UI works - only difference is that nothing is remote controlled. This has the added benefit of allowing customers to try the app out when the hardware isn't handy.
Apple has always been happy reviewing the demo mode and presumably never tested it connected.
I do suggest that the iTunes Store metadata for the App - and if possible the user interface - is very clear about the external hardware requirements
One of my recent updates to DAQ-app failed approval with a note that I needed to show a video of it working with the hardware.
My demo mode let them test some functionality, and the video showed the connectivity. I just hosted the video as a private video on YouTube, and it was accepted quickly after I submitted the video.
The next update was accepted with the same video and a note that there were only minor changes, and no changes to the connectivity.
I emailed Apple this week to ask what their current policy on this is, and they said we have to ship the hardware to them. They also said they can return it if needed, but that we'd have to ship the hardware to them again for every future app update too.
I had same experience. our App is
http://itunes.apple.com/us/app/jia-jia-yi/id497092682?mt=8.
This app also works with a device.
But we was lucky, apple did not ask us to support the hardware to them.
Hope you are lucky too.
:)
Apple required me to send in hardware
We recently submitted an app that required our hardware to be submitted too. The address it was asked to be shipped to is:
Apple, Inc.
1 Infinite Loop, M/S: 124-2APP
Cupertino, CA 95014
USA
It's probably best that you submit the app first and let it get stuck on that process so when you send it in, you can direct it to the proper person in charge. As for FCC, you need to fill out this form if shipping from outside US:
http://transition.fcc.gov/Forms/Form740/740.pdf
Other notes provided by Apple:
A separate FCC Form 740 must be used for each different radio-frequency device or component in the shipment; however, a form is not required for subassemblies, parts, or components of radio-frequency devices.
The form may be completed by the shipper or recipient, but if the form is not sent with the original shipping documents by the shipper, the shipment may be delayed in customs.
Ensure all serial and ID numbers are available as well as the name and address of the original manufacturer.
I hope that helps!

Is there an unofficial way to get the device phone number?

I would like to programatically get the device phone number (on iOS5 and iOS6).
Are there any unofficial ways for doing so?
Are there any private Core Telephony APIs or IOKit APIs that can be used for example?
And yes I do know my app won't be accepted in the AppStore
Private API
There is a private API to get phone number. Private API can't be submitted to AppStore, but it can be executed on jailed device.
NSString* CTSettingCopyMyPhoneNumber();
It returns phone number. And it's located in CoreTelephony
MDM
And actually, there is even a legal way of getting phone number. However, it's complicated. There is MDM protocol for iOS. One of the commands retrieves information about a device and this info includes phone number (and a lot of other device info).
Other notes
Also, you may be interested to read through these several questions:
Programmatically get own phone number in iOS
How can I get the phone number of my iPhone device?
You could start by searching in the private headers.

Resources