Plugins for Application
-
I'm trying to have plugin functionality in my application. So first thing came in mind was to just load the DLLs and call the common abstract class methods. After completing all that, I noticed that there could be many security issues. The next thing I used was different AppDomain. But that solve half of problem. Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect. After that I started using NamedPipeStream, separated them in processes, connected plugins and application through PipeStream, it does exactly what I needed but each plugins means a different process. Even everything is working fine but its not satisfying, something still feels not so good. My question is, is that the only way ? PS : I just want simple plugin support, not some complicated library like System.AddIn.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
I'm trying to have plugin functionality in my application. So first thing came in mind was to just load the DLLs and call the common abstract class methods. After completing all that, I noticed that there could be many security issues. The next thing I used was different AppDomain. But that solve half of problem. Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect. After that I started using NamedPipeStream, separated them in processes, connected plugins and application through PipeStream, it does exactly what I needed but each plugins means a different process. Even everything is working fine but its not satisfying, something still feels not so good. My question is, is that the only way ? PS : I just want simple plugin support, not some complicated library like System.AddIn.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
Simple for you may be altogether different for someone else. I googled "C# plugin framework" and got 17 million hits back, and on the first page, I found this: http://madskristensen.net/post/Generic-plug-in-application-in-C.aspx[^]
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass." - Dale Earnhardt, 1997 -
Simple for you may be altogether different for someone else. I googled "C# plugin framework" and got 17 million hits back, and on the first page, I found this: http://madskristensen.net/post/Generic-plug-in-application-in-C.aspx[^]
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass." - Dale Earnhardt, 1997John Simmons / outlaw programmer wrote:
I googled "C# plugin framework" and got 17 million hits back
and you just read my message title not the content :)
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
I'm trying to have plugin functionality in my application. So first thing came in mind was to just load the DLLs and call the common abstract class methods. After completing all that, I noticed that there could be many security issues. The next thing I used was different AppDomain. But that solve half of problem. Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect. After that I started using NamedPipeStream, separated them in processes, connected plugins and application through PipeStream, it does exactly what I needed but each plugins means a different process. Even everything is working fine but its not satisfying, something still feels not so good. My question is, is that the only way ? PS : I just want simple plugin support, not some complicated library like System.AddIn.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
John Simmons / outlaw programmer wrote:
I googled "C# plugin framework" and got 17 million hits back
and you just read my message title not the content :)
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
He was responding to your statement "I just want simple plugin support..."
I know the language. I've read a book. - _Madmatt
-
He was responding to your statement "I just want simple plugin support..."
I know the language. I've read a book. - _Madmatt
Nice reason to vote 1, did you also forgot to remember I wrote that in first place "My question is, is that the only way ?" do I have to make it in big font, so you can see ?
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
Nice reason to vote 1, did you also forgot to remember I wrote that in first place "My question is, is that the only way ?" do I have to make it in big font, so you can see ?
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
Xmen W.K. wrote:
do I have to make it in big font, so you can see ?
Nice attitude. Good luck with getting anyone to help you now.
I know the language. I've read a book. - _Madmatt
-
I'm not sure why this was downvoted. MEF was going to be my recommendation as well.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
-
I'm not sure why this was downvoted. MEF was going to be my recommendation as well.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
Pete O'Hanlon wrote:
I'm not sure why this was downvoted.
Simple retaliation. Read the other responses, the OP is being an a$$.
I know the language. I've read a book. - _Madmatt
-
I'm not sure why this was downvoted. MEF was going to be my recommendation as well.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
Pete O'Hanlon wrote:
I'm not sure why this was downvoted.
That guy need to learn bit respect, voted me down for nothing.
Pete O'Hanlon wrote:
MEF was going to be my recommendation as well.
yes I know but MEF is not really what I was needed. The following is from my post Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
Pete O'Hanlon wrote:
I'm not sure why this was downvoted.
That guy need to learn bit respect, voted me down for nothing.
Pete O'Hanlon wrote:
MEF was going to be my recommendation as well.
yes I know but MEF is not really what I was needed. The following is from my post Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
Xmen W.K. wrote:
That guy need to learn bit respect, voted me down for nothing.
It's not Mark that needs to learn a bit of respect, and it's wasn't he that downvoted you...
Xmen W.K. wrote:
Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect.
DLL's don't get a process name. DLL's are loaded into the host .EXE process just as if it was part of the .EXE itself. There is no distinction between the .DLL code and the .EXE code, so any code in your .DLL that goes through the firewall is going to appear to the firewall as coming from the .EXE. The only way I see to getting around this would be to host your .DLL's in a seperate .EXE process and use interprocess communication methods to talk between the two. But, considering the requirement, that's adding a LOT of weight and overhead to your application for very little to no benefit.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak -
Pete O'Hanlon wrote:
I'm not sure why this was downvoted.
That guy need to learn bit respect, voted me down for nothing.
Pete O'Hanlon wrote:
MEF was going to be my recommendation as well.
yes I know but MEF is not really what I was needed. The following is from my post Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
Xmen W.K. wrote:
That guy need to learn bit respect, voted me down for nothing.
Revenge univoting is not teaching somebody respect. It's just childish. It is the forum equivalent of "Did-to, Did-not" that children engage in.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
-
Xmen W.K. wrote:
That guy need to learn bit respect, voted me down for nothing.
It's not Mark that needs to learn a bit of respect, and it's wasn't he that downvoted you...
Xmen W.K. wrote:
Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect.
DLL's don't get a process name. DLL's are loaded into the host .EXE process just as if it was part of the .EXE itself. There is no distinction between the .DLL code and the .EXE code, so any code in your .DLL that goes through the firewall is going to appear to the firewall as coming from the .EXE. The only way I see to getting around this would be to host your .DLL's in a seperate .EXE process and use interprocess communication methods to talk between the two. But, considering the requirement, that's adding a LOT of weight and overhead to your application for very little to no benefit.
A guide to posting questions on CodeProject[^]
Dave KreskowiakDave Kreskowiak wrote:
The only way I see to getting around this would be to host your .DLL's in a seperate .EXE process and use interprocess communication methods to talk between the two. But, considering the requirement, that's adding a LOT of weight and overhead to your application for very little to no benefit.
Thats what I asked, if you have read my question. But there is benefit, the spyware kind of plugins will always be separated and end user will be responsible for anything goes wrong, not the host application.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
Dave Kreskowiak wrote:
The only way I see to getting around this would be to host your .DLL's in a seperate .EXE process and use interprocess communication methods to talk between the two. But, considering the requirement, that's adding a LOT of weight and overhead to your application for very little to no benefit.
Thats what I asked, if you have read my question. But there is benefit, the spyware kind of plugins will always be separated and end user will be responsible for anything goes wrong, not the host application.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
The end-user is going to be accountable for it no matter which executable runs the thing! If the app name comes back a normal production app, then they can just look at the plugins and see that something here isn't quite like the others. I think you're inflating the usefulness of this idea.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak -
The end-user is going to be accountable for it no matter which executable runs the thing! If the app name comes back a normal production app, then they can just look at the plugins and see that something here isn't quite like the others. I think you're inflating the usefulness of this idea.
A guide to posting questions on CodeProject[^]
Dave KreskowiakDave Kreskowiak wrote:
I think you're inflating the usefulness of this idea.
I'm just trying to make application more separated as much as possible. I used PipeStream to communicate between processes as I wrote above...the question was simple, is that the only way ? but some people were in too hurry to read that. Anyway thanks for the reply :)
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
Dave Kreskowiak wrote:
I think you're inflating the usefulness of this idea.
I'm just trying to make application more separated as much as possible. I used PipeStream to communicate between processes as I wrote above...the question was simple, is that the only way ? but some people were in too hurry to read that. Anyway thanks for the reply :)
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
I didn't misread it. I just thought it was a daft idea. Marshalling backwards and forwards of data could end up beinga a fairly expensive business.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
-
I didn't misread it. I just thought it was a daft idea. Marshalling backwards and forwards of data could end up beinga a fairly expensive business.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
Sending/Receiving data through pipe is a daft idea ?
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
-
Sending/Receiving data through pipe is a daft idea ?
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
No - the effort you'll expend creating an overengineered plug-in framework is the daft idea.
Forgive your enemies - it messes with their heads
My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility
-
I'm trying to have plugin functionality in my application. So first thing came in mind was to just load the DLLs and call the common abstract class methods. After completing all that, I noticed that there could be many security issues. The next thing I used was different AppDomain. But that solve half of problem. Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect. After that I started using NamedPipeStream, separated them in processes, connected plugins and application through PipeStream, it does exactly what I needed but each plugins means a different process. Even everything is working fine but its not satisfying, something still feels not so good. My question is, is that the only way ? PS : I just want simple plugin support, not some complicated library like System.AddIn.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can
Xmen W.K. wrote:
So first thing came in mind was to just load the DLLs and call the common abstract class methods. After completing all that, I noticed that there could be many security issues.
Such as what exactly? The only security concern that I specifically see with the above description is that you might need to verify that the loaded dlls hasn't been hacked (signature verification.)
Xmen W.K. wrote:
Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect.
At some point you have to trust the plugin. For instance consider the situation I mentioned above where someone has maliciously replaced the real plugin with one that has the same name and same functionality but which transmits all of the data to a third party.
Xmen W.K. wrote:
My question is, is that the only way ?
First step is to identify what your actual security requirements are. As an example if you want the user to validate the plugins then you should insure that your application will not load any plugin unless the user has verified it and has done that in the application.
-
Xmen W.K. wrote:
So first thing came in mind was to just load the DLLs and call the common abstract class methods. After completing all that, I noticed that there could be many security issues.
Such as what exactly? The only security concern that I specifically see with the above description is that you might need to verify that the loaded dlls hasn't been hacked (signature verification.)
Xmen W.K. wrote:
Assume this, if a plugin wants to connect a server over internet, the firewall will show the name of my application and user may allow without knowing its the plugin who is trying to connect.
At some point you have to trust the plugin. For instance consider the situation I mentioned above where someone has maliciously replaced the real plugin with one that has the same name and same functionality but which transmits all of the data to a third party.
Xmen W.K. wrote:
My question is, is that the only way ?
First step is to identify what your actual security requirements are. As an example if you want the user to validate the plugins then you should insure that your application will not load any plugin unless the user has verified it and has done that in the application.
jschell wrote:
At some point you have to trust the plugin. For instance consider the situation
There is no trust on plugins, if I trust, host application will lose the trust and it will be in firewall block list. And that will ruin entire point of stats management and other important things.
jschell wrote:
As an example if you want the user to validate the plugins then you should insure that your application will not load any plugin unless the user has verified it and has done that in the application.
Well, thats the problem. A user can validate any plugin, regular user has no knowledge whats going on behind the application. Even a programmer, will have read all the source code to make sure the plugin is not a spyware or virus, that may steal their work or documents. Here is more detailed explanation - Host Application uses web service, sends and receives informations, update stats. - User trusts on host application. - Everyone in the entire world is allowed to create own plugin - But if host application loads plugin even in separate AppDomain, it still uses same firewall setting, which is already allowed by user, and plugin has direct access to internet. - Only way I see is separate process for each plugin. So if plugin tries to connect, firewall will confirm that. - My question was that, is separate process only way to avoid that ? thats it, thats it, nothing more than that.
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L %^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2 W_AD`EPABIKRDFVS)EVLQK)JKQUFK[M`UKs*$GwU#QDXBER@CBN% R0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
----------------------------------------------- 128 bit encrypted signature, crack if you can