易语言实现反OD调试反复附加的代码
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})
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接