写成子程序是为了方便在应用时插到代码段中,真正使用时请务必插入(最好分段插入)到程序代码中,否则几乎形同虚设。
- .版本 2
-
- .子程序 第一法_内存分配反调试, 逻辑型
- .参数 最小值, 整数型
- .参数 最大值, 整数型
- .局部变量 min, 整数型
- .局部变量 max, 整数型
-
- GetProcessWorkingSetSize (GetCurrentProcess (), min, max)
- ' 输出调试文本 (min, max)
- 返回 (min ≠ 最小值 或 max ≠ 最大值)
-
-
- .子程序 第二法_子窗口反调试
-
- EnumChildWindows (GetDesktopWindow (), 到整数 (&子窗口监控子程序), 0)
-
-
- .子程序 第三法_时间差反调试, 逻辑型
- .局部变量 ctt, FILETIME
- .局部变量 ett, FILETIME
- .局部变量 ktt, FILETIME
- .局部变量 utt, FILETIME
- .局部变量 stt, SystemTime
- .局部变量 ntt, SystemTime
- .局部变量 qtt, 双精度小数型
-
- GetLocalTime (ntt)
- GetProcessTimes (GetCurrentProcess (), ctt, ett, ktt, utt)
- FileTimeToSystemTime (ctt, stt)
- qtt = 到数值 (ntt.wSecond) × 1000 + ntt.wMilliseconds - 到数值 (stt.wSecond) × 1000 - stt.wMilliseconds
- 返回 (qtt > 300 或 qtt < 0)
-
-
- .子程序 第四法_启动信息反调试, 逻辑型
- .局部变量 启动信息, STARTUPINFO
-
- GetStartupInfo (启动信息)
- 返回 (启动信息.dwX ≠ 0 或 启动信息.dwY ≠ 0 或 启动信息.dwXCountChars ≠ 0 或 启动信息.dwYCountChars ≠ 0 或 启动信息.dwFillAttribute ≠ 0 或 启动信息.dwXSize ≠ 0 或 启动信息.dwYSize ≠ 0)
-
-
- .子程序 第五法_时间间隔反调试, 逻辑型
-
- 返回 (GetTickCount () - GetTickCount () ≠ 0)
-
-
- .子程序 第六法_检测调试器反调试, 逻辑型
-
- .如果真 (是否为调试版 ())
- 返回 (假)
- .如果真结束
- 返回 (IsDebuggerPresent ())
-
-
- .子程序 子窗口监控子程序, 整数型
- .参数 hwnd, 整数型
- .参数 lParam, 整数型
- .局部变量 X, 整数型
- .局部变量 sSave, 文本型
-
- sSave = 取空白文本 (GetWindowTextLength (hwnd) + 1)
- GetWindowText (hwnd, sSave, 取文本长度 (sSave))
- sSave = 删首尾空 (取文本左边 (sSave, 取文本长度 (sSave) - 1))
- .计次循环首 (取文本长度 (sSave) - 2, X)
- .如果真 (到小写 (取文本中间 (sSave, X, 3)) = “cpu”)
- 信息框 (“子窗口监控” + #发现, 0, )
- 返回 (1)
- .如果真结束
-
- .计次循环尾 ()
- .计次循环首 (取文本长度 (sSave) - 4, X)
- .如果真 (到小写 (取文本中间 (sSave, X, 5)) = “smart”)
- 信息框 (“子窗口监控” + #发现, 0, )
- 返回 (1)
- .如果真结束
-
- .计次循环尾 ()
- 返回 (1)
复制代码 |