Detours API HOOK 另类使用方法

2015-8-15 奇Yu 系统编程

这是早几年的笔记,但是方法一样可用。

对于某些程序的API 注入和拦截,老手直接在反编译后直接跳转然后平栈

对于新手来说 使用 Detours 来处理再方便不过了。

网上的 例子都是 Detours 编译后在引入,我有点小洁癖,本来就是要做一个动态链接库

然后 在买一送一(自己生成的+Detours 生成的),感觉很不爽,其实可以直接拷贝Detours 源文件到自己的DLL项目内直接使用的

一下是步骤。

首先去下载 Detours

http://research.microsoft.com/en-us/projects/detours/

然后一路安装,得到路径下的 SRC内的文件

将文件夹拷到自己项目导入 

 不用导入uimports.cpp的
首先在自己的   项目--》属性-》配置属性-》C/C++-》预编译头 选中不使用预编译头
然后修改detours.cpp

在包含#include "detours.h"头文件前 添加

#define DETOURS_X86  

#define DETOURS_32BIT
在修改 disasm.cpp    

在包含#include "detours.h"头文件前 添加

#define DETOURS_X86


至此在自己的项目头部引入detours.h

然后就和编译过detours的使用方法是一样的了。

最终你只生成了一个DLL

功能上和编辑Detours没有什么区别。

但是这个少了编译的麻烦感觉简单了许多

标签: vc mfc

评论(0) 浏览(2841)

vc 用GDI将jpg图片从文件 复制到黏贴版.

2015-3-24 奇Yu 系统编程

这是很久以前的方法了。当时为了将JPG图片复制到黏贴版。在网上搜了很多。。

大多少的文章都是千遍一律的转载。

讲的都是Bmp的复制。并且还有错。

后来我使用GDI 实现的。

今天偶然翻到这个文件夹 将方法放在这。


//打开黏贴版
	
     if(OpenClipboard()) 
	{ 
	EmptyClipboard(); 
	CBitmap* junk   =   new   CBitmap(); 
	CClientDC   cdc(this); 
	CDC   dc; 
	dc.CreateCompatibleDC(&cdc); 
	CRect   client(0,0,300,300); 
	junk-> CreateCompatibleBitmap(&cdc,client.Width(),client.Height()); 
	dc.SelectObject(junk); 
	//使用GDI得到图片
	Bitmap pBitmap(L"F:\\aaa.jpg");
	Status status = pBitmap.GetLastStatus();
	Graphics graphics(dc);
	HBITMAP hBitmap=NULL;
	if(Ok == status)
	{
		status = pBitmap.GetHBITMAP(Color(0,0,0), &hBitmap);
	}	
	Bitmap bitmap(hBitmap, NULL);

	//画图
	graphics.DrawImage(&bitmap, Rect(0,0,300,300)); 
	
	
	

	//复制数据到剪贴板 
	SetClipboardData(CF_BITMAP,junk-> m_hObject); 
	CloseClipboard(); 
graphics.ReleaseHDC(dc);

		DeleteObject(junk);
		DeleteObject(&bitmap);
		DeleteObject(hBitmap);
		DeleteObject(&pBitmap);
		

		cdc.DeleteDC();
		dc.DeleteDC();
	

	delete   junk; 
	} 


标签: vc mfc

评论(0) 浏览(2733)

vc MFC 图片下载方法

2014-7-24 奇Yu 系统编程

这是很早以前写的 MFC  的图片下载方法,看到博客空空如也,就把以前的源代码 放上了,撑撑门面把

CString DownImg(CString url)
{
	CInternetSession session;
	CFile *Pfile;
	CFile file;
	
	//dwFileSize 图片的大小,dwByteRead;
	DWORD dwFileSize;  
	int nPos= url.ReverseFind('/');//查找右边第一个/的位置
	CString Name = url.Right(url.GetLength() - nPos - 1 );//保存的文件名字
	
	//检查图片是否存在
	int Exists=PathFileExists(L".\\temp\\"+Name);
	if(Exists==0)
	{
		//不存在了 重新调整写入路径
		CString lujing=(L".\\temp\\")+Name;

		//打开URL
		Pfile=session.OpenURL(url);
		if (Pfile!=INVALID_HANDLE_VALUE)
		{
			dwFileSize=  Pfile->GetLength();//获取文件字节数 
			if (dwFileSize==0xFFFFFFFF)
			{			
				AfxMessageBox(L"图片获取失败!");
			}
			//创建缓存
			char szInfoBuffer[1024*10];
			//写入文件
			if(file.Open(lujing,CFile::modeCreate|CFile::modeWrite))
			{
				while (Pfile->Read(szInfoBuffer,1024*10) != 0)
				{
					 file.Write(szInfoBuffer,1024*10);
				}
			 file.Close();
			}
			

		}
		session.Close();		
	
	}
	
	return Name;
}

标签: vc mfc

评论(0) 浏览(2199)

Powered by emlog 豫ICP备14014990号-1 sitemap