wrapper.xs
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:5k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <Tlhelp32.h>
  5. #include "EXTERN.h"
  6. #include "perl.h"
  7. #include "XSUB.h"
  8. #include "locale.c"
  9. #include "utils.h"
  10. MODULE = Utils::Win32 PACKAGE = Utils::Win32
  11. PROTOTYPES: ENABLE
  12. unsigned long
  13. GetProcByName(name)
  14. char *name
  15. bool
  16. InjectDLL(ProcID, dll)
  17. unsigned long ProcID
  18. char *dll
  19. int
  20. ShellExecute(handle, operation, file)
  21. unsigned int handle
  22. SV *operation
  23. char *file
  24. INIT:
  25. char *op = NULL;
  26. CODE:
  27. if (operation && SvOK (operation))
  28. op = SvPV_nolen (operation);
  29. RETVAL = ((int) ShellExecute((HWND) handle, op, file, NULL, NULL, SW_NORMAL)) == 42;
  30. OUTPUT:
  31. RETVAL
  32. void
  33. listProcesses()
  34. INIT:
  35. HANDLE toolhelp;
  36. PROCESSENTRY32 pe;
  37. PPCODE:
  38. pe.dwSize = sizeof(PROCESSENTRY32);
  39. toolhelp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  40. if (Process32First(toolhelp, &pe)) {
  41. do {
  42. HV *hash;
  43. hash = (HV *) sv_2mortal ((SV *) newHV ());
  44. hv_store (hash, "exe", 3,
  45. newSVpv (pe.szExeFile, 0),
  46. 0);
  47. hv_store (hash, "pid", 3,
  48. newSVuv (pe.th32ProcessID),
  49. 0);
  50. XPUSHs (newRV ((SV *) hash));
  51. } while (Process32Next(toolhelp,&pe));
  52. }
  53. CloseHandle(toolhelp);
  54. void
  55. playSound(file)
  56. char *file
  57. CODE:
  58. sndPlaySound(NULL, SND_ASYNC);
  59. sndPlaySound(file, SND_ASYNC | SND_NODEFAULT);
  60. void
  61. FlashWindow(handle)
  62. IV handle
  63. CODE:
  64. if (GetActiveWindow() != (HWND) handle)
  65. FlashWindow((HWND) handle, TRUE);
  66. unsigned long
  67. OpenProcess(Access, ProcID)
  68. unsigned long Access
  69. unsigned long ProcID
  70. CODE:
  71. RETVAL = ((DWORD) OpenProcess((DWORD)Access, 0, (DWORD)ProcID));
  72. OUTPUT:
  73. RETVAL
  74. unsigned long
  75. SystemInfo_PageSize()
  76. INIT:
  77. SYSTEM_INFO si;
  78. CODE:
  79. GetSystemInfo((LPSYSTEM_INFO)&si);
  80. RETVAL = si.dwPageSize;
  81. OUTPUT:
  82. RETVAL
  83. unsigned long
  84. SystemInfo_MinAppAddress()
  85. INIT:
  86. SYSTEM_INFO si;
  87. CODE:
  88. GetSystemInfo((LPSYSTEM_INFO)&si);
  89. RETVAL = ((DWORD) si.lpMinimumApplicationAddress);
  90. OUTPUT:
  91. RETVAL
  92. unsigned long
  93. SystemInfo_MaxAppAddress()
  94. INIT:
  95. SYSTEM_INFO si;
  96. CODE:
  97. GetSystemInfo((LPSYSTEM_INFO)&si);
  98. RETVAL = ((DWORD) si.lpMaximumApplicationAddress);
  99. OUTPUT:
  100. RETVAL
  101. unsigned long
  102. VirtualProtectEx(ProcHND, lpAddr, dwSize, dwProtection)
  103. unsigned long ProcHND
  104. unsigned long lpAddr
  105. unsigned long dwSize
  106. unsigned long dwProtection
  107. INIT:
  108. DWORD old;
  109. CODE:
  110. if (0 == VirtualProtectEx((HANDLE)ProcHND, (LPVOID)lpAddr, (SIZE_T)dwSize, (DWORD)dwProtection, (PDWORD)&old)) {
  111. RETVAL = 0;
  112. } else {
  113. RETVAL = old;
  114. }
  115. OUTPUT:
  116. RETVAL
  117. SV *
  118. ReadProcessMemory(ProcHND, lpAddr, dwSize)
  119. unsigned long ProcHND
  120. unsigned long lpAddr
  121. unsigned long dwSize
  122. INIT:
  123. DWORD bytesRead;
  124. LPVOID buffer;
  125. CODE:
  126. buffer = malloc(dwSize);
  127. if (0 == ReadProcessMemory((HANDLE)ProcHND, (LPCVOID)lpAddr, buffer, (SIZE_T)dwSize, (SIZE_T*)&bytesRead)) {
  128. XSRETURN_UNDEF;
  129. } else {
  130. RETVAL = newSVpvn((char *)buffer, bytesRead);
  131. }
  132. free(buffer);
  133. OUTPUT:
  134. RETVAL
  135. unsigned long
  136. WriteProcessMemory(ProcHND, lpAddr, svData)
  137. unsigned long ProcHND
  138. unsigned long lpAddr
  139. SV *svData
  140. INIT:
  141. LPCVOID lpBuffer;
  142. STRLEN dwSize;
  143. DWORD bytesWritten;
  144. CODE:
  145. if (0 == SvPOK(svData)) {
  146. RETVAL = 0;
  147. } else {
  148. lpBuffer = (LPCVOID) SvPV(svData, dwSize);
  149. if (0 == WriteProcessMemory((HANDLE)ProcHND, (LPVOID)lpAddr, lpBuffer, (SIZE_T)dwSize, (SIZE_T*)&bytesWritten)) {
  150. RETVAL = 0;
  151. } else {
  152. RETVAL = bytesWritten;
  153. }
  154. }
  155. OUTPUT:
  156. RETVAL
  157. void
  158. CloseProcess(Handle)
  159. unsigned long Handle
  160. CODE:
  161. CloseHandle((HANDLE)Handle);
  162. char *
  163. getLanguageName()
  164. void
  165. printConsole(message)
  166. SV *message
  167. CODE:
  168. if (message && SvOK (message)) {
  169. char *msg;
  170. STRLEN len;
  171. msg = SvPV (message, len);
  172. if (msg != NULL)
  173. printConsole(msg, len);
  174. }
  175. void
  176. setConsoleTitle(title)
  177. SV *title
  178. CODE:
  179. if (title && SvOK (title)) {
  180. char *str;
  181. STRLEN len;
  182. str = SvPV (title, len);
  183. if (str != NULL)
  184. setConsoleTitle(str, len);
  185. }
  186. SV *
  187. codepageToUTF8(codepage, str)
  188. unsigned int codepage
  189. SV *str
  190. CODE:
  191. if (str && SvOK(str)) {
  192. char *s, *result;
  193. STRLEN len;
  194. unsigned int result_len;
  195. s = SvPV(str, len);
  196. result = codepageToUTF8(codepage, s, len, &result_len);
  197. if (result == NULL) {
  198. XSRETURN_UNDEF;
  199. }
  200. RETVAL = newSVpvn(result, result_len);
  201. SvUTF8_on(RETVAL);
  202. free(result);
  203. } else {
  204. XSRETURN_UNDEF;
  205. }
  206. OUTPUT:
  207. RETVAL
  208. SV *
  209. utf8ToCodepage(codepage, str)
  210. unsigned int codepage
  211. SV *str
  212. CODE:
  213. if (str && SvOK(str)) {
  214. char *s, *result;
  215. STRLEN len;
  216. unsigned int result_len;
  217. s = SvPV(str, len);
  218. result = utf8ToCodepage(codepage, s, len, &result_len);
  219. if (result == NULL) {
  220. XSRETURN_UNDEF;
  221. }
  222. RETVAL = newSVpvn(result, result_len);
  223. free(result);
  224. } else {
  225. XSRETURN_UNDEF;
  226. }
  227. OUTPUT:
  228. RETVAL
  229. SV *
  230. FormatMessage(code)
  231. int code
  232. INIT:
  233. WCHAR buffer[1024];
  234. DWORD size;
  235. CODE:
  236. size = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, code,
  237. 0, buffer, sizeof(buffer) - 1, NULL);
  238. if (size == 0) {
  239. XSRETURN_UNDEF;
  240. } else {
  241. char utf8buffer[1024 * 4];
  242. buffer[size] = 0;
  243. size = WideCharToMultiByte(CP_UTF8, 0, buffer, size,
  244. utf8buffer, sizeof(utf8buffer), NULL, NULL);
  245. if (size == 0) {
  246. XSRETURN_UNDEF;
  247. }
  248. RETVAL = newSVpvn(utf8buffer, size - 1);
  249. SvUTF8_on(RETVAL);
  250. }
  251. OUTPUT:
  252. RETVAL