|

本帖最后由 Canada 于 2025-5-7 17:02 编辑
|
GetProcAddressEx | 整数型 | | |
进程句柄 | 整数型 | | | | 模块句柄 | 整数型 | | | | 函数名 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | _局部1 | 整数型 | | | _局部2 | 整数型 | | | _局部3 | 整数型 | | | _局部4 | 整数型 | | | _局部5 | 字节集 | | | _局部6 | 整数型 | | | _局部7 | 整数型 | | |
_局部2 = VirtualAllocEx (进程句柄, 0, 取文本长度 (函数名 ), 4096, 4 ) 如果真 (_局部2 = 0 ) 返回 (0 )WriteProcessMemory_字节集 (进程句柄, _局部2, 到字节集 (函数名), 取文本长度 (函数名), 0)_局部4 = GetProcAddress (GetModuleHandleA (“Kernel32”), “GetProcAddress”)_局部5 = { 184 } + 到字节集 (_局部4 ) + { 104 } + 到字节集 (_局部2 ) + { 104 } + 到字节集 (模块句柄 ) + { 255, 208, 195, 144 }_局部3 = VirtualAllocEx (进程句柄, 0, 取字节集长度 (_局部5 ), 4096, 4 ) 如果真 (_局部3 = 0 ) VirtualFreeEx (进程句柄, _局部2, 0, 32768 ) 返回 (0 )WriteProcessMemory_字节集 (进程句柄, _局部3, _局部5, 取字节集长度 (_局部5), 0)_局部6 = CreateRemoteThread (进程句柄, 0, 0, _局部3, 0, 0, 0 ) 如果真 (_局部6 = 0 ) VirtualFreeEx (进程句柄, _局部2, 0, 32768 ) VirtualFreeEx (进程句柄, _局部3, 0, 32768 ) 返回 (0 )WaitForSingleObject (_局部6, 4294967295)GetExitCodeThread (_局部6, _局部7 )VirtualFreeEx (进程句柄, _局部2, 0, 32768 )VirtualFreeEx (进程句柄, _局部3, 0, 32768 )CloseHandle (_局部6 )返回 (_局部7 )
以上扣自某模块是可用的。后来又在网上搜到一份 blog.csdn.net/Sidyhe/article/details/8267021,让AI翻译加修改: |
GetProcAddressEx1 | 整数型 | | |
hProcess | 整数型 | | | | hModule | 整数型 | | | | 函数名 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | dosHeader | IMAGE_DOS_HEADER | | | ntHeaders | IMAGE_NT_HEADERS | | | exportDir | IMAGE_EXPORT_DIRECTORY | | | addressOfFunctions | 整数型 | | 0 | addressOfNames | 整数型 | | 0 | addressOfOrdinals | 短整数型 | | 0 | i | 整数型 | | | nameRva | 整数型 | | | funcName | 文本型 | | | exportRva | 整数型 | | | 如果真 (ReadProcessMemory_dosHeader (hProcess, hModule, dosHeader, 64, 0 ) = 假) 返回 (0 ) 如果真 (ReadProcessMemory_ntHeaders (hProcess, hModule + dosHeader.e_lfanew, ntHeaders, 248, 0 ) = 0 ) 返回 (0 ) exportRva = ntHeaders.OptionalHeader.DataDirectory [1 ].VirtualAddress 如果真 (ReadProcessMemory_exportDir (hProcess, hModule + exportRva, exportDir, 40, 0 ) = 0 ) 调试输出 (“读取导出表失败”) 返回 (0 ) 重定义数组 (addressOfFunctions, 假, exportDir.NumberOfFunctions )重定义数组 (addressOfNames, 假, exportDir.NumberOfNames )重定义数组 (addressOfOrdinals, 假, exportDir.NumberOfNames ) ReadProcessMemory_intarray (hProcess, hModule + exportDir.AddressOfFunctions, addressOfFunctions, exportDir.NumberOfFunctions × 4, 0 ) ReadProcessMemory_intarray (hProcess, hModule + exportDir.AddressOfNames, addressOfNames, exportDir.NumberOfNames × 4, 0 ) ReadProcessMemory_shortarray (hProcess, hModule + exportDir.AddressOfNameOrdinals, addressOfOrdinals, exportDir.NumberOfNames × 2, 0 ) 计次循环首 (exportDir.NumberOfNames, i ) nameRva = addressOfNames [i ] funcName = 取空白文本 (取文本长度 (函数名 ))  如果真 (ReadProcessMemory_文本型 (hProcess, hModule + nameRva, funcName, 取文本长度 (函数名 ), 0 ) = 假) 调试输出 (“读取函数名失败”) 返回 (0 )
 如果真 (funcName = 函数名 ) 返回 (hModule + addressOfFunctions [addressOfOrdinals [i ] + 1 ])   计次循环尾 ()返回 (0 )|
