WCF Inheritance and Phone 7 - Windows Phone 7 Software Development
Hey guys wondering if someone could help me. I have a MVP framework that I use to help with SoC. The problem I am having is my MVP framework uses abstract base partial classes that implement the properties for a given object. I say its a problem because WCF does not like base classes therefor passes an empty object to the phone 7 app. Now I removed the partial abstract from the class and keep the inheritance however the object is still empty.
I also added KnownType attributes to the service and objects and updated the reference in the phone 7 app. KnownType does not work with a phone 7 project and it is easily repeatable.
This is driving me crazy because I have to use base classes because the framework is auto generated and therefor need a generated.cs class to back the main class.
Service
Code:
[FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.Linq;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.Runtime.Serialization;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.ServiceModel;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.ServiceModel.Activation;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] BeeBQ.Core.Entity;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] WcfService1
{
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]ServiceContract[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2](Namespace = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]""[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2])]
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]AspNetCompatibilityRequirements[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2](RequirementsMode = [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]AspNetCompatibilityRequirementsMode[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2].Allowed)]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]class[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]test
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]{
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]OperationContract[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]]
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]ServiceKnownType[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]typeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]GrillBrandBase[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]))]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] DoWork([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]GrillBrand[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] brand)
{
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]// Add your operation implementation here
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2];
}
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]// Add more operations here and mark them with [OperationContract]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]}
}
[/SIZE][/FONT][/SIZE][/FONT]
object
Code:
[FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System.Collections.Generic;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System.Linq;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System.Text;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System.Runtime.Serialization;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System.ComponentModel;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System.Collections;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] System.ServiceModel;[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#region[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] license[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]/*------------------------------------------------------------------------
<generated>
IT IS AGAINST THE LICENSE AGREEMENT TO REMOVE THIS LICENSE HEADER.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]Developed By: Brian Coggin [bcoggin[at]bowpay.com]
Generated with: .netMVP Framework v1.1
Generated at 10/27/2010 6:53:33 PM.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]The .netMVP Framework is based on the MVP pattern. .netMVP was developed
to enforce SoC by introducing a layer between .netTiers[DAL] and HTML[View]
there by allowing a developer or small team of developers to output projects
in a fast paced enviornment while enforcing SoC[Seperation of Concerns] style development.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]The .netMVP framework is copyrighted and is not intended for resale.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]This file will be overwritten when regenerating your code.
</generated>
------------------------------------------------------------------------*/
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#endregion
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]///[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000] [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]<remarks>
///[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000] This file is generated once and will never be overwritten.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]///[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000] [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]</remarks>[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] BeeBQ.Core.Entity[/COLOR]
{
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]DataContract[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]class[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]GrillBrand[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] : [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]GrillBrandBase
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]{
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#region[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][COLOR=#000000] Constructors[/COLOR]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]///<summary>
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]///[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000] Creates a new [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]<see cref="GrillBrand"/>[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000] instance.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080][FONT=Consolas][SIZE=2][COLOR=#808080]///</summary>
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] GrillBrand():[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]base[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]() { }
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#endregion
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]}
}
[/SIZE][/FONT][/SIZE][/FONT]
using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.Collections.Generic;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.Linq;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.Text;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.Runtime.Serialization;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.ComponentModel;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.ServiceModel;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#region[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] license
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]/*------------------------------------------------------------------------
<generated>
IT IS AGAINST THE LICENSE AGREEMENT TO REMOVE THIS LICENSE HEADER.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]Developed By: Brian Coggin [bcoggin[at]bowpay.com]
Generated with: .netMVP Framework v1.1
Generated at 10/27/2010 6:53:33 PM.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]The .netMVP Framework is based on the MVP pattern. .netMVP was developed
to enforce SoC by introducing a layer between .netTiers[DAL] and HTML[View]
there by allowing a developer or small team of developers to output projects
in a fast paced enviornment while enforcing SoC[Seperation of Concerns] style development.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]The .netMVP framework is copyrighted and is not intended for resale.
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]This file will be overwritten when regenerating your code.
</generated>
------------------------------------------------------------------------*/
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#endregion
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]/*
File generated by .netMVP
Important: Do not modify this file. Edit the file GrillBrand.cs instead. This file will be overwritten
*/
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]namespace[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] BeeBQ.Core.Entity
{
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]DataContract[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]]
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]KnownType[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]typeof[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]GrillBrand[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]))]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]class[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]GrillBrandBase
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]{
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#region[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] Properties
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]DataMember[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]Int32[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] Id { [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]get[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]; [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]set[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]; }
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]DataMember[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]String[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] Name { [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]get[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]; [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]set[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]; }
[[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]DataMember[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]]
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]public[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] System.[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af][FONT=Consolas][SIZE=2][COLOR=#2b91af]String[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] CompanyUrl { [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]get[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]; [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]set[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]; }
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#endregion
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]}
}
[/SIZE][/FONT][/SIZE][/FONT]
Well fixed my own problem. Sort of anyways. After a ton of surfing I realized that windows phone 7 doesn't support inheritance when using WCF and I will have to wait for silverlight 4. In the meantime I made the abstract base class an interface and just implement the properties. The cool thing is it's still all auto generated so I will just have to manually implement the database changes if any.
yet another thing missing from Windows Phone 7
Well actually the real problem with inheritance is more of the auto generation of the proxy classes. This can be resolved by not using the auto generated tools. This is also by design as SOA is flat and not OOP. Also I have had more problems with WCF, REST and endpoints than anything. I think I may just work on CodeSmith template that generates the service layer proxy for me -- Besides manually consuming a service is best practice anyways.
Related
Running Homebrew Native Executables - Status: DONE!!
[2012/06/03] IMPORTANT UPDATE HERE Hi hackers, This is meant as a little update on one of the projects I've been working on. I'm kinda stuck now. I have a suspicion of what the problem is. I thought that maybe if I write a post about it, me or someone else will have an idea on how to get this working. The goal is to run native homebrew executables on WP7 This has not been done yet. All apps are Silverlight apps that are compiled as DLL and run by Taskhost.exe with least privileges. All other executables are signed by Microsoft. Executables that are compiled as ARM executable cannot be started. The angle is to create a certificate that allows to sign a WP7 executable. Then add that to the appropriate certificate store. Create an executable. Sign it with the private key. Load it onto a WP7 device. Copy it to the Windows folder. Use an OEM driver to launch the executable. First I did research on the certificate stores. I can now with certainty state that there are 4 certificate stores: - CA - Root - My - Code Integrity After a lot of research I finally got complete read/write access to all of these stores. The Code Integrity store contains all the certificates that are used by the Loader Verifier to verify the executable that is being launched. When the device is launched for the first time, the certificates that are in \Windows\ciroots.p7b are installed to that certificate store. These certificates have these properties: Key Usage = 0x86 = Digital Signature, Certificate Signing, Off-line CRL Signing, CRL Signing Entended Key Usage = Code Signing (1.3.6.1.5.5.7.3.3) + Unknown key usage (1.3.6.1.4.1.311.10.3.14) So I used OpenSSL to create such an certificate (with private key) for myself. And I installed the certificate in the Code Integrity store. I then used VS2008 to create a completely barebone executable (ARMv4 Console app with only Sleep(-1) in the Main). I signed it with SignTool from Microsoft. I loaded the executable to my device and I copied it to the \Windows folder (I think the policies restrict executing to only from that folder, but I'm not sure about that). I use the Samsung driver to launch the executable, because I need at least Standard Rights to launch an executable. The Samsung driver has Elevated Rights. My own app has only Least Privileges. Using the Samsung driver does not return any success or fail codes. But looking at the Running Processes list, I don't see my Test.exe running. It should be, because the main thread is put to sleep infinitely. So why is this not working? Well, I have a guess. I think it's the policies that bind the certificates in the Code Integrity store to the different accounts/chambers. In the \Windows folder there are a lot of policy xml-files. On fist boot, these are merged into PolicyCommit.xml and then compiled to policydb.vol. When the Loader Verifier (lvmod.dll) loads an executable, it queries the policies to determine access rights and chamber for that executable. The policies that matter in this context are defined in 8314B832-8D03-444f-9A2A-1EF6FADCC3B8.policy.xml. It's an xml-file that basically says this: Code: Microsoft Mobile Device Privileged PCA - ced778d7bb4cb41d26c40328cc9c0397926b4eea - not used in this context Microsoft Mobile Device TCB PCA - 88bcaec267ef8b366c6e6215ac4028e7a1be2deb - honored by System Identity Group Microsoft Mobile Device Unprivileged PCA - 1c8229f5c8d6e256bdcb427cc5521ec2f8ff011a - honored by Standard Right Identity Group Microsoft Mobile Device VSD PCA - 91b318116f8897d2860733fdf757b93345373574 - not used in this context VeriSign Mobile Root Authority for Microsoft - 069dbcca9590d1b5ed7c73de65795348e58d4ae3 - honored by LPC Identity Group I should find a way to add a policy with my certificate in it. Any ideas? Ciao, Heathcliff74
If you are able to re-sign an executable that is already in the ROM, i would try that, so you know the problem isn't within the native code, but only with the signing. Or maybe the other way round which would be awesome. regards
Flow WP7 said: If you are able to re-sign an executable that is already in the ROM, i would try that, so you know the problem isn't within the native code, but only with the signing. Or maybe the other way round which would be awesome. regards Click to expand... Click to collapse That's a good idea. I must say that I don't have much faith in the current RecMod tools for WP7 right now. I am able to get the binaries recmodded so that I can disassemble them correctly. But I don't think they can be easily launched. But there are executables that are on the rom as complete binaries, instead of rom-modules. To begin with, I have to select one that does not need much privileges to run and try to sign that one and then run it. I'm really busy with work right now, so I think I won't be able to try it until the day after tomorrow. But I will try it and will let know how that went. Thanks!
Decompiled taskhost.exe, so it gets more easy for us to see if its able to make taskhost to start another exe for us. Lots of code tho (C code). taskhost.c (276 KB) in attachments. edit: Oh, WOW, this really shows how to call those anonymous methods without call signature "Hello" (signature: "??z_Hello_?mze") Hmm, pretty much about the pause part? Code: if ( v10 ) { a7 = sub_178E7(v10); if ( a7 >= 0 ) { a7 = sub_180A5(v7, v7 + 64); if ( a7 >= 0 ) { a7 = ThemeInitialize(v7 + 136); if ( a7 >= 0 ) { v11 = sub_1862B(v13, v7); EnableHostAutoDehydration(v11 == 3); v16 = 0; a7 = InitializeEmClientEx(&a2, 0, &v16); if ( a7 >= 0 ) { a7 = RegisterPausedHostCallback(sub_19D0D, 0); if ( a7 >= 0 ) { a7 = RegisterResumingHostCallback(sub_19D31, 0); if ( a7 >= 0 ) { if ( v11 != 3 || (a7 = RegisterDehydrateHostCallback(sub_19D76, 0), a7 >= 0) && (a7 = RegisterFreezeHostCallback(sub_19D97, 0), a7 >= 0) ) { a7 = RegisterExitHostCallback(sub_19D55, 0); if ( a7 >= 0 ) a7 = sub_17C0A(*(_DWORD *)(v7 + 128), 0); } } } } } } } } UIX framework entry-point (exe) Code: int __cdecl sub_11114(int a1, int a2, int a3) { int v4; // [sp+0h] [bp-38h]@1 char Dst; // [sp+4h] [bp-34h]@1 int v6; // [sp+8h] [bp-30h]@1 int v7; // [sp+Ch] [bp-2Ch]@1 int v8; // [sp+18h] [bp-20h]@1 int v9; // [sp+28h] [bp-10h]@1 v4 = 0; memset(&Dst, 0, 0x34u); v8 = a3; v6 = (int)L"res://FlightModeUXDLL!FlightMode.uix"; v7 = (int)L"FMMain"; v9 = 2; RunApplication(&v4); return dword_12034; } C++ converted Code: UIXApplicationInfo app; app { ... } RunApplication(&app); struct UIXApplicationInfo { int UNK_v4 = 0; char Dst = {0}; char* uixFile; char* uixEntryPoint; int UNK_v8; int UNK_v9 = 2; } Then just figure out the UIX part (or test the existing "res://FlightModeUXDLL!FlightMode.uix" if it launches, if so, we made it). ___ Found this in mango dump: > Uninstall provxml Code: <!-- Uninstall Xbox LIVE Extras App --> <characteristic type="AppInstall"> <nocharacteristic type="{0c17d153-b5d5-df11-a844-00237de2db9e}"/> </characteristic>
Is there a reason you can't just use COM interop to run native code? Check out this thread for a discussion covering the technique: http://forum.xda-developers.com/showthread.php?t=820455
athompson said: Is there a reason you can't just use COM interop to run native code? Check out this thread for a discussion covering the technique: http://forum.xda-developers.com/showthread.php?t=820455 Click to expand... Click to collapse Hello "co-founder of native code on WP7" I'm fully aware of the possibility of native code through COM. I use it for example in the WP7 Root Tools. But I just wanted to take it a step further. Running native executables give a lot more freedom. Not being bound to the watchdog, getting higher privileges and running in the background for instance. But there's a whole lot more. So that's why I started research on it. Thanks anyway. You helped making native code possible on WP7. Ciao, Heathcliff74
The taskhost.exe is our RAM, because our app run in it, giving us full RAM access inside our "viritual ram". So that means we own all strings, int, floats etc. Then rewrite the ram to change strings in mscorlib. The checksum if an exe has been modified is only checked at startup, without checking if we modify the dll at runtime. My purpose with this is that some function's call external apps, where we rewrite the args going in to the function. Just find an exploitable function and modify it after JIT has been there one before generating the pre ram, that we modify and call yet again but with the modified ram values behind. Marshal.Copy, my friends, there. [SecurityFuckingSafeCritical] (byte[] source, IntPtr destination, int length) > Interopservices leaked dll (\windows) destination = our ram ptr to modify.
fiinix said: The taskhost.exe is our RAM, because our app run in it, giving us full RAM access inside our "viritual ram". So that means we own all strings, int, floats etc. Then rewrite the ram to change strings in mscorlib. The checksum if an exe has been modified is only checked at startup, without checking if we modify the dll at runtime. My purpose with this is that some function's call external apps, where we rewrite the args going in to the function. Just find an exploitable function and modify it after JIT has been there one before generating the pre ram, that we modify and call yet again but with the modified ram values behind. Marshal.Copy, my friends, there. [SecurityFuckingSafeCritical] (byte[] source, IntPtr destination, int length) > Interopservices leaked dll (\windows) destination = our ram ptr to modify. Click to expand... Click to collapse Hmmm. 10 Points for inventiveness But I don't think it's going to work. Even if you could find a function where the executable is passed as argument you still don't have enough privileges. Most code will have the path to the executable hardcoded instead of an argument. And you will still run under TaskHost with Least Privileges. And you need to have at least Standard Privileges or higher to launch most executables with CreateProcess() or ShellExecuteEx(). Sent from my OMNIA7 using XDA Windows Phone 7 App
Heathcliff74 said: Hmmm. 10 Points for inventiveness But I don't think it's going to work. Even if you could find a function where the executable is passed as argument you still don't have enough privileges. Most code will have the path to the executable hardcoded instead of an argument. And you will still run under TaskHost with Least Privileges. And you need to have at least Standard Privileges or higher to launch most executables with CreateProcess() or ShellExecuteEx(). Sent from my OMNIA7 using XDA Windows Phone 7 App Click to expand... Click to collapse "And you will still run under TaskHost with Least Privileges" I know, i dont need standard rights to do it. Because i call a mscorlib function that is trusted code. I think you saw my idea wrong, let me show you. [mscorlib, SecuritySafeCritical] public static void example(string str) { string mscorlibStr = "you cant change my value "; Debug.WriteLine(mscorlibStr + str); } This is where we modify "mscorlibStr" in ram and the function is still trusted code. But its doing something totally different from that it would do.
fiinix said: "And you will still run under TaskHost with Least Privileges" I know, i dont need standard rights to do it. Because i call a mscorlib function that is trusted code. I think you saw my idea wrong, let me show you. [mscorlib, SecuritySafeCritical] public static void example(string str) { string mscorlibStr = "you cant change my value "; Debug.WriteLine(mscorlibStr + str); } This is where we modify "mscorlibStr" in ram and the function is still trusted code. But its doing something totally different from that it would do. Click to expand... Click to collapse I really hate to break it for you. But the [SecuritySafeCritical] is indeed trusted code, but it will still check your privileges. All the API functions that do system modifications like that, do the security checks. Read the note under SecuritySafeCriticalAttribute here. Also read this; same problem. You are in process TaskHost.exe and it is launched in LPC (Least Privilege Chamber), so every CeImpersonateToken() to do the important stuff will fail and return an error code. I also wouldn't know how you would modify the stack-frame of a function that you call. Seems impossible to me, because at the moment you call the function, that stack-frame has not been allocated yet. Anyway, although I don't think that is going to work in any way, I absolutely don't want to discourage you, because my experience is that when you try enough, sooner or later you will find an exploit Ciao, Heathcliff74
Currently installing "Windows Embeded Compact 7", because this lousy ARMv4 compiler (from WM5-6) maybe generates wrong ARM op-codes (WP7 runs ARMv7), therefore it says "Invalid program signature" (or what error it was). Maybe ARMv7 is'nt even backwards compatibility with ARMv4. By compiling with the ARMv7 compiler from WEM7, it will probably (hope) generate a valid exe. Thats it.. edit: *Research "Armv7 is the processor instruction set used starting with the S5L8920 in the iPhone 3GS and in all subsequent devices. Processors that support Armv7 instructions are backward compatible with Armv6 instructions, but attempting to run binaries compiled for Arm7 on older, Armv6 processors will result in the error: "Bad CPU type in executable"." Source: http://theiphonewiki.com/wiki/index.php?title=Armv7 ___ "As I said in the past, the ARMv6 CTR was kept backwards compatible with > > > earlier versions of the ARM architecture (and ARM tried to keep it like > > > this as much as possible). With ARMv7, you have multiple levels of cache > > > and different types (e.g. ASID-tagged VIVT I-cache). There is no way you > > > could encode the useful information while keeping the same (and only) > > > register, hence the the need for a new register." Source: http://www.spinics.net/lists/arm-kernel/msg58813.html As i see this (^), all ARMv > 6 == no backwards ARMv6 had backwards to 4 ARMv7 >> ARMv6 compatibility, not more. _ Problem officer even running ARMv4??? >On a non ARMv4 backwards compatibility CPU. Profit!! __ [ExeX.exe] (the one that i recompiled to a state: "this has to work")(ARMv4) Decompilation: Code: ; Attributes: bp-based frame EXPORT start start var_20= -0x20 oldR4= -0x1C oldR5= -0x18 oldR6= -0x14 oldR7= -0x10 oldR11= -0xC oldSP= -8 oldLR= -4 MOV R12, SP STMFD SP!, {R4-R7,R11,R12,LR} ADD R11, SP, #0x1C SUB SP, SP, #4 MOV R4, R3 MOV R5, R2 MOV R6, R1 MOV R7, R0 . Next up, decompile a ARMv7 from a raw device. (how, someone has one)
fiinix said: Next up, decompile a ARMv7 from a raw device. (how, someone has one) Click to expand... Click to collapse I think you'll find what you're looking for here: http://forum.xda-developers.com/showthread.php?t=681659 in the dump of the IMAGEFS. What did you use to decompile it? IDA Pro, or a different thing?
athompson said: I think you'll find what you're looking for here: http://forum.xda-developers.com/showthread.php?t=681659 in the dump of the IMAGEFS. What did you use to decompile it? IDA Pro, or a different thing? Click to expand... Click to collapse IDA Pro, yes. Ill see if i can dump that "nbh" (used to nb0), and extract a fully operable exe that is not corrupted.
fiinix said: IDA Pro, yes. Ill see if i can dump that "nbh" (used to nb0), and extract a fully operable exe that is not corrupted. Click to expand... Click to collapse First use Andim's WP7 Rom Tools to extract the rommodules. Remember to always dump a folder, not a single file. Then use Denomitor's version of Recmod and follow the instructions in the post. That works most of the time.
Going forward Currently building the WP7 ARMv7 commandline, getting closer. Current cmd (not working, no need to help): Code: "C:\WINCE700\sdk\bin\i386\arm\cl.exe" /Od /D "_DEBUG" /D "_WIN32_WCE=0x700" /D "UNDER_CE" /D "ZUNE_HD" /D "WINCE" /D "DEBUG" /D "_WINDOWS" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /D "_CRT_SECURE_NO_WARNINGS" /Gm /EHsc /MTd /Gy /fp:fast /GR- /Fo"C:\Users\Steven VM\Desktop\ARMv7\Build\Debug/" /Fd"C:\Users\Steven VM\Desktop\ARMv7\Build\Debug/vc80.pdb" /W3 /c /Zi /TP /QRfpe- /QRarch7 "C:\Users\Steven VM\Desktop\ARMv7\main.cpp" /QRarch7 is the ARMv7. edit: HOORRY SHEEAT generated: > main.obj > vc80.idb > vc80.pdb , feels soo good: main.exe is there. IDA Pro says "ARM AND THUMB MODE SWITCH INSTRUCTIONS", just like others. Code: ; Input MD5 : B50E8D8395DE7CA2419464DC3CE0BC74 ; File Name : C:\Users\Steven\Desktop\burn\main.exe ; Format : Portable executable for ARMI (PE) ; Imagebase : 10000 ; Section 1. (virtual address 00001000) ; Virtual size : 00000018 ( 24.) ; Section size in file : 00000200 ( 512.) ; Offset to raw data for section: 00000400 ; Flags 60000020: Text Executable Readable ; Alignment : default ; Processor : ARM ; Target assembler: Generic assembler for ARM ; Byte sex : Little endian ; Segment type: Pure code AREA .text, CODE, READWRITE, ALIGN=4 ; ORG 0x11000 CODE32 EXPORT start start var_4= -4 SUB SP, SP, #4 MOV R3, #1 STR R3, [SP,#4+var_4] LDR R0, [SP,#4+var_4] ADD SP, SP, #4 BX LR ; End of function start Made an empty entry point as from above ^: Code: int wWinMainCRTStartup() { return 1; } PE Explorer (main.exe): Machine: THUMB Operating System Version: 7.0 Image Version: 7.0 Subsystem Version: 7.0 Subsystem: WinCE GUI
**** so CLOSE! Successful copied "main.exe" and "ExeX.exe" to "\Windows", where i have the right to launch them remotely. Method: WP7Process p = device.LaunchEXE(@"main.exe", ""); main.exe (no signing, ARMv7): System.UnauthorizedAccessException: Access is denied. WP7Process p = device.LaunchEXE(@"ExeX.exe", ""); ExeX.exe (signed with CA/ROOT custom, ARMv4): System.Runtime.InteropServices.COMException (0x800704EC): This program is blocked by group policy. For more information, contact your system administrator. There IS different things going on! Something is missing, but what edit: Signed main.exe with custom XDA ROOT certificate (ARMv7): signtool.exe sign /sha1 "[CertChomp]" "main.exe" > Now main.exe also gets "This program is blocked by group policy. For more information, contact your system administrator." Ill see if i can add it to startup list , if it boot from there. edit 2: Nope gonna hijack "fieldtestapp.exe" with my app because policy says: Risky-mode.Activate(); Backup(fieldtestapp.exe, backupPath); Copy(main.exe, > fieldtestapp.exe); "LOADERVERIFIER_ROUTE_BY_NAME" "LOADERVERIFIER_EXE_AUTHZ_INROM_ROOT" <Rule Description="Route fieldtestapp.exe" ResourceIri="$(LOADERVERIFIER_ROUTE_BY_NAME)/PRIMARY/WINDOWS/FIELDTESTAPP.EXE" SpeakerAccountId="$(SYSTEM_USER_NAME)" PriorityCategoryId="PRIORITY_LOW"> <Authorize> <Match AccountId="$(FIELDTESTAPP_EXE_SID)" AuthorizationIds="LV_ACCESS_EXECUTE" /> </Authorize> </Rule> <Rule Description="Authorize fieldtestapp.exe be loadable to $(FIELDTESTAPP_EXE_SID) and chambers" ResourceIri="$(LOADERVERIFIER_EXE_AUTHZ_INROM_ROOT)/WINDOWS/FIELDTESTAPP.EXE" SpeakerAccountId="$(SYSTEM_USER_NAME)" PriorityCategoryId="PRIORITY_STANDARD"> <Authorize> <Match AccountId="$(FIELDTESTAPP_EXE_SID)" AuthorizationIds="LV_ACCESS_EXECUTE,LV_ACCESS_LOAD" /> </Authorize> </Rule> edit 3: Seems like "fieldtestapp.exe" is ROM locked. Need to try out some other targets. edit 4: Target acquired "ProximitySensorDisable.exe" > "ProximitySensorDisableBackup.exe" Successful copy == no ROM lock. edit 5: There exists two types of talking to the LoadVerifier (the: This program is blocked by group policy.): Direct exe name OR special certificate How we do: > Direct exe (hijack exe) How we cant do (SHA1) (Nope, ain't gonna happen): > We certainly dont have Microsofts certificate so this way is a nodo, haha lol, no do way. (1: direct exe name) /LOADERVERIFIER/GLOBAL/AUTHORIZATION/PE_AUTHZ/NONE/NONE/PRIMARY/WINDOWS/CFGHOST.EXE (2: static/pre certificates) /LOADERVERIFIER/GLOBAL/CERTIFICATES/HASH/SHA1/91B318116F8897D2860733FDF757B93345373574 edit 6: Yep, loads of edits, just for you. Allowed exe's to run (sorted a-z) (direct exe) (pre cert removed): Code: ACCESSIBILITYCPL.EXE ACCOUNTSMANAGER.EXE ALARMS.EXE APPCHECKERSHIM.EXE APPPREINSTALLER.EXE AUTODATACONFIG.EXE AUTOSIM.EXE AUTOTIMEUPDATE.EXE BRIGHTNESSCPL.EXE BTUXCPL.EXE CALENDARAPP.EXE CALLSETTINGSHOST.EXE CALNOT.EXE CALUPD.EXE CAM_FW_UPDATE_UI.EXE CELLUXCPL.EXE CERTINSTALLER.EXE CFGHOST.EXE CFLAUNCHER.EXE CHDIALERHOST.EXE CIPHASE2.EXE CLIENTSHUTDOWN3.EXE CLOCKNOT.EXE CMACCEPT3.EXE COLDINIT.EXE COMMSVC.EXE COMPOSITOR.EXE CONFIGDM.EXE CONFIGXML.EXE CONMANCLIENT3.EXE CONTACTS.EXE CPROG.EXE DATETIMECPL.EXE DCVSSWITCH.EXE DEPOTCOPY.EXE DEVICEFEEDBACKCPL.EXE DEVICEREG.EXE DIAGPORTCHANGETEST.EXE DLLHOST.EXE DMSCHEDULERCALLBACK.EXE DMSRV.EXE DMSTOOLS.EXE DUACLIENT.EXE DW.EXE EDM3.EXE EMAIL.EXE EMAILSETUP.EXE ENDPOINT.EXE FCROUTERCMDTEST.EXE FIELDTESTAPP.EXE FLIGHTMODE.EXE GAMESUX.EXE IEXPLORE.EXE INITIATEDMSESSION.EXE INVALIDLICENSEUXLAUNCHER.EXE KEYBOARDCPL.EXE LASSCREDENTIALEXPIRATIONCHECK.EXE LASSRESTARTER.EXE LIVETOKEN.EXE LOCKCPL.EXE LOOPBACKTEST.EXE MEDIAGROVEL.EXE MEUX.EXE MITSMAN.EXE MMSPRPROXY.EXE MMSTRANSHOST.EXE MULTIMEDIALAUNCHER.EXE MYPHONECPL.EXE MYPHONETASKSRUNTIME.EXE NATIVEINSTALLERHOST.EXE OFFICEURL.EXE OMADMCLIENT.EXE OMADMPRC.EXE OMHUB.EXE ONBOOTSQM.EXE ONENOTEMOBILE.EXE OOBE.EXE PACMANINSTALLER.EXE PHOTOENT.EXE PHOTOENTCAPTURE.EXE PHOTOUPLOADER.EXE PPT.EXE PWORD.EXE PWRLOGCTRL.EXE PXL.EXE RAPICONFIG.EXE REGIONCPL.EXE RMACTIVATE.EXE SAPISVR.EXE SECSIMTKIT.EXE SERVICESD.EXE SERVICESSTART.EXE SETTELEPORTMODE.EXE SETTINGS3.EXE SHORTMSG.EXE SICLNT.EXE SIGNALEVENT.EXE SIREPSERVERAPPDEV.EXE SMSETTINGS.EXE SMSTRANSPORT.EXE SOUNDCPL.EXE SPEECHCPL.EXE SPMC.EXE SQMEVENT.EXE SSUPDATE.EXE TASKHOST.EXE TELSHELL.EXE TESTSHOW.EXE THEMECPL.EXE TOGGLEBROWSERHIBERNATION.EXE TOGGLEDOG.EXE UDEVICE.EXE UIF.EXE UNIFIEDPAIR.EXE USBMGR.EXE WEBSEARCH.EXE WIFIUXSPLASH.EXE WLANEXT.EXE WLIDSETUP.EXE WWANDATAMGR.EXE XDRMREMOTESERV.EXE ZIPVIEW.EXE ZMFTASKLAUNCH.EXE How code (yes i know its super un-optimized, fast put together): Code: var doc = XDocument.Load(File.OpenRead("SamsungOmnia7_BasePolicy_webserver.xml")); var ea = doc.Elements().ToArray()[0].Elements() .Where(x => x.Name.LocalName == "Rule") .Where(x => x.Attributes("ResourceIri").Count() > 0) .Where(x => { var r = x.Attribute("ResourceIri").Value; return r.Contains("LOADERVERIFIER") && r.ToLower().Contains(".exe") && !r.Contains("CERTIFICATES"); }) .Select(x => { var v = x.Attribute("ResourceIri").Value; var l = v.LastIndexOf('/'); return v.Substring(l + 1); }) .Distinct() .OrderBy(x => x) .ToArray(); edit 7: yeah, lol i say too. Unprotected exe (FCRouterCmdTest.exe) > c:\Project Work\SGH-i707(Cetus)\FCRouterCmdTest\Windows Mobile 6 Professional SDK (ARMV4I)\Release\FCRouterCmdTest.pdb mfw samsung use "Windows Mobile 6 Professional SDK (ARMV4I)"
Wow, this truly was a big step today Done hacking today. "After a day, there comes another day"
@fiinix, You did a lot of testing. Good job, man. A few comments: 0x800704ec "blocked by group policy" is THE error of the new WP7 security model. It is basically telling you to go f*ck yourself. Everything you do without enough privileges or capabilities results in this error. The two ways of policies, exe-path and cert-hash, is result of difference between rom-modules and executables that are signed and added as a file. Rom-modules are not even normal files. You can't open and read them. They are executable sections that are mapped in rom-address-space. You can only call loadlibrary() and createprocess() on them. Since they are only executable sections, they don't have a signature, like a normal executable file would have. Therefore they are referred to with an exe-path. You may safely assume that every path to an executable in the policy files is referring to a rom-module and can't be overwritten in any way (except by cooking your own rom - who is going to unlock our bootloaders?!?) Other than that, there are a few signing certs that Microsoft has. Signing the different executables with different privileges and accordingly a different cert. Their hashes are in the policies. Using ARMv7 isn't going to add much I'm afraid. Although it may make a difference in the exe-header. But you've seen tools that were really old, remember And they were signed to have TCB access. And they were compiled for ARMv4. So it should not make much difference. I did some testing with certificates myself yesterday. Up until Zune totally went bezerk on it. I don't know what happened, but after removing my own cooked certs it all seems normal again. Zune started using 100% cpu on verifying certs and dropping my connection all the time. Help! So I haven't made much progress. I will try again later. Hope it will go better. And I will try to resign an existing executable, as Flow WP7 suggested.
According to policy on my omnia (webserver dumped) there seems to exist two typed of HDD, one ROM hard coded and one that points to internal sd card. It seems that all exe and dll on the sd are not "protected" and therefore can be hijacked. Seems like ARMv4 will be enough, but to be on the safe side i compile with both, to have more chance getting it work. Zune, hmm, did not seem to like you, maybe Microsoft DDOS'ed you lol "Sent from my fingers on my phone", don't expect way too long text
XxXPachaXxX said: Excuse my ignorance...I'm a noob...This hack may also work on LG devices? Click to expand... Click to collapse At the moment fiinix and I are both working on Samsungs and we use a couple of Samsung-specific exploit to get deeper in the system and getting a better understanding of the system. The ultimate goal is to find exploits that will work for all devices. But we're not at that stage yet. Hacking is research, a lot of trying and being lucky sometimes. Just bear with us Ciao, Heathcliff74
MFC support for native WP7 Dll (and Exe too)
Hello friends. I am a lazy person with a lack of time. So, when I wanted to Phone Commander to add support for exporting registry keys to a file, I found an older, freely usable code (first I tried RegSaveKey coredll function, but I coud not elevate calling Process privilegies). PCMD will be the first "ondevice" WP7 application that allows you to export this (thanks Ultrashot we can also do it from a PC by Remote Tools). Unfortunately, the obtained code was using an MFC classes (CFile etc). Probably would not be a problem to rewrite it for another entry in the file, but I do not want change 3rd code. And MFC can be useful in the future too. There were basically two options: 1. Use dynamic linking, because statically linking MFC to ATL is not allowed (conflicts of application instances). But then I had to get the correct library and try if they will run on WP7. In the future, I'll try. 2. Take all the MFC source code (included in WM DTK) and rewrite them to work statically in WP7, with prepared out CWinApp etc. It was a nasty job, but for some classes (especially CFile) is complete and functional to use. Next week there will publish libraries, source code and tutorial to use MFC classes in ATL native WP7 projects. EDIT: See 2nd post, this is probably better way then first one. Meanwhile small code sample to export registers (ExportRegKey is 3rd function using CFile parameter): Code: BOOL ExportRegKey(HKEY hroot, const CString &root, const CString &key, CFile &out); STDMETHODIMP CRegistryX::RegExportKeySimple(DWORD dwKey, LPCWSTR szSubKey, LPCWSTR szFileName) { TRACE(L"RegExportKeySimple(DWORD dwKey = %X, LPCWSTR szSubKey = %s, LPCWSTR szFileName = %s)", dwKey, szSubKey, szFileName); try { HKEY hKey = (HKEY) dwKey; LONG lRes = ERROR_SUCCESS; CString root = L""; switch (dwKey) { case HKEY_LOCAL_MACHINE: { root = _T("HKEY_LOCAL_MACHINE"); } break; case HKEY_CURRENT_USER: { root = _T("HKEY_CURRENT_USER"); } break; case HKEY_CLASSES_ROOT: { root = _T("HKEY_CLASSES_ROOT"); } break; case HKEY_USERS: { root = _T("HKEY_USERS"); } break; /* case HKEY_CURRENT_CONFIG: { root = _T("HKEY_CURRENT_CONFIG"); } break; */ default: { root = _T("HKEY_UNKNOWN"); } break; root = _T(""); } CString key = szSubKey; CFile out; out.Open(szFileName, CFile::modeWrite | CFile::modeCreate ); lRes = ExportRegKey(hKey, root, key, out); out.Close(); TRACE(L"RegExportKeySimple ExportRegKey lRes = %d)", lRes); if (lRes == ERROR_SUCCESS) { return S_OK; } else { return ReturnError(L"RegSetDwordSimple RegSetValueEx", 0x80070000 | lRes); } } catch (...) { return ReturnError(L"RegGetDwordSimple", GetLastError()); } } This is also Native TRACE example to see native messages in VP2010 managed Output window.
Full MFC using I tried FULL MFC from VS2008 CE SDK using and this is possible. 1. Exe files - success with statical or dynamical MFC linking. Drawable components may have problems only. 2. Static linking to dll: If we can want use native dll with statically linked MFC to managed VS2010 dll or application, there are two ways: - To change our usual COM interface to MFC standard. It may be possible, but I did not try it. - To make ATL interstitial ATL dll with COM interface, which can call exported functions from MFC dll. 3. Dynamical MFC linking to ATL (COM) dll. I mean thi is the best way now. For dynamical linking MFC dlls must be copied to device - to appplication directory or ideally to \Windows directory. Mostly: \\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\dll\ARMV4I\msvcr90.dll \\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\dll\ARMV4I\atl90.dll \\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\dll\ARMV4I\msvcr90d.dll \\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\dll\ARMV4I\MFC90UD.dll
[Q] [Win 8 JS dev] Uglified, Concated, UTF-8 + BOM encoded JS files for a Windows App
Hey everybody, I'm currently porting my company's webapp to Windows 8. As being written 99% in JavaScript, I just started a new Windows Store JS App project in Visual Studio and moved all of my code in. After some fixes, the app is running fine now. For deployment, I'm using grunt with grunt-contrib-uglify to concat and minify my JS files. They are saved with UTF-8 encoding und the windows app runs fine using those minified scripts. But the WACK certification fails because those files don't contain the BOM (Byte Order Marker). I now added a step to my grunt setup, which adds the BOM to those JS files by reading the filecontent as buffer and re-save it with \uFFEF (the BOM) at the beginning. That leads to correctly encoded files, passing the certification. The funny part is: When I run the app as Debug or Release right from VS (with debugger), the app is working fine. If I bundle the app for store submit and start it with the debugger attached, it's also running fine. But if I start the app without the debugger, the scripts are not being loaded. Do you have a tip for me?
ice8lue said: Hey everybody, I'm currently porting my company's webapp to Windows 8. As being written 99% in JavaScript, I just started a new Windows Store JS App project in Visual Studio and moved all of my code in. After some fixes, the app is running fine now. For deployment, I'm using grunt with grunt-contrib-uglify to concat and minify my JS files. They are saved with UTF-8 encoding und the windows app runs fine using those minified scripts. But the WACK certification fails because those files don't contain the BOM (Byte Order Marker). I now added a step to my grunt setup, which adds the BOM to those JS files by reading the filecontent as buffer and re-save it with \uFFEF (the BOM) at the beginning. That leads to correctly encoded files, passing the certification. The funny part is: When I run the app as Debug or Release right from VS (with debugger), the app is working fine. If I bundle the app for store submit and start it with the debugger attached, it's also running fine. But if I start the app without the debugger, the scripts are not being loaded. Do you have a tip for me? Click to expand... Click to collapse Build project as release and THEN create the app package check for breakpoints. Also does it run uncompressed? Can you provide the code or the package?
Toxickill said: Build project as release and THEN create the app package check for breakpoints. Also does it run uncompressed? Click to expand... Click to collapse Doesn't the Package process do the build on it's own? It is working when I load all the single JS files (that grunt is merging into one) and add the BOM to all of them. If I just concat those files without compression/minification it's working, together with the added BOM it's not... There are no errors (I added an error listener), they simply don't get loaded. --- I tried your solution, but it ends the same. The interesting part is, if I use publish rather than build, it gets installed und IS running without a debugger. After packaging, it's not...
The marker you are adding is for the UTF format MS uses... However you are encoding to UTF-8...
Toxickill said: The marker you are adding is for the UTF format MS uses... However you are encoding to UTF-8... Click to expand... Click to collapse This is, basically, what I'm doing to those JS files after concat/minify: Code: var buf = grunt.file.read(fileName, { encoding: null }); var missingBOM = (buf[0] !== 0xEF && buf[1] !== 0xBE && buf[2] !== 0xBB); if (missingBOM) { grunt.file.write(fileName, '\ufeff' + buf, { encoding: 'utf-8' }); }
See here http://msdn.microsoft.com/en-us/library/windows/desktop/dd374101(v=vs.85).aspx Im mobile so im sorry for link.. But you are using the wrong marker for the encoding see here for a table.
Toxickill said: See here http://msdn.microsoft.com/en-us/library/windows/desktop/dd374101(v=vs.85).aspx Im mobile so im sorry for link.. But you are using the wrong marker for the encoding see here for a table. Click to expand... Click to collapse Hmm... but it's the same marker as VS adds when I'm manually saving them with UTF8-signed encoding. EF BB BF adds cryptical symbols but no BOM...
Can you create me a blank program compress it and send it to me so i can see if it does not work and i ca debug it as well.
Toxickill said: Can you create me a blank program compress it and send it to me so i can see if it does not work and i ca debug it as well. Click to expand... Click to collapse I'm sorry, I can't give out the code... This is essentially what it does: HTML: HTML: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <link rel="stylesheet" href="%dest%css/%lib-css%" /> <link rel="stylesheet" href="%dest%css/%app-css%" /> </head> <body> <div id="wrapper"></div> <script> var script = document.createElement('script'); script.async = false; script.type="text/javascript"; script.charset = "utf-8"; script.onload = function() { ... }; script.src = '%dest%js/%libs-js%'; document.head.appendChild(script); var script = document.createElement('script'); script.async = false; script.type="text/javascript"; script.charset = "utf-8"; script.onload = function() { ... (initialize app,...) }; script.src = '%dest%js/%app-js%'; document.head.appendChild(script); </script> </body> </html> What my grunt script does is minify all JS files into app.js and libs.js, the CSS into app.css and libs.css and replace the %var% variables with the corresponding files/folders. My script now writes the correct BOM to the file and also removes possible BOMs in the file left from the source files during merging: Code: var buf = grunt.file.read(dist + fileName, { encoding: null }); var BOM = new Buffer([0xEF,0xBB,0xBF]); // remove multi BOMs from Buffer var bufString = buf.toString('utf-8'); bufString = bufString.replace(BOM.toString('utf-8'), null); buf = new Buffer(bufString, 'utf-8'); // add new UTF-8 BOM to the beginning of the file buffer var bomFile = Buffer.concat([BOM,buf]); grunt.file.write(dist + fileName, bomFile, { encoding: 'utf-8' }); I double-checked via a HEX editor that the resulting files 1. contain the correct BOM at the beginning and 2. don't contain any additional BOMs (neither the UTF8 nor the THF16 one). Still, no luck launching the app without a debugger, my JS is not loaded/parsed...
No ideas guys?
ice8lue said: No ideas guys? Click to expand... Click to collapse Sorry, ive been working the 8.1 jailbeak, try keeping your scrips in the same directory and referencing them with the file name only... This could be the problem.... Code: %dest%js/%libs-js% Im not familiar with JS windows store apps.
Toxickill said: Sorry, ive been working the 8.1 jailbeak, try keeping your scrips in the same directory and referencing them with the file name only... This could be the problem.... Code: %dest%js/%libs-js% Im not familiar with JS windows store apps. Click to expand... Click to collapse No problem in general, but we're eager to release the app. The code path is correct, these are variables, being overwritten during deployment.
Update: It looks like it's really the combination of merged JS files by uglifyJS and the BOM that causes this problem. I now disabled the merge, loading all of the files seperately (but in a minified form) with the BOM added. The app now succeeds certification AND is running without a debugger. This is ugly, but it's working - finally.
Development Guide for Integrating Share Kit on Huawei Phones
View attachment 5209541 What is Share Engine As a cross-device file transfer solution, Huawei Share uses Bluetooth to discover nearby devices and authenticate connections, then sets up peer-to-peer Wi-Fi channels, so as to allow file transfers between phones, PCs, and other devices. It delivers stable file transfer speeds that can exceed 80 Mbps if the third-party device and environment allow. Developers can use Huawei Share features using Share Engine. The Huawei Share capabilities are sealed deep in the package, then presented in the form of a simplified engine for developers to integrate with apps and smart devices. By integrating these capabilities, PCs, printers, cameras, and other devices can easily share files with each other. Three SDK development packages are offered to allow quick integration for Android, Linux, and Windows based apps and devices. Working Principles Huawei Share uses Bluetooth to discover nearby devices and authenticate connections, then sets up peer-to-peer Wi-Fi channels, so as to allow file transfers between phones, PCs, and other devices. View attachment 5209543 To ensure user experience, Huawei Share uses reliable core technologies in each phase of file transfer. Devices are detected using in-house bidirectional device discovery technology, without sacrificing the battery or security Connection authentication using in-house developed password authenticated key exchange (PAKE) technology File transfer using high-speed point-to-point transmission technologies, including Huawei-developed channel capability negotiation and actual channel adjustment For more information you can follow this link. Let’s get into codding. Requirements For development, we need Android Studio V3.0.1 or later. EMUI 10.0 or later and API level 26 or later needed for Huawei phone. Development 1 - First we need to add this permission to AndroidManifest.xml. So that we can ask user for our app to access files. XML: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 2 - After let’s shape activity_main.xml as bellow. Thus we have one EditText for getting input and three Button in UI for using Share Engine’s features. XML: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" tools:context=".MainActivity"> <EditText android:id="@+id/inputEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:hint="@string/hint" tools:ignore="Autofill,TextFields" /> <Button android:id="@+id/sendTextButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:onClick="sendText" android:text="@string/btn1" android:textAllCaps="false" /> <Button android:id="@+id/sendFileButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:onClick="sendFile" android:text="@string/btn2" android:textAllCaps="false" /> <Button android:id="@+id/sendFilesButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:onClick="sendMultipleFiles" android:text="@string/btn3" android:textAllCaps="false" /> </LinearLayout> 3 - By adding the following to strings.xml, we create button and alert texts. XML: <string name="btn1">Send text</string> <string name="btn2">Send single file</string> <string name="btn3">Send multiple files</string> <string name="hint">Write something to send</string> <string name="errorToast">Please write something before sending!</string> 4 - Later, let’s shape the MainActivity.java class. First of all, to provide access to files on the phone, we need to request permission from the user using the onResume method. Java: @Override protected void onResume() { super.onResume(); checkPermission(); } private void checkPermission() { if (checkSelfPermission(READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { String[] permissions = {READ_EXTERNAL_STORAGE}; requestPermissions(permissions, 0); } } 5 - Let’s initialize these parameters for later uses and call this function in onCreate method. Java: EditText input; PackageManager manager; private void initApp(){ input = findViewById(R.id.inputEditText); manager = getApplicationContext().getPackageManager(); } 6 - We’re going to create Intent with the same structure over and over again, so let’s simply create a function and get rid of the repeated codes. Java: private Intent createNewIntent(String action){ Intent intent = new Intent(action); intent.setType("*"); intent.setPackage("com.huawei.android.instantshare"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return intent; } We don’t need an SDK to transfer files between Huawei phones using the Share Engine, instead we can easily transfer files by naming the package “com.huawei.android.instantshare” to Intent as you see above. 7 - Let’s create the onClick method of sendTextButton to send text with Share Engine. Java: public void sendText(View v) { String myInput = input.getText().toString(); if (myInput.equals("")){ Toast.makeText(getApplicationContext(), R.string.errorToast, Toast.LENGTH_SHORT).show(); return; } Intent intent = CreateNewIntent(Intent.ACTION_SEND); List<ResolveInfo> info = manager.queryIntentActivities(intent, 0); if (info.size() == 0) { Log.d("Share", "share via intent not supported"); } else { intent.putExtra(Intent.EXTRA_TEXT, myInput); getApplicationContext().startActivity(intent); } } 8 - Let’s edit the onActivityResult method to get the file/s we choose from the file manager to send it with the Share Engine. Java: @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && data != null) { ArrayList<Uri> uris = new ArrayList<>(); Uri uri; if (data.getClipData() != null) { // Multiple files picked for (int i = 0; i < data.getClipData().getItemCount(); i++) { uri = data.getClipData().getItemAt(i).getUri(); uris.add(uri); } } else { // Single file picked uri = data.getData(); uris.add(uri); } handleSendFile(uris); } } With handleSendFile method we can perform single or multiple file sending. Java: private void handleSendFile(ArrayList<Uri> uris) { if (uris.isEmpty()) { return; } Intent intent; if (uris.size() == 1) { // Sharing a file intent = CreateNewIntent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, uris.get(0)); } else { // Sharing multiple files intent = CreateNewIntent(Intent.ACTION_SEND_MULTIPLE); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); } intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); List<ResolveInfo> info = manager.queryIntentActivities(intent, 0); if (info.size() == 0) { Log.d("Share", "share via intent not supported"); } else { getApplicationContext().startActivity(intent); } } 9 - Finally, let’s edit the onClick methods of file sending buttons. Java: public void sendFile(View v) { Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.setType("*/*"); startActivityForResult(i, 10); } public void sendMultipleFiles(View v) { Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); i.setType("*/*"); startActivityForResult(i, 10); } We’ve prepared all the structures we need to create, so let’s see the output. Text Sharing: View attachment 5209563 Single File Sharing: View attachment 5209565 Multiple File Sharing: View attachment 5209567 With this guide, you can easily understand and integrate Share Engine to transfer file/s and text with your app. For more information: https://developer.huawei.com/consumer/en/share-kit/
I'm not a coder and to old to learn. It is and will remain all Greek to me.
namitutonka said: I'm not a coder and to old to learn. It is and will remain all Greek to me. Click to expand... Click to collapse If you read it and follow as per instruction, its pretty simple
Dope
Wow! So nice i never think i wanna know about this thing...
Very nice and useful.
[Dexplore] Obfuscated code finder | Develop portable Xposed module for obfuscated apps
Library: Dexplore [Develop Portable Xposed Module] - [For Any Obfuscated Apps] About: Dexplore is a dex analyzing library for finding obfuscated classes and methods at runtime. There is also a command line tool for static analysis and app de-compilation. Highlight: Now you can develop portable Xposed module for any obfuscated apps (eg: snapchat, youtube, whatsapp, facebook etc). You don't have to worry about updating the module every time they release new versions, Dexplore will take care of obfuscated classes based on your provided query. Example: Disable 'msg seen' in messenger A more detailed explanation and examples can be found at: Github Wiki The library is available at maven central repository: Dexplore Java: repositories { mavenCentral() } dependencies { implementation 'io.github.neonorbit:dexplore:1.4.5' } Command Line tool: Download Java: java -jar Dexplore-1.4.5.jar --help Changelogs: Release v1.4.5: - [LIB] Add support for in-memory dex - [LIB] Add various helper methods - [LIB] Fix bugs in annotation filter - [CLI] Update decompiler library - [CLI] New option: advanced search query - [LIB+CLI] New condition: set package names - [LIB+CLI] New condition: set number literals - [LIB+CLI] New condition: set source filenames - [LIB+CLI] New condition: set class simple names Release v1.4.4: - [LIB] Fix class loading issues - [LIB] Fix de-serialization failure - [LIB] Add constructor helper methods Release v1.4.3: - [LIB] Fix de-serialization failure Release v1.4.2: - [LIB] Minor improvements - [CLI] Improvement: rewrite from scratch - [CLI] New command: search [redesigned] - [CLI] New command: decode [decompiler] Release v1.4.0: - [LIB] Make API thread-safe - [LIB] Add support for batch operation - [LIB] Add support for parallel execution - [LIB] Add Filter conditions for annotaion - [CLI] Fix @file expansion in arguments Release v1.3.0: - [LIB] Several enhancements - [CLI] New option: specify classes (-c) - [CLI] New option: generate source files (-s) - [CLI] Improvement: show results in real-time Release v1.2.0: - [LIB] Add documentation - [LIB] Improve search accuracy - [LIB] Fix several known bugs - [LIB] Improve performance Release v1.0.1: - [LIB] Support multiple preferred dexes - [CLI] New option: print full details (-d) Click to expand... Click to collapse Source Code: Github API Overview: Javadoc Implementation: Github Wiki If you need any help with implementation, comment here. For bugs and feature request, create an issue on the github repo. Used by: ChatHeadEnabler
[reserved]
Xposed Implementation Sample: - Find all the necessary classes/methods using Dexplore at runtime and save them to Preferences. - Do your necessary hooking with Xposed. - Next time simply load them from Preferences. [Implement dexplore queries to re-fetch automatically whenever version code changes]
Example: Block 'msg seen status' in facebook messenger (check Github Wiki for documentation): Java: public class XposedModule implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { if (!lpparam.packageName.equals("com.facebook.orca")) return; // Create a class filter to find our target class ClassFilter classFilter = new ClassFilter.Builder() .setReferenceTypes(ReferenceTypes.builder().addString().build()) .setReferenceFilter(pool -> pool.contains("Montage thread ") ).build(); // Create a method filter to find our target method from the class MethodFilter methodFilter = new MethodFilter.Builder() .setReferenceTypes(ReferenceTypes.builder().addString().build()) .setReferenceFilter(pool -> pool.contains("has_seen") ).setParamSize(3) .setModifiers(Modifier.PUBLIC) .build(); // Load the base apk into Dexplore Dexplore dexplore = DexFactory.load(lpparam.appInfo.sourceDir); // Search method MethodData result = dexplore.findMethod(DexFilter.MATCH_ALL, classFilter, methodFilter); // Xposed hook: this will block Seen Status from being sent XposedBridge.hookMethod(result.loadMethod(lpparam.classLoader), XC_MethodReplacement.returnConstant(null))); }
Hello, After reading github wiki, I could successfully track class name changes dynamically. But when I read back the result from preference and try to deserialize by library method, it throws an IllegalArgumerntException.
ranej700 said: Hello, After reading github wiki, I could successfully track class name changes dynamically. But when I read back the result from preference and try to deserialize by library method, it throws an IllegalArgumerntException. Click to expand... Click to collapse How exactly did you try to de-serialize it? Could you provide the class name that you are trying to de-serialize?
NeonOrbit said: How exactly did you try to de-serialize it? Could you provide the class name that you are trying to de-serialize? Click to expand... Click to collapse I followed this Xposed Sample . Deserialized with: Java: ClassData.deserialize(saved_result) Class name was 3mt I think.
ranej700 said: Class name was 3mt I think. Click to expand... Click to collapse Got it, I'll release a new version soon.
Update: v1.4.3 Changelog: - Fix de-serialization failure
NeonOrbit said: Update: v1.4.3 Changelog: - Fix de-serialization failure Click to expand... Click to collapse That was quick, thanks. One more request, I managed to find classes with simple search, but there are some classes that doesn't have anything specific to search with. I read advanced search section, but it's confusing for me. Can I message you personally? I need help with advanced search.
ranej700 said: Can I message you personally? I need help with advanced search. Click to expand... Click to collapse Sure, anytime.
Update: v1.4.4 Changelog: - Fix class loading issues - Fix de-serialization failure - Add constructor helper methods
This library will be able to load dex files if they are extracted from apk and placed in a separate folder in /data/data/com.example.apk/files?
Blue cat said: This library will be able to load dex files if they are extracted from apk and placed in a separate folder in /data/data/com.example.apk/files? Click to expand... Click to collapse It supports apk, dex, odex, oat, zip files. If your app can access the file, so should the library. Doesn't matter where it's placed.
Is it possible to search using string id? 0x7F1201EA or 2131886570
Blue cat said: Is it possible to search using string id? 0x7F1201EA or 2131886570 Click to expand... Click to collapse It would be useless, since resource Ids are not static.
NeonOrbit said: Example: Block 'msg seen status' in facebook messenger (check Github Wiki for documentation): Java: public class XposedModule implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { if (!lpparam.packageName.equals("com.facebook.orca")) return; // Create a class filter to find our target class ClassFilter classFilter = new ClassFilter.Builder() .setReferenceTypes(ReferenceTypes.builder().addString().build()) .setReferenceFilter(pool -> pool.contains("Montage thread ") ).build(); // Create a method filter to find our target method from the class MethodFilter methodFilter = new MethodFilter.Builder() .setReferenceTypes(ReferenceTypes.builder().addString().build()) .setReferenceFilter(pool -> pool.contains("has_seen") ).setParamSize(3) .setModifiers(Modifier.PUBLIC) .build(); // Load the base apk into Dexplore Dexplore dexplore = DexFactory.load(lpparam.appInfo.sourceDir); // Search method MethodData result = dexplore.findMethod(DexFilter.MATCH_ALL, classFilter, methodFilter); // Xposed hook: this will block Seen Status from being sent XposedBridge.hookMethod(result.loadMethod(lpparam.classLoader), XC_MethodReplacement.returnConstant(null))); } Click to expand... Click to collapse I've been looking for a module to do exactly this, do you implement this into anything or is it just a code example currently? I don't know enough about module development to "make it work" myself. I thought about trying to add the code into Weiju2 but I think that is only Lua coding for now. Which of course I don't know
Galaxy-Geek#1 said: I've been looking for a module to do exactly this, do you implement this into anything or is it just a code example currently? I don't know enough about module development to "make it work" myself. I thought about trying to add the code into Weiju2 but I think that is only Lua coding for now. Which of course I don't know Click to expand... Click to collapse It's just a code example, it works partially. To implement it fully, someone will have to analyze the source code properly.
Absolute legend! Do you mind adding support for caching ? For example some class that takes Context and app version as an argument and automatically caches the method for you, or it determines whether it should be searched again when the version changes. I'm back with Messenger Pro development by the way !
Mino260806 said: Do you mind adding support for caching ? For example some class that takes Context and app version as an argument and automatically caches the method for you, or it determines whether it should be searched again when the version changes. Click to expand... Click to collapse I'm not sure whether it's a good idea for a library to accept Context as argument and perform low level operations like writting to Preferences. However, it has 'serialize()' and 'deserialize()' methods, you can easily write a helper method to save result + app version in Preferences. Take a look at this Xposed Samples. Mino260806 said: I'm back with Messenger Pro development by the way ! Click to expand... Click to collapse Good luck :.)