易语言实现反OD调试反复附加的代码

时间:2021-05-19

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-8a = 申请内存 (512, 假) + 100 + 512 + 10000b = 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 })

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章