-
-
[旧帖] [分享]自己抄写的程序 0.00雪花
-
发表于: 2015-11-10 17:58 1366
-
从网上收集的吧,没含量,仅作纪念
程序功能:从某一目录下,查找存在某个字符串的文件,并打开
但是实际这个程序有问题,我调试不了,谁有兴趣可以看一看
找源码请到网上搜,比较容易找到,
#include<windows.h>
#include<stdio.h>
#include <direct.h>
void processAllDir( const char *path );
void process(char* string);
#define STRING1 "D:\\360安全浏览器下载\\AppendixB\\*" //你要在哪个目录下找
#define STRING2 "asdf" //在文件中要查找的字符串
void main()
{
const char* str =STRING1;
processAllDir(str);
}
void processAllDir( const char *path ) {
WIN32_FIND_DATA FindFileData; //该结构用来保存文件目录信息
HANDLE hFind; //保存文件查找的句柄
char path_search[MAX_PATH]; //存储查找目录路径
hFind = FindFirstFile( path, &FindFileData ); //查找path目录里的第一个文件,并把结果保存在FindFileData结构体里
if( hFind == INVALID_HANDLE_VALUE ) //判断查找是否成功
return;
if( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
{ //判断是否为目录
if( FindFileData.cFileName[0] != '.' )
{ //判断是否为“.”和“..”目录
strcpy( path_search, path ); //不是的话,把当前查找目录,copy到path_search
path_search[strlen(path_search)-1] = '\0'; //path形式为“D:\a\*”,此处去掉"*"
strcat( path_search, FindFileData.cFileName ); //连接当前查找到的目录名
strcat( path_search, "\\\*"); //处理为“D:\a\b\*”的形式
processAllDir( path_search ); //递归调用,进入下一级目录
chdir( path_search ); //递归处理完,返回上一级目录
}
}
else { //如果不是目录,直接进行处理
strcpy( path_search, path );
path_search[strlen(path_search)-1] = '\0';
strcat( path_search, FindFileData.cFileName );
process( path_search ); //调用处理函数
}
while( FindNextFile( hFind, &FindFileData) ) { //继续处理下一个目录或文件
if( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ) {
if( FindFileData.cFileName[0] != '.' ) {
strcpy( path_search, path );
path_search[strlen(path_search)-1] = '\0';
strcat( path_search, FindFileData.cFileName );
strcat( path_search, "\\\*");
processAllDir( path_search );
chdir( path );
}
}
else {
strcpy( path_search, path );
path_search[strlen(path_search)-1] = '\0';
strcat( path_search, FindFileData.cFileName );
process( path_search );
}
}
FindClose( hFind ); //关闭文件查找句柄
}
void process(char* string)
{
HANDLE hFile = CreateFile(
string,
GENERIC_WRITE | GENERIC_READ,// 如果要映射文件:此处必设置为只读(GENERIC_READ)或读写
0, // 此设为打开文件的任何尝试均将失败
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, //|FILE_FLAG_WRITE_THROUGH,【解1】
NULL);
if (hFile != INVALID_HANDLE_VALUE)// 文件打开失败返回句柄为-1
{
printf("文件打开成功~!\n");
}
// 步骤2 建立内存映射文件
DWORD dwFileSize = GetFileSize(hFile, NULL);
printf("文件大小为:%d\n", dwFileSize);
HANDLE hFileMap = CreateFileMapping(
hFile, // 如果这值为INVALID_HANDLE_VALUE,是合法的,上步一定测试啊
NULL, // 默认安全性
PAGE_READWRITE, // 可读写
0, // 2个32位数示1个64位数,最大文件字节数,
// 高字节,文件大小小于4G时,高字节永远为0
0,//dwFileSize, // 此为低字节,也就是最主要的参数,如果为0,取文件真实大小
NULL);
if (hFileMap != NULL)
{
printf("内存映射文件创建成功~!\n");
}
else
{
printf("内存映射文件创建失败~!\n");
}
// 步骤3:将文件数据映射到进程的地址空间
PVOID pvFile = MapViewOfFile( //pvFile就是得到的指针,用它来直接操作文件
hFileMap,
FILE_MAP_WRITE, // 可写
0, // 文件指针头位置 高字节
0, // 文件指针头位置 低字节 必为分配粒度的整倍数,windows的粒度为64K
0); // 要映射的文件尾,如果为0,则从指针头到真实文件尾
if (pvFile != NULL)
{
printf("文件数据映射到进程的地址成功~!\n");
}
else
{
printf("文件数据映射到进程的地址成功~!\n");
}
char *p = (char*)pvFile;
char* lookstr=STRING;
int len=strlen(lookstr);
int number;
for (unsigned int i = 0; i <dwFileSize; i++)
{
number=0;
for(unsigned int j=0;j < len;j++)
{
if( *(p+i+j) == *(lookstr+j))
{
++number;
}
}
if(number == len)
{
ShellExecute(NULL,"open",string,NULL,NULL,SW_SHOWNORMAL);
}
}
// 步骤5: 相关的释放工作
UnmapViewOfFile(pvFile); // 释放内存映射文件的头指针
CloseHandle(hFileMap); // 内存映射文件句柄
CloseHandle(hFile); // 关闭文件
}
程序功能:从某一目录下,查找存在某个字符串的文件,并打开
但是实际这个程序有问题,我调试不了,谁有兴趣可以看一看
找源码请到网上搜,比较容易找到,
#include<windows.h>
#include<stdio.h>
#include <direct.h>
void processAllDir( const char *path );
void process(char* string);
#define STRING1 "D:\\360安全浏览器下载\\AppendixB\\*" //你要在哪个目录下找
#define STRING2 "asdf" //在文件中要查找的字符串
void main()
{
const char* str =STRING1;
processAllDir(str);
}
void processAllDir( const char *path ) {
WIN32_FIND_DATA FindFileData; //该结构用来保存文件目录信息
HANDLE hFind; //保存文件查找的句柄
char path_search[MAX_PATH]; //存储查找目录路径
hFind = FindFirstFile( path, &FindFileData ); //查找path目录里的第一个文件,并把结果保存在FindFileData结构体里
if( hFind == INVALID_HANDLE_VALUE ) //判断查找是否成功
return;
if( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
{ //判断是否为目录
if( FindFileData.cFileName[0] != '.' )
{ //判断是否为“.”和“..”目录
strcpy( path_search, path ); //不是的话,把当前查找目录,copy到path_search
path_search[strlen(path_search)-1] = '\0'; //path形式为“D:\a\*”,此处去掉"*"
strcat( path_search, FindFileData.cFileName ); //连接当前查找到的目录名
strcat( path_search, "\\\*"); //处理为“D:\a\b\*”的形式
processAllDir( path_search ); //递归调用,进入下一级目录
chdir( path_search ); //递归处理完,返回上一级目录
}
}
else { //如果不是目录,直接进行处理
strcpy( path_search, path );
path_search[strlen(path_search)-1] = '\0';
strcat( path_search, FindFileData.cFileName );
process( path_search ); //调用处理函数
}
while( FindNextFile( hFind, &FindFileData) ) { //继续处理下一个目录或文件
if( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ) {
if( FindFileData.cFileName[0] != '.' ) {
strcpy( path_search, path );
path_search[strlen(path_search)-1] = '\0';
strcat( path_search, FindFileData.cFileName );
strcat( path_search, "\\\*");
processAllDir( path_search );
chdir( path );
}
}
else {
strcpy( path_search, path );
path_search[strlen(path_search)-1] = '\0';
strcat( path_search, FindFileData.cFileName );
process( path_search );
}
}
FindClose( hFind ); //关闭文件查找句柄
}
void process(char* string)
{
HANDLE hFile = CreateFile(
string,
GENERIC_WRITE | GENERIC_READ,// 如果要映射文件:此处必设置为只读(GENERIC_READ)或读写
0, // 此设为打开文件的任何尝试均将失败
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, //|FILE_FLAG_WRITE_THROUGH,【解1】
NULL);
if (hFile != INVALID_HANDLE_VALUE)// 文件打开失败返回句柄为-1
{
printf("文件打开成功~!\n");
}
// 步骤2 建立内存映射文件
DWORD dwFileSize = GetFileSize(hFile, NULL);
printf("文件大小为:%d\n", dwFileSize);
HANDLE hFileMap = CreateFileMapping(
hFile, // 如果这值为INVALID_HANDLE_VALUE,是合法的,上步一定测试啊
NULL, // 默认安全性
PAGE_READWRITE, // 可读写
0, // 2个32位数示1个64位数,最大文件字节数,
// 高字节,文件大小小于4G时,高字节永远为0
0,//dwFileSize, // 此为低字节,也就是最主要的参数,如果为0,取文件真实大小
NULL);
if (hFileMap != NULL)
{
printf("内存映射文件创建成功~!\n");
}
else
{
printf("内存映射文件创建失败~!\n");
}
// 步骤3:将文件数据映射到进程的地址空间
PVOID pvFile = MapViewOfFile( //pvFile就是得到的指针,用它来直接操作文件
hFileMap,
FILE_MAP_WRITE, // 可写
0, // 文件指针头位置 高字节
0, // 文件指针头位置 低字节 必为分配粒度的整倍数,windows的粒度为64K
0); // 要映射的文件尾,如果为0,则从指针头到真实文件尾
if (pvFile != NULL)
{
printf("文件数据映射到进程的地址成功~!\n");
}
else
{
printf("文件数据映射到进程的地址成功~!\n");
}
char *p = (char*)pvFile;
char* lookstr=STRING;
int len=strlen(lookstr);
int number;
for (unsigned int i = 0; i <dwFileSize; i++)
{
number=0;
for(unsigned int j=0;j < len;j++)
{
if( *(p+i+j) == *(lookstr+j))
{
++number;
}
}
if(number == len)
{
ShellExecute(NULL,"open",string,NULL,NULL,SW_SHOWNORMAL);
}
}
// 步骤5: 相关的释放工作
UnmapViewOfFile(pvFile); // 释放内存映射文件的头指针
CloseHandle(hFileMap); // 内存映射文件句柄
CloseHandle(hFile); // 关闭文件
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
看原图
赞赏
雪币:
留言: