TSMessage.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. #if !defined(TSMESSAGE_H)
  2. #define TSMESSAGE_H
  3. #include <string>
  4. #define TS_MESSAGEBASE (WM_USER+2000)
  5. #define TS_BIND (TS_MESSAGEBASE + 1)
  6. #define TS_UNBIND (TS_MESSAGEBASE + 2)
  7. #define TS_KEYDOWN (TS_MESSAGEBASE + 10)
  8. #define TS_KEYUP (TS_MESSAGEBASE + 11)
  9. #define TS_CHAR (TS_MESSAGEBASE + 12)
  10. #define TS_MOUSEMOVE (TS_MESSAGEBASE + 20)
  11. #define TS_MOUSEMOVEOVER (TS_MESSAGEBASE + 21)
  12. #define TS_LBUTTONDOWN (TS_MESSAGEBASE + 22)
  13. #define TS_LBUTTOUP (TS_MESSAGEBASE + 23)
  14. #define TS_RBUTTONDOWN (TS_MESSAGEBASE + 24)
  15. #define TS_RBUTTONUP (TS_MESSAGEBASE + 25)
  16. #define TS_GETCURSORPOS (TS_MESSAGEBASE + 26)
  17. #define TS_MOUSER (TS_MESSAGEBASE + 27)
  18. #define TS_MBUTTONDOWN (TS_MESSAGEBASE + 28)
  19. #define TS_MBUTTONUP (TS_MESSAGEBASE + 29)
  20. #define TS_MOUSEWHEEL (TS_MESSAGEBASE + 30)
  21. #define TS_FINDPIC (TS_MESSAGEBASE + 40)
  22. #define TS_FINDCOLOR (TS_MESSAGEBASE + 41)
  23. #define TS_GETCOLOR (TS_MESSAGEBASE + 42)
  24. #define TS_GETMOUSESHARE (TS_MESSAGEBASE + 43)//GetBkMouseShape
  25. #define TS_SETPATH (TS_MESSAGEBASE + 44)
  26. #define TS_CAPTURE (TS_MESSAGEBASE + 45)
  27. #define TS_LOCKINPUT (TS_MESSAGEBASE + 46) //封锁外部鼠标键盘消息
  28. #define TS_OCR (TS_MESSAGEBASE + 50)//识字
  29. #define TS_USEDICT (TS_MESSAGEBASE + 51)
  30. #define TS_SETDICT (TS_MESSAGEBASE + 52)
  31. #define TS_FINDSTR (TS_MESSAGEBASE + 53)
  32. #define TS_FINDSTRFAST (TS_MESSAGEBASE + 54)
  33. #define TS_FINDPICEX (TS_MESSAGEBASE + 55)
  34. #define TS_FINDSTREX (TS_MESSAGEBASE + 56)
  35. #define TS_FINDSTRFASTEX (TS_MESSAGEBASE + 57)
  36. #define TS_DOWNCPU (TS_MESSAGEBASE + 58)
  37. #define TS_SENDSTRINGIME (TS_MESSAGEBASE + 59)
  38. #define TS_FINDCOLOREX (TS_MESSAGEBASE + 60) //TS_OCR
  39. #define TS_OCREX (TS_MESSAGEBASE + 61)//识字
  40. #define TS_FINDSTRS (TS_MESSAGEBASE + 62)
  41. #define TS_FINDSTRFASTS (TS_MESSAGEBASE + 63)
  42. #define TS_FINDSTREXS (TS_MESSAGEBASE + 64)
  43. #define TS_FINDSTRFASTEXS (TS_MESSAGEBASE + 65)
  44. #define TS_FINDPICS (TS_MESSAGEBASE + 66)
  45. #define TS_FINDPICEXS (TS_MESSAGEBASE + 67)
  46. #define TS_SETPICPWD (TS_MESSAGEBASE + 68)
  47. #define TS_ISGRAPHICPROTECT (TS_MESSAGEBASE + 69)//graphic.protect ,图色防检测
  48. #define TS_GETSCREENDATA (TS_MESSAGEBASE + 70)//
  49. #define TS_VERSION L"4.019"
  50. #define GetDeviceStateOBJkeyboardXPoffse 0x80a7 // WINXPDinput8键盘:GetDeviceState对象地址偏移
  51. #define GetDeviceStateOBJkeyboardXPoffse_Next 0x3aac // WINXPDinput8键盘:GetDeviceState对象地址偏移
  52. #define GetDeviceStateOBJMouseXPoffse 0x827b // WINXPDinput8键盘:GetDeviceState对象地址偏移
  53. #define GetDeviceStateOBJMouseXPoffse_Next 0x3ab0 // WINXPDinput8键盘:GetDeviceState对象地址偏移
  54. #define USER32InternalCallWinProcXPoffse 0x870c // InternalCallWinProc函数的地址偏移
  55. #define D3D9PresentXPoffse 0x40EA0 // Present函数的地址偏移
  56. #define USER32InternalCallWinProcWin2003offse 0x1b6bb // InternalCallWinProc函数的地址偏移 400A0
  57. #define D3D9PresentWin2003offse 0x410A0 // Present函数的地址偏移
  58. #define GetDeviceStateOBJkeyboardWin7offse 0x69dd // WIN7X64Dinput8键盘:GetDeviceState对象地址偏移
  59. #define GetDeviceStateOBJMouseWin7offse 0x6ba7 // WINXPDinput8键盘:GetDeviceState对象地址偏移
  60. #define USER32InternalCallProcWin7offse 0x1c4c4 // InternalCallWinProc函数的地址偏移
  61. #define USER32InternalCallProcWin7x64offse 0x162d7 // InternalCallWinProc函数的地址偏移 0x6215
  62. #define D3D9PresentWin7offse 0x4a064 // Present函数的地址偏移
  63. #define USER32InternalCallProcWin8offse 0x7420 //Win8系统InternalCallWinProc函数的地址偏移
  64. #define USER32InternalCallProcWin8x64offse 0x77b5 //Win8系统InternalCallWinProc函数的地址偏移
  65. #define D3D9PresentWin8offse 0x7b6fc // Present函数的地址偏移
  66. #define GetDeviceStateOBJkeyboardWin8offse 0x7c85 // WIN7X64Dinput8键盘:GetDeviceState对象地址偏移
  67. #define GetDeviceStateOBJMouseWin8offse 0x7df0 // WINXPDinput8键盘:GetDeviceState对象地址偏移// Present函数的地址偏移
  68. #define TS_BINDEVEN "TS_BIND_EVEN"
  69. #define TS_UNBINDEVEN "TS_UNBIND_EVEN"
  70. #define TS_KEYDOWNEVEN "TS_KEYDOWN_EVEN"
  71. #define TS_KEYUPEVEN "TS_KEYUP_EVEN"//
  72. #define TS_KEYPRESSEVEN "TS_KEYPRESS_EVEN"
  73. #define TS_KEYPRESSSTREVEN "TS_KEYPRESSSTR_EVEN"
  74. #define TS_KEYPRESSCHAREVEN "TS_KEYPRESSCHAR_EVEN"
  75. #define TS_LEFTDOWNEVEN "TS_LEFTDOWN_EVEN"
  76. #define TS_LEFTUPEVEN "TS_LEFTUP_EVEN"
  77. #define TS_LEFTCLICKEVEN "TS_LEFTCLICK_EVEN"
  78. #define TS_MOVETOEVEN "TS_MOVETO_EVEN"
  79. #define TS_FINDPICEVEN "TS_FINDPIC_EVEN"
  80. #define TS_RIGHTCLICKEVEN "TS_RIGHTCLICK_EVEN"
  81. #define TS_RIGHTDOWNEVEN "TS_RIGHTDOWN_EVEN"
  82. #define TS_RIGHTUPEVEN "TS_RIGHTUP_EVEN"
  83. #define TS_FINDCOLOREVEN "TS_FINDCOLOR_EVEN"
  84. #define TS_GETCOLOREVEN "TS_GETCOLOR_EVEN"
  85. #define TS_GETCURSORSHAPEEVEN "TS_GETCURSORSHAPE_EVEN"
  86. #define TS_SETPATHEVEN "TS_SETPATH_EVEN"
  87. #define TS_GETCURSORPOSEVEN "TS_GETCURSORPOS_EVEN"
  88. #define TS_MOVEREVEN "TS_MOVER_EVEN"
  89. #define TS_MIDDLECLICKEVEN "TS_MIDDLECLICK_EVEN"
  90. #define TS_WHEELDOWNEVEN "TS_WHEELDOWN_EVEN"
  91. #define TS_WHEELUPEVEN "TS_WHEELUP_EVEN"
  92. #define TS_CAPTUREEVEN "TS_CAPTUREE_EVEN"
  93. #define TS_LOCKINPUTEVEN "TS_LOCKINPUT_EVEN"
  94. #define TS_OCREVEN "TS_OCR_EVEN"
  95. #define TS_SETDICTEVEN "TS_SETDICT_EVEN"
  96. #define TS_USEDICTEVEN "TS_USEDICT_EVEN"
  97. #define TS_CLEARDICTEVEN "TS_CLEARDICT_EVEN"
  98. #define TS_FINDSTREVEN "TS_FINDSTR_EVEN"
  99. #define TS_GETNOWDICTEVEN "TS_GETNOWDICT_EVEN"
  100. #define TS_CAPTUREGIFEVEN "TS_TS_CAPTUREGIF_EVEN"
  101. #define TS_ENUMWINDOWEVEN "TS_ENUMWINDOW_EVEN"
  102. #define TS_ENUMWINDOWBYPROCESSEVEN "TS_ENUMWINDOWBYPROCESS_EVEN"
  103. #define TS_ENUMPROCESSEVEN "TS_ENUMPROCESS_EVEN"
  104. #define TS_FINDDATAEVEN "TS_FINDDATA_EVEN"
  105. #define TS_FINDDOUBLEEVEN "TS_FINDDOUBL_EVEN"
  106. #define TS_FINDFLOATEVEN "TS_FINDFLOAT_EVEN"
  107. #define TS_FINDINTEVEN "TS_FINDINT_EVEN"
  108. #define TS_FINDSTRINGEVEN "TS_FINDSTRING_EVEN"
  109. #define TS_MYSLEEPEVEN "TS_MYSLEEP_EVEN"
  110. #define TS_MYGETSCREENDATAEVEN "TS_MYGETSCREENDATA_EVEN"
  111. #define TS_MOVETOEXEVEN "TS_MOVETOEX_EVEN"
  112. #define TS_SENDSTRINGEVEN "TS_SENDSTRING_EVEN"
  113. #define TS_SENDSTRING2EVEN "TS_SENDSTRING2_EVEN"
  114. #define TS_SENDSTRINGIMEEVEN "TS_SENDSTRINGIME_EVEN"
  115. #define MakeDelta(cast, x, y) (cast) ( (DWORD_PTR)(x) - (DWORD_PTR)(y))
  116. #define MakePtr( cast, ptr, addValue ) (cast)( (DWORD_PTR)(ptr) + (DWORD_PTR)(addValue))
  117. #define VMPBEGIN \
  118. __asm _emit 0xEB \
  119. __asm _emit 0x10 \
  120. __asm _emit 0x56 \
  121. __asm _emit 0x4D \
  122. __asm _emit 0x50 \
  123. __asm _emit 0x72 \
  124. __asm _emit 0x6F \
  125. __asm _emit 0x74 \
  126. __asm _emit 0x65 \
  127. __asm _emit 0x63 \
  128. __asm _emit 0x74 \
  129. __asm _emit 0x20 \
  130. __asm _emit 0x62 \
  131. __asm _emit 0x65 \
  132. __asm _emit 0x67 \
  133. __asm _emit 0x69 \
  134. __asm _emit 0x6E \
  135. __asm _emit 0x00
  136. #define VMPEND \
  137. __asm _emit 0xEB \
  138. __asm _emit 0x0E \
  139. __asm _emit 0x56 \
  140. __asm _emit 0x4D \
  141. __asm _emit 0x50 \
  142. __asm _emit 0x72 \
  143. __asm _emit 0x6F \
  144. __asm _emit 0x74 \
  145. __asm _emit 0x65 \
  146. __asm _emit 0x63 \
  147. __asm _emit 0x74 \
  148. __asm _emit 0x20 \
  149. __asm _emit 0x65 \
  150. __asm _emit 0x6E \
  151. __asm _emit 0x64 \
  152. __asm _emit 0x00
  153. struct ST_MSGBASE
  154. {
  155. };
  156. #define DICTLENGMAX 256*11 //单个字信息最大长度
  157. //MyWriteMemory需要的结构体参数
  158. typedef struct __WriteMemoryInfo
  159. {
  160. char Pbuff[10];
  161. ULONG Pid;
  162. ULONG BaseAddress;
  163. ULONG BufferSize;
  164. __WriteMemoryInfo()
  165. {
  166. Pid=0;
  167. BaseAddress=0;
  168. memset(Pbuff,0,10);
  169. BufferSize=0;
  170. }
  171. }WriteMemoryInfo,*PWriteMemoryInfo;
  172. typedef struct _MYDICTINFO //记录当前字库每一个字体信息
  173. {
  174. char mydistchar[16];//记录当前点阵对应的字体信息
  175. int strwide;//记录点阵字宽
  176. int strhight;
  177. short nstrcount;//记录当前这个字的点阵数量
  178. short nstrvalue[MAX_PATH];//记录前点阵整形制
  179. _MYDICTINFO()
  180. {
  181. memset(this,0,sizeof(_MYDICTINFO));
  182. }
  183. }MYDICTINFO, *pMyDictInfo;
  184. struct ST_TSBIND:ST_MSGBASE
  185. {
  186. DWORD key;
  187. DWORD mouse;
  188. DWORD display;
  189. HWND hwnd;
  190. ST_TSBIND()
  191. {
  192. hwnd=0;
  193. key=NULL;
  194. mouse=NULL;
  195. display=NULL;
  196. }
  197. };
  198. struct ST_TSFINDPIC:ST_MSGBASE
  199. {
  200. int left;
  201. int top;
  202. int right;
  203. int bottom;
  204. wchar_t path[MAX_PATH*4];
  205. wchar_t color_format[MAX_PATH];
  206. int colorOffset;
  207. double simi;
  208. int dir;
  209. long x;
  210. long y;
  211. int pictype;
  212. int ret;
  213. wchar_t *retstring;
  214. bool IsDisplayDead;
  215. int sleeptime;
  216. ST_TSFINDPIC()
  217. {
  218. sleeptime=0;
  219. IsDisplayDead=false;
  220. memset(path,0,512);
  221. memset(color_format,0,16);
  222. // hwnd=0;
  223. //key=NULL;
  224. //mouse=NULL;
  225. //display=NULL;
  226. }
  227. };
  228. typedef struct tagWNDINFO
  229. {
  230. DWORD dwProcessId;
  231. HWND hWnd;
  232. }WNDINFO, *LPWNDINFO;
  233. struct CMessageData //数据共享结构体
  234. {
  235. bool isInject;
  236. bool isRead;
  237. bool isBind;
  238. bool ispichook;
  239. bool iskeyboardhook;
  240. bool ismousehook;
  241. bool isHSProtect;
  242. HWND InjectHwnd;
  243. DWORD SleepTime;
  244. int type;
  245. int InjectType;
  246. wchar_t eventName[MAX_PATH];
  247. wchar_t setpath[MAX_PATH];
  248. DWORD message;
  249. DWORD wparam;
  250. DWORD lparam;
  251. pMyDictInfo MyDictCount[20]; //存储当前所有字库,默认最大字库个数为20个
  252. int nMaxStrHight[20]; //记录每个字库中,最高的字高
  253. int nMyDictCountsize[20]; //记录每个字库的数量
  254. int NowUsingDictIndex;//记录当前正在使用的字库下标
  255. wchar_t RetString[MAX_PATH*100];
  256. bool IsNpProtect;
  257. bool isgraphicprotect;//是否开启图色防检测
  258. wchar_t SetDictPwdString[MAX_PATH];
  259. wchar_t SetPicPwdString[MAX_PATH];
  260. bool Isdxkmprotect; //dx键鼠不被恶意检测盾
  261. bool Isdxantiapi;//开启dx.public.anti.api保护
  262. HMODULE RemodeDLLMode;
  263. DWORD ColorDataInfo[2000][2000];
  264. HWND m_hwnd;
  265. char pmsg[2048];
  266. //std::string tt;
  267. CMessageData()
  268. {
  269. //memset(ColorDataInfo,0,sizeof(ColorDataInfo));
  270. m_hwnd=NULL;
  271. RemodeDLLMode=NULL;
  272. Isdxkmprotect=false;
  273. Isdxantiapi=false;
  274. isgraphicprotect=false;
  275. NowUsingDictIndex=-1;
  276. SleepTime=0;
  277. isHSProtect=false;
  278. InjectType=-1;
  279. isInject=false;
  280. isRead=false;
  281. isBind=false;
  282. ispichook=false;
  283. iskeyboardhook=false;
  284. ismousehook=false;
  285. IsNpProtect=false;
  286. InjectHwnd=NULL;
  287. message=0;
  288. wparam=0;
  289. lparam=0;
  290. memset(SetDictPwdString,0,MAX_PATH);
  291. memset(SetPicPwdString,0,MAX_PATH);
  292. ::wmemset(setpath,0,MAX_PATH);
  293. ::wmemset(eventName,0,MAX_PATH);
  294. ::wmemset(RetString,0,MAX_PATH*100-1);
  295. memset(pmsg,0,2048);
  296. memset(MyDictCount,0,20); //存储字库
  297. memset(nMaxStrHight,0,20);//记录每个字库中,最高的字高.
  298. memset(nMyDictCountsize,0,20);//记录每个字库的数量
  299. NowUsingDictIndex=0;
  300. // tt.clear();
  301. }
  302. void reset()
  303. {
  304. //memset(ColorDataInfo,0,sizeof(ColorDataInfo));
  305. m_hwnd=NULL;
  306. Isdxkmprotect=false;
  307. Isdxantiapi=false;
  308. isgraphicprotect=false;
  309. NowUsingDictIndex=-1;
  310. SleepTime=0;
  311. isHSProtect=false;
  312. InjectType=-1;
  313. isInject=false;
  314. isRead=false;
  315. isBind=false;
  316. ispichook=false;
  317. iskeyboardhook=false;
  318. ismousehook=false;
  319. IsNpProtect=false;
  320. InjectHwnd=NULL;
  321. message=0;
  322. wparam=0;
  323. lparam=0;
  324. memset(SetDictPwdString,0,MAX_PATH);
  325. memset(SetPicPwdString,0,MAX_PATH);
  326. ::wmemset(setpath,0,MAX_PATH);
  327. ::wmemset(eventName,0,MAX_PATH);
  328. ::wmemset(RetString,0,MAX_PATH*100);
  329. //::memset(pmsg,0,2048);
  330. }
  331. };
  332. class CShareMemory
  333. {
  334. public:
  335. // 构造函数和析构函数
  336. CShareMemory(const char * pszMapName, int nFileSize = 0, BOOL bServer = FALSE);
  337. ~CShareMemory();
  338. // 属性
  339. LPVOID GetBuffer() const { return m_pBuffer; }
  340. HANDLE m_hFileMap;
  341. // 实现
  342. private:
  343. LPVOID m_pBuffer;
  344. };
  345. inline CShareMemory::CShareMemory(const char * pszMapName,
  346. int nFileSize, BOOL bServer) : m_hFileMap(NULL), m_pBuffer(NULL)
  347. {
  348. if(bServer)
  349. {
  350. // 创建一个内存映射文件对象
  351. m_hFileMap = CreateFileMappingA(INVALID_HANDLE_VALUE,
  352. NULL, PAGE_READWRITE, 0, nFileSize, pszMapName);
  353. }
  354. else
  355. {
  356. // 打开一个内存映射文件对象
  357. m_hFileMap = OpenFileMappingA(FILE_MAP_ALL_ACCESS, FALSE, pszMapName);
  358. }
  359. // 映射它到内存,取得共享内存的首地址
  360. m_pBuffer = (LPBYTE)MapViewOfFile(
  361. m_hFileMap,
  362. FILE_MAP_ALL_ACCESS,
  363. 0,
  364. 0,
  365. 0
  366. );
  367. }
  368. inline CShareMemory::~CShareMemory()
  369. {
  370. // 取消文件的映射,关闭文件映射对象句柄
  371. UnmapViewOfFile(m_pBuffer);
  372. CloseHandle(m_hFileMap);
  373. }
  374. #endif