Revert "some stuff"

This reverts commit 5d993e35c4.
This commit is contained in:
Hazim Gazov
2010-08-01 04:54:14 +00:00
parent 5d993e35c4
commit 62c1bd007f
4 changed files with 59 additions and 126 deletions

View File

@@ -19,7 +19,6 @@ include_directories(
) )
set(llimage_SOURCE_FILES set(llimage_SOURCE_FILES
aes.cpp
llimagebmp.cpp llimagebmp.cpp
llimage.cpp llimage.cpp
llimagedxt.cpp llimagedxt.cpp
@@ -34,7 +33,7 @@ set(llimage_SOURCE_FILES
set(llimage_HEADER_FILES set(llimage_HEADER_FILES
CMakeLists.txt CMakeLists.txt
aes.h
llimage.h llimage.h
llimagebmp.h llimagebmp.h
llimagedxt.h llimagedxt.h

View File

@@ -1,11 +1,7 @@
// <edit> // <edit>
#include "linden_common.h" #include "linden_common.h"
#include "llimagemetadatareader.h" #include "llimagemetadatareader.h"
#include "aes.h" //#define COMMENT_DEBUGGING
const unsigned long EMKDU_AES_KEY[] = {0x7810001, 0x0FEB67863, 0x12B03F6E, 0x0C16665CC, 0x0C1AC9681, 0x0F70B663B};
//const unsigned char EMKDU_AES_KEY[] = {0x01,0x00,0x81,0x07,0x63,0x78,0xB6,0xFE,0x6E,0x3F,0xB0,0x12,0xCC,0x65,0x66,0xC1,
//0x81,0x96,0xAC,0xC1,0x3B,0x66,0x0B,0xF7};
//#define COMMENT_DEBUGG1ING
LLJ2cParser::LLJ2cParser(U8* data,int data_size) LLJ2cParser::LLJ2cParser(U8* data,int data_size)
{ {
if(data && data_size) if(data && data_size)
@@ -53,20 +49,20 @@ std::vector<U8> LLJ2cParser::GetNextComment()
U8 marker_type = nextChar(); U8 marker_type = nextChar();
if (marker_type == 0x4f) if (marker_type == 0x4f)
{ {
continue; continue;
} }
if (marker_type == 0x90) if (marker_type == 0x90)
{ {
//llinfos << "FOUND 0x90" << llendl; //llinfos << "FOUND 0x90" << llendl;
break; //return empty vector break; //return empty vector
} }
if (marker_type == 0x64) if (marker_type == 0x64)
{ {
//llinfos << "FOUND 0x64 COMMENT SECTION" << llendl; //llinfos << "FOUND 0x64 COMMENT SECTION" << llendl;
S32 len = ((S32)nextChar())*256 + (S32)nextChar(); S32 len = ((S32)nextChar())*256 + (S32)nextChar();
if (len > 3) content = nextCharArray(len - 2); if (len > 3) content = nextCharArray(len - 2);
return content; return content;
} }
} }
} }
@@ -78,80 +74,59 @@ std::vector<U8> LLJ2cParser::GetNextComment()
std::string LLImageMetaDataReader::ExtractEncodedComment(U8* data,int data_size) std::string LLImageMetaDataReader::ExtractEncodedComment(U8* data,int data_size)
{ {
LLJ2cParser parser = LLJ2cParser(data,data_size); LLJ2cParser parser = LLJ2cParser(data,data_size);
std::string result;
while(1) while(1)
{ {
std::vector<U8> comment = parser.GetNextComment(); std::vector<U8> comment = parser.GetNextComment();
if (comment.empty()) break; //exit loop if (comment.empty()) break; //exit loop
#ifndef COMMENT_DEBUGGING
if (comment[1] == 0x00 && comment.size() == 130) if (comment[1] == 0x00 && comment.size() == 130)
{ {
bool xorComment = true; //llinfos << "FOUND PAYLOAD" << llendl;
//llinfos << "FOUND PAYLOAD" << llendl; std::vector<U8> payload(128);
std::vector<U8> payload(128); S32 i;
S32 i; memcpy(&(payload[0]), &(comment[2]), 128);
memcpy(&(payload[0]), &(comment[2]), 128); //std::copy(comment.begin()+2,comment.end(),payload.begin());
//std::copy(comment.begin()+2,comment.end(),payload.begin()); if (payload[2] == payload[127])
//lets check XOR Cipher first {
if (payload[2] == payload[127]) // emkdu.dll
{ for (i = 4; i < 128; i += 4)
// emkdu.dll {
for (i = 4; i < 128; i += 4) payload[i] ^= payload[3];
{ payload[i + 1] ^= payload[1];
payload[i] ^= payload[3]; payload[i + 2] ^= payload[0];
payload[i + 1] ^= payload[1]; payload[i + 3] ^= payload[2];
payload[i + 2] ^= payload[0]; }
payload[i + 3] ^= payload[2]; }
} else if (payload[3] == payload[127])
} {
else if (payload[3] == payload[127]) // emkdu.dll or onyxkdu.dll
{ for (i = 4; i < 128; i += 4)
// emkdu.dll or onyxkdu.dll {
for (i = 4; i < 128; i += 4) payload[i] ^= payload[2];
{ payload[i + 1] ^= payload[0];
payload[i] ^= payload[2]; payload[i + 2] ^= payload[1];
payload[i + 1] ^= payload[0]; payload[i + 3] ^= payload[3];
payload[i + 2] ^= payload[1]; }
payload[i + 3] ^= payload[3]; }
} else
} {
else break;//exit loop
{ }
xorComment = false; for (i = 4; i < 128; ++i)
} {
if(!xorComment) if (payload[i] == 0) break;
{ }
//this is terrible i know if(i < 4) break;
std::vector<U8> dataout(128); std::string result(payload.begin()+4,payload.begin()+i);
AES aes; //llinfos << "FOUND COMMENT: " << result << llendl;
aes.SetParameters(192); return result;
aes.StartDecryption(reinterpret_cast<const unsigned char*>(EMKDU_AES_KEY));
aes.Decrypt(&(payload[0]),&(dataout[0]),16);
//payload.clear();
//memcpy(&(payload[0]),&(dataout[0]),dataout.size());
for (i = 0 ; i < 128; ++i)
{
if (dataout[i] == 0) break;
}
if(i == 0) continue;
if(result.length() > 0)
result.append(" ");
result.assign(dataout.begin(),dataout.begin()+i);
}
else
{
for (i = 4 ; i < 128; ++i)
{
if (payload[i] == 0) break;
}
if(i < 4) continue;
if(result.length() > 0)
result.append(" ");
result.append(payload.begin()+4,payload.begin()+i);
}
//llinfos << "FOUND COMMENT: " << result << llendl;
} }
#else
std::string result(comment.begin(),comment.end());
return result;
#endif
} }
//end of loop //end of loop
return result; return "";
} }
// </edit> // </edit>

