|
[求助]DebugPort清零
找到了,原来 RtlCopyMemory((PUCHAR)(DbgkForwardExceptionAddr + DbgkCreateThreadOffset + 2), ChangeComand, 4); 写错了。。。 现在改回去 RtlCopyMemory((PUCHAR)(DbgkForwardExceptionAddr + DbgkForwardExceptionOffset + 2), ChangeComand, 4); |
|
打开一个PE文件后,如何计算 .data 段的偏移?
看下PE的结构就会明白了吧。 |
|
[求助]ZwMapViewOfSection文件后,如何计算 .data 段的偏移地址?
我是新手,这是我在看雪看到的一个获取函数地址的函数 貌似是通过将一个pe文件映射到当前进程 BaseAddress就是Pe文件的头部了,我也不太明白。。你自己看看吧 DWORD GetDllFunctionAddress(char* lpFunctionName, PUNICODE_STRING pDllName) { HANDLE hThread, hSection, hFile, hMod; SECTION_IMAGE_INFORMATION sii; IMAGE_DOS_HEADER* dosheader; IMAGE_OPTIONAL_HEADER* opthdr; IMAGE_EXPORT_DIRECTORY* pExportTable; DWORD* arrayOfFunctionAddresses; DWORD* arrayOfFunctionNames; WORD* arrayOfFunctionOrdinals; DWORD functionOrdinal; DWORD Base, x, functionAddress; char* functionName; STRING ntFunctionName, ntFunctionNameSearch; PVOID BaseAddress = NULL; SIZE_T size=0; OBJECT_ATTRIBUTES oa = {sizeof oa, 0, pDllName, OBJ_CASE_INSENSITIVE}; IO_STATUS_BLOCK iosb; ZwOpenFile(&hFile, FILE_EXECUTE | SYNCHRONIZE, &oa, &iosb, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT); oa.ObjectName = 0; ZwCreateSection(&hSection, SECTION_ALL_ACCESS, &oa, 0,PAGE_EXECUTE, SEC_IMAGE, hFile); ZwMapViewOfSection(hSection, NtCurrentProcess(), &BaseAddress, 0, 1000, 0, &size, (SECTION_INHERIT)1, MEM_TOP_DOWN, PAGE_READWRITE); ZwClose(hFile); hMod = BaseAddress; dosheader = (IMAGE_DOS_HEADER *)hMod; opthdr =(IMAGE_OPTIONAL_HEADER *) ((BYTE*)hMod+dosheader->e_lfanew+24); pExportTable =(IMAGE_EXPORT_DIRECTORY*)((BYTE*) hMod + opthdr->DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT]. VirtualAddress); arrayOfFunctionAddresses = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfFunctions); arrayOfFunctionNames = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfNames); arrayOfFunctionOrdinals = (WORD*)( (BYTE*)hMod + pExportTable->AddressOfNameOrdinals); Base = pExportTable->Base; RtlInitString(&ntFunctionNameSearch, lpFunctionName); for(x = 0; x < pExportTable->NumberOfFunctions; x++) { functionName = (char*)( (BYTE*)hMod + arrayOfFunctionNames[x]); RtlInitString(&ntFunctionName, functionName); functionOrdinal = arrayOfFunctionOrdinals[x] + Base - 1; functionAddress = (DWORD)( (BYTE*)hMod + arrayOfFunctionAddresses[functionOrdinal]); if (RtlCompareString(&ntFunctionName, &ntFunctionNameSearch, TRUE) == 0) { ZwClose(hSection); return functionAddress; } } ZwClose(hSection); return 0; } |
|
重头再来之新疑惑(一)
呵呵,等有时间也看看。。现在还在看汇编呢。。杯具 |
|
重头再来之新疑惑(一)
通过虚拟地址(段选择子)可以索引到的段基地址,段基地址+偏移称为线性地址。 当没有使用启用分页机制的话,线性地址就是物理地址 当启用分页机制的话,线性地址需要通过页目录转换得到物理地址 我的猜想是:每个任务 索引出来的段描述符中的段基地址是不同的,所以没有分页机制的情况下对应到的物理地址也就不同了,呵呵,保护模式还没深入的看过呢,只是个人拙见。还是期待高人指点。 可以推荐下学习保护模式的好书么,要好好学习下段机制和页机制。。 |
|
[求助]如何利用WinDBG对_EPROCESS+bc处设置断点
请问下,你用windbg下断 ba w1 xxxxxxxx,断下来可以做什么事情,分析对DebugPort处理的汇编代码吗? 断下来可以单步吗? 还有这是使用的windbg的本地调试功能? |
|
|
|
[讨论]检验360到底有没有上传资料?一个月上传多少M资料?
很多情况下,移动扣的钱比你使用的多得多。。。 |
|
[求助]过DNF驱动保护可以获得邀请码吗?
等先分析完再写出来,不然tx更新又得重新弄。 |
|
[求助]过DNF驱动保护可以获得邀请码吗?
我看论坛上都没人谈论腾讯保护,是不是论坛不让上传啊? |
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值