易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 2090|回复: 0

来个高人呀!急呀!

[复制链接]

2

主题

2

回帖

25

积分

编程入门

Rank: 1

魔鬼币
25
发表于 2011-2-3 13:39:20 | 显示全部楼层 |阅读模式
能帮忙把的源码弄成易语言的吗???详细解释一下易语言怎么弄也行呀!

第一步,这也是最起码的,你必须要能够打开游戏进程和线程,能够开打进程和线程后不被检测到
第二步,能够读写进村内存
第三步,能够用OD附加游戏进程
第四步,能够下硬件断点而不被检测

跳过NtReadVirtualMemory,NtWriteVirtualMemory函数头的钩子

代码:
[code#include<ntddk.h>

typedef struct _SERVICE_DESCRIPTOR_TABLE
{
   PVOID    ServiceTableBase;
   PULONG   ServiceCounterTableBase;
   ULONG    NumberOfService;
   ULONG    ParamTableBase;
}SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE; //由于KeServiceDescriptorTable只有一项,这里就简单点了
extern PSERVICE_DESCRIPTOR_TABLE     KeServiceDescriptorTable;//KeServiceDescriptorTable为导出函数

/////////////////////////////////////
VOID Hook();
VOID Unhook();
VOID OnUnload(IN PDRIVER_OBJECT DriverObject);
//////////////////////////////////////
ULONG JmpAddress;//跳转到NtOpenProcess里的地址
ULONG JmpAddress1;//跳转到NtOpenProcess里的地址
ULONG OldServiceAddress;//原来NtOpenProcess的服务地址
ULONG OldServiceAddress1;//原来NtOpenProcess的服务地址
//////////////////////////////////////
__declspec(naked) NTSTATUS __stdcall MyNtReadVirtualMemory(HANDLE ProcessHandle,
                PVOID BaseAddress,
                PVOID Buffer,
                ULONG NumberOfBytesToRead,
          PULONG NumberOfBytesReaded)
{
   //跳过去
   __asm
   {
     push     0x1c
     push     804eb560h   //共十个字节
     jmp      [JmpAddress]   
   }
}

__declspec(naked) NTSTATUS __stdcall MyNtWriteVirtualMemory(HANDLE ProcessHandle,
                PVOID BaseAddress,
                PVOID Buffer,
                ULONG NumberOfBytesToWrite,
          PULONG NumberOfBytesReaded)
{
   //跳过去
   __asm
   {
     push     0x1c
     push     804eb560h   //共十个字节
     jmp      [JmpAddress1]
   }
}
///////////////////////////////////////////////////
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath
{
    DriverObject->DriverUnload = OnUnload;
   DbgPrint("Unhooker load");
   Hook();
   return STATUS_SUCCESS;
}
/////////////////////////////////////////////////////
VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
{
   DbgPrint("Unhooker unload!");
   Unhook();
}
/////////////////////////////////////////////////////
VOID Hook()
{
   ULONG   Address, Address1;
   Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0xBA * 4;//0x7A为NtOpenProcess服务ID
   Address1 = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x115 * 4;//0x7A为NtOpenProcess服务ID

   DbgPrint("Address:0x%08X",Address);

   OldServiceAddress = *(ULONG*)Address;//保存原来NtOpenProcess的地址
   OldServiceAddress1 = *(ULONG*)Address1;//保存原来NtOpenProcess的地址
   DbgPrint("OldServiceAddress:0x%08X",OldServiceAddress);
   DbgPrint("OldServiceAddress1:0x%08X",OldServiceAddress1);

   DbgPrint("MyNtOpenProcess:0x%08X",MyNtReadVirtualMemory);
   DbgPrint("MyNtOpenProcess:0x%08X",MyNtWriteVirtualMemory);

   JmpAddress = (ULONG)0x805b528a + 7; //跳转到NtOpenProcess函数头+10的地方,这样在其前面写的JMP都失效了
   JmpAddress1 = (ULONG)0x805b5394 + 7;
   DbgPrint("JmpAddress:0x%08X",JmpAddress);
   DbgPrint("JmpAddress1:0x%08X",JmpAddress1);
   
   __asm
   {     //去掉内存保护
     cli
         mov   eax,cr0
     and   eax,not 10000h
     mov   cr0,eax
   }

   *((ULONG*)Address) = (ULONG)MyNtReadVirtualMemory;//HOOK SSDT
   *((ULONG*)Address1) = (ULONG)MyNtWriteVirtualMemory;

   __asm
   {     //恢复内存保护  
         mov   eax,cr0
     or    eax,10000h
     mov   cr0,eax
     sti
   }
}
//////////////////////////////////////////////////////
VOID Unhook()
{
   ULONG   Address, Address1;
   Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0xBA * 4;//查找SSDT
   Address1 = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x115 * 4;

   __asm{
     cli
           mov   eax,cr0
     and   eax,not 10000h
     mov   cr0,eax
   }

   *((ULONG*)Address) = (ULONG)OldServiceAddress;//还原SSDT
   *((ULONG*)Address1) = (ULONG)OldServiceAddress1;//还原S
__asm{  
          mov   eax,cr0
     or    eax,10000h
     mov   cr0,eax
     sti
   }

   DbgPrint("Unhook");
}
由于它不断对DebugPort清零,所以要修改调试相关函数,使得所有的访问DebugPort的地方全部访问EPROCESS中的ExitTime字节,这样它怎么清零都无效了,也检测不到

代码:
.386
.model flat, stdcall
option casemap:none

include dnf_hook.inc

.const
Dspdo_1 equ 80643db6h
Dmpp_1 equ 80642d5eh
Dmpp_2 equ 80642d64h
Dct_1 equ 806445d3h
Dqm_1 equ 80643089h
Kde_1 equ 804ff5fdh
Dfe_1 equ 80644340h
Pcp_1 equ 805d1a0dh
Mcp_1 equ 805b0c06h
Mcp_2 equ 805b0d7fh
Dmvos_1 equ 8064497fh
Dumvos_1 equ 80644a45h
Pet_1 equ 805d32f8h
Det_1 equ 8064486ch
Dep_1 equ 806448e6h

.code
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表