Symbian-Developers

The Official Developers Section => Symbian Software Development Discussions => The Developers Section => Qt Application Development => Topic started by: symster on November 12, 2013, 07:57:01 pm

Title: App Development
Post by: symster on November 12, 2013, 07:57:01 pm
To allstar,hueliff and other developers,

AS you all know to prepare 1st Jan aftermath,most symbian developers is figuring how to push update with still maintain it as paid apps.Some even already making their app freeware.For past few months i been thinking hard.Today i just figure it out.The magic word is "IMEI".

All device have specific IMEI and why don't we use it.I mean we could query device imei with Qml DeviceInfo and match with database inside the app.If the imei don't then the app won't work.This method is almost pirate proof as you can't fake imei and a same time maintain current app as paid version.

I already found a way to query device imei but i still don't have any idea how to match it with listmodel database contain existing users imei.Allstar,huelliff and fellow developers.I hope we all can pool our idea on this topic.
Title: Re: App Development
Post by: Allstar12345 on November 13, 2013, 12:12:47 am
Sorry to start on a down but QML can be De-compiled and can be edited(probably), although I won't say how it's not really the place to start.
Also you can change the IMEI at software level but I don't think anyone would really go to that kind of measure to trick an Application.

And Why a ListModel though? You are not going to show it in a ListView so.. :P

It would be more secure and better checking on a online server, which is probably a bit of a bitch to do.
Title: Re: App Development
Post by: matthew on November 13, 2013, 01:31:49 am
The magic word is "IMEI".
i have seen a few methods for changing/masking both IMEI and IMSI, so i don't think a full pirate won't know how to circumvent this.
Title: Re: App Development
Post by: symster on November 13, 2013, 05:11:51 am
Sorry to start on a down but QML can be De-compiled and can be edited(probably)

For some,but qml can be compiled into resource binary so it would required high level skill to edit binary.Also I say listmodel because I have no idea how to match it with imei string.Can you please help me.
Title: Re: App Development
Post by: symster on November 13, 2013, 05:17:37 am
i have seen a few methods for changing/masking both IMEI and IMSI, so i don't think a full pirate won't know how to circumvent this.

An imei database data is added regulary so if imei does not match then it is useless
Title: Re: App Development
Post by: matthew on November 13, 2013, 05:35:47 am
i really hate to play devil's advocate in such cases (as it no doubt makes me look crooked), but if the pirate bought the app, all he has to do is supply the registered IMEI number with the cracked app to get past this method.
And i am not even experienced in software piracy; this is only based on what little i know.
Title: Re: App Development
Post by: symster on November 13, 2013, 06:02:32 am
i have seen a few methods for changing/masking both IMEI and IMSI, so i don't think a full pirate won't know how to circumvent this.
Title: Re: App Development
Post by: matthew on November 13, 2013, 06:11:37 am
i have knowledge of how to smoke crack, too. That doesn't mean i smoke crack, mate.
Title: Re: App Development
Post by: symster on November 13, 2013, 09:38:07 am
You guys make it sound complicated.My idea is simple.First when users open app,the app run as usual but behind the scene the app get device imei with deviceinfo.imei
Second,the imei will be match with database
Third,if the database match the imei,the app run as usual if not then do as you want,close app,a warning whatever.
All this can be done in qml with no c++ involve. This method is effective to me.I just cannot get the second step done on how to match.Changing imei is useless as users didn't know which imei is in database and qml is compressed to binary so no qml code is visible.
Title: Re: App Development
Post by: matthew on November 13, 2013, 02:41:42 pm
So according to your plan, the app will not work without a network connection.
i don't see that working at all.
Title: Re: App Development
Post by: asturcon3 on November 13, 2013, 03:02:21 pm
oO QML deviceinfo

Well, thanks, I was trying to retrieve the IMEI with QT, and getting all kind of certificate errors.

