Copy link to clipboard
Copied
I am rebuilding an old iOS and Android app built with Adobe AIR to React Native.
Data on the old app is stored locally using flash.data.EncryptedLocalStore.
I wish to access the data stored from within the new React Native App, and am looking for a data migration strategy.
I have viewed How to crack EncryptedLocalStore in Adobe Air?.
Given that the EncryptedLocalStore is at operating system level, I am wondering if I can develop a new EncryptedLocalStore compatible whatnot to access the data and transmit that to a new store in React Native.
Does anyone have any pointers or guide to how I should progress investigating this?
My initial thinking is:
1. make a tiny actionscript thing inside a react native app and it could access data store
2. just find access to flash.data.EncryptedLocalStore from OS
Send help!
Elise.
---
Reposted from https://stackoverflow.com/questions/60256732/port-data-from-adobe-air-encryptedlocalstore-outside-of...
> I wish to access the data stored from within the new React Native App, and am looking for a data migration strategy.
that's a bad strategy, the "old" AIR app and the "new" React native app are two different apps
you can not reuse "as is" data encrypted from the old app from the new app
at best, you could provide an "export data" update for the old app and an "import data" in the new app
> Given that the EncryptedLocalStore is at operating system level, I am wondering if I can develop
> a new Encryp
Copy link to clipboard
Copied
> I wish to access the data stored from within the new React Native App, and am looking for a data migration strategy.
that's a bad strategy, the "old" AIR app and the "new" React native app are two different apps
you can not reuse "as is" data encrypted from the old app from the new app
at best, you could provide an "export data" update for the old app and an "import data" in the new app
> Given that the EncryptedLocalStore is at operating system level, I am wondering if I can develop
> a new EncryptedLocalStore compatible whatnot to access the data and transmit that to a new store in React Native.
probably possible but it would be a very harduous path as you would have to reverse engineer how the closes source code of AIR EncryptedLocalStore works
the other simpler path is to simply mimic the functionalities of the EncryptedLocalStore within your react native app
off course an user of the old app would lose its data and would have to save it again in the new app
see
https://github.com/mCodex/react-native-sensitive-info
Copy link to clipboard
Copied
Hey @zwetan_uk, thank you kindly for you response.
> at best, you could provide an "export data" update for the old app and an "import data" in the new app
By this do you mean export to a back end service? Or to build 2 separate apps?
In addition, I have since identified that in most cases I actually need to port data from Flash Cookie (Local Shared Objects) instead of EncryptedLocalStore.
My current thinking is:
1. Build a new Flex Adobe AIR app in order to retrieve and export data via ExternalInterface
2. Load the Flash context inside a new React Native App, loading .swf using react-swf
3. JavaScript to access Flash Cookie from swf initailisation callback
Can you think of an alternative way to access Shared Objects?
Copy link to clipboard
Copied
> By this do you mean export to a back end service? Or to build 2 separate apps?
yes, on top of building the new app, you would need to update the old app so ppl can export their data
> In addition, I have since identified that in most cases I actually need to port data from Flash Cookie (Local Shared Objects) instead of EncryptedLocalStore.
OK so different things
usually app use EncryptedLocalStore to store "small" secrets like a password
for ex to avoid having the user re-entering their password over and over
when you save to Local Shared Objects the data first does not need to be secret (encrypted)
and the volume of data is usually bigger: list of document opened, data structures, etc.
so different paths
- the export/import is a good way to avoid reverse engineer or reimplement stuff that are available as API in AIR
but not available to the other dev environment like react native
- reverse engineer some AIR API to avoid doing the export/import dance
but knowing for things encrypted it will be harduous, and for things not encrypted maybe acceptable
in any case you re still with the same original problem the old app and new app are two different apps
when a user having the old app will install the new app, the new app will not be able to access the data from the old app
see here https://developer.android.com/training/data-storage
unless you already planed in advance to have data in shared storage
the old app (AIR) will have its data saved in app-specific storage
eg. "Can other apps access?"
No, if files are in a directory within internal storage
Yes, if files are in a directory within external storage
> Can you think of an alternative way to access Shared Objects?
so even if you were implementing in react native a way to read Local Shared Objects
see for ex SolVE (source is Java)
the data would not be reachable because stored in app-specific storage directory/path
see this old thread Read SharedObject directly from sol file (Android)
> 1. Build a new Flex Adobe AIR app in order to retrieve and export data via ExternalInterface
ExternalInterface? not sure I follow where you;re going here
for the export: read the LSO, transform to JSON, save JSON so import later can read the JSON in react native
> 2. Load the Flash context inside a new React Native App, loading .swf using react-swf
OK I understand the ExternalInterface thing, I was not aware that react-swf was a thing
so first, an AIR SWF is not a Flash Player SWF
even if you can load SWF in react, I doubt loading an AIR SWF would work
and second, even if you could you would still have the problem of accessing the data in app-specific storage
>3. JavaScript to access Flash Cookie from swf initailisation callback
same as above, app-specific storage would prevent that
in conclusion I would say what I consider the safest and less troublesome, yeah even if it is more work
would be to publish an updated AIR app that allow users to export their Local Shared Objects
not too hard to implement, can easily export to JSON as local file or even goes through a server to save it online, etc.
and in the new react native app I guess reading the JSON file would not be an issue
YMMV, depends on where the .sol file is saved, pretty sure it is always under app-specific storage
depends on the Local Shared Objects data structure (simple data would export better to JSON, than complex typed objects), etc.
good luck
Copy link to clipboard
Copied
🙏 much appreciated! thank you!