win10 x64逆向某游戏线程检测(一)

申明

以下是我对某个游戏的检测线程比较感兴趣进行一定分析,切勿用于非法行为,所产生后果自行承担,本人不负任何责任。

原理

一般线程检测需要用到API函数有CreateToolhelp32Snapshot—Thread32First—Thread32Next;在这当中某一个API下个断点即可,再找返回上一层就是调用它的地址。

定位逆向汇编代码

我下断点的api函数是:Thread32First;然后返回上层得到的地址如下:
在这里插入图片描述

汇编代码进行还原c代码

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <Windows.h>
#include <tlhelp32.h>

int main()
{

	THREADENTRY32 te32;									// 线程快照信息
	// 创建线程快照
	HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
	if (hThreadSnap == INVALID_HANDLE_VALUE)
	{
		GetLastError()|0xE0F0000; //错误码或上0xE0F0000
		//然后 跳转到相关处理函数
		std::cout << "如果相等就错了一些处理" << std::endl;
		return FALSE;
	}
	//把XMMO 置为0  R8 = CloseHandle地址 RDX = hThreadSnap RCX = 堆栈指针地址;
	//call 1c318fed458   不知道这个函数做什么检测用  下次跟进看看


	// 为快照分派内存空间
	te32.dwSize = sizeof(THREADENTRY32);
	// 获取第一个线程的信息
	if (Thread32First(hThreadSnap, &te32) == 0)
	{
		std::cout << "失败做一些处理" << std::endl;
	}

	while (1)
	{
		//mov rax,[rsi]  //rsi指向一个类
		//lea rdx,[rsp+38] //取的是te32堆栈地址 得到线程的相关信息
		//mov rcx,rsi   //把rsi的地址传给rcx
		//	call [rax]  //rax是一个函数地址值
		//这个函数传了二个值 第一个是rsi指向类的值,第二个传的是te32
		//做一些线程特征等检测  
		//之后分析这个函数检测了一些什么线程特征
	
		//检测完返回值不为0 那么就继续循环下个线程  
		BOOL tmp = TRUE;
		if (TRUE)
		{
			if (Thread32Next(hThreadSnap, &te32) == 0)
			{
				std::cout << "跳转到别的地方处理" << std::endl;
			}
		}

	}





}


总结

	//mov rax,[rsi]  //rsi指向一个类
		//lea rdx,[rsp+38] //取的是te32堆栈地址 得到线程的相关信息
		//mov rcx,rsi   //把rsi的地址传给rcx
		//	call [rax]  //rax是一个函数地址值
		//这个函数传了二个值 第一个是rsi指向类的值,第二个传的是te32
		//做一些线程特征等检测  

主要就是分析上面这个检测函数做了什么,在检测二来具体分析!
如果对您有帮助,请点赞!谢谢

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值