Hi there, I have strange problem with my Xposed code.
I use a static HashMap to store unlock timestamps for Applock application, first I add the entry with put, and 200ms later I call get at another location. The thing is: the HashMap isn't updated yet. A few hundred milliseconds later, it is, but not before. And that's strange, as HashMaps should be VERY fast, I read somewhere about 50ms for a HashMap with 10 000 or even more entries, and mine has 300 maximum while in use, while testing it maybe had 15..
Is there a way to force an update of that HashMap?
Kind regards,
Max
@rovo89, @romracer, @C3C076
There is no delay, once the put call returns, you can get the item again. If you're calling from a different thread, make sure to synchronize properly. The relevant excerpts of your code would be necessary to say more.
rovo89 said:
There is no delay, once the put call returns, you can get the item again. If you're calling from a different thread, make sure to synchronize properly. The relevant excerpts of your code would be necessary to say more.
Click to expand...
Click to collapse
Of course, sorry, forgot to add link: https://github.com/Maxr1998/MaxLock...ain/java/de/Maxr1998/xposed/maxlock/Main.java
Should I create my own implementation of HashMap and make put and get snychronized?
Maxr1998 said:
Of course, sorry, forgot to add link: https://github.com/Maxr1998/MaxLock...ain/java/de/Maxr1998/xposed/maxlock/Main.java
Should I create my own implementation of HashMap and make put and get snychronized?
Click to expand...
Click to collapse
No reason for own implementation. Surround hashmap operations with synchronized block.
E.g.
synchronized (TEMPS) {
TEMPS.put(...);
}
C3C076 said:
No reason for own implementation. Surround hashmap operations with synchronized block.
E.g.
synchronized (TEMPS) {
TEMPS.put(...);
}
Click to expand...
Click to collapse
Tried it, but it didn't work. I already pushed the changes, could you take a look if I did something wrong?
Sent using my nexus⁴ running Euphoria 1.1 with Xposed and hells-Core B80
@rovo89 @C3C076 I also tried a ConcurrentHashMap without synchronizing like described here/Concurrent Collections, doesn't work as well.
When I get and log the value again 2 seconds later via Handler.postDelayed, it was updated..
Sent using my nexus⁴ running Euphoria 1.1 with Xposed and hells-Core B80
One possible reason is you are putting items to map within one process (belonging to your MY_PACKAGE_NAME) and
attempting to read map from different process (e.g. "android.app.Activity"). I believe you cannot see items put to map from one process to be "visible" by different process. Each process has its own instance of TEMPS map with own items in it. The contents of map is not shared across processes.
You have to think about using different approach.
Instead of memory store, use file system or DB which all processes you are hooking would have access to.
C3C076 said:
One possible reason is you are putting items to map within one process (belonging to your MY_PACKAGE_NAME) and
attempting to read map from different process (e.g. "android.app.Activity"). I believe you cannot see items put to map from one process to be "visible" by different process. Each process has its own instance of TEMPS map with own items in it. The contents of map is not shared across processes.
You have to think about using different approach.
Instead of memory store, use file system or DB which all processes you are hooking would have access to.
Click to expand...
Click to collapse
It actually is shared. I used a few handler().postDelayed() to read the value in periodic time segments and the value is updated maybe 500ms after first check were it isn't.
Sent using my nexus⁴ running Euphoria 1.1 with Xposed and hells-Core B80
Hit thanks if I helped!
Maxr1998 said:
…but I still get lockscreen looping because my Map isn't updated fast enough.
I already tried synchronizing the critical blocks on Map itself, on Main class, used ConcurrentHashMap, Collections.synchronizedMap(), created baclground Threads for put(), used delays to wait for update, etc. bla bla. I just can't get it to work.
It always updates the Map a few hundred milliseconds after polling, when I use delay, it still does.
If there's anyone who can help me on that issue, it would be highly appreciated.
Click to expand...
Click to collapse
@rovo89 @C3C076
Sent using my nexus⁴ running Euphoria 1.1 with Xposed and hells-Core B80
Hit thanks if I helped!
Again, a map is updated immediately. You can verify this by getting the value immediately after putting it into the map, from the same place. For accessing the values from other threads, you use synchronization, but with the methods you tried, this doesn't seem to be the problem. So it's probably something else in your code, like trying to access the variable from a different process. You could log pid and tid for debugging whenever you access the map.
rovo89 said:
Again, a map is updated immediately. You can verify this by getting the value immediately after putting it into the map, from the same place. For accessing the values from other threads, you use synchronization, but with the methods you tried, this doesn't seem to be the problem. So it's probably something else in your code, like trying to access the variable from a different process. You could log pid and tid for debugging whenever you access the map.
Click to expand...
Click to collapse
Ok, thanks. I now found out the Map updating happened at the onPause logic in the same process, my LockActivity uses another Map, like you said.
Could you point me to an easy and fast database solution? Maybe something like XSharedPreferences at public storage with write support? Could you maybe even create such thing for XposedBridge?
C3C076 said:
One possible reason is you are putting items to map within one process (belonging to your MY_PACKAGE_NAME) and
attempting to read map from different process (e.g. "android.app.Activity"). I believe you cannot see items put to map from one process to be "visible" by different process. Each process has its own instance of TEMPS map with own items in it. The contents of map is not shared across processes.
You have to think about using different approach.
Instead of memory store, use file system or DB which all processes you are hooking would have access to.
Click to expand...
Click to collapse
Related
I have a PhoneGap application designed to work on multiple mobile platforms. I'm loading a dynamic HTML content from an external page on the Internet using jQuery Mobile. The problematic system is Windows Phone 7.
This is what I get from the external page, with the URL of the script tag already replaced to load from the phone instead of from the net to save bandwidth:
HTML:
<script type="text/javascript" charset="utf-8" src="x-wmapp1:/app/www/test.js"></script>
This works fine on Android, iPhone and even BlackBerry when I replaced the x-wmapp1: part by a respective counterpart (e.g. file:///android_asset/www/ on Android). However, on Windows Phone 7 it doesn't seem to work at all.
When I try to load the same URL via $.getScript function, it always returns a 404 eror, even if I try and load it with a relative path only.
Any suggestions?
First of all, this type of question may be better suited to the Software Development or Apps and Games sub-forums, as a lot of the people who hang out here are more familiar with homebrew hacks. I'll give it a shot, though.
First of all, what kind of path are you trying to use? I haven't tried loading scripts or images in HTML or JS, but to dynamically load content within the app itself typically requires some care with regard to the path. For example, is the JS file being built into the assembly (as a resource) or included alongside it (as content)? How about the HTML page?
This is a kind of lame approach, but one option that's sure to work is just inlining the scripts in the page, directly. That won't increase the total app size or load time at all, although it might make maintaining the app take a little bit more effort.
Thanks for the reply, I will try to post this into the more appropriate forum.
With regards to paths - you can see the path in the HTML snippet I provided in the original question. It's all a bit specific and we cannot afford to load JS directly from page, since that does increase the size of the resulting HTML, sent from an external PHP page, thus increasing bandwidth. This is the first reason why we chose to have all JS and CSS files directly bundled with the application and load them internally rather than from Internet.
Also, all of JS files are included alongside the application as content. I'm using the same approach for all images, since if they were included as a resource, they would not show in the application.
GoodDayToDie said:
First of all, this type of question may be better suited to the Software Development or Apps and Games sub-forums, as a lot of the people who hang out here are more familiar with homebrew hacks. I'll give it a shot, though.
First of all, what kind of path are you trying to use? I haven't tried loading scripts or images in HTML or JS, but to dynamically load content within the app itself typically requires some care with regard to the path. For example, is the JS file being built into the assembly (as a resource) or included alongside it (as content)? How about the HTML page?
This is a kind of lame approach, but one option that's sure to work is just inlining the scripts in the page, directly. That won't increase the total app size or load time at all, although it might make maintaining the app take a little bit more effort.
Click to expand...
Click to collapse
First question: have you set the IsScriptEnabled proerty on the control to True? It defaults to False, preventing scripting within the control. Also, changing it only takes effect
on navigation, so if you already loaded the page and then set this property, it still won't work.
Anyhow, I missed that your HTML was coming externally, and only the scripts and stylesheets were local. That's... interesting, and seems reasonable enough, and I can't find any info online that exactly matches your use case. The way you're structuring the script src URI looks weird to me, but I haven't messed with the WebBrowserControl very much at all.
One solution, though a bit hacky:
Use the WebBrowserControl's InvokeScript function to dynamically load scripts into your pages. To do this, you would first need to load the script file content into a .NET String object. The GetResourceStream function is probably your best friend here, combined with ReadToEnd(). Then, just invoke the eval() JS function, which should be built-in, and pass it the JS file content. That will load the JS into the web page, creating objects (including functions) and executing instructions as the files are eval()ed.
Of course, you'd need to do this on every page navigation, but you can actually automate it such that the page itself requests that the app load those scripts. In your app, bind the script-loading function to the ScriptNotify event handler, probably with some parameter such as the name of the script to load. Then, on each page served from your server to the app, instead of including standard <script src=...> tags, use <script>window.external.notify('load localscript1.js')</script> and so on; this will trigger the app's ScriptNotify function for you.
I hope that helps. I can see your use case, but somewhat surprisingly, I couldn't find anybody else online who had either run into your problem or written a tutorial on doing it your way.
Thank you for your reply, it was very informative. One question though - why do you think the way I'm structuring the SCRIPT URI is wierd? I tried to mess around with relative URIs and the such, however those would load the JavaScript file from Internet rather than from the application itself.
The problem I'm running into with your proposed solutions, however is that:
1. the project is a PhoneGap/Cordova application, using its own components, so I have no idea where I would look for IsScriptEnabled here (although this all worked on an older PhoneGap release, so I'm guessing they have it set up correctly)
2. injecting a script programmatically on each navigation would require me to rewrite much of the code we already use for other platforms, not to mention those custom Cordova components, which I don't even know if they can handle such thing
As for my user case - I was surprised to be the only guy on the internet with this methodology in place as well. So it either works for everyone else or nobody really thought of doing it my way, since it's basically an Internet application (maybe the don't want to disclose their sources, who knows).
CyberGhost636 said:
1. the project is a PhoneGap/Cordova application, using its own components, so I have no idea where I would look for IsScriptEnabled here (although this all worked on an older PhoneGap release, so I'm guessing they have it set up correctly)
Click to expand...
Click to collapse
In the WebBrowser properties.
CyberGhost636 said:
As for my user case - I was surprised to be the only guy on the internet with this methodology in place as well.
Click to expand...
Click to collapse
Of course you not "the only guy". I've tried to port/run a few HTML java-script based games on WP7 (Digger and couple more) more then year ago; they runs well with one HUGE exception - touch screen events are freezing scripts execution and make games not playable.
The "x-wmapp1:" URI scheme was what I was referring to. Not sure where that comes from, but I haven't done anything really with the WebBrowser control.
I have no knowledge of PhoneGap or Cordova; I assume they're "we write your app for you" frameworks? One would assume that such tools would know to set IsScriptEnabled, but you may have to do so manually. A bit of web searching on that direction may be fruitful - maybe earlier versions enabled scripting by default, and now it's disabled by default so you have to specify an option somewhere?
Injecting the script on navigation really doesn't require any major change to the server-side code. I mean, is sending
<script>window.external.notify('load localscript1.js')</script>
really much different from sending
<script type="text/javascript" charset="utf-8" src="x-wmapp1:/app/www/test.js"></script>
? If that's too different, you could instead send
<script src="http://yourserver.com/LoadLocalScripts.js"></script>
and put "LoadLocalScripts.js" on your server with the following code:
window.external.notify('load localscript1.js');
This has only a trivial increase in server traffic and load time, but lets you continue using external scripts instead of inline ones. Very little server-side change needed at all.
Now, the additional client-side code to support the window.external.notify and call InvokeScript... normally I'd say that's dead easy, because it is if you have any experience with the .NET framework, but in your case I get the feeling that this isn't so? I code to the framework, or to the underlying native code, and I tend to code "raw" (very little auto-generated code), so I'm not going to be able to help you solve the problems with a "make me an app" wizard unless I can see the code it generates for you.
For what it's worth, here's the approximate raw code that I'd use (it's over-simplified, but close enough):
void HandleNotify (String param) {
String[] parts = param.split(" ");
if (parts[0] == "load") LoadScript(parts[1]);
}
void LoadScript (String script) {
String content = Application.GetResourceStream(new Uri(script, UriType.Absolute)).ReadToEnd();
theBrowserControl.InvokeScript("eval", content);
}
void theBrowserControl_Loaded (...event handler args here...) {
theBrowserControl.IsScriptEnabled = true;
theBrowserControl.ScriptNotify += HandleNotify;
theBrowserControl.Navigate("http://yoursite.com");
}
the URI comes from Windows Phone itself, with this code, you can see for yourself:
var a = document.createElement('a');
a.setAttribute('href', '.');
alert(a.href);
also, I've been informed that this works in Cordova 2.0, so it might be a 1.8.1 bug... will try and see how it goes
thanks for your help so far!
Looks like it was a problem with PhoneGap 1.8.1 - after upgading to Cordova 2.0 (PhoneGap got renamed) it all works now... thanks for all the help!
Hello all!
I am looking into development of something which is similar to people's list in people hub. What I want is a huge list of people on one page with (of course) LonglistSelector. When I tap a member of the list, I want the user to be navigated to the details page of that item. User needs to be able to manipulate and modify the data on the details page. The list is going to be real huge. I have a few question about the approach.
1. What is the best way to store data? I am thinking of creating local database with a few columns with person's name in one column, age in another etc.
If this is the approach to go for, can anyone provide me detailed description about the databases? I have deeply gone through the MSDN, WindowsPhoneGeek and many other documentations. I feel dumb about the whole database scenario.
2. Is XML list as database a good approach for large amounts of data or it will be pain?
i would say SQL CE is your best bet to store huge amounts of data. XML is slow at large volumes of data when compared to JSON. I would prefer JSON over XML.
darthveda said:
i would say SQL CE is your best bet to store huge amounts of data. XML is slow at large volumes of data when compared to JSON. I would prefer JSON over XML.
Click to expand...
Click to collapse
So basically, I need to go with the local database using LINQ. Now, how do I do that? As I mentioned, I have read intensively. However, I just don't seem to get hang of it.
akshay2000 said:
So basically, I need to go with the local database using LINQ. Now, how do I do that? As I mentioned, I have read intensively. However, I just don't seem to get hang of it.
Click to expand...
Click to collapse
I created my local database with LINQ based off this sample:
http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh286405(v=vs.92).aspx
First define the columns which you would want to create and then modify the sample code to suit your needs.
For contacts, there is an excellent sample available:
http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh286416(v=vs.92)
if you are stuck with some particular piece of code then let me know, i would be glad to help you out
darthveda said:
I created my local database with LINQ based off this sample:
http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh286405(v=vs.92).aspx
First define the columns which you would want to create and then modify the sample code to suit your needs.
For contacts, there is an excellent sample available:
http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh286416(v=vs.92)
if you are stuck with some particular piece of code then let me know, i would be glad to help you out
Click to expand...
Click to collapse
I had gone through those links earlier! Back then, they made very little sense to me. I have researched a bit by now. I will update here if I get stuck somewhere.
hi
i had read the thread now and maybe this example of MS can help you... it's not based on local database, but uses ASP.NET Web API!
so maybe this is a way for you..
darthveda said:
if you are stuck with some particular piece of code then let me know, i would be glad to help you out
Click to expand...
Click to collapse
I'm attaching my code file to the post. When I try to run the app and click the button (it tries to add an item to the observablecollection) I get NullReferenceException error. Apparently, the collection's instant hasn't been created. But I tried to instantiate it using 'new' keyword - no luck. Am I doing anything wrong?
akshay2000 said:
I'm attaching my code file to the post. When I try to run the app and click the button (it tries to add an item to the observablecollection) I get NullReferenceException error. Apparently, the collection's instant hasn't been created. But I tried to instantiate it using 'new' keyword - no luck. Am I doing anything wrong?
Click to expand...
Click to collapse
solution folder will be better, you are using telerik controls, i can't recreate your solution.
It's done!
darthveda said:
solution folder will be better, you are using telerik controls, i can't recreate your solution.
Click to expand...
Click to collapse
Thanks for the response! After a lot of debugging and (almost literally) adding Debug.writeline after each line of code, I managed to solve it. It had nothing to do with the Database or the ObservableCollection. It was totally different - GroupDescriptor issue! More details here: http://stackoverflow.com/questions/...ion-while-adding-item-to-observablecollection
I'll post here if I get stuck with something again.
Again, thanks a lot!
Any reason you are using telerik controls? for starters and very simple programs, you can use controls from silverlight toolkit or coding4fun toolkit. i am using longlist selector which does the job just like the jumplist from telerik controls does.
darthveda said:
Any reason you are using telerik controls? for starters and very simple programs, you can use controls from silverlight toolkit or coding4fun toolkit. i am using longlist selector which does the job just like the jumplist from telerik controls does.
Click to expand...
Click to collapse
No specific reasons except that the Jumplist provides StickyHeader functionality. And animation framework seems nice addition too!
I developed a module to monitor the performance of an app (for example: wechat , whatsapp, any app is ok), my motivation is to get the delay of all the methods of the app. So first I get all the classes list and save as a txt file in sdcard, then in my module I read the class name one by one and get declaredmethods and hook every method of the class.
Actually this module successed, but the app (wechat app) crashed (NO RESPONSE) , the app is very complicated and the large amount of classes,methods hook impact the app's normal running.
Q: I want to know tracking and hooking all methods of an app is possible? HOW TO FIX THIS PROBLEM THAT THE APP DO NOT RESPONSE?
wendy_1805 said:
I developed a module to monitor the performance of an app (for example: wechat , whatsapp, any app is ok), my motivation is to get the delay of all the methods of the app. So first I get all the classes list and save as a txt file in sdcard, then in my module I read the class name one by one and get declaredmethods and hook every method of the class.
Actually this module successed, but the app (wechat app) crashed (NO RESPONSE) , the app is very complicated and the large amount of classes,methods hook impact the app's normal running.
Q: I want to know tracking and hooking all methods of an app is possible? HOW TO FIX THIS PROBLEM THAT THE APP DO NOT RESPONSE?
Click to expand...
Click to collapse
I don't think the hooking is the issue there, but what you do in your methods. I guess this must be quite computationally expensive (maybe not just one method, but if one of your method adds a small delay, and if all your multiple methods do the same, the sum of small delays will add up to a very huge global delay).
A few common ways to alleviate the time required for computations is to either pre-compute and store in persistent, static variables and limit the number of input/output requests (so that you compute/get from Android libs once most of the stuff you need, and then you share this data between different methods), and to use more efficient algorithms (in term of computational complexity, see Wikipedia) if available.
If this doesn't fix your issues, you should post some code snippets so that people here can better see what kind of job your methods are doing.
lrq3000 said:
I don't think the hooking is the issue there, but what you do in your methods. I guess this must be quite computationally expensive (maybe not just one method, but if one of your method adds a small delay, and if all your multiple methods do the same, the sum of small delays will add up to a very huge global delay).
A few common ways to alleviate the time required for computations is to either pre-compute and store in persistent, static variables and limit the number of input/output requests (so that you compute/get from Android libs once most of the stuff you need, and then you share this data between different methods), and to use more efficient algorithms (in term of computational complexity, see Wikipedia) if available.
If this doesn't fix your issues, you should post some code snippets so that people here can better see what kind of job your methods are doing.
Click to expand...
Click to collapse
Thank you for your answer. Actually I just print a log after the hooking. "System.out.println("packagename: "+param.thisObject.getClass().getPackage()+" classname: "+param.thisObject.getClass().getName()+" method name: "+param.method.getName());" I choose the simple log to test if hooking all methods of an app is possible. But after I hooking every methods of the wechat app, I click the icon of wechat and the phone showing blank screen then pop up dialog box "No responsing!"
wendy_1805 said:
Thank you for your answer. Actually I just print a log after the hooking. "System.out.println("packagename: "+param.thisObject.getClass().getPackage()+" classname: "+param.thisObject.getClass().getName()+" method name: "+param.method.getName());" I choose the simple log to test if hooking all methods of an app is possible. But after I hooking every methods of the wechat app, I click the icon of wechat and the phone showing blank screen then pop up dialog box "No responsing!"
Click to expand...
Click to collapse
System.out.println is an I/O so if it often gets called, this will hugely slow down your app. You should rather use Log.d("YourAppName", "Your debug message here"), which will only print when connected to a debugger (so if you disconnect your phone from your IDE, you should get an app with full speed since the debug statements will be ignored).
I am trying to write a module that hooks (first off all, later only specific) in/output streams and readers/writers to analyze the content.
First try was to hook java.io.Reader.read with all 3 read method signatures - this didn't show very much, so I guess it only hooks real java.io.Reader, and every method who overrides the specific method without calling super will not get hooked.
So I tried to just get all classes and look, if they are java.io.Reader.class.isAssignableFrom(every_single_class) //all classes that extend Reader, or a check if Reader r = new c();
- it turned out it is harder than i thought to get all loaded classes from a classloader.
Tried so far:
1. In desktop-oracle-java you could, via reflection, make the classes-field of a classloader (from the LoadPackageParam lpparam) visible, and it would contain an array of all classes. Android Java does not have this - this field simply doesn't exist.
2. Digging deeper into the android source, it seems like the VMClassLoader inside the normal classloader handles this, but it internally it calls a native loadclass method, so I can't access this data here.
3. My next try was to use the reflections.org lib (pulled via maven) - and every suggested method like getSubTypesOf(Object.class) and many others.
4. Now i tried to hook loadClass of classLoader, but this seemed to lead to an stackoverflow or something like that, i think.
5. I also tried to hook findClass of classLoader, but it seemingly never gets called?
So, what is the correct way to get all subclasses of java.io.Reader (inside a specific classloader) in XPosed framework? To me, it doesn't seem to be a too weird feature to have.
Also: Is there a way that I don't have to restart my phone after every new app version? Or to at least disable the "optimizing 100 apps" on every third boot. (Carbon rom, Android 5.1)
bump. im also interested in this
Very interestd topic!
I found a github project that should be able to do this, and I think I also found the according class.
github.com/baer-devl/DAMN/blob/master/src/at/fhooe/mcm14/damn/xposed/XHookAll.java (i'm currently not allowed to post real links because <10 posts)
There is also a 90-pages master thesis with about ~10 pages about hooking. If someone is interested, I can ask if the author allows to publish/upload it.
using MyFiles, saw it in the main file directory.
GROWTH_TEST
was empty, deleted it.
anyone come across this?
Here also but the file is filled with connections blocked log.
raul6 said:
connections blocked log
Click to expand...
Click to collapse
interesting! what creates this log? is this system-related or a specific app?
Filled with following:
com.android.volley.NoConnectionError: java.net.ConnectException: Failed to connect to ureca.samsungapps.com
Me too. Info from Growth-Test Log Text.
com.android.volley.NoConnectionError: java.net.UnknownHostException: Unable to resolve host "ureca.samsungapps.com": No address associated with hostnamecom.android.volley.VolleyError: Network Disconnectedcom.android.volley.VolleyError: Network Disconnected
Sounds like it is a host. Could we be hacked? I have had issues since last august!
L .J.629 said:
Me too. Info from Growth-Test Log Text.
com.android.volley.NoConnectionError: java.net.UnknownHostException: Unable to resolve host "ureca.samsungapps.com": No address associated with hostnamecom.android.volley.VolleyError: Network Disconnectedcom.android.volley.VolleyError: Network Disconnected
Sounds like it is a host. Could we be hacked? I have had issues since last august!
Click to expand...
Click to collapse
It's apparent that it is a log file for an app on the phone.
Could your phone be hacked? if you truly were then you wouldn't see a log file. Let alone a log file saying that something couldn't connect to a samsung server.
If in doubt perform a full factory data reset and set the phone back up without using a backup. Do not install anything on the phone other then updates to what was on the phone originally. Use it like this for half a week to a week... if the log fle appears then it's probly from one of the apps on the phone.
Your issues are probably (80-90% likely until you make a proper new thread asking for help) entirely seperate from this.
Chances are either you have outdated firmware/software, hardware failures/problems, expectation/reality matters, or just need to do a factory data reset. If you choose to do the factory data reset then avoid using a backup to restore apps and settings (cuz if the issue was from an app or setting then the issue is most likely included with the backup).
I found some weird things in Hidden Sys apps as well: "Circular ver1.0" five instances of it 0.0B, "Filled" - also 5 instances, "Gestural Navigation Bar" - 10 times, "Rounded" x4 and some other 0.0 B apps., does anyone know what for are they and why they propagate in so many instances? Thanks in advance.
It was really bothering me that I couldn't find solid information on this. I went pretty deep down the rabbit hole this morning. So far, this is what I've found out:
Worth Noting;
-- If you crawl the subdomains for the logged domain samsungapps,com it's related to Samsung Galaxy Apps.
-- ureca subdomain was registered in 2009 (first Galaxy phone release)
-- "Growth" seems to be related to marketing via the Galaxy Store.
-- There seems to be Knox relations as well. I will speculate further down below.
After sorting through a ton of data, as if it couldn't be safely assumed by the domain, the ureca URL is embedded in the Samsung Apps, Theme Store, and Game Launcher, that I've found so far. Take a look at some interesting strings I found in the APKs;
Package Name
com.samsung.android.themestore
Internal Version
520110303
Displayed Version
5.2.01.10303
]https://ureca.samsungapps.com/collect/billing_usage_log
]https://ureca.samsungapps.com/collect/theme_sa_log
]https://cn-ureca.galaxyappstore.com/collect/theme_sa_log
Package Name
com.sec.android.app.samsungapps
Main Activity
com.sec.android.app.samsungapps.SamsungAppsMainActivity
Internal Version
450509140
Displayed Version
4.5.05.9
]https://ureca.samsungapps.com/collect/iap_usage_log
(There are also iap subdomains @ samsungapps too, fwiw)
BUT, I have no idea what devices these are coming off of. Some APKs are varying wildly. Some report spyware, trojans, etc, too. Most by only 1 AV vendor though. If anyone has more time than me, take a look. Not sure if Knox is the "backdoor", the 'diamond' and 'zirconia' subdomains looked interesting. Or if it's a false hit, the Chinese govt, or if the APKs are from a repo and they're malicious. Didn't look into it in the slightest.
VirusTotal
VirusTotal
www.virustotal.com
Or if anyone already discovered exactly the source of the "GROWTH_TEST" folder, please let me know so I don't revisit this. But I'm pretty sure it's Galaxy Store Market related stuff.
FWIW - Me
Galaxy S10+, OEM Unlocked.
June 1st security update. USA
My Growth Test folder contained 2 files,
appsUsageLog.txt: (1 "volley can't resolve ureca.samsungapps.com")
optin_trace.txt: (1 "volley network error")
You're probably over thinking this.
Pretty sure I've seen it before too.
If you're still running on Pie Karma Firewall will let you monitor and block internet connections.
Shows you which apks are busy sucking up bandwidth and battery.
Scan any questionable apks online with Virustotal.
AM Radio said:
using MyFiles, saw it in the main file directory.
GROWTH_TEST
was empty, deleted it.
anyone come across this?
Click to expand...
Click to collapse
Any updates to this? I too have the Growth_test folder with appGrowthLog.txt in it.
Edit: in the appGrowthLog.txt file says "com.android.volley.NetworkErrorcom.android.volley.VolleyError: Network Disconnected".