Read this for emote pack

Posts 1–15 of 18 · Page 1 of 2
Read this for emote pack
Due to my lack of time i have a code so someone can help dave i have to help my parents so here
Code:
//Messenger Content Installer Type Library
//Version: 1.0
MessengerContentInstallerLibrary;
GUID = {C1637F37-3FC8-4B37-B3B2-6CC5E202390D};


Dispatch DMessengerContentEvents;
GUID = {51A01E38-7505-401B-ABC9-F460E1499728};
  function OnContentInstalled(lhrResult: I4); stdcall;

//Single Click Download Interface
Dispatch IMessengerContent;
GUID = {83B2A407-22B9-4842-97C6-DE30EC6DAC3E};
  function QueryInterface(riid: ^GUID; out ppvObj: ^^VOID); stdcall;
  function AddRef: UI4; stdcall;
  function Release: UI4; stdcall;
  function GetTypeInfoCount(out pctinfo: ^UINT); stdcall;
  function GetTypeInfo(itinfo: UINT; lcid: UI4; out pptinfo: ^^VOID); stdcall;
  function GetIDsOfNames(riid: ^GUID; rgszNames: ^^I1; cNames: UINT; lcid: UI4; out rgdispid: ^I4); stdcall;
  function Invoke(dispidMember: I4; riid: ^GUID; lcid: UI4; wFlags: UI2; pdispparams: ^DISPPARAMS; out pvarResult: ^Variant; out pexcepinfo: ^EXCEPINFO; out puArgErr: ^UINT); stdcall;
  //Download content to the client from a CAB file.
  function InstallContent(bstrURL: BSTR); stdcall;
  //Download content to the client from a Merchant CAB file.
  function InstallIndirectContent(bstrURL: BSTR); stdcall;

//Single Click Download Interface v2
Dispatch IMessengerContent2;
GUID = {647C4DDA-B572-4EEF-871A-7ED254E680F7};
  function QueryInterface(riid: ^GUID; out ppvObj: ^^VOID); stdcall;
  function AddRef: UI4; stdcall;
  function Release: UI4; stdcall;
  function GetTypeInfoCount(out pctinfo: ^UINT); stdcall;
  function GetTypeInfo(itinfo: UINT; lcid: UI4; out pptinfo: ^^VOID); stdcall;
  function GetIDsOfNames(riid: ^GUID; rgszNames: ^^I1; cNames: UINT; lcid: UI4; out rgdispid: ^I4); stdcall;
  function Invoke(dispidMember: I4; riid: ^GUID; lcid: UI4; wFlags: UI2; pdispparams: ^DISPPARAMS; out pvarResult: ^Variant; out pexcepinfo: ^EXCEPINFO; out puArgErr: ^UINT); stdcall;
  //Download content to the client from a CAB file.
  function InstallContent(bstrURL: BSTR); stdcall;
  //Download content to the client from a Merchant CAB file.
  function InstallIndirectContent(bstrURL: BSTR); stdcall;
  //Messenger version
  property-get Version: BSTR; stdcall;

//Single Click Download Interface v3
Dispatch IMessengerContent3;
GUID = {DE72ACCE-9D1D-4484-8A5E-5C5B517153CC};
  function QueryInterface(riid: ^GUID; out ppvObj: ^^VOID); stdcall;
  function AddRef: UI4; stdcall;
  function Release: UI4; stdcall;
  function GetTypeInfoCount(out pctinfo: ^UINT); stdcall;
  function GetTypeInfo(itinfo: UINT; lcid: UI4; out pptinfo: ^^VOID); stdcall;
  function GetIDsOfNames(riid: ^GUID; rgszNames: ^^I1; cNames: UINT; lcid: UI4; out rgdispid: ^I4); stdcall;
  function Invoke(dispidMember: I4; riid: ^GUID; lcid: UI4; wFlags: UI2; pdispparams: ^DISPPARAMS; out pvarResult: ^Variant; out pexcepinfo: ^EXCEPINFO; out puArgErr: ^UINT); stdcall;
  //Download content to the client from a CAB file.
  function InstallContent(bstrURL: BSTR); stdcall;
  //Download content to the client from a Merchant CAB file.
  function InstallIndirectContent(bstrURL: BSTR); stdcall;
  //Messenger version
  property-get Version: BSTR; stdcall;
  //Install content to the client from XML data.
  function InstallMobileContent(bstrXML: BSTR); stdcall;

