易语言软件反调试大法——六种反调试方法,总有一种适合“它”!
2016-07-14 10:43
465 查看
点击阅读原文
备注:写成子程序是为了方便在应用时插到代码段中,真正使用时请务必插入(最好分段插入)到程序代码中,否则几乎形同虚设。
.版本 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)
备注:写成子程序是为了方便在应用时插到代码段中,真正使用时请务必插入(最好分段插入)到程序代码中,否则几乎形同虚设。
.版本 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)
相关文章推荐
- 查看GLIBC版本
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 3(完)
- 笔记十三:设计模式之简单工厂模式、工厂方法模式、抽象工厂模式
- 南海问题
- 常见机器学习算法比较
- UI Automation Test
- java核心技术第一卷
- css画三角形
- AbstractQueuedSynchronizer(七)——Share模式doAcquireShared
- Android最新版本开发环境搭建图文教程
- Java-----Apache Commons IO
- java获取文件属性的方法
- 安全智能TF卡读写稳定性测试
- springmvc实现浏览器下载文件
- C语言的一些特殊用法(#define)
- 【JZOJ 4606】 序列
- URLConnection 和HttpURLConnection
- linux(centos)搭建SVN服务器
- ACM 求素数 线性筛法 o[n]
- 易语言取外网ip的两种方法