View File

@@ -57,14 +57,6 @@ LLSavedLoginEntry::LLSavedLoginEntry(const LLSD& entry_data)
{ {
throw std::invalid_argument("Missing grid key."); throw std::invalid_argument("Missing grid key.");
} }
if (!entry_data.has("macaddress"))
{
throw std::invalid_argument("Missing MAC address.");
}
if (!entry_data.has("volumeid"))
{
throw std::invalid_argument("Missing volume ID.");
}
if (!entry_data.has("password")) if (!entry_data.has("password"))
{ {
throw std::invalid_argument("Missing password key."); throw std::invalid_argument("Missing password key.");
@@ -88,9 +80,10 @@ LLSavedLoginEntry::LLSavedLoginEntry(const LLSD& entry_data)
mEntry = entry_data; mEntry = entry_data;
} }
LLSavedLoginEntry(const EGridInfo gridinfo, const std::string& firstname, LLSavedLoginEntry::LLSavedLoginEntry(const EGridInfo grid,
const std::string& lastname, const std::string& password, const std::string& firstname,
const std::string& macaddress, const std::string& volumeid) const std::string& lastname,
const std::string& password)
{ {
mEntry.clear(); mEntry.clear();
mEntry.insert("grid", LLSD(grid)); mEntry.insert("grid", LLSD(grid));

View File

@@ -34,7 +34,6 @@
#define LLLOGINHISTORY_H #define LLLOGINHISTORY_H
#include "llviewernetwork.h" #include "llviewernetwork.h"
#include <string>
class LLSD; class LLSD;
@@ -58,8 +57,7 @@ public:
* @param password Munged password of PASSWORD_HASH_LENGTH. * @param password Munged password of PASSWORD_HASH_LENGTH.
*/ */
LLSavedLoginEntry(const EGridInfo gridinfo, const std::string& firstname, LLSavedLoginEntry(const EGridInfo gridinfo, const std::string& firstname,
const std::string& lastname, const std::string& password, const std::string& lastname, const std::string& password);
const std::string& macaddress, const std::string& volumeid);
/** /**
* @brief Returns the display name of the grid ID associated with this entry. * @brief Returns the display name of the grid ID associated with this entry.
* @return String containing grid name. * @return String containing grid name.
@@ -170,38 +168,6 @@ public:
* @param value Munged password suitable for login. * @param value Munged password suitable for login.
*/ */
void setPassword(const std::string& value); void setPassword(const std::string& value);
/**
* @brief Returns the MAC address associated with this login entry.
* @return First name as string.
*/
const std::string getMACAddress() const
{
return (mEntry.has("macaddress") ? mEntry.get("macaddress").asString() : std::string());
}
/**
* @brief Sets the MAC address associated with this login entry.
* @param value String value to set.
*/
void setMACAddress(std::string& value)
{
mEntry.insert("macaddress", LLSD(value));
}
/**
* @brief Returns the first name associated with this login entry.
* @return First name as string.
*/
const std::string getVolumeID() const
{
return (mEntry.has("volumeid") ? mEntry.get("volumeid").asString() : std::string());
}
/**
* @brief Sets the first name associated with this login entry.
* @param value String value to set.
*/
void setVolumeID(std::string& value)
{
mEntry.insert("volumeid", LLSD(value));
}
/** /**
* @brief Returns the login entry as an LLSD for serialization. * @brief Returns the login entry as an LLSD for serialization.
* *return LLSD containing login entry details. * *return LLSD containing login entry details.