//Messenger Content Installer Object
CoClass MessengerContentInstaller;
GUID = {F06608C7-1874-4EEA-B3B2-DF99EBB144B8};
Hmmm... I have no idea what that is, what I do know is they seem to be using some kind of custom wrapper, this is why Win API confuses the hell out of me, along with MFC there are hundreds of others custom wrappers. This one is called UXCore.

Basically I'm trying to find the creation of the dialogbox. A found the point where its created, by searching for "Add a Custom Emoticon" in UNIC, which is the title of the Dialogbox, I need more practice in WinAPI to be honest, because I don't really know how to create a dialogbox myself, but I know the code is somewhere around here, I just need to find the right path to see the function that adds the emoticon's path. Does anyone know which API listboxes use. if I could break on that, I would be a lot closer.
Quote Originally Posted by why06 View Post
Hmmm... I have no idea what that is, what I do know is they seem to be using some kind of custom wrapper, this is why Win API confuses the hell out of me, along with MFC there are hundreds of others custom wrappers. This one is called UXCore.
Why: the first post is a typelibrary description for the Messenger Content Installer Type Library as discussed in several places including here: How to make an emoticon pack? - Printable Version

UXCore is just a DLL that holds some core functionality for live messenger - nothing special, however probably not the route to go about it..

Just Make a Cab with the images & XML manifest describing it, write a tiny HTTP Server since the installcontent/installindirectcontent functions only seem to deal with URLs that serves up the cab to your app which holds and instance of the MessengerContentInstaller
Quote Originally Posted by B1ackAnge1 View Post
Why: the first post is a typelibrary description for the Messenger Content Installer Type Library as discussed in several places including here: How to make an emoticon pack? - Printable Version

UXCore is just a DLL that holds some core functionality for live messenger - nothing special, however probably not the route to go about it..

Just Make a Cab with the images & XML manifest describing it, write a tiny HTTP Server since the installcontent/installindirectcontent functions only seem to deal with URLs that serves up the cab to your app which holds and instance of the MessengerContentInstaller
Lol. I guess you were right about the whole needing to know XML thing.

And wow I heard of a double post, even an quadruple posts, but never a Decuple (had to look up the word) post, lol.

Anyway, this is wierd, the functions look like C#, but Idk, wth language is this in? It's got the .NET Data types, but meh, idk how I would use this?
Quote Originally Posted by SubCub View Post
@why06 Google
Duh, now I'm just trying to figure out how to bp on them in Olly, but Olly is not being my friend. It's all like "those names do not exist". So now I have to figure out how to make Olly work. It's annoying because everytime I get involved in something like this, I have to end up googling about a million things.
Quote Originally Posted by why06 View Post


Duh, now I'm just trying to figure out how to bp on them in Olly, but Olly is not being my friend. It's all like "those names do not exist". So now I have to figure out how to make Olly work. It's annoying because everytime I get involved in something like this, I have to end up googling about a million things.
When in Doubt, Trust in IDA...
@whit yes fuck yea IDA.
Just so you know, though it is possible with WinAPI, there is a much better way of doing it using encrypting the image stream. I've found out how to do it. The image is added dynamically with custom shortcut key. But there's just 1 problem. The image appears transparent. Just gotta figure out how to fix that !!

I'll post the solution once I'm done.
it's COM / MIDL etc - To Use it you just add a reference to the type library and off you go (so you can do this in C++ or C# or VB (plain or .NET) relatively easy. You really wouldn't use what he posted as-is. You just find the right tlb to add to your project. (It's like doing an 'add reference' in C# and then looking under the 'COM' tab - you'll see the microsoft content installer there somewhere in the list) . Working with COM & ATL etc is another thing you may want to look into Why

Here's the basic idea in pseudo code someone posted elsewhere (so not by me );

