易语言实现反OD调试反复附加的代码
2018-11-25 04:00
691 查看
DLL命令表
.版本 2 .DLL命令 ZwQueryInformationProcess, 整数型, "NTDLL.DLL" .参数 ProcessHandle, 整数型 .参数 ProcessInformationClass, 整数型 .参数 ProcessInformation, PROCESS_BASIC_INFORMATION .参数 ProcessInformationLength, 整数型 .参数 ReturnLength, 整数型, 传址 .DLL命令 OpenProcess, 整数型, "kernel32.dll", "OpenProcess" .参数 dwDesiredAccess, 整数型 .参数 bInheritHandle, 整数型 .参数 dwProcessId, 整数型 .DLL命令 CloseHandle, 整数型, , "CloseHandle" .参数 hwnd, 整数型 .DLL命令 GetProcessImageFileNameA, , "Psapi.dll", "GetProcessImageFileNameA" .参数 ProcessHandle, 整数型 .参数 lpFilename, 文本型 .参数 nSize, 整数型 .DLL命令 修改虚拟保护, 整数型, "kernel32", "VirtualProtect", , 修改虚拟保护 .参数 lpAddress, 整数型 .参数 dwSize, 整数型 .参数 flNewProtect, 整数型 .参数 lpflOldProtect, 整数型, 传址 .DLL命令 取函数地址, 整数型, "kernel32", "GetProcAddress", , 返回函数地址 .参数 模块句柄, 整数型 .参数 函数名, 文本型 .DLL命令 取模块句柄, 整数型, "kernel32", "GetModuleHandleA", , 获取一个应用程序或动态链接库的模块句柄 如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError .参数 模块名, 文本型, , 指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD; .DLL命令 _枚举窗口, 逻辑型, , "EnumWindows" .参数 枚举过程, 子程序指针 .参数 参数, 整数型 .DLL命令 _窗口是否可见, 逻辑型, , "IsWindowVisible", , 判断窗口是否可见 如窗口可见则返回TRUE(非零) .参数 窗口句柄, 整数型, , 要测试的那个窗口的句柄 .DLL命令 GetWindowText, 整数型, , "GetWindowTextA" .参数 句柄, 整数型, , 欲获取文字的那个窗口的句柄 .参数 文本, 文本型, , 预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入 .参数 文本长度, 整数型, , lp缓冲区的长度; .DLL命令 GetClassName, 整数型, , "GetClassNameA" .参数 句柄, 整数型, , 欲获得类名的那个窗口的句柄 .参数 文本, 文本型, , 随同类名载入的缓冲区。预先至少必须分配nMaxCount+1个字符 .参数 文本长度, 整数型, , 由lpClassName提供的缓冲区长度; .DLL命令 _取窗口进程ID, 整数型, , "GetWindowThreadProcessId", , user32.dll获取与指定窗口关联在一起的一个线程和进程标识符 .参数 窗口句柄, 整数型, , hwnd,指定窗口句柄 .参数 进程标识符, 整数型, 传址, lpdwProcessId,指定一个变量,用于装载拥有那个窗口的一个进程的标识符
自定义数据类型
.版本 2 .数据类型 PROCESS_BASIC_INFORMATION .成员 ExitStatus, 整数型 .成员 PebBaseAddress, 整数型 .成员 AffinityMask, 整数型 .成员 BasePriority, 整数型 .成员 UniqueProcessId, 整数型 .成员 InheritedFromUniqueProcessId, 整数型 .数据类型 窗口信息型, , 枚举窗口信息 .成员 窗口句柄, 整数型, 传址 .成员 进程ID, 整数型, 传址 .成员 线程ID, 整数型, 传址 .成员 窗口类名, 文本型 .成员 窗口标题, 文本型
反OD调试反复附加的代码
.版本 2 .支持库 eAPI .支持库 spec .程序集 窗口程序集1 .程序集变量 addr, 整数型 .程序集变量 dadt, 字节集 .程序集变量 当前窗口信息, 窗口信息型, , "16" .子程序 __启动窗口_创建完毕 反OD调试 () 反OD附加 () .子程序 反OD调试, , , 取运行环境 .局部变量 Path, 文本型 .局部变量 hProcess, 整数型 .局部变量 Info, PROCESS_BASIC_INFORMATION .局部变量 文件名, 文本型 ZwQueryInformationProcess (-1, 0, Info, 24, 0) hProcess = OpenProcess (1040, 0, Info.InheritedFromUniqueProcessId) Path = 取空白文本 (4096) GetProcessImageFileNameA (hProcess, Path, 4096) CloseHandle (hProcess) 文件名 = 取文本右边 (Path, 取文本长度 (Path) - 倒找文本 (Path, “\”, , 假)) 反OD附加 () .如果真 (文件名 ≠ “explorer.exe”) 信息框 (“非法运行环境”, #错误图标, ) addr = 取函数地址 (取模块句柄 (“ntdll.dll”), “DbgBreakPoint”) 终止进程 (取句柄2 ()) 结束自身 () .如果真结束 .子程序 反OD附加, , , hook .局部变量 写入字节集, 字节集 .局部变量 t .如果真 (addr = 0) addr = 取函数地址 (取模块句柄 (“ntdll.dll”), “DbgBreakPoint”) 修改虚拟保护 (addr, 8, 64, 0) .如果真结束 dadt = 指针到字节集 (addr, 8) t = 取子程序真实地址 (&DbgBreakPoint) - addr - 5 写入字节集 = { 233 } + 到字节集 (t) 写到内存 (写入字节集, addr, 8) .子程序 DbgBreakPoint, 整数型, , 被hook .局部变量 写入字节集, 字节集 .局部变量 t .局部变量 ret, 整数型 .如果真 (取字节集长度 (dadt) > 0) 写到内存 (dadt, addr, ) .如果真结束 终止进程 (取句柄2 ()) 结束自身 () t = 取子程序真实地址 (&DbgBreakPoint) - addr - 5 写入字节集 = { 233 } + 到字节集 (t) 写到内存 (写入字节集, addr, 8) 返回 (ret) .子程序 取句柄2, 整数型 .局部变量 窗口列表, 窗口信息型, , "0" .局部变量 i, 整数型 .计次循环首 (枚举窗口信息 (窗口列表), i) .如果真 (寻找文本 (窗口列表 [i].窗口标题, “[LCG”, , 假) ≠ -1) ' 取OD特征码,后续自己添加并加密 返回 (窗口列表 [i].进程ID) .如果真结束 .计次循环尾 () 返回 (-1) .子程序 枚举窗口信息, 整数型 .参数 临时窗口信息, 窗口信息型, 数组, 枚举出来的窗口信息数组 _枚举窗口 (&窗口信息回调函数, 0) 临时窗口信息 = 当前窗口信息 清除数组 (当前窗口信息) 返回 (取数组成员数 (临时窗口信息)) .子程序 窗口信息回调函数 .参数 hwd, 整数型 .局部变量 窗口标题, 文本型 .局部变量 窗口类名, 文本型 .局部变量 局_进程ID, 整数型 .局部变量 线程ID, 整数型 .局部变量 临时窗口信息, 窗口信息型 .如果真 (_窗口是否可见 (hwd)) 窗口标题 = 取空白文本 (256) 窗口类名 = 取空白文本 (256) GetWindowText (hwd, 窗口标题, 255) GetClassName (hwd, 窗口类名, 255) 线程ID = _取窗口进程ID (hwd, 局_进程ID) 临时窗口信息.进程ID = 局_进程ID 临时窗口信息.线程ID = 线程ID 临时窗口信息.窗口句柄 = hwd 临时窗口信息.窗口类名 = 窗口类名 临时窗口信息.窗口标题 = 窗口标题 加入成员 (当前窗口信息, 临时窗口信息) .如果真结束 .子程序 取子程序真实地址, 整数型 .参数 子程序指针, 子程序指针 置入代码 ({ 83, 81, 139, 69, 8, 64, 139, 8, 128, 249, 232, 117, 248, 139, 72, 1, 141, 92, 8, 5, 139, 11, 193, 225, 8, 129, 249, 0, 85, 139, 236, 141, 64, 4, 117, 225, 139, 195, 89, 91, 201, 194, 4, 0 }) 返回 (0) .子程序 结束自身, , , 取模块所在进程,然后杀掉 .局部变量 a, 整数型, , , ebp-4 .局部变量 b, 整数型, , , ebp-8 a = 申请内存 (512, 假) + 100 + 512 + 10000 b = addr + 10000 写到内存 (-277, a, ) 置入代码 ({ 139, 69, 248, 45, 16, 39, 0, 0, 139, 125, 252, 51, 201, 51, 237, 51, 246, 51, 210, 51, 219, 129, 239, 16, 39, 0, 0, 139, 231, 131, 196, 100, 106, 0, 106, 255, 129, 239, 0, 2, 0, 0, 87, 51, 255, 106, 0, 137, 4, 36, 195 })
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章:
- 易语言解析获得无水印下载地址的代码
- 易语言利用正则表达式实现获取文本中间内容的代码
- 易语言NTAPI进程操纵的代码
- 易语言通过注册表将易文件关联修复的源码
- 易语言注册机生成永久或限时注册码的写法
- 易语言制作一款唯美的cookie分析工具的代码
- 易语言通过百度错误页面获取北京时间的代码
- 易语言多线程多任务下载器的代码
- 易语言调用墨迹天气实现自动定位获取天气情况的代码
- 易语言通过枚举密码进行破解rar压缩包文件的代码
- 易语言调用百度图片识别实现的图片转表格的代码
- 易语言超级列表框点击表头进行排序的代码
- 易语言验证十八位身份证号码是否正确的代码
- 易语言通过解析免费下载QQ付费音乐的代码
- 易语言通过路径来判断是不是在压缩包内运行的代码
相关文章推荐
- SQL SERVER2000 用代码实现附加与分离数据库
- ASP.NET2.0中GRIDVIEW控件完全代码实现模版列排序!(代码调试已通过)
- ASP.NET2.0中GRIDVIEW控件完全代码实现模版列排序!(代码调试已通过)
- iOS开发之(APNS)远程推送实现代码 附证书与真机调试
- Java中实现系统托盘功能(代码全贴,附加运行截图)
- socket协议的java实现(附加代码)
- 利用底层com代码附加调试上层exe,不能进入底层代码的断点
- 通过调试寄存器不修改代码实现bt功能
- 代码实现拨打电话的功能后,用真机调试时,出现异常:java.lang.SecurityException: Permission Denial...
- C#使用ConditionalAttribute特性来实现代码调试
- NodeJS”热部署“代码,实现动态调试
- DataView数据视图实现数据过滤,排序(代码调试通过)
- 基于Mdbg实现的C#脚本代码调试(编译,断点、单步调试)
- __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )
- C语言常用宏定义 __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程)
- [转]__FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程)
- 简单C语言模式实现OD调试断点设置
- springmvc 三级联动 纯js代码实现 附加添加编辑实现
- 易语言使用到循环尾命令实现过滤变量的代码
- 易语言通过时钟和计次循环来实现定时任务的代码