首页
社区
课程
招聘
[已解决] [求助]关于C#读取文件的一个问题 58.00雪花
发表于: 2018-12-4 14:44 2012

[已解决] [求助]关于C#读取文件的一个问题 58.00雪花

2018-12-4 14:44
2012

以上这段代码是反编译得到的是读入下面的一个文件
其中 Signature 是取读取的 20 字节的前 5 个字节
version 是取第 5 个字节的 ASCII 数值
但是 ResourcesCount 这个我一直没弄懂是怎么回事
麻烦大佬能解释一下这句的意思么
已知ResourcesCount是一个大于500小于600的一个十进制数字

附读入的文件


原帖在这里 我需要使用python重写这个方法 但是一直不理解ResourcesCount的意思 

https://bbs.pediy.com/thread-248121.htm

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 1622
活跃值: (218)
能力值: ( LV8,RANK:135 )
在线值:
发帖
回帖
粉丝
2

首先这个方法的原型是public static uint ToUInt32 (byte[] value, int startIndex);,他的功能是返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数
C#。

 

第一个参数是字节数组.

 

第二个参数是value内的起始位置。

 

所以ResourcesCount的值就是之前读取到的20个字节长度的数据的第16个字节开始向后读取四个字节,然后转化为32位的无符号整形。

 

用python代码来表示的话就是这样的,你的这个文件中的数据是大端的还是小段的我就不知道了,如果是大端的话那就把little换成big就可以了

ResourcesCount = int.from_bytes(s1, byteorder='little', signed=False)
2018-12-5 10:48
0
雪    币: 3622
活跃值: (2559)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
3
lz把读取的文件上传一下,我帮你用python或C++或C#完整写出来
最后于 2018-12-6 08:42 被yegu编辑 ,原因:
2018-12-6 08:41
0
雪    币: 225
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
这个是样本
上传的附件:
2018-12-6 22:44
0
雪    币: 225
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
DickBoomSky 首先这个方法的原型是`public static uint ToUInt32 (byte[] value, int startIndex);`,他的功能是`返回由字节数组中指定位置的四个字节转换来的 ...
首先感谢你的回复 不过我在使用这个方法的时候 发现取到的是一个特别大的数字  请问是数据转换的问题嘛 
2018-12-6 22:45
0
雪    币: 225
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
感谢
样本已经上传在上面 
2018-12-6 22:46
0
雪    币: 1622
活跃值: (218)
能力值: ( LV8,RANK:135 )
在线值:
发帖
回帖
粉丝
7
VC版本:
// fffparser.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#define SIMPLEFILE "simple.ffff"

struct header
{
	char Signature[5];
	char version;
	char useless[10];
	DWORD ResourcesCount;
};

int main()
{
	HANDLE hFile = CreateFile(SIMPLEFILE, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		printf("Cannot open file!\n");
		return 0;
	}



	header * data = (header *)malloc(sizeof(header));
	ZeroMemory(data, 20);

	ReadFile(hFile, data, 20, NULL, NULL);

	unsigned int ResourcesCount = data->ResourcesCount;

	printf("Signature: %c%c%c%c%c\n", data->Signature[0], data->Signature[1], data->Signature[2], data->Signature[3], data->Signature[4]);
	printf("Version: %d\n", data->version);
	printf("ResourcesCount: %d\n", ResourcesCount);  // 我得到的结果是695,和你说的500-600有点不太一样。

	CloseHandle(hFile);

    return 0;
}


python版本:
f = open('simple.ffff', 'rb')
data = f.read(20)
f.close()

Signature = data[:5]
Version = data[5]
useless = data[6:-4]
ResourcesCount = bytes(data[16:])


print(Signature)
print(Version)
print(int.from_bytes(ResourcesCount, "little", signed=False))

我得到的结果都是695,提取到的数据是0xB7020000。怎么转换都是695。
2018-12-7 11:39
0
雪    币: 225
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
感谢
2018-12-7 12:37
0
游客
登录 | 注册 方可回帖
返回
//