|
|

分享例程
| 界面截图: |
|
| 备注说明: |
- |
如果 (IsDebuggerPresent () 或 CheckRemoteDebuggerPresent (GetCurrentProcess (), 假)) 调试输出 (“[!] 检测到基本调试器”) 返回 (真)  如果 (检测代码段断点 () = 真) 调试输出 (“[!] 检测到代码段断点”) 返回 (真)  如果 (内存工作集检测 () = 真) 调试输出 (“[!] 检测到内存非法访问”) 返回 (真)  返回 (假) 返回 (VMWare检测 () 或 VPC检测 ()) | 变量名 | 类 型 | 静态 | 数组 | 备 注 | | hModule | 整数型 | | | | pDosHeader | 整数型 | | | | pNtHeaders | 整数型 | | | | NumberOfSections | 整数型 | | | | pSectionHeader | 整数型 | | | | i | 整数型 | | | | VirtualAddress | 整数型 | | | | SizeOfRawData | 整数型 | | | | pCodeSection | 整数型 | | | | 当前校验和 | 整数型 | | | | 初始代码段校验和 | 整数型 | | |
hModule = GetModuleHandleA (0 )pDosHeader = hModule 如果真 (指针到整数 (pDosHeader ) ≠ 23117 ) 返回 (假) pNtHeaders = pDosHeader + 指针到整数 (pDosHeader + 60 ) 如果真 (指针到整数 (pNtHeaders ) ≠ 17744 ) 返回 (假) NumberOfSections = 指针到整数 (pNtHeaders + 6 )pSectionHeader = pNtHeaders + 24 + 指针到整数 (pNtHeaders + 20 ) 计次循环首 (NumberOfSections, i ) 如果真 (指针到字节集 (pSectionHeader, 8 ) = { 46, 116, 101, 120, 116, 0, 0, 0 })  VirtualAddress = 指针到整数 (pSectionHeader + 12 )  SizeOfRawData = 指针到整数 (pSectionHeader + 16 ) 跳出循环 () pSectionHeader = pSectionHeader + 40 计次循环尾 () 如果真 (VirtualAddress = 0 或 SizeOfRawData = 0 ) 返回 (假) pCodeSection = hModule + VirtualAddress 当前校验和 = 计算内存累加和 (pCodeSection, SizeOfRawData ) 如果 (当前校验和 ≠ 初始代码段校验和 ) 返回 (真) 返回 (假) |
| 计算内存累加和 | 整数型 | | |
| pData | 整数型 | | | | dataSize | 整数型 | | | |
sum = 0 计次循环首 (dataSize, i ) sum = sum + 指针到字节集 (pData + i - 1, ) 计次循环尾 ()返回 (sum ) 置入代码 ({ 184, 104, 88, 77, 86, 187, 0, 0, 0, 0, 185, 10, 0, 0, 0, 186, 88, 86, 0, 0, 237, 129, 251, 104, 88, 77, 86, 15, 148, 69, 252 })返回 (a ) 置入代码 ({ 187, 0, 0, 0, 0, 184, 1, 0, 0, 0, 15, 63, 7, 11, 133, 219, 15, 148, 69, 252 })返回 (a ) 返回 (假)
|
|