Esempio n. 1
0
void StringManager::Init(const char* filePath)
{
	SafeDelete(instance);
	instance = new StringManager();
	char* buffer = NULL;
	int length = 0;
	ReadFileToMemory(filePath, "rt", &buffer, &length);
	if (length <= 0)
	{
		return;
	}
	tinyxml2::XMLDocument doc;
	doc.Parse(buffer);
	SafeDeleteArray(buffer);
	if (doc.ErrorID() != 0)
	{
		return;
	}
	tinyxml2::XMLElement* root = doc.FirstChildElement("data-set");
	tinyxml2::XMLElement* recordXML = root->FirstChildElement("record");
	while (recordXML)
	{
		StringRecord* record = new StringRecord();
		const char* ID = recordXML->FirstChildElement("ID")->GetText();
		const char* EN = recordXML->FirstChildElement("EN")->GetText();
		const char* VN = recordXML->FirstChildElement("VN")->GetText();
		SafeCopyCHAR(&record->ID, ID);
		SafeCopyCHAR(&record->EN, EN);
		SafeCopyCHAR(&record->VN, VN);
		instance->stringMap[ID] = record;
		recordXML = recordXML->NextSiblingElement("record");
	}
}
Esempio n. 2
0
int main()
{
	int size;
	const char* utf8_text = ReadFileToMemory("utf8.txt", &size);
	const char* original = utf8_text;

	// just size for worst case and convert
	int* utf32_text = (int*)malloc(size * 4);
	int i = 0;
	while (utf8_text < original + size)
	{
		int cp;
		utf8_text = cu_decode8(utf8_text, &cp);
		utf32_text[i++] = cp;

		wchar_t wide[2];
		cu_encode16(wide, cp);
		int cp2;
		cu_decode16(wide, &cp2);
		CHECK(cp == cp2);
	}
	int processed_size = (int)(utf8_text - original);
	CHECK(processed_size == size);
	utf8_text = original;

	char* utf8_processed = (char*)malloc(size);
	original = utf8_processed;
	for (int j = 0; j < i; ++j)
		utf8_processed = cu_encode8(utf8_processed, utf32_text[j]);
	processed_size = (int)(utf8_processed - original);
	CHECK(processed_size == size);
	utf8_processed = (char*)original;

	wchar_t* utf16_text = (wchar_t*)malloc(size * 2);
	wchar_t* original_wide = utf16_text;
	for (int j = 0; j < i; ++j)
		utf16_text = cu_encode16(utf16_text, utf32_text[j]);
	processed_size = (int)(utf16_text - original_wide);
	utf16_text = original_wide;

	for (int j = 0; j < processed_size; ++j)
	{
		int cp;
		utf16_text = (wchar_t*)cu_decode16(utf16_text, &cp);
		utf8_processed = cu_encode8(utf8_processed, cp);
	}
	processed_size = (int)(utf8_processed - original);
	CHECK(processed_size == size);
	utf8_processed = (char*)original;
	utf16_text = original_wide;

	cu_widen(utf8_text, utf16_text);
	cu_shorten(utf16_text, utf8_processed);
	CHECK(!memcmp(utf8_text, utf8_processed, size));

	return 0;
}
Esempio n. 3
0
int main(int argc, char *argv[])
{
	//initial variable
	FILE *fInput,*fOutput;
	fInput = NULL;
	fOutput = NULL;
	int cReadBuffer;
	unsigned long uFileSize = 0;
	char * target_str_temp = (char *)malloc(sizeof(char) * 200); //target_str_temp store the target_str's last value for the comparison at next time
	unsigned char * raw_content = NULL;
	unsigned char * target_str = (unsigned char *)malloc(sizeof(char) * 200);
	char * target_str_char = (char *)malloc(sizeof(char) * 200);
	//char * target_str = (char *)malloc(sizeof(char) * 200);
	unsigned long search_offset = 0;
	long search_result = 0;
	unsigned long view_offset = 0;
	char view_data_ctr = '0';
	long root_page_offset = -1;
	char * table_name = (char *)malloc(sizeof(char) * 200);
	if(argv[1] == NULL)
	{
		printf("input --h or --help for help\n");
		return 0;
	}
	

	if(!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
	{
		printf("Android_2.3.6 Samsung GT_S5820 Forensics Tool Mark4\n");
		printf("written by Le0n Hu ,University of Chongqing Posts & Telecommunications\n");
		printf("useage:\n");
		printf(" -h, --help\t\tgive the help list\n");
		printf(" -r, --read\t\tread the raw image file\n");
		printf(" -p, --pull\t\tpull /data/data from android phone to current directory\n");
		printf(" -d, --dig\t\tdig information from sms,contacts,call log,memo,browser history,etc to files to current directory\n");
		printf("     --recovery\t\t recovery specific Pages contains deleted datas\n");
		return 0;
		
	}

	if(!strcmp(argv[1], "--recovery"))
	{

		if(argv[2] == NULL)
		{
			printf("please input recovery file absolute path\n");
			return 0;
		}
		/*if(argv[3] == NULL)
		{
			printf("please input the table name which you want to recovery information from\n");
			return 0;
		}*/
		printf("\nplease input the table name which you want to recovery informaiton from\n");
		gets(table_name);
		fInput = OpenTargetFile(argv[2]);
		uFileSize = GetFileSize(argv[2]);
		raw_content = ReadFileToMemory(fInput, argv[2]);
		root_page_offset = FindTableRootPage(raw_content, table_name, uFileSize);
		if(root_page_offset == -1)
		{
			printf("table %s is not found!\nplease try again\n", table_name);
			return 0;
		}

		
		FindLostId(raw_content, root_page_offset);
		//printf("RootPage Offset: %0x\n", root_page_offset);
		return 0;
	}

	if(!strcmp(argv[1], "-r") || !strcmp(argv[1], "--read"))
	{
		if(argv[2] == NULL)
		{
			printf("please input file absolute path\n");
			return 0;
		}
		fInput = OpenTargetFile(argv[2]);
		uFileSize = GetFileSize(argv[2]);
		raw_content = ReadFileToMemory(fInput, argv[2]);
		ShowByteInform(raw_content, 0);
		while(/*view_data_ctr != 0x1b*/1)	//getch();
		{
			view_data_ctr = getch();
			
			switch(view_data_ctr)
			{
			case 'i':	if(view_offset == 0)
							ShowByteInform(raw_content, view_offset); 
						else
						{
							//ShowByteInform(raw_content, (view_offset = view_offset - 16 * 20));
							ShowByteInform(raw_content, (view_offset = view_offset - 16));
						}
						break;
			case 'k':	if(view_offset + 640 > uFileSize)	
						{
							ShowByteInform(raw_content, (view_offset = uFileSize - 624));
						}
						else
						{
							//ShowByteInform(raw_content, (view_offset = view_offset + 16 * 20));
							ShowByteInform(raw_content, (view_offset = view_offset + 16));
						}
						break;
			case 'g':	printf("please input the offset you want to move to:");
						scanf("%0xd", &view_offset);
						if(view_offset < 0)
						{
							ShowByteInform(raw_content, 0);
						}
						else
						{
							if(view_offset + 640 > uFileSize)
							{
								ShowByteInform(raw_content, (view_offset = uFileSize - 641));
							}
							else
							{
								ShowByteInform(raw_content, (view_offset = view_offset / 16 * 16));
							}
						}
						break;
			case 'f':	printf("please input the content you want to search:");
						//scanf("%s", target_str);
						gets(target_str_char);
						if(strcmp(target_str_char, target_str_temp) != 0)
						{
							search_offset = 0;
						}
						strcpy(target_str_temp, target_str_char);
						memcpy(target_str, target_str_char, 200);
						search_result = Search(target_str, raw_content, &search_offset, uFileSize);
						if(search_result == -1)
						{
							printf("target string is not found!\n");
							break;	
						}
						else
						{
							view_offset = search_result;
							printf("target string found! address: %0x\n", view_offset);
						}
						
						if(view_offset + 640 > uFileSize)
						{
							ShowByteInform(raw_content, (view_offset = uFileSize - 640));
							break;
						}
						else
						{
							ShowByteInform(raw_content, (view_offset = view_offset / 16 * 16));
							break;
						}
						break;
			case 'c':	
					CaptuerFromImage(raw_content);
						break;
			case 'n':	search_result = Search(target_str, raw_content, &search_offset, uFileSize);
						if(search_result == -1)
						{
							printf("target string is not found!\n");
							break;	
						}
						else
						{
							view_offset = search_result;
							printf("target string found! address: %0x\n", view_offset);
						}
						
						if(view_offset + 640 > uFileSize)
						{
							ShowByteInform(raw_content, (view_offset = uFileSize - 640));
							break;
						}
						else
						{
							ShowByteInform(raw_content, (view_offset = view_offset / 16 * 16));
							break;
						}
						break;
			case 0x1b:	return 0;	//monitor 'Esc' input
			}
		}
	}
	if(!strcmp(argv[1], "-d") || !strcmp(argv[1], "--dig"))
	{
		SaveDbToFile(SMS_INFO);
		SaveDbToFile(CONTACTS_INFO);
		SaveDbToFile(CALL_LOG_INFO);
		SaveDbToFile(MEMO_INFO);
		SaveDbToFile(BROWSER_HISTORY_INFO);
		SaveDbToFile(BROWSER_USR_PWD_INFO);
		SaveDbToFile(CALENDAR_INFO);
		SaveDbToFile(EMAIL_INFO);
		SaveDbToFile(EMAIL_USR_PWD_INFO);
		return 0;
	}
	if(!strcmp(argv[1], "-p") || !strcmp(argv[1], "--pull"))
	{
		system("adb pull /data/data ./");
		return 0;		
	}

	printf("input --h or --help for help\n");
	return 0;


}