我想用非法途径搞钱 可恨能力不足不能为

[原创]过掉DNF游戏保护,仅供学习研究。不得用于非法途径。
由于我的C用的比较少,所以大部分都用的汇编,部分地方用汇编写不是很方便,所以我用的C,由于只是学习,所以内核地址我没有计算都是硬编码的。过DNF主要分为三步,也许我的思路不太正确,反正可以OD调试,下断。
程序没怎么修边幅,因为只是测试,所以一般都没有写更改内核后的恢复,不过不妨碍使用。
第一步,这也是最起码的,你必须要能够打开游戏进程和线程,能够开打进程和线程后不被检测到
第二步,能够读写进村内存
第三步,能够用OD附加游戏进程
第四步,能够下硬件断点而不被检测
跳过NtReadVirtualMemory,NtWriteVirtualMemory函数头的钩子
#include&ntddk.h&
typedef struct _SERVICE_DESCRIPTOR_TABLE
ServiceTableB
ServiceCounterTableB
ParamTableB
}SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE; //由于KeServiceDescriptorTable只有一项,这里就简单点了
extern PSERVICE_DESCRIPTOR_TABLE
KeServiceDescriptorT//KeServiceDescriptorTable为导出函数
/////////////////////////////////////
VOID Hook();
VOID Unhook();
VOID OnUnload(IN PDRIVER_OBJECT DriverObject);
//////////////////////////////////////
ULONG JmpA//跳转到NtOpenProcess里的地址
ULONG JmpAddress1;//跳转到NtOpenProcess里的地址
ULONG OldServiceA//原来NtOpenProcess的服务地址
ULONG OldServiceAddress1;//原来NtOpenProcess的服务地址
//////////////////////////////////////
__declspec(naked) NTSTATUS __stdcall MyNtReadVirtualMemory(HANDLE ProcessHandle,
PVOID BaseAddress,
PVOID Buffer,
ULONG NumberOfBytesToRead,
PULONG NumberOfBytesReaded)
//共十个字节
[JmpAddress]
__declspec(naked) NTSTATUS __stdcall MyNtWriteVirtualMemory(HANDLE ProcessHandle,
PVOID BaseAddress,
PVOID Buffer,
ULONG NumberOfBytesToWrite,
PULONG NumberOfBytesReaded)
//共十个字节
[JmpAddress1]
///////////////////////////////////////////////////
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
DriverObject-&DriverUnload = OnU
DbgPrint("Unhooker load");
return STATUS_SUCCESS;
/////////////////////////////////////////////////////
VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
DbgPrint("Unhooker unload!");
/////////////////////////////////////////////////////
VOID Hook()
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*)A//保存原来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);
//去掉内存保护
eax,not 10000h
*((ULONG*)Address) = (ULONG)MyNtReadVirtualM//HOOK SSDT
*((ULONG*)Address1) = (ULONG)MyNtWriteVirtualM
//恢复内存保护
eax,10000h
//////////////////////////////////////////////////////
VOID Unhook()
Address, Address1;
Address = (ULONG)KeServiceDescriptorTable-&ServiceTableBase + 0xBA * 4;//查找SSDT
Address1 = (ULONG)KeServiceDescriptorTable-&ServiceTableBase + 0x115 * 4;
eax,not 10000h
*((ULONG*)Address) = (ULONG)OldServiceA//还原SSDT
*((ULONG*)Address1) = (ULONG)OldServiceAddress1;//还原SSDT
eax,10000h
DbgPrint("Unhook");
由于它不断对DebugPort清零,所以要修改调试相关函数,使得所有的访问DebugPort的地方全部访问EPROCESS中的ExitTime字节,这样它怎么清零都无效了,也检测不到
.model flat, stdcall
option casemap:none
include dnf_hook.inc
Dspdo_1 equ 80643db6h
Dmpp_1 equ 80642d5eh
Dmpp_2 equ 80642d64h
Dct_1 equ h
Dqm_1 equ h
Kde_1 equ 804ff5fdh
Dfe_1 equ h
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 h
;还原自己的Hook
DriverUnload proc pDriverObject:PDRIVER_OBJECT
DriverUnload endp
ModifyFuncAboutDbg proc addrOdFunc, cmd_1, cmd_2
mov ebx, addrOdFunc
mov eax, cmd_1
DWORD ptr [ebx], eax
mov eax, cmd_2
DWORD ptr [ebx + 4], eax
ModifyFuncAboutDbg endp
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
eax, not 10000h
invoke ModifyFuncAboutDbg, Dspdo_1, h, 0fde89090h
invoke ModifyFuncAboutDbg, Dmpp_1, 90787e39h, 950f9090h
invoke ModifyFuncAboutDbg, Dct_1, 90785e39h, 840f9090h
invoke ModifyFuncAboutDbg, Dqm_1, 9078408bh, h
invoke ModifyFuncAboutDbg, Kde_1, h, h
invoke ModifyFuncAboutDbg, Dfe_1, 9078418bh, 0d2329090h
invoke ModifyFuncAboutDbg, Pcp_1, h, 45f69090h
invoke ModifyFuncAboutDbg, Mcp_1, 90785e39h, 950f9090h
invoke ModifyFuncAboutDbg, Mcp_2, 90784a89h, 5e399090h
invoke ModifyFuncAboutDbg, Dmvos_1, 9078498bh, 0cb3b9090h
invoke ModifyFuncAboutDbg, Dumvos_1, h, h
invoke ModifyFuncAboutDbg, Pet_1, 00787f83h, h
invoke ModifyFuncAboutDbg, Det_1, 9078498bh, 0c9859090h
invoke ModifyFuncAboutDbg, Dep_1, 9078498bh, 0c9859090h
;invoke ModifyFuncAboutDbg, Dmpp_2, 8bc0950fh, 8b90c032h
mov eax, pDriverObject
eax : ptr DRIVER_OBJECT
[eax].DriverUnload, offset DriverUnload
eax : nothing
mov eax, cr0
or eax, 10000h
mov eax, STATUS_SUCCESS
DriverEntry endp
end DriverEntry
绕过NtOpenProcess,NtOpenThread,KiAttachProcess
以及最重要的,不能让它检测到有硬件断点,所以要对CONTEXT做一些伪装,把真实的DR0~DR7的数据存放到别的地方,OD访问的时候返回正确的数据,如果是DNF要获取上下文,就稍微做下手脚
.model flat, stdcall
option casemap:none
include dnf_hook.inc
NtOpenProcessHookAddr equ 805cc626h
NtOpenProcessRetAddr equ 805cc631h
NtOpenProcessNoChange equ 805cc62ch
NtOpenThreadHookAddr equ 805cc8a8h
NtOpenThreadRetAddr equ 805cc8b3h
NtOpenThreadNoChange equ 805cc8aeh
KiAttachProcessAddr equ 804f9a08h
KiAttachProcessRetAddr equ 804f9a0fh
ObOpenObjectByPointerAddr equ 805bcc78h
NtGetContextThreadAddr equ 805da3h
NtGetContextThreadRetAddr equ 805c76a7h;805d2555h
nameOffset dd ?
threadCxtLink dd 0
tmpLink dd ?
GetProcessName proc
invoke PsGetCurrentProcess
mov ebx, eax
ebx, nameOffset
invoke DbgPrint, $CTA0("\n")
invoke DbgPrint, ebx
invoke strncmp, $CTA0("DNF.exe"), ebx, 6
invoke DbgPrint, $CTA0("\n")
GetProcessName endp
HookCode proc
;执行被覆盖的代码
dword ptr [ebp-38h]
dword ptr [ebp-24h]
;判断是否dnf的进程
invoke GetProcessName
.if !eax ;如果是DNF自己的进程,那么跳转回去执行它的Hook代码
invoke DbgPrint, $CTA0("\nNotUnHook\n")
mov eax, NtOpenProcessNoC805c13e6h
;如果不是DNF自己的进程,那么直接调用ObOpenObjectByPointer,再返回到后面
invoke DbgPrint, $CTA0("\nUnHook\n")
mov eax, ObOpenObjectByPointerA805b13f0h
mov ebx, NtOpenProcessRetA805c13ebh
HookCode endp
;获取系统名称偏移
GetNameOffset proc epe
local tmpOffset
mov ebx, epe
invoke strlen, $CTA0("System")
xor ecx, ecx
invoke strncmp, $CTA0("System"), ebx, eax
mov tmpOffset, ecx
mov eax, tmpOffset
cmp ecx, 4096
mov eax, -1
GetNameOffset endp
;头5字节跳转
mov eax, offset HookCode
sub eax, NtOpenProcessHookA805c13e0h;805c13edh
sub eax, 5
mov ebx, NtOpenProcessHookA805c13e0h;805c13edh
mov cl, 0E9h
mov BYTE PTR [ebx], cl
mov DWORD PTR [ebx + 1], eax
HookThreadCode proc
;执行被覆盖的代码
dword ptr [ebp-34h]
dword ptr [ebp-20h]
;判断是否dnf的进程
invoke GetProcessName
.if !eax ;如果是DNF自己的进程,那么跳转回去执行它的Hook代码
invoke DbgPrint, $CTA0("\nNotUnHook\n")
mov eax, NtOpenThreadNoC805c13e6h
;如果不是DNF自己的进程,那么直接调用ObOpenObjectByPointer,再返回到后面
invoke DbgPrint, $CTA0("\nUnHook\n")
mov eax, ObOpenObjectByPointerA805b13f0h
mov ebx, NtOpenThreadRetA805c13ebh
HookThreadCode endp
HookThread proc
;头5字节跳转
mov eax, offset HookThreadCode
sub eax, NtOpenThreadHookA805c13e0h;805c13edh
sub eax, 5
mov ebx, NtOpenThreadHookA805c13e0h;805c13edh
mov cl, 0E9h
mov BYTE PTR [ebx], cl
mov DWORD PTR [ebx + 1], eax
HookThread endp
HookDbg proc
mov esi, KiAttachProcessRetAddr
HookDbg endp
;头5字节跳转
mov eax, offset HookDbg
sub eax, KiAttachProcessA805c13e0h;805c13edh
sub eax, 5
mov ebx, KiAttachProcessA805c13e0h;805c13edh
mov cl, 0E9h
mov BYTE PTR [ebx], cl
mov DWORD PTR [ebx + 1], eax
;还原自己的Hook
DriverUnload proc pDriverObject:PDRIVER_OBJECT
eax, not 10000h
;还原进程处理
mov eax, 0ffc875ffh
mov ebx, 805cc656h
DWORD ptr [ebx], eax
eax, 43e8dc75h
mov DWORD ptr [ebx + 4], eax
;还原线程处理
mov eax, 0ffcc75ffh
mov ebx, 805cc8d8h
DWORD ptr [ebx], eax
eax, 0c1e8e075h
mov DWORD ptr [ebx + 4], eax
;还原调试处理
mov eax, 08b55ff8bh
mov ebx, 804f9a08h
DWORD ptr [ebx], eax
mov eax, 08b5653ech
DWORD ptr [ebx + 4], eax
mov eax, cr0
or eax, 10000h
DriverUnload endp
;显示LinkTable的信息
ShowLinkTableInfo proc ptrLT
DbgPrint, $CTA0("\nThe LinkTable Info:\n")
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).ThreadHandle
DbgPrint, $CTA0("ThreadHandle:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).Dr0Seg
DbgPrint, $CTA0("Dr0Seg:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).Dr1Seg
DbgPrint, $CTA0("Dr1Seg:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).Dr2Seg
DbgPrint, $CTA0("Dr2Seg:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).Dr3Seg
DbgPrint, $CTA0("Dr3Seg:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).Dr6Seg
DbgPrint, $CTA0("Dr6Seg:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).Dr7Seg
DbgPrint, $CTA0("Dr7Seg:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).LinkPtr
DbgPrint, $CTA0("LinkPtr:%0X\n"), eax
mov ebx, ptrLT
mov eax, (LinkTable ptr [ebx]).NextLinkPtr
DbgPrint, $CTA0("NextLinkPtr:%0X\n"), eax
ShowLinkTableInfo endp
;判断该线程是否存在
;如果不存在则返回0,存在则返回指向该链表的指针,1代表链表为空
ExsitsLinkTable proc pHandle
mov eax, threadCxtLink
.if !eax ;链表为空
DbgPrint, $CTA0("\nLinkTable Is Null.\n")
mov eax, 1
mov ebx, (LinkTable ptr [eax]).ThreadHandle
cmp ebx, pHandle ;如果匹配已经存在
mov eax, (LinkTable ptr [eax]).NextLinkPtr
.if !eax ;已经到达末尾,没有找到匹配
DbgPrint, $CTA0("\pHandle Is Not Found.\n")
xor eax, eax
DbgPrint, $CTA0("\npHandle Is Exsits.\n")
ShowLinkTableInfo, eax
;返回链表指针
mov tmpLink, eax
mov eax, tmpLink
ExsitsLinkTable endp
;拷贝Context到LinkTable中
CopyContextToLinkTable proc ptrContext, ptrLT
mov ebx, ptrContext
mov edx, ptrLT
mov ecx, 4
mov eax, DWORD ptr [ebx + ecx]
mov DWORD ptr [edx + ecx], eax
add ecx, 4
cmp ecx, 18h
CopyContextToLinkTable endp
;添加LinkTable表
AddLinkTable proc pHandle, ptrContext
invoke ExsitsLinkTable, pHandle
.if eax & 1
;已经存在只需要更新dr寄存器即可
invoke CopyContextToLinkTable, eax, ptrContext
ExAllocatePool, 1, size LinkTable
;申请内存成功
mov ebx, eax
;置地一个元素
mov ecx, pHandle
mov (LinkTable ptr [ebx]).ThreadHandle, ecx
;拷贝dr寄存器的值
invoke CopyContextToLinkTable, ptrContext, ebx
;置另外两个元素
mov (LinkTable ptr [ebx]).LinkPtr, ebx
mov (LinkTable ptr [ebx]).NextLinkPtr, 0
invoke ShowLinkTableInfo, ebx
;把新的链表项添加到链表中
.if eax == 1
;如果链表为空,直接加在表头
mov threadCxtLink, ebx
;如果链表不为空则加到末尾
mov eax, threadCxtLink
;指向下一个元素
mov ecx, (LinkTable ptr [eax]).NextLinkPtr
test ecx, ecx
mov eax, ecx
mov (LinkTable ptr [eax]).NextLinkPtr, ebx
;申请内存失败
invoke DbgPrint, $CTA0("\nAlloc Memory Faild.\n")
AddLinkTable endp
;判断进程是否过虑进程
;如果是需要过虑的进程返回值为1,否则返回0
IsFilterProcess proc
;获取当前进程名
PsGetCurrentProcess
mov ebx, eax
ebx, nameOffset
DbgPrint, $CTA0("\n%s: Call NtGetContextThread \n"), ebx
strncmp, $CTA0("DNF.exe"), ebx, 7
test eax, eax
mov eax, 1
xor eax, eax
IsFilterProcess endp
;显示Context的调试寄存器
ShowDrRegInfo proc ptrContext
DbgPrint, $CTA0("\nThe Context Info:\n")
mov ebx, ptrContext
mov eax, DWORD ptr [ebx + 4]
DbgPrint, $CTA0("Dr0:%0X\n"), eax
mov ebx, ptrContext
mov eax, DWORD ptr [ebx + 8]
DbgPrint, $CTA0("Dr1:%0X\n"), eax
mov ebx, ptrContext
mov eax, DWORD ptr [ebx + 0ch]
DbgPrint, $CTA0("Dr2:%0X\n"), eax
mov ebx, ptrContext
mov eax, DWORD ptr [ebx + 10h]
DbgPrint, $CTA0("Dr3:%0X\n"), eax
mov ebx, ptrContext
mov eax, DWORD ptr [ebx + 14h]
DbgPrint, $CTA0("Dr6:%0X\n"), eax
mov ebx, ptrContext
mov eax, DWORD ptr [ebx + 18h]
DbgPrint, $CTA0("Dr7:%0X\n"), eax
ShowDrRegInfo endp
;恢复被隐藏的dr寄存器
RecoveryDrReg proc ptrContext, pHandle
;定位到LinkTable
mov ebx, threadCxtLink
test ebx, ebx
jne @F ;如果没有遍历完
mov eax, (LinkTable ptr [ebx]).ThreadHandle
cmp eax, pHandle
je @F ;如果找到匹配项
mov ebx, (LinkTable ptr [ebx]).NextLinkPtr
;拷贝完毕后立即结束
invoke CopyContextToLinkTable, ebx, ptrContext
xor ebx, ebx
RecoveryDrReg endp
;清空Context的dr寄存器
ClearDrReg proc ptrContext
mov ebx, ptrContext
mov ecx, 4
mov DWORD ptr [ebx + ecx], 0
add ecx, 4
cmp ecx, 18h
invoke DbgPrint, $CTA0("\n-------------ClearDrReg-------------\n")
invoke ShowDrRegInfo, ptrContext
ClearDrReg endp
;NtGetContextThread钩子代码
NtGetContextThreadHookCode proc
;ebx存放CONTEXT指针
mov ebx, DWORD ptr [ebp + 10h]
mov edx, DWORD ptr [ebp + 0ch]
invoke ShowDrRegInfo, ebx
invoke IsFilterProcess
.if eax ;如果是DNF.exe
invoke AddLinkTable, edx, ebx
invoke ClearDrReg, ebx
;如果不是DNF.exe
invoke RecoveryDrReg, ebx, edx
invoke ShowDrRegInfo, ebx
;执行被覆盖的代码
NtGetContextThreadHookCode endp
;NtGetContextThread加跳转
HookNtGetContextThread proc
;头5字节跳转
mov eax, offset NtGetContextThreadHookCode
sub eax, NtGetContextThreadA805c13e0h;805c13edh
sub eax, 5
mov ebx, NtGetContextThreadA805c13e0h;805c13edh
mov cl, 0E9h
mov BYTE PTR [ebx], cl
mov DWORD PTR [ebx + 1], eax
HookNtGetContextThread endp
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
invoke DbgPrint, $CTA0("Begin")
invoke PsGetCurrentProcess
invoke GetNameOffset, eax
mov nameOffset, eax
cmp eax, -1
mov nameOffset, eax
eax, not 10000h
call HookThread
call HookNtGetContextThread
mov eax, pDriverObject
eax : ptr DRIVER_OBJECT
[eax].DriverUnload, offset DriverUnload
eax : nothing
mov eax, cr0
or eax, 10000h
invoke DbgPrint, $CTA0("End")
mov eax, STATUS_SUCCESS
DriverEntry endp
end DriverEntry
本人初学驱动,历经一月完成。。。已经很累了,心力交瘁唉,不舍得丢了,毕竟是自己的汗水,特此发出来大家相互学习交流。仅供参考,学习谢谢。
上传的附件:
(4.39kb,987次下载)
(66.32kb,981次下载)
支付方式:
最新回复 (156)
强大.. 谢谢了 正在研究这个游戏
呵呵 老大很强大
果然很黄很强大
还有几个Shadow SSDT hook 只需要用RU恢复一下即可,它没有检测
汇编的代码能改成C++的就好了,我不会汇编
你终于现身了。。。
进入第一页来膜拜大牛
果然很强悍
汇编是真不太懂,,,还得好好学学
要是有哪位牛人给翻译成C的,那就更强悍了
占第一页。膜拜一下。。继续学习去。
无限拜膜Lz一月成就,收藏细细研究......
楼主辛苦了,愿意把自己一个月的成果拿出来和大家分享,佩服!
先收藏,有时间再学习,可惜不是C代码
我试过把KiAttachProcess整个用lde剥出来,读写进程内存是可以的。只是玩玩,没试ObOpenObjectByPointer。
遇到DebugPort清零大家还有什么好的方法么?
support!!!
如果我的技术有资格膜拜楼主 如果我的精神有资格膜拜 ,让我膜拜一下吧!
不错不错,向楼主学习了,先收藏,谢谢楼主共享
楼主如何知道DNF挂接了哪个函数的?望赐教一二
实现某个功能遇到障碍就用icesword或者RU之类的工具大致定位下,然后再用Windbg看看
偶一直在找DebugPort
一个月就有这样的水平很强大了,我都几年了没有进步
请教LZ个问题
LZ过NTOPENPROCESS的HOOK,用到的办法是HOOK 调用ObOpenObjectByPointer函数前几个字节,然后判断是否是DNF进程读取对吧
可是DNF的驱动保护在这个地方有代码检验,不仅仅检测他自己的代理函数地址是否正确,同时也检测ObOpenObjectByPointer调用前几个字节是否被修改,如被检测出来被修改就会弹出TP发现非法模块
这一部分是怎么过的呢?
本人新手初学驱动编程,问的问题有些菜,见谅见谅
无限拜膜Lz一月成就,收藏细细研究......
呵呵~~强大~~~
LZ的代码已经没用咯。。。。。感觉是蛮久以前写的。。。现在tx都内存代码校验了。。。patch直接给蓝屏了。。。。
我已经说过可以用了。而且最近才写完,很明显,我一直都试过。没用我发出来干嘛
蓝于不蓝看你怎么用了
退一步说,校验了又如何,过不过的了在于做与不做了。
让他的驱动先加载,我每次都是在他游戏启动后加载的,这样是没检测到的。如果你先加载驱动,他肯定会报非法模块
如果是第二次开启游戏,那校验就没用了
我说哥。。。问题你没过校验的代码。。。直接中断一关就inline hook了。。。。
当然我没编译过你的代码。。并测试过你的代码。。。只是表达下我的观点。。。
很强大的。。。
驱动后加载,他就没检测。。。我过什么校验。。。
不错,有空的话,很想试试.
以前试过用RU工具,直接弹出提示说有非法程序运行,游戏自动退出,现在没这检测了?
请教RU是什么工具?
不会是RKU吧?
搜索了下.是RKU吧?Rootkit Unhooker?
那可能偶记错了,偶当前用的不是这个.
你先开启RKU,然后再启动dnf
一个名字了。。。是RKU,我说错了
可能偶记错了,偶当时用的是另一个工具,太久了.想不起名字了. .汗.
我记得后先开dnf后开rku是会蓝屏的,先开rku就没问题
能过保护读写内存是一回事,修改了内存不被检测到又是另一回事了.
这就自己研究吧
偶还指望你能给点建议呢..=v=
学人家的一句“到此为止,再搞下去TX就不高兴了”
呵呵,嗯,,這里是學習的地方
Dspdo_1 equ 80643db6h
Dmpp_1 equ 80642d5eh
Dmpp_2 equ 80642d64h
Dct_1 equ h
Dqm_1 equ h
Kde_1 equ 804ff5fdh
Dfe_1 equ h
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 h楼主你好 这些地址都是什么函数的地址,能否具体说呢?
ModifyFuncAboutDbg proc addrOdFunc, cmd_1, cmd_2
&&mov&&ebx, addrOdFunc
&&mov&&eax, cmd_1
&&mov& &DWORD ptr [ebx], eax
&&mov&&eax, cmd_2
&&mov& &DWORD ptr [ebx + 4], eax
ModifyFuncAboutDbg endp
这个函数是硬编码的,
所以下面这段太难以理解了 ,看样子好像是弄了一个hook,不知道是sdt 的还是inline的
楼主能否拿其中的一个函数举个例子。 谢谢!
&&invoke ModifyFuncAboutDbg, Dspdo_1, h, 0fde89090h
&&invoke ModifyFuncAboutDbg, Dmpp_1, 90787e39h, 950f9090h
&&invoke ModifyFuncAboutDbg, Dct_1, 90785e39h, 840f9090h
&&invoke ModifyFuncAboutDbg, Dqm_1, 9078408bh, h
&&invoke ModifyFuncAboutDbg, Kde_1, h, h
&&invoke ModifyFuncAboutDbg, Dfe_1, 9078418bh, 0d2329090h
&&invoke ModifyFuncAboutDbg, Pcp_1, h, 45f69090h
&&invoke ModifyFuncAboutDbg, Mcp_1, 90785e39h, 950f9090h
&&invoke ModifyFuncAboutDbg, Mcp_2, 90784a89h, 5e399090h
&&invoke ModifyFuncAboutDbg, Dmvos_1, 9078498bh, 0cb3b9090h
&&invoke ModifyFuncAboutDbg, Dumvos_1, h, h
&&invoke ModifyFuncAboutDbg, Pet_1, 00787f83h, h
&&invoke ModifyFuncAboutDbg, Det_1, 9078498bh, 0c9859090h
&&invoke ModifyFuncAboutDbg, Dep_1, 9078498bh, 0c9859090h
&&;invoke ModifyFuncAboutDbg, Dmpp_2, 8bc0950fh, 8b90c032h
既然是学习交流,这些都发出来了,要是能解释一下就更好了。
楼上可以看看这个
http://bbs.pediy.com/showthread.php?t=80971
谢谢 这样就清楚多了 我给整理一下:
Dspdo_1& && &——————DbgkpSetProcessDebugObject
Dmpp_1& && & ——————DbgkMapViewOfSection
Dmpp_2& && & ——————DbgkUnMapViewOfSection
Dct_1 。。。。。 累了 有人接着我的做么.... 哎~ 不懂的看一下就明白了 我就做到这里了。
牛人啊,看到都眼花缭乱
好久不上论坛& &一来就看到猛的
拜读后,获益匪浅
源码我都传上来了
系统环境是?
1.请先关注公众号。
2.点击菜单"更多"。
3.选择获取下载码。律师加盟热线:400-678-6088
手机找法网
您的当前位置:&&&&&正文
用非法途径获得我的聊天的记录的行为犯法吗??
老公用非法途径获得我的聊天的记录的行为犯法吗??
提问者:4ed7788e7***时间: 20:52:30地点:1个回答
侵权隐私权。
其他类似咨询
答: 您好。,情节轻的2年以下,情节重的2-7年,根据具体情况而定,有可能还要判处罚金
答: 《刑法》第三百四十七条【非法持有毒品罪】:非法持有鸦片一千克以上、海洛因或者甲基
答: 具体情况具体分析,努力争取法定的或者酌定的从轻、减轻处罚;建议委托聘请律师为其做
答: 你好!可以起诉争取孩子的抚养权,要求对方支付孩子的抚养费,对于孩子抚养问题,从有
答: 您好,被关押三个月的话,案子一般还在检察院的审查起诉阶段或者刚到法院,到判决大概
热门知识推荐
最新咨询回复
回答:你需要办理相应的转诊手续,然后和在新沂一样的。
回答:有宅基地使用证,可转让给本村村民。
回答:构成重婚罪可能。
回答:这个不好说,具体要看银行了。
回答:你好,事故之日起一年以内去申报工伤认定。
回答:你好,根据法院确定,一般在法院就三个月内下判决。
回答:证明你出卖的产品符合产品质量法和食品安全法的规定。
回答:你好,建议先申请工伤认定,然后进行劳动能力等级鉴定,进而申请工伤赔偿。
回答:你好,只能通过起诉来解决
回答:你好可以写好您要求增加抚养费的理由和依据
回答:您好,如果没有办理婚姻登记手续,不需要再办理相关离婚手续
回答:您好,要看是出于什么原因给对方钱,如果是借款,可以起诉要回,如果对方欺骗
回答:如果你因此收入受影响了,可向对方主张误工费。
回答:如果有固定的话,需要拆除内固定才能评定。
回答:如果你是受害方,可以找肇事方赔偿,如果你是肇事方,可以和受害方协商。
回答:可以先向劳动部门申请工伤认定。
回答:你需要治疗结束病情稳定后,可以向劳动能力鉴定部门申请劳动能力鉴定,但前提
回答:你好,你可以投诉或者提起仲裁
回答:17000元以上不满24000元的,处有期徒刑四年至五年。
回答:第一顺序为被继承人的配偶、子女、父母;第二顺序为被继承人的兄弟姐妹、祖父
回答:去你营业所在地的工商部门进行注销。
回答:确实履行完毕,就可以向执行单位申请撤销失信人员信息。
回答:可以与对方协商,签订分期偿还协议,法院可以以对方当事人申请执行你父亲名下
回答:十八周岁以下的人需要变更姓名的时候,由本人或者父母、收养人向户口登记机关
回答:可以的,民诉法规定,当事人双方可以协商适用简易程序来解决纠纷。
回答:你好,双方协商,也可以找当地的政府部门投诉。
回答:要只是交了一部分钱的话,可以退。可以主张是预约美容,但要是先认定是定金的
回答:您好不需要的生效的判决可以直接使用
回答:您好你父母可以到房产交易中心办理赠予手续
梁静飞律师
为您推荐地区及民事相关专业律师、优质民事相关法律咨询、优质民事相关法律知识等内容,如果有法律纠纷寻求帮助,可以在线!
地区律师:
热门城市律师:
江苏律师:
民事相关法律咨询:
民事相关法律知识:}

我要回帖

更多关于 能力不足视野不宽办法不多等问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信