能力值:
( LV4,RANK:50 )
|
-
-
2 楼
1、.data是数据段
2、ntdll是进程创建后的第一个模块,里面是有些trick的。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
楼上的能介绍一下有哪些trick吗?给资料我自己看也行~
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
给资料我自己看也行~
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
.版本 2
.子程序 DoRelocation, , , 完成重定位表地址的修正
.参数 NewBase, 整数型
.局部变量 pLoc, IMAGE_BASE_RELOCATION
.局部变量 Delta, 整数型
.局部变量 pLocData, 短整数型, , "0"
.局部变量 NumberOfReloc, 整数型
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 pAddress, 整数型
Delta = NewBase - pNTHeader.OptionalHeader.ImageBase ' 新装载地址-原始装载地址=差值
i = NewBase + pNTHeader.OptionalHeader.DataDirectory [6].VirtualAddress ' VirtualAddress=重定位内存页起始RVA地址
RtlMoveMemory_IMAGE_BASE_RELOCATION_1 (pLoc, i, 8) ' 对应IMAGE_BASE_RELOCATION结构
.判断循环首 (pLoc.VirtualAddress ≠ 0)
重定义数组 (pLocData, 假, (pLoc.SizeOfBlock - 8) ÷ 2) ' (pLoc.SizeOfBlock - 8) ÷ 2=重定位地址个数
RtlMoveMemory_数组_短整_1 (pLocData, i + 8, pLoc.SizeOfBlock - 8) ' 直接把数据拷贝到数组中..
NumberOfReloc = (pLoc.SizeOfBlock - 8) ÷ 2 ' 重定位地址个数
.计次循环首 (NumberOfReloc, j)
.如果真 (位与 (pLocData [j], 61440) = 12288) ' 取高4位,判断重定位项属性
pAddress = NewBase + pLoc.VirtualAddress + 位与 (pLocData [j], 4095) ' 4095=111111111111(2进制) 取低12位,重定位内存页起始RVA地址+pLocData=需要修改地址的偏移,然后在加上装载地址
RtlMoveMemory_整数_2 (pAddress, 取字节集数据 (指针到字节集 (pAddress, 4), #整数型, ) + Delta, 4) ' 把需要修改的地址的值取出来,加上差值,就完成了重定位的修改
.如果真结束
.计次循环尾 ()
i = i + pLoc.SizeOfBlock
RtlMoveMemory_IMAGE_BASE_RELOCATION_1 (pLoc, i, 8) ' 下一个重定位内存页起始RVA地址
.判断循环尾 ()
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
表BS我发易代码。。。
|