首页
社区
课程
招聘
[旧帖] [求助]显示设备管理器里的信息小软件 0.00雪花
发表于: 2015-7-11 17:36 3978

[旧帖] [求助]显示设备管理器里的信息小软件 0.00雪花

2015-7-11 17:36
3978
各位师兄,前辈好
我是一个大三的实习生,刚开始实习,老大给了我一个免费的小软件(显示设备管理器里的信息),叫我重新写出来。但是之前学逆向,仅仅是各种crackme,爆破或是跟一下算法就可以了。我没有编写软件的经验。所以我想请教大家,我应该从哪里入手呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 4580
活跃值: (992)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
查他调用的api
2015-7-11 18:40
0
雪    币: 182
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
参考一下Devcon的源码看看
2015-7-11 19:48
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
会逆向应先从窗口过程开始。
2015-7-11 20:39
0
雪    币: 2143
活跃值: (720)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
setupapi
2015-7-12 00:55
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sry
6
谢谢前辈。
我也找了这方面的api,找到个范围setupapi。但是我又怎么进一步在setupapi里找到我需要的呢?我没有windows程序的开发经验。我还有个想法,api方面IDA会有帮助吗?我没怎么用过IDA,而OD里的输入表经常打不开,看不到所有函数。
2015-7-12 02:10
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sry
7
谢谢前辈。
我查了,Devcon确实和我这个目标软件关系挺大的。我会找到源码好好借鉴的。
2015-7-12 02:12
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sry
8
谢谢前辈。
我最近也在学VC,希望清楚windows程序的流程是什么样的。不过感觉内容好多,我想请问哪些windows的知识是必须的,而其他windows方面的可以当做字典,用的时候去查?
2015-7-12 02:14
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sry
9
谢谢前辈。
我找到了setupapi这一步。但是我不知道是因为我没有windows程序开发的经验,还是其他原因。我没法进一步确定那软件中用的是什么api。
2015-7-12 02:15
0
雪    币: 2143
活跃值: (720)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
// EnumDevices.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <SetupAPI.h>
#pragma comment(lib, "setupapi.lib")

// SPDRP_DEVICEDESC
// SPDRP_CLASS
// SPDRP_FRIENDLYNAME

typedef BOOL (*TfEnumDevicesCallback)(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID lpContext);

VOID EnumDevices(TCHAR *DeviceClassName, TfEnumDevicesCallback Callback, PVOID CallbackContext)
{
	GUID Guid;
	DWORD cbOpt;

	if (SetupDiClassGuidsFromName(DeviceClassName, &Guid, 1, &cbOpt))
	{
		HDEVINFO hDev;

		hDev = SetupDiGetClassDevs(&Guid, NULL, HWND_DESKTOP, DIGCF_PRESENT);
		if (hDev != INVALID_HANDLE_VALUE)
		{
			DWORD MemberIndex;
			SP_DEVINFO_DATA sdd;

			MemberIndex = 0;
			sdd.cbSize = sizeof(sdd);
			while (SetupDiEnumDeviceInfo(hDev, MemberIndex, &sdd))
			{
				if (!Callback(hDev, &sdd, CallbackContext))
				{
					break;
				}
				MemberIndex++;
			}
			SetupDiDestroyDeviceInfoList(hDev);
		}
	}
	return;
}

BOOL GetDevicePropertyValue(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PVOID *lppResult, DWORD *lpbResult)
{
	PBYTE lpBuffer;
	DWORD cbBuffer;

	lpBuffer = NULL;
	cbBuffer = 0;
	if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet, DeviceInfoData, Property, NULL, lpBuffer, cbBuffer, &cbBuffer)
		&& (cbBuffer > 0))
	{
		if (lpBuffer = (PBYTE)GlobalAlloc(GPTR, cbBuffer))
		{
			if (SetupDiGetDeviceRegistryProperty(DeviceInfoSet, DeviceInfoData, Property, NULL, lpBuffer, cbBuffer, &cbBuffer))
			{
				*lppResult = lpBuffer;
				*lpbResult = cbBuffer;
				return TRUE;
			}
			GlobalFree(lpBuffer);
		}
	}
	return FALSE;
}

VOID FreeGetDevicePropertyValue(PVOID lpBuffer)
{
	GlobalFree(lpBuffer);
}

BOOL EnumNetCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
	PVOID lpBusNumber;
	DWORD cbBusNumber;

	if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_BUSNUMBER, &lpBusNumber, &cbBusNumber))
	{
		if (*(DWORD*)lpBusNumber)
		{
			PVOID lpFriendlyName;
			DWORD cbFriendlyName;

			if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_FRIENDLYNAME, &lpFriendlyName, &cbFriendlyName))
			{
				_tprintf(TEXT("%s\n"), lpFriendlyName);
				FreeGetDevicePropertyValue(lpFriendlyName);
			}
		}
		FreeGetDevicePropertyValue(lpBusNumber);
	}
	return TRUE;
}

BOOL EnumCpuCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
	PVOID lpFriendlyName;
	DWORD cbFriendlyName;

	if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_FRIENDLYNAME, &lpFriendlyName, &cbFriendlyName))
	{
		_tprintf(TEXT("%s\n"), lpFriendlyName);
		FreeGetDevicePropertyValue(lpFriendlyName);
	}
	return TRUE;
}

BOOL EnumDiskCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
	PVOID lpFriendlyName;
	DWORD cbFriendlyName;

	if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_FRIENDLYNAME, &lpFriendlyName, &cbFriendlyName))
	{
		_tprintf(TEXT("%s\n"), lpFriendlyName);
		FreeGetDevicePropertyValue(lpFriendlyName);
	}
	return TRUE;
}

BOOL EnumDisplayCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
	PVOID lpFriendlyName;
	DWORD cbFriendlyName;

	if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_DEVICEDESC, &lpFriendlyName, &cbFriendlyName))
	{
		_tprintf(TEXT("%s\n"), lpFriendlyName);
		FreeGetDevicePropertyValue(lpFriendlyName);
	}
	return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
	UCHAR Mac[8];

	_tsetlocale(LC_ALL, TEXT("chs"));

	_tprintf(TEXT("%s\n"), TEXT("Net"));
	EnumDevices(TEXT("Net"), EnumNetCallback, NULL);
	_tprintf(TEXT("\n"));
	_tprintf(TEXT("%s\n"), TEXT("Processor"));
	EnumDevices(TEXT("Processor"), EnumCpuCallback, NULL);
	_tprintf(TEXT("\n"));
	_tprintf(TEXT("%s\n"), TEXT("Display"));
	EnumDevices(TEXT("Display"), EnumDisplayCallback, NULL);
	return getchar();
}

2015-7-12 10:57
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sry
11
谢谢前辈。
我想再问一下,代码里包含的知识在哪里能学到啊?《Windows核心编程》吗?学他之前是不是不用先《windows程序设计》啊,因为听说《windows程序设计》主要讲窗口的。希望有师兄前辈指点一句。
2015-7-13 03:35
0
雪    币: 2143
活跃值: (720)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
大都是在网上找,我也没看过什么具体的书籍,多多加油吧。
2015-7-14 23:18
0
游客
登录 | 注册 方可回帖
返回
//