I'm also walking the IMEI way (plus registration server), I know it's not 100% pirate proof but should do for a lot of people.
Title: Re: App Development
Post by: symster on November 13, 2013, 03:22:19 pm
So according to your plan, the app will not work without a network connection.
i don't see that working at all.
There is no need for internet.All I need is to match users imei with database bundle with.That is why I ask for help.I already know how query imei but I don't how to match with database and what qml element to use as database
Title: Re: App Development
Post by: Allstar12345 on November 13, 2013, 03:44:38 pm
Now you are wrong there, QML is not binary packed as such, even with a QResourceFile, trust me.

Using QML on this would just be asking for trouble, it's better to use c++ and Qt, I'll work on it later today, I have a rough idea how to check the IMEI but I think it would be safer to build a version for each customer with their IMEI hard coded.
Title: Re: App Development
Post by: symster on November 13, 2013, 03:57:58 pm
Yes but at least qml code itself is not visible.Build each version is time consuming.My method require just one build and new imei will added in updated version so new users can use the app.Maybe you can just guide me on what element to use to store all those imei string.I will have a head start from there.Thank you
Title: Re: App Development
Post by: asturcon3 on November 13, 2013, 04:03:36 pm
QM code IS visible. That's the point.

But if you really want to do things simple, put a javascript array with all your IMEIs and simply walk it for the detected IMEI.
Title: Re: App Development
Post by: symster on November 13, 2013, 04:12:35 pm
Not if you put it in resource.All those qml will not visible
Title: Re: App Development
Post by: Allstar12345 on November 13, 2013, 04:29:53 pm
I've edited your post, the idea is not to tell people how to do it, as I've said twice they can be read in the resource file so it's completely pointless using qml, and it's pointless having a database since both QSettings and an SQL can be read.
Title: Re: App Development
Post by: matthew on November 13, 2013, 10:55:22 pm
There is no need for internet.All I need is to match users imei with database bundle with.That is why I ask for help.I already know how query imei but I don't how to match with database and what qml element to use as database
Ok, i get it now.
The database idea seems difficult to employ, but a method to tie the install to its device's IMEI seems clever. It's still not iron-clad, but it would be too much trouble to overcome for an app costing so little (Joikuspot being my most expensive at $9 US).
i am still thinking about software piracy in terms of PC software suites which cost in the hundreds =oP
Title: Re: App Development
Post by: matthew on November 13, 2013, 11:06:53 pm
@symster: i apologize for my derisive comments
Title: Re: App Development
Post by: symster on November 14, 2013, 09:32:27 am
Finally someone who understand me though any users will be able to install the app.Just if the imei does not match,i will make something to the app.What is it a remain secret.
Title: Re: App Development
Post by: matthew on November 14, 2013, 09:58:01 am
What am i even doing commenting in this section, anyway  :-X
Title: Re: App Development
Post by: symster on November 16, 2013, 03:34:50 pm
What am i even doing commenting in this section, anyway  :-X
What you mean
Title: Re: App Development
Post by: mk27 on November 17, 2013, 12:48:46 am
This is a good idea but not full-proof.
first, the database will be a problem. if it's online database, internet connection is required.
second. it's easy to crack. it's also easy to mask and change imei software way.
if each build has different imei in it then on download page, we need server backend (php,asp etc...) to compile app and give download.

example in php:
Code: [Select]
<?php
// code to write IMEI in main.cpp goes here
// bellow you see how server compiles app for you
exec("c:\qtsdk\symbian\sdks\symbian3qt474\bin\qmake.exe -spec ..\..\..\..\QtSDK\Symbian\SDKs\Symbian3Qt474\mkspecs\symbian-sbsv2 CONFIG+=release -after  OBJECTS_DIR=obj MOC_DIR=moc UI_DIR=ui RCC_DIR=rcc -o bld.inf MaskBrowser.pro");
// then here we can place code that will give user the compiled sis file
?>

EDIT: also most of websites run on linux so qmake path will be different.
EDIT 2: most servers/hosting providers have exec() function disabled so it may not work. so we need our own server (or at least VPS Server or Dedicated Server) to pull this off. I can help with php side if you guys want.
Title: Re: App Development
Post by: symster on November 17, 2013, 09:11:31 am
Quote
second. it's easy to crack. it's also easy to mask and change imei software way.
The database is offline because online version require a a server to work.If the imei is change or mask then the app will not work as it doesn't match the database.Thanks for your offer but i want the imei to be manage offline itself.The first update is just going to be difficult with tens of thousand to insert manually.

