中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二進制文件每兩個的字節位置交換

發布時間:2020-07-04 05:07:48 來源:網絡 閱讀:2220 作者:daye8ku 欄目:安全技術

(一).寫作緣由:

        寫這篇博客的目的是是為了方便下次使用或者幫助其他需要的人。在打CTF的時候,偶爾會遇到還原一些文件,筆者遇到的是分析數據流量的時候,提取出了一個未知文件,用二進制編輯器打開,搜所文件頭,發現和某個文件頭有點相似,但是每兩個字節位置顛倒了,于是就想到把每兩個字節交換位置,就像下面這種:


二進制文件每兩個的字節位置交換二進制文件每兩個的字節位置交換


(二).演示及效果:

在命令行執行前后如下圖:

二進制文件每兩個的字節位置交換二進制文件每兩個的字節位置交換二進制文件每兩個的字節位置交換



(三).貼上代碼:

        代碼是C寫的,有點多不太美觀,功能太單一, 也沒弄啥模塊化,編寫環境是windows。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, const char** argv)
{
	//The pointer of input file and output file
	FILE *fin;
	FILE* fout;
	
	//The file name of input file and output
	char* inFile;
	char* outFile;

	//The pointer of single and double byte type
	unsigned short* pDouble = NULL;
	unsigned char* pSingle = NULL;

	//The memery buffer of header and tail pointer about input file
	void* fBuffStart = NULL;
	void* fBuffEnd = NULL;

	//The size of input file (Byte)
	unsigned long fileSize = 0;

	//Judge the count of parameter and the file name limit 
	if(argc != 3 || strlen(argv[1]) > 255 || strlen(argv[2]) > 255)
	{
		printf("\n[-]Usage: %s infile outfile\n", argv[0]);
		printf("[-]Filename limited: 255 Byte\n");
		exit(-1);
	}


	inFile = argv[1];
	outFile = argv[2];


	//Exception handling
	if(!(fin = fopen(inFile, "rb")))
	{
		printf("Error: open %s failed!\n", inFile);
		exit(-1);
	}


	//Obtain file size
	fseek(fin, 0, SEEK_END);
	fileSize = ftell(fin);
	fseek(fin, 0, SEEK_SET);

	//Alloc memery  for input file and read its data to memery
	fBuffStart = (unsigned char*)malloc(fileSize);
	memset(fBuffStart, 0, fileSize);
	fread(fBuffStart, 1, fileSize, fin);
	fclose(fin);


	//The position of start and end input file memery 
	fBuffEnd = (unsigned char*)fBuffStart + fileSize;
	pDouble = (unsigned short*)fBuffStart;

	//Exception handling
	if(!(fout = fopen(outFile,"wb")))
	{
		printf("Error: open %s failed!\n", outFile);
		exit(-1);
	}

	//Exchange position of each two byte
	while(pDouble != fBuffEnd)
	{
		pSingle = pDouble;
		fwrite(pSingle+1, 1, 1, fout);
		fwrite(pSingle, 1, 1, fout);
		pDouble++;
	}

	fclose(fout);

	return 0;
}


(四).若有不足之處,還請斧正。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊金霍洛旗| 运城市| 荥阳市| 麻江县| 乌什县| 苏尼特右旗| 于都县| 双城市| 清远市| 海安县| 广宁县| 竹北市| 行唐县| 清流县| 新乐市| 滦南县| 永丰县| 新余市| 建阳市| 漯河市| 长岛县| 吉水县| 山东省| 张家口市| 林西县| 张北县| 昌吉市| 皮山县| 榕江县| 阳西县| 南昌县| 通州区| 柯坪县| 广丰县| 中西区| 重庆市| 登封市| 阿克苏市| 宜阳县| 景泰县| 洛阳市|