Code:
//This is not real code, it's for understanding only.
void DoInstallContent(char * szPathToCabToInstall)
{
    IMessengerContentPtr pMsgrContent;
    pMsgrContent.CreateInstance(); // How this works depends on your language.  For C or C++, you would use CoCreateInstance or the InterfacePtr wrappers

    // Verify object was created successfully. (not shown)

    UINT nRandomPortNumber = GenerateRandomUnusedPortNumber();

    MiniHttpServer server(nRandomPortNumber, szPathToCabToInstall);

    HRESULT hr = pMsgrContent->InstallContent("http://localhost:"+nRandomPortNumber+"/AnyNameWillDo.cab");

    // Ensure the function succeeded, if not display some sort of error message. (not shown)
}

void MiniHttpServer::OnIncommingConnection()
{
    Socket sock;
    Accept(sock);  // Accept the incomming connection

    if (FileDoesNotExist(szPathToCabToInstall))
    {
        sock.Send("HTTP/1.1 404 NOT FOUND\r\n");
        sock.Close();
        // In Theory, this code should never be run because you should have given it a valid file name.
    }

    String szDataToSend = "HTTP/1.1 404 NOT FOUND\r\n";
    szDataToSend+="Date: Thu, 09 Jun 2005 02:40:56 GMT\r\n"; // Any date is fine. This happens to be when I wrote the code. :P
    szDataToSend+="Server: Apache/1.3.33 (Unix) mod_jk/1.2.6-dev PHP/5.0.4 mod_ssl/2.8.22 OpenSSL/0.9.7g\r\n"; // You can put any desired server signature here.
    szDataToSend+="Content-Length: "+FileLength(szPathToCabToInstall)+"\r\n";  // Length of the data to be sent
    szDataToSend+="Keep-A****** timeout=15, max=100\r\n"; 
    szDataToSend+="Connection: Keep-Alive\r\n"; // Now why did I have this as Keep-Alive? I don't rememeber. Perhaps it can be "Connection: close" since we are closing the socket afterwards anyways.
    szDataToSend+="Content-Type: text/plain\r\n"; // technically this isn't true, but it works, so we don't care
    szDataToSend+="\r\n";

    sock.BufferSendData();  // Not really a function, but we want to send the headers and the data at the same time so we pretend to buffer the data.
    sock.Send(szDataToSend);
    sock.Send(GetFileData(szPathToCabToInstall));
    sock.FlushSendBuffer();

    sock.Close();   // Close the accepted client socket.
    this->Close();  // Close the server socket as we don't need it anymore
}
riiight - that's why you called it 'code'...
Well this seems much easier then what I was going to do, I'll look into Adding a reference to this COM interface, and come back. Ty very much BA.

I've never seen so much Crypto-bullshit in my life: Explaination of the Messenger Content Storage System - Fanatic Live . Does Microsoft purposefully try to make shit hard to reverse.

Okay this is getting closer to seeing how to do it. [C#] MessengerContentInstaller Library - Fanatic Live

One thing I don't get, I thought you had to use CoCreateInstance and such to use COM. I remember doing it once to convert a PNG to a JPEG or bitmap or something. However they look like they are using a class.

And adding a reference, all this is new to me... Introduction to COM - What It Is and How to Use It. - CodeProject , but I still don't get it. It's like they are bringing code out of nowhere, I see no header files, and then they are using interfaces that don't exist for the MSN thing, and I can find not documentation saying that IMessengerContent even exists.

EDIT: Okay I think I'm getting this a little bit. That code was in C#, so I would need to use CoInitialize still, but still what about those interface types: IMessengerContent where did that come from? I still don't know. I have a new respect for real coder who can reverse this undocumented COM nonsense. Jeesh...
That's the point of COM - Binary Reuse without needing the header files etc. just generate the Interface definitions or in c++ do a cocreateinstance with it's GUID and go (as long as you know what functions you need to call etc) - CoCreateInstance is C++ specific - check this for a c++ vs C# with com article

COM Interop Part 1: C# Client Tutorial (C#)

You going at this with C++ or C#? I'll send in the right direction either way but you gotta pick one
Posts 1–15 of 18 · Page 1 of 2

Post a Reply

Tags for this Thread

None

Talk with us