首页
社区
课程
招聘
未解决 [原创] 利用异常来固定某些验证算法的思路
发表于: 2019-1-31 22:41 2576

未解决 [原创] 利用异常来固定某些验证算法的思路

2019-1-31 22:41
2576

学习逆向和编程应该有1年的时间了,还记得刚开始学习时的自己真的太搞笑了!目前还是处于婴儿学步阶段哈哈! 平时自己爱研究破解一些市面上的验证 比如说某E 他其中有个JS算法 需要固定他生成的随机值(固定他有很多方法 但是呢不是很方便)我一直就想找一个通用的方法,直到我看到《加密与解密》HOOK篇其中的一个异常处理HOOK给了我灵感!

OD的CC断点和内存断点都是让程序产生异常,因为有调试器 他会将异常传递给调试器进行中断程序的执行。所以呢我也利用异常来找到合适的时候来跳过随机数生成!具体的作法就是将他要写入随机数的变量的内存属性页改为只读,当某一处对此处地址进行写入时就会产生异常,这时我们捕获到 更改EIP就可以跳到我们指定的地址!代码如下 只是举了一个简单的例子 !

#include "stdafx.h"
#include"atlstr.h"
DWORD g_dwAddBase ;//产生异常的地址
DWORD g_dwJmpBase ;//要跳转到的地址
DWORD g_dwPage;//保存原内存页属性
//参数是个结构体 很重要具体成员的作用自行查看微软MSDN
LONG WINAPI GetAbnormal(_EXCEPTION_POINTERS* ExceptionInfo )
{
	MessageBox(NULL, "获取异常", NULL, MB_OK);
	char szNewMsg[1024] = {};
	LONG lRet = EXCEPTION_CONTINUE_SEARCH;//不处理异常时默认返回值
	PEXCEPTION_RECORD pExceptionRecord = ExceptionInfo->ExceptionRecord;//获取异常信息
	PCONTEXT pContextRecord = ExceptionInfo->ContextRecord;
	int ret = 0;
	ULONG_PTR* uEsp = 0;
	CString strBase;
	strBase.Format(_T("产生的异常地址为:%X"), (DWORD)pExceptionRecord->ExceptionAddress);
	MessageBox(NULL, strBase, _T("捕获到异常"), MB_OK);
	//判断所异常地址是否是计划中的
	if ((DWORD)pExceptionRecord->ExceptionAddress==g_dwAddBase)
	{
		uEsp=(ULONG_PTR*)pContextRecord->Esp;//获取中断时ESP的值
		pContextRecord->Eip = (ULONG_PTR) g_dwJmpBase;//将EIP设置为指定值
		lRet = EXCEPTION_CONTINUE_EXECUTION;//返回值设置为继续执行
		VirtualProtect((LPVOID)g_dwAddBase, 5, g_dwPage, NULL);//恢复原来的属性
	}
	return lRet;
	

}
BOOL AbnoRmalHook()
{
	//安装VEH
	return (BOOL)AddVectoredExceptionHandler(1, GetAbnormal);
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		VirtualProtect((LPVOID)g_dwAddBase, 5, PAGE_READONLY, &g_dwPage);
		if (AbnoRmalHook())
		{
			MessageBox(NULL,"执行成功",NULL,MB_OK);
		}
		
		break;
	case DLL_THREAD_ATTACH:

		break;
	case DLL_THREAD_DETACH:

		break;
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}
看雪大神太多了 请不要笑我!感谢

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
非常好的分享,
2019-2-1 08:57
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
g_dwAddBase 这个变量没赋值怎么产生异常?
2019-2-1 12:09
0
雪    币: 6710
活跃值: (3343)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
E盾是可以山寨的
2019-2-4 11:34
0
游客
登录 | 注册 方可回帖
返回