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)

EditPlus注册码在线生成

2015-8-9 奇Yu 系统编程

网上找的EditPlus注册码在线生成,出处已经找不到了。

可以生成各个版本的EditPlus 的注册码

https://www.imqiyu.com/demo/EditPlus/EditPlus.html

评论(2) 浏览(2458)

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)

国内某物流网站 套接字 解密的反汇编代码

2014-7-30 奇Yu 系统编程

.code 
		push ebx
		push esi
		push edi
		push ebp
		add esp,-0x8h
		mov ebp,edx
		mov eax,dword ptr ss:[ebp]
		mov dword ptr ss:[esp+0x4h],eax
		mov eax,dword ptr ss:[esp+0x4h]
		test eax,eax
		je short L0048FA95
		sub eax,0x4h
		mov eax,dword ptr ds:[eax]
L0048FA95:
		mov word ptr ss:[esp],ax
		cmp word ptr ss:[esp],0x0h
		jbe L0048FB70
		movzx eax,word ptr ss:[esp]
		shr eax,01h
		mov word ptr ss:[esp],ax
		movzx edi,word ptr ss:[esp]
		test di,0dih
		jbe short L0048FB36
		mov bx,0x1h
L0048FABB:
		test bl,0x1h
		je short L0048FB06
		movzx esi,bx
		mov eax,dword ptr ss:[ebp]
		movzx eax,byte ptr ds:[eax+esi-0x1h]
		mov byte ptr ss:[esp+0x2h],al
		mov eax,ebp
		call L004056F0
		movzx edx,word ptr ss:[esp]
		movzx ecx,bx
		add edx,ecx
		mov ecx,dword ptr ss:[ebp]
		movzx edx,byte ptr ds:[ecx+edx-0x1h]
		mov byte ptr ds:[eax+esi-0x1h],dl
		mov eax,ebp
		call L004056F0
		movzx edx,word ptr ss:[esp]
		movzx ecx,bx
		add edx,ecx
		movzx ecx,byte ptr ss:[esp+0x2h]
		mov byte ptr ds:[eax+edx-0x1h],cl
		jmp short L0048FB30
L0048FB06:
		mov eax,ebp
		call L004056F0
		movzx edx,bx
		lea esi,dword ptr ds:[eax+edx-0x1h]
		mov eax,ebp
		call L004056F0
		movzx edx,word ptr ss:[esp]
		movzx ecx,bx
		add edx,ecx
		lea eax,dword ptr ds:[eax+edx-0x1h]
		movzx edx,byte ptr ds:[eax]
		xor byte ptr ds:[esi],dl
		xor byte ptr ds:[eax],0x83h
L0048FB30:
		inc ebx
		dec di
		jnz short L0048FABB
L0048FB36:
		mov eax,ebp
		call L004056F0
		mov esi,eax
		mov eax,dword ptr ss:[ebp]
		mov dword ptr ss:[esp+0x4h],eax
		mov eax,dword ptr ss:[esp+0x4h]
		test eax,eax
		je short L0048FB53
		sub eax,0x4h
		mov eax,dword ptr ds:[eax]
L0048FB53:
		mov edi,eax
		test di,0dih
		jbe short L0048FB70
L0048FB5A:
		xor byte ptr ds:[esi],0x62h
		cmp byte ptr ds:[esi],0x80h
		jbe short L0048FB67
		sub byte ptr ds:[esi],0x60h
		jmp short L0048FB6A
L0048FB67:
		add byte ptr ds:[esi],0xA0h
L0048FB6A:
		inc esi
		dec di
		jnz short L0048FB5A
L0048FB70:
		pop ecx
		pop edx
		pop ebp
		pop edi
		pop esi
		pop ebx
		retn

反编译后的代码大概是这样的可以简单的看出逻辑

char a[100];
int i=0;


for(i=0;i<a.len;i++){

    a[i]=  a[i] xor 0x62
    if(a[i]==0x80 or a[i]<0x80){
        a[i]+=0xa0;
    }else
    {
        a[i]-=0x60
    }

}


int a[]={0x9C,0x00,0x00, 0xC5,0x00,0xEC,0x02, 0x0C, 0xE8};

for(int i=0;i<8;i++){

    a[i]=  a[i] | 0x62;
    if(a[i]==0x80 || a[i]<0x80){
        a[i]+=0xa0;
    }else
    {
        a[i]-=0x60;
    }

}


评论(0) 浏览(2274)

vc控制台程序将二进制转换成UTF8

2014-7-28 奇Yu 系统编程

很久以前写的了。发现在电脑里有存档,现在黏贴在次。之前用抓包软件抓包,发现他只能转换成ANSI的所以写的

#include <stdio.h>
#include <vector>

size_t GetFileSize(FILE* fd)
{
	size_t cur_pos = ftell(fd);
	fseek(fd,0,SEEK_END);
	size_t file_size = ftell(fd);
	fseek(fd,cur_pos,SEEK_SET);
	return file_size;
}

int CharHexToInt( char c , int offset )
{
	int value = 0;

	if( c <= '9' && c >= '0'){
		value = c - 0x30;
	}else if( c <= 'f' && c >= 'a' ){
		value = 10 + (c - 'a');
	}else if( c <= 'F' && c >= 'A'){
		value = 10 + (c - 'A');
	}else
		return 0;

	value <<= (4 * offset);

	return value;
}

size_t ReSetContext( std::vector<char> &output, std::vector<char> &input)
{
	int temps = 0;
	char offset = 1;
	for( size_t i = 0; i < input.size(); ++i ){
		if( input[i] == 0x20 ){
			output.push_back((char)temps);
			temps = 0;
			continue;
		}
		temps += CharHexToInt(input[i],offset);
		offset -= 1;
		offset *= offset;
	}
	return output.size();
}

int main(int argc ,char *argv[])
{
	std::vector<char> content;
	std::vector<char> output;

	FILE *fd = fopen("./s.bin","rb");
	if(fd == NULL)
		return 0;

	FILE *fd = NULL;
	fopen_s(&fd, "./s.bin", "rb");
	if (fd == NULL)
		return 0;


	size_t size = GetFileSize(fd);
	content.resize(size,0);
	fread(&content.front(),sizeof(char),size,fd);
	
	fflush(fd);
	fclose(fd);

	ReSetContext(output,content);
	
	fd = fopen("./s.txt","a");
	if(fd == NULL)
		return 0;
	fwrite(&output.front(),sizeof(char),output.size(),fd);
	fflush(fd);
	fclose(fd);

	return 0;

}
 

评论(0) 浏览(2174)

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