GetProcAddressEx2 | 整数型 | | |
hProcess | 整数型 | | | | hModule | 整数型 | | | | 函数名 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | dosHeader | 字节集 | | | ntHeaders | 字节集 | | | exportDir | 字节集 | | | addressOfFunctions | 整数型 | | 0 | addressOfNames | 整数型 | | 0 | addressOfOrdinals | 短整数型 | | 0 | i | 整数型 | | | nameRva | 整数型 | | | funcName | 文本型 | | | exportRva | 整数型 | | | numberOfNames | 整数型 | | | addressOfFunctionsRva | 整数型 | | | addressOfNamesRva | 整数型 | | | addressOfOrdinalsRva | 整数型 | | |
dosHeader = 取空白字节集 (64 ) 如果真 (ReadProcessMemory_Bin (hProcess, hModule, dosHeader, 64, 0 ) = 0 ) 返回 (0 )
如果真 (取字节集数据 (dosHeader, #短整数型, 1 ) ≠ 23117 ) 调试输出 (“MZ签名错误”) 返回 (0 ) ntHeaders = 取空白字节集 (248 ) 如果真 (ReadProcessMemory_Bin (hProcess, hModule + 取字节集数据 (dosHeader, #整数型, 61 ), ntHeaders, 248, 0 ) = 0 ) 返回 (0 ) exportRva = 取字节集数据 (ntHeaders, #整数型, 121 ) exportDir = 取空白字节集 (40 ) 如果真 (ReadProcessMemory_Bin (hProcess, hModule + exportRva, exportDir, 40, 0 ) = 0 ) 调试输出 (“读取导出表失败”) 返回 (0 ) numberOfNames = 取字节集数据 (exportDir, #整数型, 24 + 1 ) addressOfFunctionsRva = 取字节集数据 (exportDir, #整数型, 28 + 1 ) addressOfNamesRva = 取字节集数据 (exportDir, #整数型, 32 + 1 ) addressOfOrdinalsRva = 取字节集数据 (exportDir, #整数型, 36 + 1 ) 如果真 (numberOfNames ≤ 0 ) 调试输出 (“未读取到任何函数”) 返回 (0 ) 重定义数组 (addressOfFunctions, 假, 取字节集数据 (exportDir, #整数型, 20 + 1 )) 重定义数组 (addressOfNames, 假, numberOfNames )重定义数组 (addressOfOrdinals, 假, numberOfNames ) ReadProcessMemory_intarray (hProcess, hModule + addressOfFunctionsRva, addressOfFunctions, 取数组成员数 (addressOfFunctions ) × 4, 0 ) ReadProcessMemory_intarray (hProcess, hModule + addressOfNamesRva, addressOfNames, 取数组成员数 (addressOfNames ) × 4, 0 ) ReadProcessMemory_shortarray (hProcess, hModule + addressOfOrdinalsRva, addressOfOrdinals, 取数组成员数 (addressOfOrdinals ) × 2, 0 ) 计次循环首 (numberOfNames, i ) nameRva = addressOfNames [i ] funcName = 取空白文本 (取文本长度 (函数名 ))  如果真 (ReadProcessMemory_文本型 (hProcess, hModule + nameRva, funcName, 取文本长度 (函数名 ), 0 ) = 假) 调试输出 (“读取函数名失败”) 返回 (0 )
 如果真 (funcName = 函数名 ) 返回 (hModule + addressOfFunctions [addressOfOrdinals [i ] + 1 ])   计次循环尾 ()返回 (0 )
|
|