I decided to use Qstringlist to create a list of string to store all those purchaser imei but the sring is not recognise in qml as string.Gonna need more work on that.

Code: [Select]
QStringList imei;
     imei.append("353232540273");
     imei.append("350112540273");
     imei.append("123905240273");
     imei.append("456505402173");
Title: Re: App Development
Post by: Allstar12345 on November 17, 2013, 02:40:41 pm
Why you still trying to use QML ?
Title: Re: App Development
Post by: symster on November 17, 2013, 04:40:11 pm
Because couldn't think of other way and I won't go for online version like Mrkenkadze suggest.I don't think users would waste time on cracking a cheap app so it just work for them.
Title: Re: App Development
Post by: matthew on November 18, 2013, 03:40:56 am
Okay i want to remind you i know right next to nothing about coding before i ask this.
i just started using installserver logging and i am curious if sysmster's idea for locking IMEI will be negated by this? What i mean is will the logged installation have the locked IMEI db?
Title: Re: App Development
Post by: huellif on November 18, 2013, 06:51:11 pm
Qt or C++ is also easy to crack, you have to make it more complicated than one function call.
Disabling a function isn't a complicated task and reading Qt function names via IDA is also easy.
Title: Re: App Development
Post by: symster on November 18, 2013, 07:01:09 pm
Qt or C++ is also easy to crack, you have to make it more complicated than one function call.
Disabling a function isn't a complicated task and reading Qt function names via IDA is also easy.
You mean someone can still edit the string qt c++ and disabling the function in qml ?
If just adding his own imei so it work only one phone that is not a problem but disable the function all together then that is big problem.Anyway some protection is better than none.
Title: Re: App Development
Post by: symster on November 18, 2013, 08:44:45 pm
Okay i want to remind you i know right next to nothing about coding before i ask this.
i just started using installserver logging and i am curious if sysmster's idea for locking IMEI will be negated by this? What i mean is will the logged installation have the locked IMEI db?
installserver allow user to install unsigned apps if not mistaken.I allow anyone to install my app unsign or signed.I also didn't do any imei locking but imei matching which subsequent action is determine by me.Lock app,exit app,do nothing,create time trial,redirect to browser.All in single app version.
Title: Re: App Development
Post by: matthew on November 18, 2013, 09:55:52 pm
installserver allow user to install unsigned apps if not mistaken.
Ok, never mind. You do not know what installserver logging is.
Title: Re: App Development
Post by: Allstar12345 on November 18, 2013, 10:13:49 pm
huellif is right, it can be disabled but it wouldn't be really worth it if it's a small App.
Title: Re: App Development
Post by: huellif on November 18, 2013, 11:52:17 pm
I disabled a "copy protection" it was an expired QuasarMX demo, if you really want to add a protection add more than one function(call).
Title: Re: App Development
Post by: symster on November 19, 2013, 07:22:49 pm
I disabled a "copy protection" it was an expired QuasarMX demo, if you really want to add a protection add more than one function(call).
I assume you mean quasarmx lite version because didn't found any demo version but can't believe you can still enable all the blocked feature.
Title: Re: App Development
Post by: huellif on November 21, 2013, 11:49:41 pm
no previous versions were free and worked for limited time ;)

and there's no need to crack blocked features I am part or the testers team :P
Title: Re: App Development
Post by: symster on December 31, 2013, 05:06:49 pm
Need some advice.Is it possible to create string of list like this?.Thank You

Code: [Select]
import QtQuick 1.1

QtObject {
    id: example model
    property list somemodel: [
        "359054126545560",
        "354871642063595",
        "315455041700672",
        "358261042134509"
    ]
}
Title: Re: App Development
Post by: huellif on December 31, 2013, 09:00:25 pm
read here:
http://www.w3schools.com/js/js_obj_array.asp

so it should be correct