12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019 |
- /*
- 本源码由TC简单软件科技有限公司开源,功能可以自由修改、发布、
- 长沙简单软件科技有限公司对于源码不做后期维护,,请大家在使用过程中遵循开源协议
- */
- #pragma once
- #include <Windows.h>
- #include "TSRuntime.h"
- #include "d3d9.h"
- #include "D3dx9tex.h"
- #include <dinput.h>
- #include <Ddraw.h>
- #include <D3D10.h>
- #include <wingdi.h>
- #include "TSFindPicture.h"
- #include <Dbghelp.h>
- #pragma comment ( lib, "Dbghelp.lib" )
- #include <psapi.h>
- #pragma comment ( lib, "psapi.lib" )
- #pragma comment(lib, "D3dx9.lib") //
- #pragma comment(lib, "D3D9.lib")
- #pragma comment(lib, "gdi32.lib")
- #include "TsMessage.h"
- #include "TSMyKernel32DllFuntion.h"
- #include "TSVIPHookFuntion.h"
- bool g_isSetKeyDown=false; //记录GetKeyStateEvent中是否有按键按下动作
- HWND g_InjectHWND=0; //注入方进程窗口句柄
- DWORD InternalCallWinProc_Offset=0;//InternalCallWinProc函数的地址偏移
- DWORD GetDeviceStateOBJMouse_Offset=0;
- DWORD GetDeviceStateOBJKbd_Offset=0;
- HANDLE HookKbdMouse_Thread=NULL;
- extern HANDLE g_hthread; //卸载线程句柄
- extern HMODULE g_hInstance;//当前自身DLL模块
- extern myVirtualProtect my_VirtualProtect;
- //extern mySendMessage my_SendMessage;
- //extern myPostMessage my_PostMessage;
- DWORD dwMoveGetKeyboardState=0; //GetKeyboardState 赋值指令
- DWORD HookGetKeyboardStateRet=0;
- DWORD HookGetCaptureRet=0;
- DWORD HookGetAsyncKeyStateRet=0;
- DWORD HookIsIconicRet=0;
- DWORD HookImmGetCompositionStringARet=0;
- DWORD HookImmGetCompositionStringWRet=0;
- DWORD HookGetDeviceStateRet=0; //HOOk:Dinput8:GetDeviceState的返回地址
- DWORD HookInternalCallWinProcRet=0; //HOOk:USER32InternalCallWinProc的返回地址
- DWORD HookGetCursorPosRet=0; //HOOk:USER32GetCursorPos的返回地址
- DWORD HookSetCursorPosRet=0; //HOOk:USER32SetCursorPos的返回地址
- DWORD HookScreenToClientRet=0; //HOOk:USER32ScreenToClient的返回地址
- DWORD HookD3D9PresentRet=0; //HOOk:D3D9PresentRet的返回地址
- DWORD HookGetDeviceStateKbdRet=0; //HOOk:GetDeviceStateKbdRet的返回地址
- DWORD HookGetDeviceStateMouseRet=0; //HOOk:GetDeviceStateMouseRet的返回地址
- BYTE UnhookGetDeviceStateKbd[5]={0};
- BYTE UnhookGetDeviceStateMouse[5]={0};
- BYTE UnhookInternalCallWinProc[5]={0};
- BYTE UnhookGetTopWindow[5]={0};
- BYTE UnhookGetActiveWindow[7]={0}; //记录保存原来函数GetActiveWindow的前7个字节
- BYTE UnhookGetFocus[7]={0}; //记录保存原来函数GetFocus的前7个字节
- BYTE UnhookGetMessagePos[7]={0};
- BYTE UnhookWindowFromPoint[5]={0}; //记录保存原来函数WindowFromPoint的前5个字节
- BYTE UnhookGetForegroundWindow[5]={0}; //记录保存原来函数GetForegroundWindow的前5个字节
- BYTE UnhookGetKeyboardState[5]={0};
- BYTE UnhookScreenToClientRet[7]={0}; //HOOk:USER32ScreenToClient的返回地址
- BYTE UnhookSetCursor[5]={0}; //HOOk:USER32SetCursor的返回地址
- BYTE UnhookPeekMessage[5]={0};
- DWORD HookPeekMessageARet=0;
- DWORD HookPeekMessageWRet=0;
- DWORD HookSetCursorRet=0;
- DWORD HookGetKeyStateRet=0; //HOOk:USER32GetKeyState的返回地址
- DWORD HookUserCallWinProcRet=0;
- BYTE UnhookUserCallWinProc[7]={0}; //记录保存原来函数GetActiveWindow的前7个字节
- DWORD HookGetTopWindowRet=0;
- DWORD HookGetActiveWindowRet=0;
- DWORD HookGetFocusRet=0;
- DWORD HookGetForegroundWindowRet=0;
- DWORD HookWindowFromPointRet=0;
- DWORD HookIsWindowEnabledRet=0;
- DWORD HookGetMessagePosRet=0;
- DWORD HookGetRawInputDataRet=0;
- DWORD HookSendMessageRet=0;
- DWORD HookPostMessageRet=0;
- DWORD SendMessageWAddr=0;
- DWORD PostMessageWAddr=0;
- DWORD GetRegisteredRawInputDevicesAddr=0;
- typedef UINT(__stdcall * MyGetRegisteredRawInputDevices)( PRAWINPUTDEVICE pRawInputDevices,PUINT puiNumDevices, UINT cbSize );
- MyGetRegisteredRawInputDevices My_GetRegisteredRawInputDevices;
- HWND g_hwndRawInput=NULL;//RawInput的目标窗口
- bool isnotRawInput=false;//判断是否RawInput检测键鼠
- DWORD g_dinput8_KbdHOOKaddr=0; //处理DNF钩子的内部HOOK
- DWORD g_dinput8_MOUSEHOOKaddr=0;
- //bool g_IsGetDeviceStatehook=false; //GetDeviceStatehook
- //bool g_IsGetCursorPoschook=false; //GetCursorPos
- //bool g_IsScreenToClienthook=false; //ScreenToClient
- bool g_LockInput_kdb=true;//记录封锁外部键盘输入,默认封锁
- bool g_LockInput_mouse=true; //记录封锁外部鼠标输入,默认封锁
- bool IsSendstrIme=false;//通知用户调用了SendstrIme函数;
- bool IsWin7X64=false;
- bool IsWin8=false;
- bool IsWin7=false;
- bool IsWinxp=false;
- bool IsWin2003=false;
- bool IsWin8X64=false;
- bool IsNpProtect=false;
- bool IsInternalCallWinProc=false;
- bool IsGetDeviceStateMouse=false;
- bool IsGetDeviceStateKbd=false;
- int SySTpye=0;
- DWORD sleeptime=0;
- LPDIDEVICEOBJECTDATA g_rgdod;
- DIMOUSESTATE *g_mousestate=0;
- HWND g_currentHwnd=0;
- MSG *GameMsg=NULL;
- LPPOINT g_lpPoint=NULL;//GetCursorPos的指针
- int g_NowDictIndex=0;//记录SetDict时候的字库下标
- //记录上一次鼠标移动的位置
- int g_x=-1,g_y=-1;
- //记录鼠标移动的位置
- bool g_keymouseevent=false;
- bool g_mouseDevice=false;
- bool g_kbdDevice=false;
- bool g_keyboardstate=false;
- bool g_kbdDevice_mouse=false;
- bool g_GetKeyState=false;
- bool g_GetRawInputDatahook=false;
- //bool g_GetForegroundWindow=false;
- UINT g_GetRawInputKeyDataSize=sizeof(RAWKEYBOARD)+sizeof(RAWINPUTHEADER); //记录键盘数据结构体返回值大小
- UINT g_GetRawInputMouDataSize=sizeof(RAWMOUSE)+sizeof(RAWINPUTHEADER); //记录鼠标数据结构体返回值大小
- bool g_Unbind=false;
- int g_message=0; //记录当前键盘消息
- int g_wParam=0; //记录当前VK键值
- bool ismousedown=false;
- LPDIRECTINPUTDEVICE8 g_RealKeyBoardDevice=NULL;//记录DX键盘设备指针
- DWORD g_dwOfs=NULL;
- DWORD g_dwData=NULL;
- HCURSOR g_bkmouseshape=NULL; //记录全局HCURSOR,后台鼠标特征码
- DWORD g_OriSetCursor=0;//xp:0x11FF,2003:0x11fd,
- DWORD g_GetRawInputData=0;//xp:0x11ac,2003:,win7:
- bool IsVIPHookandUnhookAPI=false;
- void HookandUnhookAPI(void *para);//声明HOOK函数
- HRESULT __stdcall MyGetDeviceStateMouse(
- LPDIRECTINPUTDEVICE8 m_pMouse, //当前设备指针
- DWORD cbObjectData,
- LPDIDEVICEOBJECTDATA rgdod,
- LPDWORD pdwInOut,
- DWORD dwFlags); //声明HOOK函数
- HRESULT __stdcall MyGetDeviceStateKbd(
- LPDIRECTINPUTDEVICE8 m_pKeyboard, //当前设备指针
- DWORD cbData, //缓冲区字节大小
- LPVOID lpvData //缓冲区指针
- ); //声明HOOK函数
- BOOL __stdcall MyPeekMessageA( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin,
- UINT wMsgFilterMax, UINT wRemoveMsg );
- BOOL __stdcall MyPeekMessageW( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin,
- UINT wMsgFilterMax, UINT wRemoveMsg );
- DWORD Ntdll_ProtectVirtual=0;
- DWORD Ntdll_ProtectVirtualEax=0;
- __declspec(naked) NTSTATUS WINAPI MyZwProtectVirtualMemory(IN HANDLE ProcessHandle,
- IN PVOID * BaseAddress,
- IN SIZE_T * NumberOfBytesToProtect,
- IN ULONG NewAccessProtection,
- OUT PULONG OldAccessProtection )
- {
- _asm
- {
- //mov eax,0x4d ;//WIN7X64 偏移
- mov eax,Ntdll_ProtectVirtualEax;
- push Ntdll_ProtectVirtual;
- ret;
- }
- }
- //卸载线程
- void UnLoadDLLThread(void *para)
- {
- while(1)
- {
- if(g_Unbind==true) //等待窗口解绑
- {
- FreeLibraryAndExitThread(g_hInstance,0); //卸载DLL
- return ;
- }
- //如果注入方进程异常退出,自我解绑,卸载DLL
- if(::IsWindow(g_InjectHWND)==false&&g_InjectHWND!=NULL)
- {
- //通知自身窗口解绑
- SendMessage(g_currentHwnd,TS_UNBIND,0,0);
- FreeLibraryAndExitThread(g_hInstance,0); //卸载DLL
- return ;
- }
- Sleep(10);
- }
- }
- __declspec(naked) BOOL __stdcall User32PeekMessageW (LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin,
- UINT wMsgFilterMax, UINT wRemoveMsg )
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- push ebp
- mov ebp,esp
- jmp HookPeekMessageWRet
- ret;
- }
- }
- __declspec(naked) BOOL __stdcall User32PeekMessageA (LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin,
- UINT wMsgFilterMax, UINT wRemoveMsg )
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- push ebp
- mov ebp,esp
- jmp HookPeekMessageARet
- ret;
- }
- }
- void IATMess(HINSTANCE hand,LPSTR name,DWORD addrs,DWORD fromaddrs)//IATHOOK
- {
- DWORD size;
- PIMAGE_IMPORT_DESCRIPTOR import=(PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hand,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&size);
- char buf[20]={0};
- while(import->Name!=NULL)
- {
- LPSTR dllname=(LPSTR)((DWORD)hand+import->Name);
- //wsprintf(buf,"%s\n",dllname);
- //MessageBoxA(NULL,dllname,NULL,MB_OK);
- if(stricmp(dllname,name)==0)
- {
- //TSRuntime::add_log( "找到dllname:%s",dllname);
- //MessageBoxA(NULL,"找到user32.dll",NULL,MB_OK);
- break;
- }
- import++;
- }
- PIMAGE_THUNK_DATA pdata=(PIMAGE_THUNK_DATA)((DWORD)hand+import->FirstThunk);
- while(pdata->u1.Function!=NULL)
- {
- DWORD *func=(DWORD*)&pdata->u1.Function;
- if(*func==addrs)
- {
- MEMORY_BASIC_INFORMATION mbi;
- ::VirtualQuery(func, &mbi, sizeof(MEMORY_BASIC_INFORMATION));
- // In order to provide writable access to this part of the
- // memory we need to change the memory protection
- if (FALSE == ::VirtualProtect(
- mbi.BaseAddress,
- mbi.RegionSize,
- PAGE_READWRITE,
- &mbi.Protect)
- )
- break;
- // Hook the function.
- *func=fromaddrs;
- // Restore the protection back
- DWORD dwOldProtect;
- ::VirtualProtect(
- mbi.BaseAddress,
- mbi.RegionSize,
- mbi.Protect,
- &dwOldProtect
- );
- break;
- }
- pdata++;
- }
- }
- //BYTE oriapi[]={0x8b,0xff,0x55,0x8b,0xec};//8B FF 55 8B EC
- //检测SendMessageW,和PostMessageW是否被HOOK
- __declspec(naked) LRESULT __stdcall MySendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookSendMessageRet
- ret
- }
- }
- __declspec(naked) BOOL __stdcall MyPostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookPostMessageRet
- ret
- }
- }
- bool HookMessageAPI()
- {
- if(SendMessageWAddr==0)
- {
- SendMessageWAddr=(DWORD)GetProcAddress(GetModuleHandle(L"user32.dll"),"SendMessageW");
- }
- if(PostMessageWAddr==0)
- {
- PostMessageWAddr=(DWORD)GetProcAddress(GetModuleHandle(L"user32.dll"),"PostMessageW");
- }
- BYTE checkbyteS=*(BYTE*)SendMessageWAddr;
- BYTE checkbyteP=*(BYTE*)PostMessageWAddr;
- if(checkbyteS==0XE9||checkbyteP==0XE9)
- {
- if(checkbyteS==0XE9)
- {
- HookSendMessageRet=SendMessageWAddr+5;
- }
- if(checkbyteP==0XE9)
- {
- HookPostMessageRet=PostMessageWAddr+5;
- }
- }
- //TSRuntime::add_log("checkbyteS:%x,checkbyteP:%x,OpenProcessAddr:%x",checkbyteS,checkbyteP,OpenProcessAddr);
- return true;
- }
- void DetourFunc(BYTE *src, const BYTE *dst,BYTE *retdest, int len,DWORD &HookFunRet,bool IsHook) //HOOK函数
- {
- if(IsHook)
- {
- //(DWORD)MyGetDeviceStateMouse
- BYTE *jmp = (BYTE*)malloc(len);
- DWORD dwback;
- DWORD dwmyback;
- if(src[0]==0xe9&&((DWORD)dst==(DWORD)MyGetDeviceStateKbd/*||(DWORD)dst==(DWORD)MyGetDeviceStateMouse*/)) //针对DNF对dinput8.dll的2个函数钩子做特殊处理
- {
- if((DWORD)dst==(DWORD)MyGetDeviceStateKbd)
- {
- g_dinput8_KbdHOOKaddr=(DWORD)src+(*(DWORD*)(src+1))+5;
- src=(BYTE *)g_dinput8_KbdHOOKaddr;
- HookFunRet=g_dinput8_KbdHOOKaddr+6;
- //src=src+5;
- //HookFunRet=(DWORD)src+6;
- len=6;
- }
- //else if((DWORD)dst==(DWORD)MyGetDeviceStateMouse)
- // {
- // g_dinput8_MOUSEHOOKaddr=(DWORD)src+(*(DWORD*)(src+1))+5;
- // src=(BYTE *)g_dinput8_MOUSEHOOKaddr;
- // HookFunRet=g_dinput8_MOUSEHOOKaddr+5;
- // len=5;
- // }
- }
- else if(src[0]==0xe9) //判断如果是原来的被HOOK就放弃HOOK
- {
- HookFunRet=-1; //重置返回地址为-1,标志没有HOOK,方便后面卸载的时候判断
- //TSRuntime::add_log( "src[0]==0xe9");
- return;
- }
- if(retdest)
- {
- DWORD dwback;
- VirtualProtect(retdest, len, PAGE_EXECUTE_READWRITE, &dwback);
- memcpy(jmp, src, len);
- memcpy(retdest, jmp, len);
- VirtualProtect(retdest, len, dwback, &dwback);
- }
- memset(jmp,0,len);
- if(IsGetDeviceStateMouse||IsGetDeviceStateKbd)
- {
- *(DWORD*)jmp = (DWORD)dst;
- }
- else
- {
- if(IsInternalCallWinProc)
- jmp[0] = 0xE8;
- else
- jmp[0] = 0xE9;
- *(DWORD*)(jmp+1) = (DWORD)(dst - src) - 5;
- }
- bool succ=false;
- succ=VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwback);
- if(succ==false)
- {
- if(IsWin7X64&&TSRuntime::pData->IsNpProtect)
- {
- if(Ntdll_ProtectVirtual==0)
- {
- Ntdll_ProtectVirtual=(DWORD)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"ZwProtectVirtualMemory");
- Ntdll_ProtectVirtual+=5;
- }
- if(Ntdll_ProtectVirtual)
- {
- PVOID Addr=(PVOID)src;
- DWORD length=len;
- MyZwProtectVirtualMemory((HANDLE)0xffffffff,&Addr,&length,PAGE_EXECUTE_READWRITE,&dwback);
- succ=true;
- }
- //bool bret=My_VirtualProtect(src,len,PAGE_EXECUTE_READWRITE,&dwback);
- //TSRuntime::add_log( "VirtualProtect,dwback:%x,bret:%d",dwback,succ);
- }
- else if(TSRuntime::pData->IsNpProtect&&IsNpProtect)
- succ=true;
- }
- //TSRuntime::add_log( "VirtualProtect,succ:%d,dwback:%d,src:%x",succ,dwback,src);
- if(succ==1)
- memcpy(src, jmp, len);
- VirtualProtect(src, len, dwback, &dwback);
- free(jmp);
- FlushInstructionCache(GetCurrentProcess(),src,len);
- }
- else//解绑,卸载钩子
- {
- if((src[0]==0xe9||src[0]==0xe8||IsGetDeviceStateMouse||IsGetDeviceStateKbd)&&HookFunRet!=-1) //判断第一个字节是否是JMP,通常被HOOK的函数的第一个字节都是JMP==0xe9指令
- {
- if((DWORD)dst==(DWORD)MyGetDeviceStateKbd&&(g_dinput8_KbdHOOKaddr!=0))
- {
- src=(BYTE *)g_dinput8_KbdHOOKaddr;
- len=6;
- }
- //else if((DWORD)dst==(DWORD)MyGetDeviceStateMouse&&g_dinput8_MOUSEHOOKaddr!=0)
- // {
- // src=(BYTE *)g_dinput8_MOUSEHOOKaddr;
- // len=5;
- // }
- DWORD dwback;
- BYTE * unhook = (BYTE*)malloc(len);
- memcpy(unhook, retdest, len); //将返回函数前N个字节保存
- VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwback);
- memcpy(src, unhook, len);
- VirtualProtect(src, len, dwback, &dwback);
- //delete []unhook;
- free(unhook);
- FlushInstructionCache(GetCurrentProcess(),src,len);
- }
- }
- }
- DWORD GetHookModFuntion(TCHAR *ModName,char *FunName,DWORD FuntionOffsec,DWORD HookFunction,DWORD RetFunction,DWORD &HookFunRet,bool IsHook) //FuntionOffsec!=0:HOOK指定模块的未导出函数,FuntionOffsec=0HOOK指定模块导出函数
- {
- HMODULE hMod=0;
- DWORD addr=0;
- if(TSRuntime::IsVirtualProtectEx) ////是否驱动模式远程修改注入进程的页面保护属性
- {
- //USES_CONVERSION;
- //TSRuntime::add_log( "TSRuntime::IsVirtualProtectEx,FunName:%s",FunName);
- DWORD pid=0;
- DWORD dwback=0;
- GetWindowThreadProcessId(TSRuntime::hookHwnd,&pid);
- TSRuntime::EnablePrivilege(L"SeDebugPrivilege",true);
- HANDLE hprocess=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
- DWORD lasserr=::GetLastError();
- //TSRuntime::add_log("pid:%d,lasserr:%d",pid,lasserr);
- if(hprocess)
- {
- //hMod= TSRuntime::GetRemoteModuleHandle(L"user32.dll",pid);
- hMod= TSRuntime::GetRemoteModuleHandle(ModName,pid);
- if(hMod!=0&&FuntionOffsec!=0)
- {
- addr=(DWORD)hMod+FuntionOffsec;
- }
- else if(hMod!=0&&FunName!=NULL)
- {
- addr=(DWORD)TSRuntime::GetRemoteProcAddress(ModName,FunName,pid);
- }
- if(SendMessageWAddr==0)
- {
- SendMessageWAddr=(DWORD)TSRuntime::GetRemoteProcAddress(L"user32.dll","SendMessageW",pid);
- VirtualProtectEx(hprocess,(LPVOID)SendMessageWAddr,7,PAGE_EXECUTE_READWRITE,&dwback);
- }
- if(PostMessageWAddr==0)
- {
- PostMessageWAddr=(DWORD)TSRuntime::GetRemoteProcAddress(L"user32.dll","PostMessageW",pid);
- VirtualProtectEx(hprocess,(LPVOID)SendMessageWAddr,7,PAGE_EXECUTE_READWRITE,&dwback);
- }
- //MEMORY_BASIC_INFORMATION mbi_thunk;
- ////查询页信息。
- //VirtualQueryEx(hprocess,(LPVOID)addr, &mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));
- ////改变页保护属性为读写。
- //VirtualProtectEx(hprocess,mbi_thunk.BaseAddress,mbi_thunk.RegionSize,PAGE_EXECUTE_READWRITE,&mbi_thunk.Protect);
- bool succ= VirtualProtectEx(hprocess,(LPVOID)addr,7,PAGE_EXECUTE_READWRITE,&dwback);
- //TSRuntime::add_log( "VirtualProtectEx,succ:%d,dwback:%d,pid:%x",succ,dwback,pid);
- }
- return 0;
- }
- else////否则进入hook功能代码
- {
- //hMod = LoadLibrary(ModName);
- //TSRuntime::add_log( "GetHookModFuntion-start");
- hMod=::GetModuleHandle(ModName);
- //TSRuntime::add_log( "hMod:%x",hMod);
- if(hMod==NULL)
- return 0;
- if(hMod!=0&&FuntionOffsec!=0)
- {
- addr=(DWORD)hMod+FuntionOffsec;
- }
- else if(hMod!=0&&FunName!=NULL)
- {
- addr=(DWORD)::GetProcAddress(hMod,FunName);
- }
- if(SySTpye==1&&(strcmp("GetFocus",FunName)==0||strcmp("GetActiveWindow",FunName)==0)||strcmp("GetMessagePos",FunName)==0)//XP系统,要HOOK前7字节GetFocus
- {
- if(IsHook) //HOOK,备份前7个字节
- {
- HookFunRet=addr+7;
- BYTE * jmp= (BYTE*)RetFunction;
- memcpy(jmp,(void*)addr,7);
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,NULL,7,HookFunRet,IsHook);
- }
- else
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,(BYTE *)RetFunction,7,HookFunRet,IsHook); //卸载,还原
- //TSRuntime::add_log( "FunName:%s,addr:%x,RetFunction:%x",FunName,addr,RetFunction);
- return addr;
- }
- else if((SySTpye==4||IsWin8X64)&&strcmp("ScreenToClient",FunName)==0) //如果是win7下HOOK的函数是ScreenToClient时候,HookFunRet=+7
- {
- if(IsHook)
- HookFunRet=addr+7;
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,(BYTE *)RetFunction,7,HookFunRet,IsHook);
- //TSRuntime::add_log( "FunName:%s,addr:%x,RetFunction:%x",FunName,addr,RetFunction);
- return addr;
- }
- else if((strcmp("GetDeviceState",FunName)==0))
- {
- int len=0;
- if(IsGetDeviceStateMouse)
- {
- if(IsHook)
- HookFunRet=(DWORD)hMod+GetDeviceStateOBJMouse_Offset+5;
- len=4;
- }
- else if(IsGetDeviceStateKbd)
- {
- if(IsHook)
- HookFunRet=(DWORD)hMod+GetDeviceStateOBJKbd_Offset+5;
- len=4;
- }
- else
- {
- if(IsHook)
- HookFunRet=addr+5;
- len=5;
- }
- //TSRuntime::add_log( "FunName:%s,addr:%x,RetFunction:%x,IsHook:%d",FunName,addr,RetFunction,IsHook);
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,(BYTE *)RetFunction,5,HookFunRet,IsHook);
- return addr;
- }
- else if((strcmp("InternalCallWinProc",FunName)==0))
- {
- if(IsInternalCallWinProc)
- {
- if(IsHook)
- HookFunRet=(DWORD)hMod+InternalCallWinProc_Offset+5;
- }
- else
- {
- if(IsHook)
- HookFunRet=addr+5;
- }
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,(BYTE *)RetFunction,5,HookFunRet,IsHook);
- return addr;
- }
- else if((strcmp("GetForegroundWindow",FunName)==0))
- {
- addr+=5;
- if(IsHook)
- HookFunRet=addr+5;
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,UnhookGetForegroundWindow,5,HookFunRet,IsHook);
- return addr;
- }
- else if((strcmp("SetCursor",FunName)==0))
- {
- if(IsHook)
- HookFunRet=addr+5;
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,UnhookSetCursor,5,HookFunRet,IsHook);
- return addr;
- }
- else if((strcmp("NtUserCallOneParam",FunName)==0)||
- (strcmp("NtUserCallTwoParam",FunName)==0)||
- (strcmp("NtUserGetThreadState",FunName)==0)||
- (strcmp("NtUserGetKeyState",FunName)==0)||
- (strcmp("NtUserGetAsyncKeyState",FunName)==0))
- {
- BYTE *paddr=(BYTE *)addr;
- BYTE unhookbyte[5]={0};
- if(strcmp("NtUserCallOneParam",FunName)==0)
- {
- if(EAX_NtUserCallOneParam==0)
- {
- memcpy(NtUserCallOneParamUnhookByte,(BYTE*)addr,5);
- EAX_NtUserCallOneParam=*(DWORD*)(paddr+1);
- }
- else if(!IsHook)
- memcpy(unhookbyte,NtUserCallOneParamUnhookByte,5);
- }
- else if(strcmp("NtUserCallTwoParam",FunName)==0)
- {
- if(EAX_NtUserCallTwoParam==0)
- {
- memcpy(NtUserCallTwoParamUnhookByte,(BYTE*)addr,5);
- EAX_NtUserCallTwoParam=*(DWORD*)(paddr+1);
- }
- else if(!IsHook)
- memcpy(unhookbyte,NtUserCallTwoParamUnhookByte,5);
- }
- else if(strcmp("NtUserGetThreadState",FunName)==0)
- {
- if(EAX_NtUserGetThreadState==0)
- {
- memcpy(NtUserGetThreadStateUnhookByte,(BYTE*)addr,5);
- EAX_NtUserGetThreadState=*(DWORD*)(paddr+1);
- }
- else if(!IsHook)
- memcpy(unhookbyte,NtUserGetThreadStateUnhookByte,5);
- }
- else if(strcmp("NtUserGetKeyState",FunName)==0)
- {
- if(EAX_NtUserGetKeyState==0)
- {
- memcpy(NtUserGetKeyStateUnhookByte,(BYTE*)addr,5);
- EAX_NtUserGetKeyState=*(DWORD*)(paddr+1);
- }
- else if(!IsHook)
- memcpy(unhookbyte,NtUserGetKeyStateUnhookByte,5);
- }
- else if(strcmp("NtUserGetAsyncKeyState",FunName)==0)
- {
- if(EAX_NtUserGetAsyncKeyState==0)
- {
- memcpy(NtUserGetAsyncKeyStateUnhookByte,(BYTE*)addr,5);
- EAX_NtUserGetAsyncKeyState=*(DWORD*)(paddr+1);
- }
- else if(!IsHook)
- memcpy(unhookbyte,NtUserGetAsyncKeyStateUnhookByte,5);
- }
- //TSRuntime::add_log( "FunName:%s,addr:%x,NtUserCallOneParamUnhookByte:%x",FunName,addr,*(DWORD*)NtUserCallOneParamUnhookByte);
- if(IsHook)
- {
- HookFunRet=addr+5;
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,(BYTE *)RetFunction,5,HookFunRet,IsHook);
- }
- else
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,unhookbyte,5,HookFunRet,IsHook);
- return addr;
- }
- if(IsHook)
- HookFunRet=addr+5;
- DetourFunc((BYTE*)addr,(BYTE *)HookFunction,(BYTE *)RetFunction,5,HookFunRet,IsHook);
- //TSRuntime::add_log( "FunName:%s,addr:%x,RetFunction:%x",FunName,addr,RetFunction);
- return addr;
- }
- }
- void SetKeyDown(BYTE vk,char *g_pKetState)
- {
- g_pKetState[vk]=0x80;
- //大小写转换
- //if(vk>='A' && vk<='Z')
- //{
- // vk|=0x20;
- //}
- //for(int cnt=0;cnt<0x100;cnt++)
- //{
- // if(TSRuntime::keyMap[cnt])
- // {
- // if(TSRuntime::keyMap[cnt]==vk)
- // {
- // g_pKetState[cnt]=0x80;
- // //TSRuntime::add_log("SetKeyDown:key:%x,keyMap:%x",vk,cnt);
- // break;
- // }
- // }
- //}
- }
- void SetKeyUp(BYTE vk,char *g_pKetState)
- {
- g_pKetState[vk]=0;
- //ZeroMemory(g_pKetState,0x100);
- //大小写转换
- //if(vk>='A' && vk<='Z')
- //{
- // vk|=0x20;
- //}
- //for(int cnt=0;cnt<0x100;cnt++)
- //{
- // if(TSRuntime::keyMap[cnt])
- // {
- // if(TSRuntime::keyMap[cnt]==vk)
- // {
- // g_pKetState[cnt]=0;
- // break;
- // }
- // }
- //}
- }
- BOOL __stdcall MyPeekMessageW( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin,
- UINT wMsgFilterMax, UINT wRemoveMsg )
- {
- if(GameMsg==NULL)
- {
- if(lpMsg!=NULL)
- {
- if(lpMsg->hwnd==g_currentHwnd)
- {
- GameMsg=lpMsg;
- ////卸载钩子
- //GetHookModFuntion(L"user32.dll","PeekMessageA",0,(DWORD)MyPeekMessageA,(DWORD)UnhookPeekMessage,HookPeekMessageARet,false);
- //GetHookModFuntion(L"user32.dll","PeekMessageW",0,(DWORD)MyPeekMessageW,(DWORD)UnhookPeekMessage,HookPeekMessageWRet,false);
- //TSRuntime::add_log( "MyPeekMessageW:GameMsg:%x",lpMsg);
- }
- }
- }
- bool bret=User32PeekMessageW(lpMsg,hWnd,wMsgFilterMin,wMsgFilterMax,wRemoveMsg);
- return bret;
- }
- BOOL __stdcall MyPeekMessageA( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin,
- UINT wMsgFilterMax, UINT wRemoveMsg )
- {
- if(GameMsg==NULL)
- {
- if(lpMsg!=NULL)
- {
- if(lpMsg->hwnd==g_currentHwnd)
- {
- GameMsg=lpMsg;
- //////卸载钩子
- //GetHookModFuntion(L"user32.dll","PeekMessageA",0,(DWORD)MyPeekMessageA,(DWORD)UnhookPeekMessage,HookPeekMessageARet,false);
- //GetHookModFuntion(L"user32.dll","PeekMessageW",0,(DWORD)MyPeekMessageW,(DWORD)UnhookPeekMessage,HookPeekMessageWRet,false);
- //TSRuntime::add_log( "MyPeekMessageA:GameMsg:%x",lpMsg);
- }
- }
- }
- bool bret=User32PeekMessageA(lpMsg,hWnd,wMsgFilterMin,wMsgFilterMax,wRemoveMsg);
- return bret;
- }
- __declspec(naked)bool __stdcall USER32IsWindowEnabled(HWND hwnd)
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- push ebp
- mov ebp,esp
- jmp HookIsWindowEnabledRet
- ret
- }
- }
- __declspec(naked) UINT __stdcall USER32GetRawInputData(HRAWINPUT hRawInput,
- UINT uiCommand,
- LPVOID pData,
- PUINT pcbSize,
- UINT cbSizeHeader)
- {
- _asm{
- mov eax,g_GetRawInputData //恢复前5个字节,在跳回原函数后5字节
- jmp HookGetRawInputDataRet
- ret
- }
- }
- __declspec(naked) HCURSOR __stdcall USER32SetCursor(HCURSOR hCursor)
- {
- _asm{
- mov eax,g_OriSetCursor //恢复前5个字节,在跳回原函数后5字节
- jmp HookSetCursorRet
- ret
- }
- }
- __declspec(naked) HWND __stdcall USER32WindowFromPoint(POINT Point)
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- push ebp
- mov ebp,esp
- jmp HookWindowFromPointRet
- ret
- }
- }
- //__declspec(naked) HWND __stdcall USER32GetTopWindow(HWND hWnd)
- // {
- // _asm{
- // mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- // push ebp
- // mov ebp,esp
- // jmp HookGetTopWindowRet
- // ret
- // }
- // }
- __declspec(naked) DWORD __stdcall USER32GetMessagePos()
- {
- _asm{
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- jmp HookGetMessagePosRet
- ret
- }
- }
- __declspec(naked) HWND __stdcall USER32GetForegroundWindow()
- {
- _asm{
- mov edi,edi
- push ebp
- mov ebp,esp
- jmp HookGetForegroundWindowRet
- ret
- }
- }
- __declspec(naked) HWND __stdcall USER32GetActiveWindow()
- {
- _asm{
- //mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- //push ebp
- //mov ebp,esp
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- jmp HookGetActiveWindowRet
- ret
- }
- }
- __declspec(naked) HWND __stdcall USER32GetFocus()
- {
- _asm{
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- jmp HookGetFocusRet
- ret
- }
- }
- __declspec(naked) SHORT __stdcall USER32GetKeyState(int nVirtKey)
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- push ebp
- mov ebp,esp
- jmp HookGetKeyStateRet
- ret
- }
- }
- //APIENTRY
- __declspec(naked) HRESULT __stdcall GetDeviceStateKbd(
- LPDIRECTINPUTDEVICE8 m_pKeyboard, //当前设备指针
- DWORD cbData, //缓冲区字节大小
- LPVOID lpvData) //缓冲区指针)//键盘DXINPUT
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- NOP
- jmp HookGetDeviceStateKbdRet
- ret
- }
- }
- __declspec(naked) HRESULT __stdcall GetDeviceStateMouse(
- LPDIRECTINPUTDEVICE8 m_pMouse,
- DWORD cbObjectData,
- LPDIDEVICEOBJECTDATA rgdod,
- LPDWORD pdwInOut,
- DWORD dwFlags) //鼠标DXINPUT
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookGetDeviceStateMouseRet
- ret
- }
- }
- __declspec(naked) HRESULT __stdcall D3D9Present(LPDIRECT3DDEVICE9 pDxdevice,//类的this指针
- CONST RECT * pSourceRect,//此参数请参考dx sdk
- CONST RECT * pDestRect,//同上
- HWND hDestWindowOverride,//同上
- CONST RGNDATA * pDirtyRegion)//同上 )
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookD3D9PresentRet
- ret
- }
- }
- __declspec(naked) BOOL __stdcall USER32ScreenToClient( HWND hWnd,LPPOINT lpPoint) // screen coordinates
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节,WIN7下7个字节为2个完整指令,所以多预留2个NOP指令为2个字节
- push ebp
- mov ebp,esp
- NOP
- NOP
- jmp HookScreenToClientRet
- ret
- }
- }
- __declspec(naked) BOOL __stdcall USER32GetCursorPos(LPPOINT lpPoint)
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookGetCursorPosRet
- ret
- }
- }
- __declspec(naked) BOOL __stdcall USER32SetCursorPos(int x,int y)
- {
- _asm{
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookSetCursorPosRet
- ret
- }
- }
- //
- __declspec(naked) LRESULT __stdcall USER32InternalCallWinProc(DWORD fAnsi,HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- _asm{
- push EBP
- Mov EBP,ESP
- push ESI
- push EDI
- jmp HookInternalCallWinProcRet
- ret
- }
- }
- __declspec(naked) HRESULT APIENTRY kdbGetDeviceState(DWORD OBJDeviceAddr, LPVOID lpvData)
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookGetDeviceStateRet
- ret
- }
- }
- __declspec(naked) LONG __stdcall IMM32ImmGetCompositionStringA( HIMC hIMC,
- DWORD dwIndex,
- LPVOID lpBuf,
- DWORD dwBufLen )
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookImmGetCompositionStringARet
- ret
- }
- }
- __declspec(naked) LONG __stdcall IMM32ImmGetCompositionStringW( HIMC hIMC,
- DWORD dwIndex,
- LPVOID lpBuf,
- DWORD dwBufLen )
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookImmGetCompositionStringWRet
- ret
- }
- }
- __declspec(naked) bool __stdcall USER32IsIconic(HWND hWnd)
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookIsIconicRet
- ret
- }
- }
- __declspec(naked) SHORT __stdcall USER32GetAsyncKeyState( int vKey )
- {
- _asm
- {
- mov edi,edi //恢复前5个字节,在跳回原函数后5字节
- push ebp
- mov ebp,esp
- jmp HookGetAsyncKeyStateRet
- ret
- }
- }
- DWORD dwGetCapture=0;
- __declspec(naked) HWND __stdcall USER32GetCapture()
- {
- _asm
- {
- mov eax,[dwGetCapture] //恢复前5个字节,在跳回原函数后5字节
- jmp HookGetCaptureRet
- ret
- }
- }
- __declspec(naked) HWND __stdcall USER32GetKeyboardState(PBYTE pbKeyState)
- {
- _asm
- {
- mov eax,dwMoveGetKeyboardState //恢复前5个字节,在跳回原函数后5字节
- jmp HookGetKeyboardStateRet
- ret
- }
- }
- bool __stdcall MyIsIconic(HWND hWnd)
- {
- if(hWnd==g_currentHwnd)
- return 0;
- else
- return USER32IsIconic(hWnd);
- }
- BOOL __stdcall MyGetKeyboardState(PBYTE pbKeyState)
- {
- //if(g_message==WM_KEYDOWN||g_message==WM_SYSKEYDOWN||g_message==WM_KEYUP||g_message==WM_SYSKEYUP)
- // TSRuntime::add_log("MyGetKeyboardState:g_message:%x,pbKeyState:%x,g_wParam:%x",g_message,pbKeyState,g_wParam);
- if((g_message==WM_KEYDOWN||g_message==WM_SYSKEYDOWN)&&g_keyboardstate)
- {
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i])
- {
- //pbKeyState[i] |= 0x80;
- //int key=TSRuntime::VirtualToASCIIMap[i];
- int key=MapVirtualKey(i,0);
- if(i==VK_LEFT)
- key=DIK_LEFT;
- else if(i==VK_RIGHT)
- key=DIK_RIGHT;
- else if(i==VK_DOWN)
- key=DIK_DOWN;
- else if(i==VK_UP)
- key=DIK_UP;
- //pbKeyState[key] |= 0x80;
- SetKeyDown(key,(char*)pbKeyState);
- return true;
- }
- }
- //TSRuntime::add_log("SetKeyDown:g_message:%x,lpvData:%x,Key.vk:%x",g_message,pbKeyState,g_wParam);
- }
- else if((g_message==WM_KEYUP||g_message==WM_SYSKEYUP)&&g_keyboardstate)
- {
- int key=0;
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i]&&i==g_wParam)
- {
- //pbKeyState[i]= 0;
- //int key=TSRuntime::VirtualToASCIIMap[i];
- key=MapVirtualKey(i,0);
- if(i==VK_LEFT)
- key=DIK_LEFT;
- else if(i==VK_RIGHT)
- key=DIK_RIGHT;
- else if(i==VK_DOWN)
- key=DIK_DOWN;
- else if(i==VK_UP)
- key=DIK_UP;
- SetKeyUp(key,(char*)pbKeyState);
- //pbKeyState[key] = 0;
- TSRuntime::KeyPressMap[i]=0;
-
- }
- }
- //TSRuntime::add_log("MyGetKeyboardState:g_message:%x,key:%x,g_wParam:%x",g_message,key,g_wParam);
- g_isSetKeyDown=false;//重置按键标记
- g_keyboardstate=false;
- return true;
- }
- else if(g_kbdDevice==false)
- {
- if(g_LockInput_kdb) //是否锁定键盘
- {
- DWORD cbData=sizeof(pbKeyState);
- ZeroMemory(pbKeyState,cbData);
- }
- }
- bool bret=USER32GetKeyboardState(pbKeyState);
- return bret;
- }
- SHORT __stdcall MyGetAsyncKeyState( int vKey )
- {
- SHORT sret=USER32GetAsyncKeyState(vKey);
- //TSRuntime::add_log("MyGetAsyncKeyState:sret:%d,vKey:%d",sret,vKey);
- if(g_kbdDevice||g_mouseDevice)
- {
- if((g_message==WM_LBUTTONDOWN&&vKey==VK_LBUTTON)
- ||(g_message==WM_RBUTTONDOWN&&vKey==VK_RBUTTON)
- ||(g_message==WM_MBUTTONDOWN&&vKey==VK_MBUTTON))
- {
- sret=0x8000;
- return sret;
- }
- else if((g_message==WM_LBUTTONUP&&vKey==VK_LBUTTON)
- ||(g_message==WM_RBUTTONUP&&vKey==VK_LBUTTON)
- ||(g_message==WM_MBUTTONUP&&vKey==VK_MBUTTON))
- {
- sret=0;
- g_mouseDevice=false;
- }
- else if(g_message==WM_KEYDOWN||g_message==WM_KEYUP||g_message==WM_SYSKEYDOWN||g_message==WM_SYSKEYUP)
- {
- bool iskeyevent=false;
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i])
- {
- //int key=TSRuntime::VirtualToASCIIMap[i];
- if(vKey==i)
- {
- if((g_message==WM_KEYUP || g_message==WM_SYSKEYUP) && i == g_wParam)
- TSRuntime::KeyPressMap[i]=0;
- else if(i != g_wParam)
- return 0x8000;
- iskeyevent=true;
- break;
- }
- }
- }
- //TSRuntime::add_log("MyGetAsyncKeyState:iskeyevent:%d,vKey:%d,g_message:%x",iskeyevent,vKey,g_message);
- if(iskeyevent&&(g_message==WM_KEYDOWN||g_message==WM_SYSKEYDOWN))
- {
- sret=0x8000;
- //TSRuntime::add_log("iskeyevent:MyGetAsyncKeyState:sret:%d,vKey:%d",sret,vKey);
- return sret;
- }
- else if(iskeyevent&&(g_message==WM_KEYUP||g_message==WM_SYSKEYUP))
- {
- //g_keydown=0xFFFF8001;//重置
- sret=0;
- g_mouseDevice=false;
- }
- }
- }
- if(g_LockInput_kdb||g_LockInput_mouse) //封锁外部键盘鼠标
- {
- if(g_LockInput_mouse)
- {
- if(vKey==VK_LBUTTON||vKey==VK_RBUTTON||vKey==VK_MBUTTON)
- sret=0;
- }
- else if(g_LockInput_kdb)
- {
- sret=0;
- }
- }
- //TSRuntime::add_log("MyGetAsyncKeyState:sret:%d,vKey:%d",sret,vKey);
- return sret;
- }
- LONG __stdcall MyIMM32ImmGetCompositionStringA( HIMC hIMC,
- DWORD dwIndex,
- LPVOID lpBuf,
- DWORD dwBufLen )
- {
- ULONG nret=0;
- if(dwIndex==GCS_RESULTSTR&&IsSendstrIme==true)
- {
- int len=strlen(TSRuntime::pData->pmsg);
- char *strbuf=new char[len+1];
- memset(strbuf,0,len);
- strcpy(strbuf,TSRuntime::pData->pmsg);
- dwBufLen=len;
- if(lpBuf!=NULL)
- {
- strcpy((char*)lpBuf,strbuf);
- dwBufLen=strlen((char*)lpBuf);
- IsSendstrIme=false;
- }
- delete []strbuf;
- return dwBufLen;
- }
- nret=IMM32ImmGetCompositionStringA(hIMC,dwIndex,lpBuf,dwBufLen);
- return nret;
- }
- LONG __stdcall MyIMM32ImmGetCompositionStringW( HIMC hIMC,
- DWORD dwIndex,
- LPVOID lpBuf,
- DWORD dwBufLen )
- {
- ULONG nret=0;
- if(dwIndex==GCS_RESULTSTR&&IsSendstrIme==true)
- {
- USES_CONVERSION;
- int len=strlen(TSRuntime::pData->pmsg)*2;
- wchar_t *strbuf=new wchar_t[len+1];
- memset(strbuf,0,len);
- wcscpy(strbuf,A2W(TSRuntime::pData->pmsg));
- dwBufLen=len;
- if(lpBuf!=NULL)
- {
- wcscpy((wchar_t*)lpBuf,strbuf);
- dwBufLen=wcslen((wchar_t*)lpBuf);
- IsSendstrIme=false;
- }
- delete []strbuf;
- return dwBufLen;
- }
- nret=IMM32ImmGetCompositionStringW(hIMC,dwIndex,lpBuf,dwBufLen);
- return nret;
- }
- UINT __stdcall MyGetRawInputData( HRAWINPUT hRawInput,
- UINT uiCommand,
- LPVOID pData,
- PUINT pcbSize,
- UINT cbSizeHeader
- )
- {
- UINT nret=0;
- RAWINPUT* raw=NULL;
- if(TSRuntime::pData)
- TSRuntime::pData->iskeyboardhook=true;
- //TSRuntime::add_log("MyGetRawInputData:pData:%x",(DWORD)pData);
- if(pData)
- {
- raw = (RAWINPUT*)pData;
- if(g_GetRawInputDatahook)
- {
- if(g_message==WM_KEYDOWN||g_message==WM_KEYUP||g_message==WM_SYSKEYDOWN||g_message==WM_SYSKEYUP)
- {
- raw->header.dwType=RIM_TYPEKEYBOARD;
- raw->header.dwSize=sizeof(RAWINPUTHEADER);
- //raw->header.hDevice
- raw->data.keyboard.Message=g_message;//TSRuntime::pData->message;
- if(g_message==WM_KEYUP||g_message==WM_SYSKEYUP)//弹起
- raw->data.keyboard.Flags=RI_KEY_BREAK;
- else//按下
- raw->data.keyboard.Flags=RI_KEY_MAKE;
- raw->data.keyboard.ExtraInformation=(ULONG)GetMessageExtraInfo();
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::RawInputKeyPressMap[i])
- {
- raw->data.keyboard.VKey=i;
- int key=MapVirtualKey(i,0);
- raw->data.keyboard.MakeCode=key;
- }
- }
- if(g_message==WM_KEYUP||g_message==WM_SYSKEYUP)
- {
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i]&&i==g_wParam)
- {
- TSRuntime::RawInputKeyPressMap[i]=0;
- raw->data.keyboard.VKey=i;
- int key=MapVirtualKey(i,0);
- raw->data.keyboard.MakeCode=key;
- }
- }
- g_GetRawInputDatahook=false;
- }
- *pcbSize=g_GetRawInputKeyDataSize;
- return g_GetRawInputKeyDataSize;//返回键盘数据结构大小
- }
- else//鼠标操作
- {
- raw->header.dwType=RIM_TYPEMOUSE;
- raw->header.dwSize=sizeof(RAWINPUTHEADER);
- raw->data.mouse.lLastX=g_x;
- raw->data.mouse.lLastX=g_y;
- if(g_message==WM_MOUSEMOVE)
- raw->data.mouse.usFlags=MOUSE_MOVE_ABSOLUTE;
- else if(g_message==WM_LBUTTONDOWN)
- raw->data.mouse.usButtonFlags=RI_MOUSE_LEFT_BUTTON_DOWN;//,RI_MOUSE_BUTTON_1_DOWN
- else if(g_message==WM_LBUTTONUP)
- raw->data.mouse.usButtonFlags=RI_MOUSE_LEFT_BUTTON_UP;//,RI_MOUSE_BUTTON_1_UP
- else if(g_message==WM_RBUTTONDOWN)
- raw->data.mouse.usButtonFlags=RI_MOUSE_RIGHT_BUTTON_DOWN;//,RI_MOUSE_BUTTON_2_DOWN
- else if(g_message==WM_RBUTTONUP)
- raw->data.mouse.usButtonFlags=RI_MOUSE_RIGHT_BUTTON_UP;//,RI_MOUSE_BUTTON_2_UP
- else if(g_message==WM_MBUTTONDOWN)
- raw->data.mouse.usButtonFlags=RI_MOUSE_MIDDLE_BUTTON_DOWN;//,RI_MOUSE_BUTTON_3_DOWN
- else if(g_message==WM_MBUTTONUP)
- raw->data.mouse.usButtonFlags=RI_MOUSE_MIDDLE_BUTTON_UP;//,RI_MOUSE_BUTTON_3_UP
- else if(g_message==WM_MOUSEWHEEL)
- {
- raw->data.mouse.usButtonFlags=RI_MOUSE_WHEEL;
- raw->data.mouse.usButtonData=g_dwData;
- }
- raw->data.mouse.ulExtraInformation=(ULONG)GetMessageExtraInfo();
- *pcbSize=g_GetRawInputMouDataSize;
- g_GetRawInputDatahook=false;
- return g_GetRawInputMouDataSize;
- }
- }
- }
- else if(g_message==WM_KEYDOWN||g_message==WM_KEYUP||g_message==WM_SYSKEYDOWN||g_message==WM_SYSKEYUP)//键盘
- {
- *pcbSize=g_GetRawInputKeyDataSize;
- return g_GetRawInputKeyDataSize;//返回键盘数据结构大小
- }
- else//鼠标
- {
- *pcbSize=g_GetRawInputMouDataSize;
- return g_GetRawInputMouDataSize;
- }
- nret=USER32GetRawInputData(hRawInput,uiCommand,pData,pcbSize,cbSizeHeader);
- ////if(pData==NULL)
- ////{
- //// g_GetRawInputDataRetSize=*pcbSize;
- // TSRuntime::add_log("g_GetRawInputDataRetSize:%x",g_GetRawInputDataRetSize);
- ////}
- //if(pData)
- // {
- // raw = (RAWINPUT*)pData;
- // //if(raw->data.keyboard.Message==WM_KEYDOWN||raw->data.keyboard.Message==WM_KEYUP)
- // {
- // TSRuntime::add_log("MyGetRawInputData:pData:%x,VKey:%x,Message:%x,Flags:%x,ExtraInformation:%x,MakeCode:%x,Reserved:%x,nret:%x,",pData,raw->data.keyboard.VKey,raw->data.keyboard.Message,raw->data.keyboard.Flags,raw->data.keyboard.ExtraInformation,raw->data.keyboard.MakeCode,raw->data.keyboard.Reserved,nret);
- // //TSRuntime::add_log("lLastX:%d,lLastY:%d,ulButtons:%x,ulExtraInformation:%x,ulRawButtons:%x,usButtonData:%x,usButtonFlags:%x,usFlags:%x",raw->data.mouse.lLastX,raw->data.mouse.lLastY,raw->data.mouse.ulButtons,raw->data.mouse.ulExtraInformation,raw->data.mouse.ulRawButtons,raw->data.mouse.usButtonData,raw->data.mouse.usButtonFlags,raw->data.mouse.usFlags);
- //
- // //TSRuntime::add_log("dwSize:%x,dwType:%x,hDevice:%x,wParam:%x",raw->header.dwSize,raw->header.dwType,raw->header.hDevice,raw->header.wParam);
- // }
- // }
- //else
- //if(pData==NULL&&pcbSize)
- // {
- // g_GetRawInputDataRetSize=0x20;
- // }
- //if(pData&&nret==0x20)
- // {
- // raw = (RAWINPUT*)pData;
- // TSRuntime::add_log("MyGetRawInputData:pData:%x,VKey:%x,Message:%x,Flags:%x,ExtraInformation:%x,MakeCode:%x,Reserved:%x,nret:%x,",pData,raw->data.keyboard.VKey,raw->data.keyboard.Message,raw->data.keyboard.Flags,raw->data.keyboard.ExtraInformation,raw->data.keyboard.MakeCode,raw->data.keyboard.Reserved,nret);
- // }
- return nret;
- }
- DWORD __stdcall MyGetMessagePos()
- {
- //DWORD ret=USER32GetMessagePos();
- POINT xy;
- GetCursorPos(&xy);
- return (DWORD)MAKELPARAM(xy.x,xy.y);
- }
- HCURSOR __stdcall MySetCursor(HCURSOR hCursor)
- {
- HCURSOR rethCursor=USER32SetCursor(hCursor);
- g_bkmouseshape=hCursor; //记录游戏鼠标hCursor
- //TSRuntime::add_log("MySetCursor:%x",g_bkmouseshape);
- return rethCursor;
- }
- bool __stdcall MyIsWindowEnabled(HWND hWnd)
- {
- //bool bret=USER32IsWindowEnabled(hWnd);
- bool bret=false;
- if( hWnd==g_currentHwnd)
- bret=true;
- //TSRuntime::add_log("MyIsWindowEnabled");
- return bret;
- }
- HWND __stdcall MyWindowFromPoint(POINT Point)
- {
- //HWND hwnd=USER32WindowFromPoint(Point);
- HWND hwnd;
- //if(g_keymouseevent)
- hwnd=g_currentHwnd;
- //else
- //hwnd=g_InjectHWND;
- //TSRuntime::add_log("MyWindowFromPoint");
- return hwnd;
- }
- HWND __stdcall MyGetTopWindow(HWND hWnd)
- {
- //HWND rethwnd=USER32GetTopWindow(hWnd);
- //if(g_currentHwnd)
- HWND rethwnd;
- //if(g_keymouseevent)
- rethwnd=g_currentHwnd;
- //else
- //rethwnd=g_InjectHWND;
- //TSRuntime::add_log("MyGetTopWindow");
- return rethwnd;
- }
- HWND __stdcall MyGetForegroundWindow()
- {
- HWND hwnd;
- //if(g_keymouseevent)
- hwnd=g_currentHwnd;
- //else
- //hwnd=g_InjectHWND;
- return hwnd;
- }
- HWND __stdcall MyGetFocus()
- {
- //HWND hwnd=USER32GetFocus();
- //HWND hwnd=g_currentHwnd;
- //TSRuntime::add_log("MyGetFocus");
- HWND hwnd;
- //if(g_keymouseevent)
- hwnd=g_currentHwnd;
- //else
- //hwnd=g_InjectHWND;
- return hwnd;
- }
- HWND __stdcall MyGetCapture()
- {
- return g_currentHwnd;
- }
- HWND __stdcall MyGetActiveWindow()
- {
- //HWND hwnd=USER32GetActiveWindow();
- //HWND hwnd=g_currentHwnd;
- //TSRuntime::add_log("MyGetActiveWindow");
- HWND hwnd;
- //if(g_keymouseevent)
- hwnd=g_currentHwnd;
- //else
- //hwnd=g_InjectHWND;
- return hwnd;
- }
- COLORREF** pWndBmpBuffer=NULL;
- short **pWndBmpStrxy=NULL;
- BYTE * pBuffer=NULL;
- //int addd=0;
- bool UnhookPresent=false;
- DWORD DxdeviceAddr=0;
- DWORD Ori_DxdeviceAddr=0;//原始DX地址;
- HRESULT __stdcall MyD3D9Present(LPDIRECT3DDEVICE9 pDxdevice,//类的this指针
- CONST RECT * pSourceRect,//此参数请参考dx sdk
- CONST RECT * pDestRect,//同上
- HWND hDestWindowOverride,//同上
- CONST RGNDATA * pDirtyRegion)//同上 )
- {
- TSRuntime::pData->ispichook=true;
- if(DxdeviceAddr==0&&TSRuntime::pData->isgraphicprotect)
- {
- DxdeviceAddr=*(DWORD*)pDxdevice;
- DxdeviceAddr+=0x44;//偏移0x44取DX真正函数的地址
- }
- if(sleeptime!=0)
- Sleep(sleeptime);
- wchar_t pszEventName[MAX_PATH]={0};
- ::wsprintf(pszEventName,L"%s%d",TS_EVENT_NAME,::GetCurrentProcessId());
- HANDLE hEvent=OpenEvent(EVENT_ALL_ACCESS,FALSE,pszEventName);
- //TSRuntime::add_log( "dx:MyD3D9Present");
- if(hEvent)
- {
- //TSRuntime::add_log( "MyD3D9PresentHOOK:event:%d name %s",hEvent,pszEventName);
- IDirect3DSurface9 *pSourceSurface=NULL;
- D3DLOCKED_RECT d3drect;
- D3DSURFACE_DESC surfaceDesc;
- IDirect3DSurface9 *MySurface=NULL;
- int wide=0;
- int hight=0;
- if(D3D_OK == pDxdevice-> GetRenderTarget(0,&pSourceSurface)) //得到当前游戏缓存数据对象指针
- {
- //TSRuntime::add_log( "dx:GetRenderTarget");
- RECT rect;
- HDC myDc;
- HRESULT hret;
- if(D3D_OK == pSourceSurface->GetDesc(&surfaceDesc)) //获取当游戏前缓存数据的属性,主要是获取surfaceDesc.Format格式
- {
- //TSRuntime::add_log( "dx:GetDesc");
- if(GetClientRect(g_currentHwnd,&rect)) //获取当前游戏窗口的大小
- {
- wide= rect.right-rect.left;
- hight= rect.bottom- rect.top;
- if(surfaceDesc.Height>hight||surfaceDesc.Width>wide)
- {
- wide=surfaceDesc.Width;
- hight=surfaceDesc.Height;
- }
- if(D3D_OK == pDxdevice->CreateOffscreenPlainSurface(wide,hight,surfaceDesc.Format,D3DPOOL_SYSTEMMEM,&MySurface,0)) //创建自己的D3DPOOL=D3DPOOL_SYSTEMMEM的缓存数据对象指针
- {
- if(D3D_OK == pDxdevice->GetRenderTargetData(pSourceSurface,MySurface)) //拷贝当前游戏缓存数据对象给我们自己创建的缓存数据对象
- {
- //hret=MySurface->LockRect(&d3drect,&rect,D3DLOCK_READONLY); //锁定缓存数据得到图色数据指针
- //TSRuntime::add_log( "dx:LockRect");
- //转换数据
- D3DSURFACE_DESC surfaceDesc;
- if(D3D_OK == MySurface->GetDesc(&surfaceDesc) )
- {
- wide=surfaceDesc.Width;
- hight=surfaceDesc.Height;
- //TSRuntime::add_log( "surfaceDesc.Width:%d,surfaceDesc.Height:%d",surfaceDesc.Width,surfaceDesc.Height);
- }
- MyFindPictureClass fpic;
- if(wcslen(TSRuntime::SetPath)>0)
- {
- wcscpy(fpic.SetPath,TSRuntime::SetPath);
- }
- ST_TSFINDPIC *spic=(ST_TSFINDPIC *)TSRuntime::pData->pmsg;
- RECT pSrcRect;
- pSrcRect.top=spic->top;
- pSrcRect.left=spic->left;
- pSrcRect.right=spic->right;
- pSrcRect.bottom=spic->bottom;
- //TSRuntime::add_log( "pSrcRect.top:%d,pSrcRect.left:%d,pSrcRect.right:%d,pSrcRect.bottom:%d",pSrcRect.top,pSrcRect.left,pSrcRect.right,pSrcRect.bottom);
- HDC mydc=NULL, hMemDC;
- MySurface->GetDC(&mydc);
- //TSRuntime::add_log( "MySurface->GetDC,mydc:%x",(DWORD)mydc);
- HBITMAP hBitmap,hOldBitmap;
- if(mydc!=NULL)
- {
- int xc = 0;
- int cx = 0;
- int cy = 0;
- //判断边境值
- if(pSrcRect.right<=0)
- pSrcRect.right=wide-1;
- if(pSrcRect.bottom<=0)
- pSrcRect.bottom=hight-1;
- if(pSrcRect.bottom>hight)
- pSrcRect.bottom=hight-1;
- if(pSrcRect.right>wide)
- pSrcRect.right=wide-1;
- //TSRuntime::add_log( "wide:%d,hight:%d",wide,hight);
- //为DX设备描述表创建兼容的内存设备描述表
- hMemDC = CreateCompatibleDC(mydc);
- // 创建一个与屏幕设备描述表兼容的位图
- int picwide=(pSrcRect.right-pSrcRect.left);
- int pichight=(pSrcRect.bottom-pSrcRect.top);
-
- hBitmap=CreateCompatibleBitmap(mydc,picwide,pichight);
- // 把新位图选到内存设备描述表中
- hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);
- // 把屏幕设备描述表拷贝到内存设备描述表中
- //if(TSRuntime::pData->type==TS_CAPTURE||TSRuntime::pData->type==TS_GETSCREENDATA)
- BitBlt(hMemDC,0,0,picwide,pichight,mydc,cx+pSrcRect.left,xc+cy+pSrcRect.top, CAPTUREBLT|SRCCOPY);
- //得到屏幕位图的句柄
- hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap);
- switch(TSRuntime::pData->type)
- {
- case TS_CAPTURE:
- {
- wchar_t savepath[MAX_PATH]={0};
- wchar_t *findpath=wcsstr(spic->path,L":");
- if(wcslen(TSRuntime::SetPath)>1&&findpath==NULL)
- {
- swprintf(savepath,L"%s\\%s",TSRuntime::SetPath,spic->path);
- }
- else
- {
- swprintf(savepath,L"%s",spic->path);
- }
- //HRESULT hsret=D3DXSaveSurfaceToFile(spic->path,(D3DXIMAGE_FILEFORMAT)spic->pictype,pSourceSurface,NULL,&pSrcRect);
- //spic->ret=(int)hsret;
- if(spic->pictype==D3DXIFF_JPG||spic->pictype==D3DXIFF_PNG)
- {
- wchar_t temppath[MAX_PATH]={0};
- wchar_t path[MAX_PATH]={0};
- GetTempPath(MAX_PATH,temppath);
- swprintf(path,L"%s\\TEMPBMP%d.BMP",temppath,::GetCurrentProcessId());
- if(fpic.SaveBitmapToFile(hBitmap,path))
- {
- if(spic->pictype==D3DXIFF_JPG)
- spic->ret=fpic.BMP2JPG(path,savepath);
- else if(spic->pictype==D3DXIFF_PNG)
- spic->ret=fpic.BMP2PNG(path,savepath);
- DeleteFile(path);
- }
- }
- else if(spic->pictype==D3DXIFF_BMP)
- {
- spic->ret=fpic.SaveBitmapToFile(hBitmap,savepath);
- }
- break;
- }
- case TS_GETSCREENDATA:
- {
- // 24位图的BITMAPINFO
- //memset(TSRuntime::pData->ColorDataInfo,0,sizeof(TSRuntime::pData->ColorDataInfo));
- BITMAPINFO *pBITMAPINFO = (BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER));
- memset(pBITMAPINFO, 0, sizeof(BITMAPINFOHEADER));
- BITMAPINFOHEADER *pInfo_Header = (BITMAPINFOHEADER *)pBITMAPINFO;
- pInfo_Header->biSize = sizeof(BITMAPINFOHEADER);
- pInfo_Header->biWidth = pSrcRect.right - pSrcRect.left;
- pInfo_Header->biHeight = pSrcRect.bottom - pSrcRect.top;
- pInfo_Header->biPlanes = 1;
- pInfo_Header->biBitCount = 24;
- pInfo_Header->biCompression = BI_RGB;
- // 获得数据buf
- DWORD bufSize=(pInfo_Header->biWidth * 3 + 3) / 4 * 4 * pInfo_Header->biHeight;
- BYTE * pBuffer = new BYTE[bufSize];
- int aHeight=pInfo_Header->biHeight;
- if(::GetDIBits(hMemDC, hBitmap, 0, aHeight, pBuffer,pBITMAPINFO, DIB_RGB_COLORS) == 0)
- {
- free(pBITMAPINFO);
- delete [] pBuffer;
- break;
- }
- int wndWidth=pBITMAPINFO->bmiHeader.biWidth;
- int wndHeight=pBITMAPINFO->bmiHeader.biHeight;
- //HDC dd = ::GetWindowDC(::GetDesktopWindow());
-
- COLORREF helpcolor=0;
- int pitch=wndWidth%4;
- for(int i=0;i<wndHeight;i++)
- {
- int realPitch=i*pitch;
- for(int j=0;j<wndWidth;j++)
- {
- UCHAR b=pBuffer[(i*wndWidth+j)*3+realPitch];
- UCHAR g=pBuffer[(i*wndWidth+j)*3+1+realPitch];
- UCHAR r=pBuffer[(i*wndWidth+j)*3+2+realPitch];
- helpcolor=RGB(r,g,b);
- //TSRuntime::add_log( "TS_GETSCREENDATA:%x",TSRuntime::pData->ColorDataInfo);
- TSRuntime::pData->ColorDataInfo[wndHeight-i-1][j]=helpcolor;
- //pColorBuffer[wndHeight-i-1][j]=helpcolor;
- //::SetPixel(dd,wndHeight-i-1,j,helpcolor);
- }
- }
- //TSRuntime::add_log( "TS_GETSCREENDATA:%x,wndWidth:%d,wndHeight:%d",TSRuntime::pData->ColorDataInfo,wndWidth,wndHeight);
- free(pBITMAPINFO);
- delete [] pBuffer;
- break;
- }
- }
- DeleteDC(hMemDC);
- DeleteObject(hOldBitmap);
- DeleteObject(hBitmap);
- }
- MySurface->ReleaseDC(mydc);;
- }
- MySurface->Release(); //释放自身缓存对象
- }
- }
- }
- pSourceSurface->Release(); //释放当前游戏缓存数据对象
- }
- //TSRuntime::pData->ispichook=false;
- SetEvent(hEvent);
- ::CloseHandle(hEvent);
- }
- HRESULT rett=D3D9Present(pDxdevice,pSourceRect,pDestRect,hDestWindowOverride,pDirtyRegion);
- //TSRuntime::add_log( "MyD3D9PresentHOOK:pDxdevice:%x,pSourceRect:%x,pDestRect:%x,hDestWindowOverride:%x,pDirtyRegion:%x",pDxdevice,pSourceRect,pDestRect,hDestWindowOverride,pDirtyRegion);
- return rett;
- }
- SHORT __stdcall MyGetKeyState(int nVirtKey )
- {
- //TSRuntime::add_log("NtUserGetKeyState--nVirtKey:%x",nVirtKey);
- ULONG sret=0;
- if(g_GetKeyState||g_mouseDevice)
- {
- DWORD ALT_KEYCODE=0;
- bool iskeyevent=false;
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i])
- {
- if(nVirtKey==i)
- {
- iskeyevent=true;
- break;
- }
- else if((i==VK_MENU&&(nVirtKey==VK_LMENU||nVirtKey==VK_RMENU))||(i==VK_SHIFT&&(nVirtKey==VK_LSHIFT||nVirtKey==VK_RSHIFT))
- ||(i==VK_CONTROL&&(nVirtKey==VK_LCONTROL||nVirtKey==VK_RCONTROL)))
- {
- iskeyevent=true;
- break;
- }
- }
- }
- if(g_message==WM_LBUTTONDOWN||g_message==WM_RBUTTONDOWN||g_message==WM_MBUTTONDOWN
- ||g_message==WM_LBUTTONUP||g_message==WM_RBUTTONUP||g_message==WM_MBUTTONUP)
- {
- if(nVirtKey==VK_LBUTTON||nVirtKey==VK_RBUTTON||nVirtKey==VK_MBUTTON)
- {
- iskeyevent=true;
- if(g_message==WM_LBUTTONDOWN||g_message==WM_RBUTTONDOWN||g_message==WM_MBUTTONDOWN)
- ismousedown=true;
- //TSRuntime::add_log( "MyGetKeyState-1:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- }
- if(g_message==WM_LBUTTONUP||g_message==WM_RBUTTONUP||g_message==WM_MBUTTONUP)
- {
- ismousedown=false;
- g_mouseDevice=false;
- }
- //TSRuntime::add_log( "MyGetKeyState:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- }
- //if((g_message==WM_KEYDOWN&&g_wParam==nVirtKey)||(g_message==WM_SYSKEYDOWN&&nVirtKey==VK_MENU)||(g_message==WM_SYSKEYDOWN&&nVirtKey==VK_LMENU) )
- if((((g_message==WM_KEYDOWN)||(g_message==WM_SYSKEYDOWN)
- ||(g_message==WM_LBUTTONDOWN)
- ||(g_message==WM_RBUTTONDOWN)
- ||(g_message==WM_MBUTTONDOWN))&&iskeyevent)||((nVirtKey==VK_LBUTTON||nVirtKey==VK_RBUTTON||nVirtKey==VK_MBUTTON)&&ismousedown))
- {
- sret=0xffffff80;
- //TSRuntime::add_log( "MyGetKeyState-WM_SYSKEYDOWN:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- //返回负数说明该键被按下
- }
- //else if((g_message==WM_KEYUP||g_message==WM_SYSKEYUP)&&g_wParam==nVirtKey)
- else if(((g_message==WM_KEYUP||g_message==WM_SYSKEYUP)
- ||(g_message==WM_LBUTTONUP)
- ||(g_message==WM_RBUTTONUP)
- ||(g_message==WM_MBUTTONUP))&&iskeyevent)
- {
- //TSRuntime::add_log( "MyGetKeyState-WM_SYSKEYUP:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- sret=1; //返回正数说明该键被弹起
- g_GetKeyState=false;
- TSRuntime::KeyPressMap[nVirtKey]=0;
- //g_wParam=0;
- }
- //TSRuntime::add_log( "GetKeyState:nVirtKey:%x,sret:%x,g_message:%x",nVirtKey,sret,g_message);
- //TSRuntime::add_log( "MyGetKeyState:nVirtKey:%x",nVirtKey);
- return sret;
- }
- sret=USER32GetKeyState(nVirtKey);
- return sret;
- }
- bool UnhookKbd_DeviceState=false;
- DWORD Kbd_DeviceStateAddr=0;
- DWORD Ori_Kbd_DeviceState=0;//原始DX地址;__stdcall
- //偏移0x24
- HRESULT __stdcall MyGetDeviceStateKbd(
- LPDIRECTINPUTDEVICE8 m_pKeyboard, //当前设备指针
- DWORD cbData, //缓冲区字节大小
- LPVOID lpvData //缓冲区指针
- )
- {
- HRESULT hret;
- //TSRuntime::add_log("MyGetDeviceStateKbd");
- hret= GetDeviceStateKbd(m_pKeyboard,cbData,lpvData);
- if(Kbd_DeviceStateAddr==0)
- {
- DWORD dwback;
- Kbd_DeviceStateAddr=*(DWORD*)m_pKeyboard;
- Kbd_DeviceStateAddr+=0x24;
- }
- //EVENT_GETKEYSTATE_NAME
- DIDEVCAPS Caps;
- Caps.dwSize=sizeof(DIDEVCAPS);
- if(m_pKeyboard->GetCapabilities(&Caps)==S_OK)
- {
- if(g_kbdDevice&&cbData==0x100)
- {
- if(Caps.dwDevType==1043&&(g_RealKeyBoardDevice==m_pKeyboard))//dwDevType==274鼠标设备对象 ,dwDevType==1043键盘设备对象
- {
- if(g_message==WM_KEYDOWN||g_message==WM_SYSKEYDOWN)
- {
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i])
- {
- //i=TSRuntime::VirtualToASCIIMap[i];
- //SetKeyDown(i,(char*)lpvData);
- //int key=TSRuntime::VirtualToASCIIMap[i];
- int key=MapVirtualKey(i,0);
- if(i==VK_LEFT)
- key=DIK_LEFT;
- else if(i==VK_RIGHT)
- key=DIK_RIGHT;
- else if(i==VK_DOWN)
- key=DIK_DOWN;
- else if(i==VK_UP)
- key=DIK_UP;
- SetKeyDown(key,(char*)lpvData);
- //TSRuntime::add_log("SetKeyDown:key:%x,i:%x",key,i);
- g_isSetKeyDown=true;//标记有按键按下
- }
- }
- //TSRuntime::add_log("VirtualToASCIIMap:g_wParam:%x",g_wParam);
- //g_wParam=TSRuntime::VirtualToASCIIMap[g_wParam];
- //g_wParam=::MapVirtualKey(g_wParam,0);
- //SetKeyDown(g_wParam,(char*)lpvData);
- //g_isSetKeyDown=true;//标记有按键按下
- //TSRuntime::add_log("SetKeyDown:g_message:%x,lpvData:%x,Key.vk:%x",g_message,lpvData,g_wParam);
- }
- else if(g_message==WM_KEYUP||g_message==WM_SYSKEYUP)
- {
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i]&&i==g_wParam)
- {
- //int key=TSRuntime::VirtualToASCIIMap[i];
- int key=MapVirtualKey(i,0);
- if(i==VK_LEFT)
- key=DIK_LEFT;
- else if(i==VK_RIGHT)
- key=DIK_RIGHT;
- else if(i==VK_DOWN)
- key=DIK_DOWN;
- else if(i==VK_UP)
- key=DIK_UP;
- SetKeyUp(key,(char*)lpvData);
- //TSRuntime::add_log("SetKeyUp:i:%x",key);
- TSRuntime::KeyPressMap[i]=0;
- //i=TSRuntime::VirtualToASCIIMap[i];
- //SetKeyUp(i,(char*)lpvData);
- //TSRuntime::add_log("SetKeyUp:key:%x,i:%x",key,i);
- }
- }
- //TSRuntime::add_log("SetKeyUp:g_message:%x,lpvData:%x,Key.vk:%x",g_message,lpvData,g_wParam);
- //g_wParam=TSRuntime::VirtualToASCIIMap[g_wParam];
- ////g_wParam=::MapVirtualKey(g_wParam,0);
- //SetKeyUp(g_wParam,(char*)lpvData);
- g_isSetKeyDown=false;//重置按键标记
- g_kbdDevice=false;
- }
- //TSRuntime::add_log("SetKeyUp:g_message:%x,lpvData:%x,Key.vk:%x",g_message,lpvData,g_wParam);
- return S_OK;
- }
- }
- else if(g_mouseDevice&&cbData==0x14)
- {
- if(Caps.dwDevType==274) //鼠标事件
- {
- g_mousestate=(DIMOUSESTATE *)lpvData;
- if(g_message==WM_LBUTTONDOWN)
- g_mousestate->rgbButtons[0]=0x80;//左键单击
- else if(g_message==WM_LBUTTONUP)
- g_mousestate->rgbButtons[0]=0;//左键单击
- else if(g_message==WM_RBUTTONDOWN)
- g_mousestate->rgbButtons[1]=0x80;//右键单击
- else if(g_message==WM_RBUTTONUP)
- g_mousestate->rgbButtons[1]=0;//右键单击
- else if(g_message==WM_MBUTTONDOWN)
- g_mousestate->rgbButtons[2]=0x80;//中键单击
- else if(g_message==WM_MBUTTONUP)
- g_mousestate->rgbButtons[2]=0;//中键单击
- else if(g_message==WM_MOUSEWHEEL)
- g_mousestate->rgbButtons[3]=g_dwData;//上滚/下滚
- g_mouseDevice=false;
- return S_OK;
- }
- }
- else if(cbData==0x100)
- {
- if(Caps.dwDevType==1043)
- {
- if(g_RealKeyBoardDevice)
- {
- if(g_RealKeyBoardDevice!=m_pKeyboard)//要排除多余的键盘设备,真正的键盘设备指针比多余的键盘设备指针要小
- {
- if((DWORD)g_RealKeyBoardDevice>(DWORD)m_pKeyboard)
- g_RealKeyBoardDevice=m_pKeyboard;
- //TSRuntime::add_log("SetKeyUp:g_RealKeyBoardDevice:%x,lpvData:%x",g_RealKeyBoardDevice,lpvData);
- }
- }
- if(g_RealKeyBoardDevice==NULL)
- g_RealKeyBoardDevice=m_pKeyboard;
- }
- }
- }
- //TSRuntime::add_log("SetDXKey:cbData:%x,lpvData:%x",cbData,lpvData);
- if(g_isSetKeyDown)
- hret= S_OK;
- if(g_LockInput_kdb&&Caps.dwDevType==1043) //dwDevType==274鼠标设备对象 ,dwDevType==1043键盘设备对象
- {
- ZeroMemory(lpvData,cbData);
- hret= S_FALSE; //封锁外部键盘事件
- }
- if(g_LockInput_mouse&&Caps.dwDevType==274)
- {
- ZeroMemory(lpvData,cbData);
- hret= S_FALSE; //封锁外部鼠标事件
- }
- // TSRuntime::add_log("SetKeyUp:cbData:%x,lpvData:%x",cbData,lpvData);
- return hret;
- }
- bool UnhookMouse_DeviceState=false;
- DWORD Mouse_DeviceStateAddr=0;
- DWORD Ori_Mouse_DeviceState=0;//原始DX地址;
- //偏移0x28
- HRESULT __stdcall MyGetDeviceStateMouse(
- LPDIRECTINPUTDEVICE8 m_pMouse, //当前设备指针
- DWORD cbObjectData,
- LPDIDEVICEOBJECTDATA rgdod,
- LPDWORD pdwInOut,
- DWORD dwFlags)
- {
- HRESULT hret;
- hret= GetDeviceStateMouse( m_pMouse,cbObjectData,rgdod,pdwInOut,dwFlags);
- //if(UnhookMouse_DeviceState==false)
- //{
- // TSRuntime::add_log("MyGetDeviceStateMouse:%x",(DWORD)MyGetDeviceStateMouse);
- // UnhookMouse_DeviceState=true;
- //}
- if(Mouse_DeviceStateAddr==0)
- {
- Mouse_DeviceStateAddr=*(DWORD*)m_pMouse;
- Mouse_DeviceStateAddr+=0x28;
- //*(DWORD*)Mouse_DeviceStateAddr=(DWORD)MyGetDeviceStateMouse;
- //return hret;
- }
- if(rgdod)
- g_rgdod=rgdod;
- else
- rgdod=g_rgdod;
- DIDEVCAPS Caps;
- if(m_pMouse)
- {
- Caps.dwSize=sizeof(DIDEVCAPS);
- if(m_pMouse->GetCapabilities(&Caps)==S_OK)
- {
- if(Caps.dwDevType==274&&g_mouseDevice) //dwDevType==274鼠标设备对象 ,dwDevType==1043键盘设备对象 g_kbdDevice
- {
- rgdod->dwOfs=g_dwOfs;
- rgdod->dwData=g_dwData;
- rgdod->dwTimeStamp=GetTickCount();
- *pdwInOut=1; //当有键盘鼠标事件时候,*pdwInOut=1,记录了事件缓存
- g_mouseDevice=false;
- //TSRuntime::add_log( "cbObjectData:%x,rgdod->dwOfs:%x,rgdod->dwData:%x,pdwInOut:%x,dwFlags:%x",cbObjectData,rgdod->dwOfs,rgdod->dwData,*pdwInOut,dwFlags);
- return S_OK;
- }
- else if(Caps.dwDevType==1043&&g_kbdDevice_mouse) //dwDevType==274鼠标设备对象 ,dwDevType==1043键盘设备对象
- {
- //g_wParam=TSRuntime::VirtualToASCIIMap[g_wParam];
- int key=0;
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap_Mouse[i])
- {
- key=TSRuntime::VirtualToASCIIMap[i];
- //key=MapVirtualKey(i,0);
- //rgdod->dwOfs=key;
- for(int cnt=0;cnt<0x100;cnt++)
- {
- if(TSRuntime::keyMap[cnt])
- {
- if(TSRuntime::keyMap[cnt]==key)
- {
- rgdod->dwOfs=cnt;
- //TSRuntime::add_log("SetKeyDown:key:%x,i:%x",cnt,cnt);
- break;
- }
- }
- }
- g_isSetKeyDown=true;//标记有按键按下
- }
- }
- rgdod->dwData=g_dwData;
- rgdod->dwTimeStamp=GetTickCount();
- *pdwInOut=1; //当有键盘鼠标事件时候,*pdwInOut=1,记录了事件缓存
- if(g_message==WM_KEYUP || g_message==WM_SYSKEYUP)
- TSRuntime::KeyPressMap_Mouse[g_wParam]=0;
- g_kbdDevice_mouse=false;
- //TSRuntime::add_log( "g_message:%x,g_wParam:%x,g_isSetKeyDown:%d",g_message,g_wParam,g_isSetKeyDown);
- //TSRuntime::add_log( "rgdod->uAppData:%x,rgdod->dwTimeStamp:%x,rgdod->dwSequence:%x,rgdod->dwOfs:%x,rgdod->dwData:%x,pdwInOut:%x,dwFlags:%x",rgdod->uAppData,rgdod->dwTimeStamp,rgdod->dwSequence,rgdod->dwOfs,rgdod->dwData,*pdwInOut,dwFlags);
- //TSRuntime::add_log( "m_pMouse:%x,hret:%x,rgdod->dwOfs:%x,rgdod->dwData:%x,pdwInOut:%x,dwFlags:%x",m_pMouse,S_OK,rgdod->dwOfs,rgdod->dwData,*pdwInOut,dwFlags);
- return S_OK;
- }
- if((Caps.dwDevType==274)&&(g_LockInput_mouse)) //锁定鼠标
- {
- rgdod->dwOfs=0;
- rgdod->dwData=0;
- *pdwInOut=0;
- //return DIERR_INPUTLOST;
- }
- if(Caps.dwDevType==1043&&g_LockInput_kdb) //锁键盘
- {
- rgdod->dwOfs=0;
- rgdod->dwData=0;
- *pdwInOut=0;
- //return DIERR_INPUTLOST;
- }
- }
- } //hret
- //TSRuntime::add_log( "hret:%x",hret);
- //if(*pdwInOut!=0&&Caps.dwDevType==1043)
- //TSRuntime::add_log( "rgdod->dwTimeStamp:%x,rgdod->dwSequence:%x,rgdod->dwOfs:%x,rgdod->dwData:%x,pdwInOut:%x,dwFlags:%x",rgdod->dwTimeStamp,rgdod->dwSequence,rgdod->dwOfs,rgdod->dwData,*pdwInOut,dwFlags);
- //hret= S_OK;
- return hret;
- }
- BOOL __stdcall MyScreenToClient(HWND hWnd,LPPOINT lpPoint)
- {
- //bool ret=USER32ScreenToClient(hWnd,lpPoint);
- lpPoint->x=g_x;
- lpPoint->y=g_y;
- //TSRuntime::add_log( "MyScreenToClient:x:%d, y: %d ",lpPoint->x,lpPoint->y);
- return true;
- }
- BOOL __stdcall MyGetCursorPos( LPPOINT lpPoint) //g_IsGetCursorPoschook
- {
- bool ret=USER32GetCursorPos(lpPoint);
- g_lpPoint=lpPoint;
- lpPoint->x=g_x;
- lpPoint->y=g_y;
- ::ClientToScreen(g_currentHwnd,lpPoint);
- return ret;
- }
- BOOL __stdcall MySetCursorPos( int x, int y) //防止外部鼠标漂移
- {
- //USER32SetCursorPos(lpPoint);
- return true;
- }
- //{0, WM_LBUTTONDOWN, irr::EMIE_LMOUSE_PRESSED_DOWN},
- //{1, WM_LBUTTONUP, irr::EMIE_LMOUSE_LEFT_UP},
- //{0, WM_RBUTTONDOWN, irr::EMIE_RMOUSE_PRESSED_DOWN},
- //{1, WM_RBUTTONUP, irr::EMIE_RMOUSE_LEFT_UP},
- //{0, WM_MBUTTONDOWN, irr::EMIE_MMOUSE_PRESSED_DOWN},
- //{1, WM_MBUTTONUP, irr::EMIE_MMOUSE_LEFT_UP},
- //{2, WM_MOUSEMOVE, irr::EMIE_MOUSE_MOVED},
- //{3, WM_MOUSEWHEEL, irr::EMIE_MOUSE_WHEEL},
- //{-1, 0, 0}
- typedef LRESULT (__stdcall * My_InternalCallWinProc)(DWORD fAnsi,HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
- My_InternalCallWinProc f_My_InternalCallWinProc;
- typedef LRESULT(__stdcall * InjectWinProc)(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
- InjectWinProc f_InjectWinProc;
- void CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
- {
- return;
- }
- DWORD UnHookKbdMouse_time=0;
- void UnHookKbdMouse()//还原DX钩子,防检测
- {
- //还原DX钩子,防检测
- //修改成我们的地址后,我们就可以恢复DX图色钩子了,这样可以达到防止DX图色被检测
- if(SySTpye==1)//XP
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardXPoffse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,false); //xp
- else if(SySTpye==2)//win2003
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardXPoffse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,false); //win2003
- else if(SySTpye==4)//win7
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardWin7offse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,false);//win7
- else if(SySTpye==5)//win8
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardWin8offse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,false); //win8
- //还原DX钩子,防检测
- if(SySTpye==1)//XP
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseXPoffse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,false);//HOOK:XP系统下的:dinput8.dll的GetDeviceState函数 //xp
- else if(SySTpye==2)//win2003
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseXPoffse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,false); //win2003
- else if(SySTpye==4)//win7
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseWin7offse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,false);//win7
- else if(SySTpye==5)//win8
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseWin8offse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,false); //win8
- }
- void HookKbdMouse()//隐藏DX键鼠钩子,防DX键鼠钩子检测盾
- {
- DWORD dwback=0,dwwrite=0,time1=0;
- //TSRuntime::add_log("HookKbdMouse,Kbd_DeviceStateAddr:%x,Mouse_DeviceStateAddr:%x",Kbd_DeviceStateAddr,Mouse_DeviceStateAddr);
- if(Kbd_DeviceStateAddr!=0||Mouse_DeviceStateAddr!=0)
- {
- if(Kbd_DeviceStateAddr)
- {
- if(!UnhookKbd_DeviceState)
- {
- ::VirtualProtect((void*)Kbd_DeviceStateAddr,5,PAGE_EXECUTE_READWRITE, &dwback);
- Ori_Kbd_DeviceState=*(DWORD*)Kbd_DeviceStateAddr;
- *(DWORD*)Kbd_DeviceStateAddr=(DWORD)MyGetDeviceStateKbd;
- ::VirtualProtect((void*)Kbd_DeviceStateAddr,5,dwback, &dwback);
- UnhookKbd_DeviceState=true;
- UnHookKbdMouse();
- }
- }
- if(Mouse_DeviceStateAddr)
- {
- if(!UnhookMouse_DeviceState)
- {
- ::VirtualProtect((void*)Mouse_DeviceStateAddr,5,PAGE_EXECUTE_READWRITE, &dwback);
- Ori_Mouse_DeviceState=*(DWORD*)Mouse_DeviceStateAddr;
- *(DWORD*)Mouse_DeviceStateAddr=(DWORD)MyGetDeviceStateMouse;
- ::VirtualProtect((void*)Mouse_DeviceStateAddr,5,dwback, &dwback);
- UnhookMouse_DeviceState=true;
- UnHookKbdMouse();
- }
- //TSRuntime::add_log("HookKbdMouse,Mouse_DeviceStateAddr:%x",Mouse_DeviceStateAddr);
- }
- }
- }
- void InitRawInputDevices()
- {
- if(GetRegisteredRawInputDevicesAddr==0)
- {
- GetRegisteredRawInputDevicesAddr=(DWORD)::GetProcAddress(::GetModuleHandle(L"user32.dll"),"GetRegisteredRawInputDevices");
- My_GetRegisteredRawInputDevices=(MyGetRegisteredRawInputDevices)GetRegisteredRawInputDevicesAddr;
- }
- if(g_hwndRawInput==NULL&&isnotRawInput==false)
- {
- UINT numberDevices=10;
- RAWINPUTDEVICE Rid[10];
- memset( Rid,0,sizeof(Rid));
- UINT uret=My_GetRegisteredRawInputDevices(Rid, &numberDevices, sizeof (RAWINPUTDEVICE));
- //ERROR_INSUFFICIENT_BUFFER
- g_hwndRawInput=Rid[0].hwndTarget;
- isnotRawInput=true;
- }
- }
- MyFindPictureClass pic;
- LRESULT __stdcall MyInternalCallWinProc(DWORD fAnsi,HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- LRESULT lret=0;
- switch(message) //WM_ACTIVATEAPP
- {
- case WM_CAPTURECHANGED:
- {
- if(g_currentHwnd==(HWND)lParam)
- {
- lParam=0;
- return 0;
- }
- break;
- }
- case WM_WINDOWPOSCHANGING:
- {
- //if(GameMsg==NULL)
- // GameMsg=(LPMSG)lParam;//获取游戏内部PeekMessage中的MSG指针
- //lret=USER32InternalCallWinProc(fAnsi,hWnd,message,wParam,lParam);
- //TSRuntime::add_log("WM_WINDOWPOSCHANGING:lParam:%x,lret:%x",lParam,lret);
- //return lret;
- //wp = *(LPWINDOWPOS)lParam;
- //WINDOWPOS* wndPos =℘
- //if(wndPos->hwnd==g_currentHwnd)
- //{
- // wndPos->flags=0x3;
- // return 0;
- //}
- //TSRuntime::add_log("WM_WINDOWPOSCHANGING:hwnd:%x,hwndInsertAfter:%x,flags:%x,myhwnd:%x",wndPos->hwnd,wndPos->hwndInsertAfter,wndPos->flags,g_currentHwnd);
- break;
- }
- case WM_WINDOWPOSCHANGED:
- {
- //if(GameMsg==NULL)
- // GameMsg=(LPMSG)lParam;//获取游戏内部PeekMessage中的MSG指针
- //
- //lret=USER32InternalCallWinProc(fAnsi,hWnd,message,wParam,lParam);
- //TSRuntime::add_log("WM_WINDOWPOSCHANGING:lParam:%x,lret:%x",lParam,lret);
- //return lret;
- //WINDOWPOS wp = *(LPWINDOWPOS)lParam;
- //WINDOWPOS* wndPos =℘
- //if(wndPos->hwnd==g_currentHwnd)
- //{
- // wndPos->flags=0x1803;
- // return 0;
- //}
- //TSRuntime::add_log("WM_WINDOWPOSCHANGED:hwnd:%x,hwndInsertAfter:%x,flags:%x,myhwnd:%x",wndPos->hwnd,wndPos->hwndInsertAfter,wndPos->flags,g_currentHwnd);
- break;
- }
- case WM_ACTIVATEAPP: //伪激活
- {
- if(wParam==0)
- {
- wParam=1;
- return 0;
- }
- //WINDOWPOS wp;
- break;
- }
- case WM_ACTIVATE:
- {
- if(LOWORD(wParam)==WA_INACTIVE)//失去焦点时候
- {
- wParam=MAKEWPARAM(WA_ACTIVE,0);
- return 0;
- }
- break;
- }
- case WM_KILLFOCUS: //SWP_NOMOVE | SWP_NOSIZE
- {
- if(g_LockInput_mouse==true)
- {
- wParam=(WPARAM)g_currentHwnd;
- }
- break;
- }
- case WM_NCHITTEST://dx.mouse.position.lock.message
- {
- if(g_LockInput_mouse==true)
- {
- DWORD ret=DefWindowProcA(hWnd,message,wParam,lParam);
- if(ret==HTCAPTION)
- {
- //TSRuntime::add_log("WM_NCHITTESTret:%x",ret);
- return HTCAPTION;
- }
- return HTNOWHERE;
- }
- else
- {
- if(wParam==0x8000)
- wParam=0;
- }
- break;
- }
- case WM_NCACTIVATE:
- {
- //TSRuntime::add_log("hWnd:%x",hWnd);
- if(hWnd==g_currentHwnd&&wParam==0&&g_LockInput_mouse==true)
- {
- wParam=1;
- return 0;
- }
- else if(wParam==0)
- {
- wParam=1;
- return 1;
- }
- break;
- }
- case TS_BIND:
- {
- g_currentHwnd=(HWND)wParam;//TSRuntime::GetProcessMainWnd((DWORD)lParam);//获取注入方进程窗口句柄
- IsNpProtect=(BOOLEAN)lParam;//接收是否开启NP特殊处理
- if(TSRuntime::pData->NowUsingDictIndex!=-1)
- SendMessage(g_currentHwnd,TS_SETDICT,0,0);
- if(TSRuntime::pData->InjectType==103)
- TSRuntime::pData->InjectType=101;
- if(wcslen(TSRuntime::pData->SetPicPwdString)>0)
- wcscpy(TSRuntime::SetPicPwdString,TSRuntime::pData->SetPicPwdString);
- return TRUE;
- break;
- }
- case TS_UNBIND:
- {
- //TSRuntime::add_log( "%x,%x,%x,%x",::GetActiveWindow(),::GetFocus(),::GetTopWindow(g_currentHwnd),GetForegroundWindow());
- //TSRuntime::add_log("ScreenToClient-,lpPoint:x:%d,lpPoint:y:%d",po.x,po.y);
- GameMsg=NULL;
- if(Ori_DxdeviceAddr!=0)
- {
- //TSRuntime::add_log("TS_UNBIND-start,DxdeviceAddr:%x,Ori_DxdeviceAddr:%x,MyD3D9Present:%x",*(DWORD*)DxdeviceAddr,Ori_DxdeviceAddr,(DWORD)MyD3D9Present);
- if(*(DWORD*)DxdeviceAddr==(DWORD)MyD3D9Present)
- {
- DWORD dwback=0;
- ::VirtualProtect((void*)DxdeviceAddr,5,PAGE_EXECUTE_READWRITE, &dwback);
- *(DWORD*)DxdeviceAddr=Ori_DxdeviceAddr;//把我们的函数地址修改到真正的函数地址
- ::VirtualProtect((void*)DxdeviceAddr,5,dwback, &dwback);
- }
- UnhookPresent=false;
- //TSRuntime::add_log( "TS_ISGRAPHICPROTECT:UnhookPresent:%x,ORI:%x",Ori_DxdeviceAddr,*(DWORD*)DxdeviceAddr);
- }
- if(Ori_Kbd_DeviceState!=0)
- {
- if(*(DWORD*)Kbd_DeviceStateAddr==(DWORD)MyGetDeviceStateKbd)
- {
- DWORD dwback=0;
- //TSRuntime::add_log("Ori_Kbd_DeviceState:%x",Ori_Kbd_DeviceState);
- ::VirtualProtect((void*)Kbd_DeviceStateAddr,5,PAGE_EXECUTE_READWRITE, &dwback);
- *(DWORD*)Kbd_DeviceStateAddr=Ori_Kbd_DeviceState;//把我们的函数地址修改到真正的函数地址
- ::VirtualProtect((void*)Kbd_DeviceStateAddr,5,dwback, &dwback);
- }
- UnhookKbd_DeviceState=false;
- }
- if(Ori_Mouse_DeviceState!=0)
- {
- if(*(DWORD*)Mouse_DeviceStateAddr==(DWORD)MyGetDeviceStateMouse)
- {
- DWORD dwback=0;
- //TSRuntime::add_log("Ori_Mouse_DeviceState:%x",Ori_Kbd_DeviceState);
- ::VirtualProtect((void*)Mouse_DeviceStateAddr,5,PAGE_EXECUTE_READWRITE, &dwback);
- *(DWORD*)Mouse_DeviceStateAddr=Ori_Mouse_DeviceState;//把我们的函数地址修改到真正的函数地址
- ::VirtualProtect((void*)Mouse_DeviceStateAddr,5,dwback, &dwback);
- }
- UnhookMouse_DeviceState=false;
- }
- if(TSRuntime::pData->Isdxkmprotect)
- VIPHookandUnhookAPI((void*)false);
- else
- HookandUnhookAPI((void*)false);
- if(TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex]!=NULL)
- delete [] TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex];
- g_Unbind=true;
- TSRuntime::pData->NowUsingDictIndex=-1;
- if(TSRuntime::pData->InjectType==101)
- if(IsWindow(g_InjectHWND)==true)
- TSRuntime::pData->InjectType=102;
- //if(TSRuntime::pData->InjectType==205)//203绑定
- //{
- // if(TSRuntime::pData->RemodeDLLMode!=NULL)//释放上一次加载的DLL模块,因为不能自己释放自己,否则会引起异常
- // MemoryFreeLibrary(TSRuntime::pData->RemodeDLLMode);
- // TSRuntime::pData->RemodeDLLMode=g_hInstance;
- //}
- //TSRuntime::add_log("TS_UNBIND--GetForegroundWindow:%d,GetFocus:%d,GetActiveWindow:%d",GetForegroundWindow(),GetFocus(),GetActiveWindow());
- //TSRuntime::add_log("TS_UNBIND-end");
- //解绑操作
- return TRUE;
- break;
- }
- case TS_KEYDOWN:
- {
- if(wParam==VK_MENU)////WM_SYSKEYDOWN
- {
- TSRuntime::g_IsSYSKEY=true;
- TSRuntime::KeyPressMap[0xA4]=1;//左Alt键
- TSRuntime::KeyPressMap_Mouse[0xA4]=1;//左Alt键
- }
- if(TSRuntime::g_IsSYSKEY&&lParam==0)
- message=WM_SYSKEYDOWN;
- else
- message=WM_KEYDOWN;
- if(wParam==VK_CONTROL)
- {
- TSRuntime::KeyPressMap[0xA2]=1;//左Ctrl键
- TSRuntime::KeyPressMap_Mouse[0xA2]=1;
- }
- else if(wParam==VK_SHIFT)
- {
- TSRuntime::KeyPressMap[0xA0]=1;//左Shift键
- TSRuntime::KeyPressMap_Mouse[0xA0]=1;//左Shift键
- }
- g_dwData=0x80;
- g_keymouseevent=true;
- g_message=message;
- g_wParam=wParam;
- TSRuntime::KeyPressMap[wParam]=1;
- TSRuntime::KeyPressMap_Mouse[wParam]=1;
- TSRuntime::RawInputKeyPressMap[wParam]=1;
- g_kbdDevice=true;
- g_keyboardstate=true;
- g_kbdDevice_mouse=true;
- g_GetKeyState=true;
- g_GetRawInputDatahook=true;
- //if(message==WM_KEYDOWN)
- lParam=TSRuntime::retrunLparamDown(wParam);
- if(message==WM_SYSKEYDOWN&&wParam==VK_MENU)
- lParam=0x4000000|lParam;
- else if(message==WM_SYSKEYDOWN)
- lParam=0x4000000|0x20000000|TSRuntime::retrunLparamDown(wParam);
- hWnd=g_currentHwnd;
- if(IsNpProtect)
- HookMessageAPI();
- //"dx.keypad.state.api"//EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),1
- ::PostThreadMessageA(0x80000000,EM_GETMARGINS,(WPARAM)GetCurrentProcessId(),(LPARAM)(0x8000|::MapVirtualKeyEx(g_wParam,0,GetKeyboardLayout(0))));
- //if(wParam!=13) //等于wParam=13回车键的时候放行
- // wParam=0x8000|wParam;
- //TSRuntime::add_log("TS_KEYDOWN:message:%x,wParam:%x",message,wParam);//TSRuntime::VirtualToASCIIMap[wParam]
- if(TSRuntime::g_IsSYSKEY&&wParam!=VK_MENU)
- {
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,wParam,lParam);
- else
- ::PostMessage(g_currentHwnd,message,wParam,lParam);
- }
- else//
- {
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,wParam,lParam);
- else
- ::PostMessage(g_currentHwnd,message,wParam,lParam);
- }
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- }
- message=TS_KEYDOWN;
- //TSRuntime::add_log("message:%x,wParam:%x,lParam:%x",message,wParam,lParam);
- //TSRuntime::add_log("hwndTarget:%d,uret:%d,GetLastError:%d",hwndTarget,uret,GetLastError());
- //MessageBoxA(NULL,"aa","ts",NULL);
- return 1;
- break;
- }
- case TS_KEYUP:
- {
- if(TSRuntime::g_IsSYSKEY&&lParam==0)
- message=WM_SYSKEYUP;
- else
- message=WM_KEYUP;
- g_dwData=0;
- g_message=message;
- g_wParam=wParam;
- g_GetKeyState=true;
- g_keyboardstate=true;
- g_keymouseevent=true;
- g_kbdDevice_mouse=true;
- g_kbdDevice=true;
- //TSRuntime::KeyPressMap[wParam]=0;
- if(wParam==VK_MENU)
- lParam=0XC0380001;
- else if(message==WM_KEYUP)
- lParam=0xC0000000|TSRuntime::retrunLparamDown(wParam);
- else if(message==WM_SYSKEYUP)
- lParam=0xE0000000|TSRuntime::retrunLparamDown(wParam);
- hWnd=g_currentHwnd;
- //"dx.keypad.state.api"
- ::PostThreadMessageA(0x80000000,EM_GETMARGINS,(WPARAM)GetCurrentProcessId(),(LPARAM)::MapVirtualKeyEx(g_wParam,0,GetKeyboardLayout(0)));
- //if(wParam!=13) //等于wParam=13回车键的时候放行
- // wParam=0x8000|wParam;
- if(IsNpProtect)
- HookMessageAPI();
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,wParam,lParam);
- else
- ::PostMessage(g_currentHwnd,message,wParam,lParam);
- if(wParam==VK_MENU)////WM_SYSKEYDOWN
- {
- TSRuntime::KeyPressMap[0xA4]=0;//左Alt键
- TSRuntime::KeyPressMap_Mouse[0xA4]=0;//左Alt键
- }
- else if(wParam==VK_CONTROL)
- {
- TSRuntime::KeyPressMap[0xA2]=0;//左Ctrl键
- TSRuntime::KeyPressMap_Mouse[0xA2]=0;//左Alt键
- }
- else if(wParam==VK_SHIFT)
- {
- TSRuntime::KeyPressMap[0xA0]=0;//左Shift键
- TSRuntime::KeyPressMap_Mouse[0xA0]=0;//左Alt键
- }
- TSRuntime::g_IsSYSKEY=false;
- //TSRuntime::add_log("TS_KEYUP:message:%x,wParam:%x",message,wParam);
- if(GetRegisteredRawInputDevicesAddr==0)
- {
- GetRegisteredRawInputDevicesAddr=(DWORD)::GetProcAddress(::GetModuleHandle(L"user32.dll"),"GetRegisteredRawInputDevices");
- My_GetRegisteredRawInputDevices=(MyGetRegisteredRawInputDevices)GetRegisteredRawInputDevicesAddr;
- }
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- }
- message=TS_KEYUP;
- return 1;
- break;
- }
- case TS_CHAR:
- {
- //TSRuntime::pData->tt="abcddddee";
- message=WM_CHAR;
- lParam=TSRuntime::retrunLparamDown(wParam);
- hWnd=g_currentHwnd;
- g_wParam=wParam;
- //wParam=wParam|0x8000;
- if(IsNpProtect)
- HookMessageAPI();
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,wParam,lParam);
- else
- ::PostMessage(g_currentHwnd,message,wParam,lParam);
- message=TS_CHAR;
- return true;
- break;
- }
- case TS_MOUSEMOVE:
- {
- g_dwOfs=4;
- g_dwData=0xfffffffe;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_x=(short)LOWORD(lParam);
- g_y=(short)HIWORD(lParam);
- message=WM_MOUSEMOVE;
- g_message=message;
- g_GetRawInputDatahook=true;
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- if(HookSendMessageRet!=0)
- {
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- MySendMessage(g_currentHwnd,WM_SETCURSOR,(WPARAM)g_currentHwnd,MAKELPARAM(HTCLIENT,WM_MOUSEMOVE));
- }
- else
- {
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- //TSRuntime::add_log("TS_MOUSEMOVE");
- SendMessage(g_currentHwnd,WM_SETCURSOR,(WPARAM)g_currentHwnd,MAKELPARAM(HTCLIENT,WM_MOUSEMOVE));
- }
- //::PostMessage(g_currentHwnd,message,0x8000,lParam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,0,lParam);
- else
- ::PostMessage(g_currentHwnd,message,0,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- //TSRuntime::add_log("GameMsg:%x",GameMsg);
- message=TS_MOUSEMOVE;
- return 1;
- //hWnd=g_currentHwnd;
- break;
- }
- case TS_MOUSER:
- {
- g_dwOfs=4;
- g_dwData=0xfffffffe;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_x=g_x+(short)LOWORD(lParam);
- g_y=g_y+(short)HIWORD(lParam);
- lParam=MAKELPARAM(g_x,g_y);
- message=WM_MOUSEMOVE;
- g_message=message;
- g_GetRawInputDatahook=true;
- hWnd=g_currentHwnd;
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- if(HookSendMessageRet!=0)
- {
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- MySendMessage(g_currentHwnd,WM_SETCURSOR,(WPARAM)g_currentHwnd,MAKELPARAM(HTCLIENT,WM_MOUSEMOVE));
- }
- else
- {
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- //TSRuntime::add_log("TS_MOUSEMOVE");
- SendMessage(g_currentHwnd,WM_SETCURSOR,(WPARAM)g_currentHwnd,MAKELPARAM(HTCLIENT,WM_MOUSEMOVE));
- }
- //::PostMessage(g_currentHwnd,message,0x8000,lParam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,0,lParam);
- else
- ::PostMessage(g_currentHwnd,message,0,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_MOUSEMOVE;
- return 1;
- break;
- }
- case TS_MOUSEMOVEOVER:
- {
- g_dwOfs=0;
- g_dwData=0xfffffffe;
- g_message=0;
- g_mouseDevice=true;
- return 1;
- break;
- }
- case TS_LBUTTONDOWN:
- {
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- g_dwOfs=0xc;
- g_dwData=0x80;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_GetRawInputDatahook=true;
- g_message=WM_LBUTTONDOWN;
- message=WM_LBUTTONDOWN;
- lParam=MAKELPARAM(g_x,g_y);
- hWnd=g_currentHwnd;
- if(wParam==(WPARAM)WM_LBUTTONDBLCLK)
- {
- message=WM_LBUTTONDBLCLK;
- g_message=WM_LBUTTONDBLCLK;
- g_dwOfs=0xf;
- wParam=1;
- }
- //"dx.keypad.state.api"//,(WPARAM)GetCurrentProcessId(),
- ::PostThreadMessageA(0x80000000,EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),1);
- if(HookSendMessageRet!=0)
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- else
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,1,lParam);
- else
- ::PostMessage(g_currentHwnd,message,1,lParam);
- //::PostMessage(g_currentHwnd,message,1,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_LBUTTONDOWN;
- return true;
- break;
- }
- case TS_LBUTTOUP:
- {
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- //SendMessage(g_currentHwnd,WM_NCHITTEST,0x8000,lparam);
- g_dwOfs=0xc;
- g_dwData=0;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_GetRawInputDatahook=true;
- message=WM_LBUTTONUP;
- g_message=message;
- lParam=MAKELPARAM(g_x,g_y);
- hWnd=g_currentHwnd;
- ::PostThreadMessageA(0x80000000,EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),0);
- if(HookSendMessageRet!=0)
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- else
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,0,lParam);
- else
- ::PostMessage(g_currentHwnd,message,0,lParam);
- //::PostMessage(g_currentHwnd,message,0,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_LBUTTOUP;
- return true;
- break;
- }
- case TS_RBUTTONDOWN:
- {
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- //SendMessage(g_currentHwnd,WM_NCHITTEST,0x8000,lparam);
- g_dwOfs=0xd;
- g_dwData=0x80;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_GetRawInputDatahook=true;
- message=WM_RBUTTONDOWN;
- g_message=message;
- lParam=MAKELPARAM(g_x,g_y);
- hWnd=g_currentHwnd;
- ::PostThreadMessageA(0x80000000,EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),1);
- if(HookSendMessageRet!=0)
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- else
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,1,lParam);
- else
- ::PostMessage(g_currentHwnd,message,1,lParam);
- //::PostMessage(g_currentHwnd,message,1,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_RBUTTONDOWN;
- return true;
- break;
- }
- case TS_RBUTTONUP:
- {
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- //SendMessage(g_currentHwnd,WM_NCHITTEST,0x8000,lparam);
- g_dwOfs=0xd;
- g_dwData=0;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_GetRawInputDatahook=true;
- message=WM_RBUTTONUP;
- g_message=message;
- lParam=MAKELPARAM(g_x,g_y);
- hWnd=g_currentHwnd;
- ::PostThreadMessageA(0x80000000,EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),0);
- if(HookSendMessageRet!=0)
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- else
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,0,lParam);
- else
- ::PostMessage(g_currentHwnd,message,0,lParam);
- //::PostMessage(g_currentHwnd,message,0,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_RBUTTONUP;
- return true;
- break;
- }
- case TS_MBUTTONDOWN:
- {
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- //SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- g_dwOfs=0xe;
- g_dwData=0x80;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_GetRawInputDatahook=true;
- message=WM_MBUTTONDOWN;
- g_message=message;
- lParam=MAKELPARAM(g_x,g_y);
- hWnd=g_currentHwnd;
- ::PostThreadMessageA(0x80000000,EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),1);
- if(HookSendMessageRet!=0)
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- else
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,1,lParam);
- else
- ::PostMessage(g_currentHwnd,message,1,lParam);
- //::PostMessage(g_currentHwnd,message,1,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_MBUTTONDOWN;
- return true;
- break;
- }
- case TS_MBUTTONUP:
- {
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- //SendMessage(g_currentHwnd,WM_NCHITTEST,0x8000,lparam);
- g_dwOfs=0xe;
- g_dwData=0;
- g_mouseDevice=true;
- g_keymouseevent=true;
- g_GetRawInputDatahook=true;
- message=WM_MBUTTONUP;
- g_message=message;
- lParam=MAKELPARAM(g_x,g_y);
- hWnd=g_currentHwnd;
- ::PostThreadMessageA(0x80000000,EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),0);
- if(HookSendMessageRet!=0)
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- else
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,0,lParam);
- else
- ::PostMessage(g_currentHwnd,message,0,lParam);
- //::PostMessage(g_currentHwnd,message,0,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_MBUTTONUP;
- return true;
- break;
- }
- case TS_GETMOUSESHARE:
- {
- if(g_bkmouseshape)
- {
- return pic.GetBkMouseShape(g_bkmouseshape);
- }
- //TSRuntime::add_log("GetBkMouseShape:%x",g_bkmouseshape);
- return false;
- break;
- }
- case TS_SETPATH:
- {
- memset(TSRuntime::SetPath,0,MAX_PATH);
- wcscpy(TSRuntime::SetPath,TSRuntime::pData->setpath);
- return true;
- break;
- }
- case TS_GETCURSORPOS:
- {
- LONG lparam=MAKELPARAM(g_x,g_y);
- return lparam;
- break;
- }
- case TS_MOUSEWHEEL:// 向上wParam=0x780000,向下wParam=0xff880000
- {
- g_GetRawInputDatahook=true;
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(hWnd,&Point);
- LPARAM lparam=MAKELPARAM(Point.x,Point.y);
- if(IsNpProtect)
- HookMessageAPI();
- //SendMessage(g_currentHwnd,WM_NCHITTEST,0x8000,lparam);
- g_dwOfs=8;
- if(wParam==0xff880000)//向下
- {
- g_dwData=0xffffff88;
- }
- else if(wParam==0x780000) //向上
- {
- g_dwData=0x78;
- }
- wParam=MAKEWPARAM(0x8000,g_dwData);
- g_mouseDevice=true;
- g_keymouseevent=true;
- lParam=MAKELPARAM(g_x,g_y);
- message=WM_MOUSEWHEEL;
- g_message=message;
- ::PostThreadMessageA(0x80000000,EM_SETMARGINS,(WPARAM)GetCurrentProcessId(),1);
- if(HookSendMessageRet!=0)
- MySendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- else
- SendMessage(g_currentHwnd,WM_NCHITTEST,0,lparam);
- if(HookPostMessageRet!=0)
- MyPostMessage(g_currentHwnd,message,wParam,lParam);
- else
- ::PostMessage(g_currentHwnd,message,wParam,lParam);
- InitRawInputDevices();
- if(g_hwndRawInput!=NULL)
- PostMessageA(g_hwndRawInput,WM_INPUT,0,0x12345678);
- if(GameMsg)
- {
- GameMsg->hwnd=g_currentHwnd;
- GameMsg->message=message;
- GameMsg->wParam=wParam;
- GameMsg->lParam=lParam;
- GameMsg->pt=Point;
- }
- message=TS_MOUSEWHEEL;
- //PostMessage(g_currentHwnd,message,wParam,lparam);
- //hWnd=g_currentHwnd;
- return 1;
- break;
- }
- case TS_SETDICT:
- {
- //如果已经注入成功,者需拷贝一份字库信息到共享内存
- if(TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex]!=NULL)
- delete [] TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex];
- TSRuntime::NowUsingDictIndex=TSRuntime::pData->NowUsingDictIndex;
- DWORD MyDictCountaddr=(DWORD)TSRuntime::pData->MyDictCount[TSRuntime::NowUsingDictIndex];
- int ndictsize=TSRuntime::pData->nMyDictCountsize[TSRuntime::NowUsingDictIndex];
- TSRuntime::nMyDictCountsize[TSRuntime::NowUsingDictIndex]=ndictsize;
- TSRuntime::nMaxStrHight[TSRuntime::NowUsingDictIndex]=TSRuntime::pData->nMaxStrHight[TSRuntime::NowUsingDictIndex];
- pMyDictInfo mydict=new MYDICTINFO[ndictsize+1];
- TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex]=mydict;
- TSRuntime::EnablePrivilege(L"SeDebugPrivilege",true);
- DWORD injectpid=0;
- ::GetWindowThreadProcessId(TSRuntime::pData->InjectHwnd,&injectpid);
- HANDLE handle=OpenProcess(PROCESS_ALL_ACCESS,false,injectpid);
- if(handle==NULL)
- {
- if(handle==NULL)
- delete [] mydict;
- }
- bool si=ReadProcessMemory(handle,(void*)MyDictCountaddr,mydict,ndictsize*sizeof(MYDICTINFO),NULL);
- if(!si)
- {
- delete [] mydict;
- }
- return true;
- break;
- }
- case TS_USEDICT:
- {
- if(TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex]!=NULL)
- delete [] TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex];
- TSRuntime::NowUsingDictIndex=TSRuntime::pData->NowUsingDictIndex;
- DWORD MyDictCountaddr=(DWORD)TSRuntime::pData->MyDictCount[TSRuntime::NowUsingDictIndex];
- int ndictsize=TSRuntime::pData->nMyDictCountsize[TSRuntime::NowUsingDictIndex];
- TSRuntime::nMyDictCountsize[TSRuntime::NowUsingDictIndex]=ndictsize;
- TSRuntime::nMaxStrHight[TSRuntime::NowUsingDictIndex]=TSRuntime::pData->nMaxStrHight[TSRuntime::NowUsingDictIndex];
- pMyDictInfo mydict=new MYDICTINFO[ndictsize+1];
- TSRuntime::MyDictCount[TSRuntime::NowUsingDictIndex]=mydict;
- TSRuntime::EnablePrivilege(L"SeDebugPrivilege",true);
- HANDLE handle=OpenProcess(PROCESS_ALL_ACCESS,false,(DWORD)wParam);
- if(handle==NULL)
- {
- if(handle==NULL)
- delete [] mydict;
- }
- bool si=ReadProcessMemory(handle,(void*)MyDictCountaddr,mydict,ndictsize*sizeof(MYDICTINFO),NULL);
- if(!si)
- {
- delete [] mydict;
- }
- return true;
- break;
- }
- case TS_LOCKINPUT:
- {
- if(wParam==0)//1 开启锁定(键盘鼠标都锁定), 0关闭锁定,2 只锁定鼠标,3 只锁定键盘
- {
- g_LockInput_kdb=false;
- g_LockInput_mouse=false;
- }
- else if(wParam==1)
- {
- g_LockInput_kdb=true;
- g_LockInput_mouse=true;
- }
- else if(wParam==2)
- {
- g_LockInput_kdb=false;
- g_LockInput_mouse=true;
- }
- else if(wParam==3)
- {
- g_LockInput_kdb=true;
- g_LockInput_mouse=false;
- }
- return true;
- break;
- }
- case TS_DOWNCPU:
- {
- sleeptime=wParam;
- return true;
- break;
- }
- case TS_SENDSTRINGIME:
- {
- IsSendstrIme=true;
- lParam=(lParam|GCS_RESULTSTR);
- SendMessage(g_currentHwnd,WM_IME_COMPOSITION,wParam,lParam);
- return true;
- break;
- }
- case TS_SETPICPWD:
- {
- wcscpy(TSRuntime::SetPicPwdString,TSRuntime::pData->SetPicPwdString);
- return true;
- }
- case TS_ISGRAPHICPROTECT://开启防图色检测
- {
- //TSRuntime::add_log( "TS_ISGRAPHICPROTECT:DxdeviceAddr:%x",DxdeviceAddr);
- if(wParam==1&&TSRuntime::pData->isgraphicprotect==true&&DxdeviceAddr!=0)
- {
- Ori_DxdeviceAddr=*(DWORD*)DxdeviceAddr;
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- //TSRuntime::add_log( "TS_ISGRAPHICPROTECT:Ori_DxdeviceAddr:%x,DxdeviceAddr:%x",Ori_DxdeviceAddr,*(DWORD*)DxdeviceAddr);
- if(UnhookPresent==false)
- {
- //修改成我们的地址后,我们就可以恢复DX图色钩子了,这样可以达到防止DX图色被检测
- if(SySTpye==1)//XP
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentXPoffse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,false); //xp
- else if(SySTpye==2)//win2003
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin2003offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,false); //win2003
- else if(SySTpye==4)//win7
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin7offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,false);//win7
- else if(SySTpye==5)//win8
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin8offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,false); //win8
- UnhookPresent=true;
- }
- }
- else if(Ori_DxdeviceAddr!=0)
- {
- if(*(DWORD*)DxdeviceAddr==(DWORD)MyD3D9Present)
- *(DWORD*)DxdeviceAddr=Ori_DxdeviceAddr;//把我们的函数地址修改到真正的函数地址
- //TSRuntime::add_log( "TS_ISGRAPHICPROTECT:UnhookPresent:%x,ORI:%x",Ori_DxdeviceAddr,*(DWORD*)DxdeviceAddr);
- }
- return true;
- }
- default:
- //TSRuntime::pData->isInject=true;
- break;
- }
- if(TSRuntime::pData)
- {
- if(UnhookPresent)
- {
- if((DWORD)MyD3D9Present!=*(DWORD*)DxdeviceAddr)
- UnhookPresent=false;
- }
- if(TSRuntime::pData->isgraphicprotect==true&&UnhookPresent==false&&TSRuntime::pData->ispichook==true)
- ::SendMessage(g_currentHwnd,TS_ISGRAPHICPROTECT,1,0);
- //if((!UnhookKbd_DeviceState&&!UnhookMouse_DeviceState)&&IsVIPHookandUnhookAPI)
- //{
- // HookKbdMouse();
- // if(UnHookKbdMouse_time==0)
- // UnHookKbdMouse_time=::GetTickCount();
- // else
- // {
- // if((UnHookKbdMouse_time-::GetTickCount())>=500)
- // UnHookKbdMouse();
- // }
- //}
- }
- //if()
- //if(message==WM_USER+1||message==WM_USER+2||message==0x202||message==WM_KEYDOWN||message==WM_KEYUP)
- //TSRuntime::add_log( "Before HOOK成功:lret:%x,hWnd:%x,message:%x,wParam:%x,lParam:%x,X:%d,Y:%d,g_currentHwnd:%x",lret,hWnd,message,wParam,lParam,(short)LOWORD(lParam),(short)HIWORD(lParam),g_currentHwnd);
- //TSRuntime::add_log( "InternalCallWinProcstart-call:%x,message:%x,wParam:%x,lParam:%d",fAnsi,message,wParam,lParam);
- lret=USER32InternalCallWinProc(fAnsi,hWnd,message,wParam,lParam);
- //TSRuntime::add_log( "InternalCallWinProcstart-end:%x,wParam:%x,lParam:%d",message,wParam,lParam);
- //if(message==WM_SYSKEYDOWN)
- // TSRuntime::add_log( "wParam:%x,lParam:%x",wParam,lParam);
- //TSRuntime::add_log( "hWnd:%x,message:%x,wParam:%x,LOWORD(lParam):%d,HIWORD(lParam):%d",hWnd,message,wParam,(short)LOWORD(lParam),(short)HIWORD(lParam));
- return lret;
- //return 1;
- }
- ULONG __stdcall MyNtUserCallOneParam(DWORD Param, DWORD Routine)
- {
- ULONG ret=0;
- if(Routine==0x9)//GetMessagePos
- {
- POINT xy;
- GetCursorPos(&xy);
- ret=(ULONG)MAKELPARAM(xy.x,xy.y);
- //TSRuntime::add_log("NtUserCallOneParam-GetMessagePos");
- return 1;
- }
- else if(Routine==0x26)//GetCursorPos,ScreenToClient
- {
- LPPOINT lpPoint=(LPPOINT)Param;
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(g_currentHwnd,&Point);
- lpPoint->x=Point.x;
- lpPoint->y=Point.y;
- //TSRuntime::add_log("NtUserCallOneParam-Param:%x,lpPoint:x:%d,lpPoint:y:%d,ret:%x",Param,lpPoint->x,lpPoint->y,ret);
- return 1;
- }
- ret=NtUserCallOneParam(Param,Routine);
- //TSRuntime::add_log("NtUserCallOneParam--Param:%x,Routine:%x,ret:%x",Param,Routine,ret);
- return ret;
- }
- ULONG __stdcall MyNtUserCallTwoParam( DWORD Param1,DWORD Param2,DWORD Routine)
- {
- ULONG ret=0;
- if((Routine==0x74&&IsWin7)||(Routine==0x7B&&IsWin8)||((IsWinxp||IsWin2003)&&Routine==0x6f))//SetCursorPos
- {
- return 0;
- }
- if((Routine==0x69&&IsWin7)||(Routine==0x70&&IsWin8))//GetCursorPos,ScreenToClient
- {
- LPPOINT lpPoint=(LPPOINT)Param1;
- POINT Point;
- Point.x=g_x;
- Point.y=g_y;
- ::ClientToScreen(g_currentHwnd,&Point);
- lpPoint->x=Point.x;
- lpPoint->y=Point.y;
- //TSRuntime::add_log("MyNtUserCallTwoParam-Param:%x,lpPoint:x:%d,lpPoint:y:%d,ret:%x",Param2,lpPoint->x,lpPoint->y,ret);
- return 1;
- }
- ret=NtUserCallTwoParam(Param1,Param1,Routine);
- //TSRuntime::add_log("MyNtUserCallTwoParam-Param:%x,lpPoint:x:%d,lpPoint:y:%d,ret:%x",Param2,lpPoint->x,lpPoint->y,ret);
- return ret;
- }
- ULONG_PTR __stdcall MyNtUserGetThreadState( DWORD Routine)
- {
- ULONG_PTR ret=0;
- if(Routine==0||Routine==1||Routine==2||Routine==16)//GetFocus,GetActiveWindow,GetCapture,16:UserThreadStateIsForeground
- {
- ret=(ULONG_PTR)g_currentHwnd;
- return ret;
- }
- ret=NtUserGetThreadState(Routine);
- //TSRuntime::add_log("NtUserGetThreadState--Routine:%d,ret:%x",Routine,ret);
- return ret;
- }
- SHORT __stdcall MyNtUserGetKeyState( int nVirtKey)
- {
- //TSRuntime::add_log("NtUserGetKeyState--nVirtKey:%x",nVirtKey);
- ULONG sret=0;
- if(g_GetKeyState||g_mouseDevice)
- {
- DWORD ALT_KEYCODE=0;
- bool iskeyevent=false;
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i])
- {
- if(nVirtKey==i)
- {
- iskeyevent=true;
- break;
- }
- else if((i==VK_MENU&&(nVirtKey==VK_LMENU||nVirtKey==VK_RMENU))||(i==VK_SHIFT&&(nVirtKey==VK_LSHIFT||nVirtKey==VK_RSHIFT))
- ||(i==VK_CONTROL&&(nVirtKey==VK_LCONTROL||nVirtKey==VK_RCONTROL)))
- {
- iskeyevent=true;
- break;
- }
- }
- }
- if(g_message==WM_LBUTTONDOWN||g_message==WM_RBUTTONDOWN||g_message==WM_MBUTTONDOWN
- ||g_message==WM_LBUTTONUP||g_message==WM_RBUTTONUP||g_message==WM_MBUTTONUP)
- {
- if(nVirtKey==VK_LBUTTON||nVirtKey==VK_RBUTTON||nVirtKey==VK_MBUTTON)
- {
- iskeyevent=true;
- if(g_message==WM_LBUTTONDOWN||g_message==WM_RBUTTONDOWN||g_message==WM_MBUTTONDOWN)
- ismousedown=true;
- //TSRuntime::add_log( "MyGetKeyState-1:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- }
- if(g_message==WM_LBUTTONUP||g_message==WM_RBUTTONUP||g_message==WM_MBUTTONUP)
- {
- ismousedown=false;
- g_mouseDevice=false;
- }
- //TSRuntime::add_log( "MyGetKeyState:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- }
- //if((g_message==WM_KEYDOWN&&g_wParam==nVirtKey)||(g_message==WM_SYSKEYDOWN&&nVirtKey==VK_MENU)||(g_message==WM_SYSKEYDOWN&&nVirtKey==VK_LMENU) )
- if((((g_message==WM_KEYDOWN)||(g_message==WM_SYSKEYDOWN)
- ||(g_message==WM_LBUTTONDOWN)
- ||(g_message==WM_RBUTTONDOWN)
- ||(g_message==WM_MBUTTONDOWN))&&iskeyevent)||((nVirtKey==VK_LBUTTON||nVirtKey==VK_RBUTTON||nVirtKey==VK_MBUTTON)&&ismousedown))
- {
- sret=0xffffff80;
- //TSRuntime::add_log( "MyGetKeyState-WM_SYSKEYDOWN:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- //返回负数说明该键被按下
- }
- //else if((g_message==WM_KEYUP||g_message==WM_SYSKEYUP)&&g_wParam==nVirtKey)
- else if(((g_message==WM_KEYUP||g_message==WM_SYSKEYUP)
- ||(g_message==WM_LBUTTONUP)
- ||(g_message==WM_RBUTTONUP)
- ||(g_message==WM_MBUTTONUP))&&iskeyevent)
- {
- //TSRuntime::add_log( "MyGetKeyState-WM_SYSKEYUP:g_message:%x,nVirtKey:%x,ismousedown:%d",g_message,nVirtKey,ismousedown);
- sret=1; //返回正数说明该键被弹起
- g_GetKeyState=false;
- TSRuntime::KeyPressMap[nVirtKey]=0;
- //g_wParam=0;
- }
- //TSRuntime::add_log( "GetKeyState:nVirtKey:%x,sret:%x,g_message:%x",nVirtKey,sret,g_message);
- //TSRuntime::add_log( "MyGetKeyState:nVirtKey:%x",nVirtKey);
- return sret;
- //TerminateProcess()
- //CloseWindow;
- //::DestroyWindow()
- //ExitThread()
- }
- sret=NtUserGetKeyState(nVirtKey);
- return sret;
- }
- SHORT __stdcall MyNtUserGetAsyncKeyState( int vKey)
- {
- ULONG sret=0;
- //TSRuntime::add_log("NtUserGetAsyncKeyState--nVirtKey:%x,g_message:%x,g_mouseDevice:%d",vKey,g_message,g_mouseDevice);
- if(g_kbdDevice||g_mouseDevice)
- {
- if((g_message==WM_LBUTTONDOWN&&vKey==VK_LBUTTON)
- ||(g_message==WM_RBUTTONDOWN&&vKey==VK_RBUTTON)
- ||(g_message==WM_MBUTTONDOWN&&vKey==VK_MBUTTON))
- {
- sret=0x8000;
- //TSRuntime::add_log("NtUserGetAsyncKeyState--nVirtKey:%x,g_message:%x,g_mouseDevice:%d",vKey,g_message,g_mouseDevice);
- return sret;
- }
- else if((g_message==WM_LBUTTONUP&&vKey==VK_LBUTTON)
- ||(g_message==WM_RBUTTONUP&&vKey==VK_LBUTTON)
- ||(g_message==WM_MBUTTONUP&&vKey==VK_MBUTTON))
- {
- sret=0;
- g_message=0;
- //g_mouseDevice=false;
- }
- else if(g_message==WM_KEYDOWN||g_message==WM_KEYUP||g_message==WM_SYSKEYDOWN||g_message==WM_SYSKEYUP)
- {
- bool iskeyevent=false;
- for(int i=0;i<0x100;i++)
- {
- if(1==TSRuntime::KeyPressMap[i])
- {
- //int key=TSRuntime::VirtualToASCIIMap[i];
- if(vKey==i)
- {
- if((g_message==WM_KEYUP || g_message==WM_SYSKEYUP) && i == g_wParam)
- TSRuntime::KeyPressMap[i]=0;
- else if(i != g_wParam)
- return 0x8000;
- iskeyevent=true;
- break;
- }
- }
- }
- //TSRuntime::add_log("MyGetAsyncKeyState:iskeyevent:%d,vKey:%d,g_message:%x",iskeyevent,vKey,g_message);
- if(iskeyevent&&(g_message==WM_KEYDOWN||g_message==WM_SYSKEYDOWN))
- {
- sret=0x8000;
- //TSRuntime::add_log("iskeyevent:MyGetAsyncKeyState:sret:%d,vKey:%d",sret,vKey);
- return sret;
- }
- else if(iskeyevent&&(g_message==WM_KEYUP||g_message==WM_SYSKEYUP))
- {
- //g_keydown=0xFFFF8001;//重置
- sret=0;
- g_kbdDevice=false;
- //TSRuntime::add_log("iskeyevent:MyGetAsyncKeyState:sret:%d,vKey:%d",sret,vKey);
- }
- }
- }
- if(g_LockInput_kdb||g_LockInput_mouse) //封锁外部键盘鼠标
- {
- if(g_LockInput_mouse)
- {
- if(vKey==VK_LBUTTON||vKey==VK_RBUTTON||vKey==VK_MBUTTON)
- sret=0;
- }
- else if(g_LockInput_kdb)
- {
- sret=0;
- }
- //TSRuntime::add_log("NtUserGetAsyncKeyState--g_LockInput_kdb:%x,g_LockInput_mouse:%x",g_LockInput_kdb,g_LockInput_mouse);
- return 0;
- }
- sret=NtUserGetAsyncKeyState(vKey);
- return sret;
- }
- void VIPHookandUnhookAPI(void *para)
- {
- //TSRuntime::add_log( "hprocess:%d",::GetCurrentProcess());
- //TSRuntime::add_log( "HookandUnhookAPI-start,TSRuntime::IsVirtualProtectEx:%d",TSRuntime::IsVirtualProtectEx);
- IsVIPHookandUnhookAPI=true;
- bool ishook=(bool)para;
- SySTpye=TSRuntime::InitialWindowsVersion();//先获取系统版本后在HOOK,1:XP,2:2003,4:win7
- // if(ishook)
- //{
- // //GetHookModFuntion(L"user32.dll","PeekMessageA",0,(DWORD)MyPeekMessageA,(DWORD)UnhookPeekMessage,HookPeekMessageARet,ishook);
- // //GetHookModFuntion(L"user32.dll","PeekMessageW",0,(DWORD)MyPeekMessageW,(DWORD)UnhookPeekMessage,HookPeekMessageWRet,ishook);
- //}
- if(SySTpye==1||SySTpye==2) //SySTpye==1:XP系统,
- {
- if(SySTpye==1)
- {
- IsWinxp=true;
- //TSRuntime::add_log( "WinXP");
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallWinProcXPoffse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentXPoffse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- Ori_DxdeviceAddr=*(DWORD*)DxdeviceAddr;
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetThreadState",NtUserGetThreadState_XPOffset,(DWORD)MyNtUserGetThreadState,(DWORD)NtUserGetThreadStateUnhookByte,NtUserGetThreadStateRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserCallOneParam",NtUserCallOneParam_XPOffset,(DWORD)MyNtUserCallOneParam,(DWORD)NtUserCallOneParamUnhookByte,NtUserCallOneParamRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserCallTwoParam",NtUserCallTwoParam_XPOffset,(DWORD)MyNtUserCallTwoParam,(DWORD)NtUserCallTwoParamUnhookByte,NtUserCallTwoParamRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetKeyState",NtUserGetKeyState_XPOffset,(DWORD)MyNtUserGetKeyState,(DWORD)NtUserGetKeyStateUnhookByte,NtUserGetKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserGetAsyncKeyState",NtUserGetAsyncKeyState_XPOffset,(DWORD)MyNtUserGetAsyncKeyState,(DWORD)NtUserGetAsyncKeyStateUnhookByte,NtUserGetAsyncKeyStateRet,ishook);
- }
- }
- else if(SySTpye==2) //SySTpye==2:Win2003系统
- {
- IsWin2003=true;
- // TSRuntime::add_log( "Win2003");
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallWinProcWin2003offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin2003offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- Ori_DxdeviceAddr=*(DWORD*)DxdeviceAddr;
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetThreadState",NtUserGetThreadState_Win2003Offset,(DWORD)MyNtUserGetThreadState,(DWORD)NtUserGetThreadStateUnhookByte,NtUserGetThreadStateRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserCallOneParam",NtUserCallOneParam_Win2003Offset,(DWORD)MyNtUserCallOneParam,(DWORD)NtUserCallOneParamUnhookByte,NtUserCallOneParamRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserCallTwoParam",NtUserCallTwoParam_Win2003Offset,(DWORD)MyNtUserCallTwoParam,(DWORD)NtUserCallTwoParamUnhookByte,NtUserCallTwoParamRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetKeyState",NtUserGetKeyState_Win2003Offset,(DWORD)MyNtUserGetKeyState,(DWORD)NtUserGetKeyStateUnhookByte,NtUserGetKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserGetAsyncKeyState",NtUserGetAsyncKeyState_Win2003Offset,(DWORD)MyNtUserGetAsyncKeyState,(DWORD)NtUserGetAsyncKeyStateUnhookByte,NtUserGetAsyncKeyStateRet,ishook);
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- //if(ishook||UnhookKbd_DeviceState||UnhookMouse_DeviceState)
- {
- //if(UnhookKbd_DeviceState||Kbd_DeviceStateAddr==0)
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseXPoffse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,ishook);////HOOK:dinput8.dll的GetDeviceState函数
- //if(UnhookMouse_DeviceState||Mouse_DeviceStateAddr==0)
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardXPoffse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,ishook);
- //HookKbdMouse_Thread=(HANDLE)_beginthread(HookKbdMouse,0,0);
- }
- }
- }
- else if(SySTpye==4)//win7系统
- {
- IsWin7=true;
- typedef bool (__stdcall * myWow64DisableWow64FsRedirection)(LPVOID);
- myWow64DisableWow64FsRedirection f_myWow64DisableWow64FsRedirection= NULL;
- HINSTANCE hlibrary;
- hlibrary = LoadLibrary(_T("Kernel32.dll"));
- f_myWow64DisableWow64FsRedirection=(myWow64DisableWow64FsRedirection)GetProcAddress(hlibrary,"Wow64DisableWow64FsRedirection");
- PVOID vlau=NULL;
- bool ret=f_myWow64DisableWow64FsRedirection(&vlau);
- //如果是win7_64系统ret返回true
- if(!ret)
- {
- //TSRuntime::add_log( "IWProcWIN7"); //WIN7X86
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin7offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetThreadState",NtUserGetThreadState_WIN7X86Offset,(DWORD)MyNtUserGetThreadState,(DWORD)NtUserGetThreadStateUnhookByte,NtUserGetThreadStateRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- //GetHookModFuntion(L"user32.dll","NtUserCallOneParam",NtUserCallOneParam_WIN7X86Offset,(DWORD)MyNtUserCallOneParam,(DWORD)NtUserCallOneParamUnhookByte,NtUserCallOneParamRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserCallTwoParam",NtUserCallTwoParam_WIN7X86Offset,(DWORD)MyNtUserCallTwoParam,(DWORD)NtUserCallTwoParamUnhookByte,NtUserCallTwoParamRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetKeyState",NtUserGetKeyState_WIN7X86Offset,(DWORD)MyNtUserGetKeyState,(DWORD)NtUserGetKeyStateUnhookByte,NtUserGetKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserGetAsyncKeyState",NtUserGetAsyncKeyState_WIN7X86Offset,(DWORD)MyNtUserGetAsyncKeyState,(DWORD)NtUserGetAsyncKeyStateUnhookByte,NtUserGetAsyncKeyStateRet,ishook);
- }
- }
- else //win7x64
- {
- //TSRuntime::add_log( "IWProcWIN7X64");
- IsWin7X64=true;
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin7x64offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数 //
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetThreadState",NtUserGetThreadState_WIN7X64Offset,(DWORD)MyNtUserGetThreadState,(DWORD)NtUserGetThreadStateUnhookByte,NtUserGetThreadStateRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- //GetHookModFuntion(L"user32.dll","NtUserCallOneParam",NtUserCallOneParam_WIN7X64Offset,(DWORD)MyNtUserCallOneParam,(DWORD)NtUserCallOneParamUnhookByte,NtUserCallOneParamRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserCallTwoParam",NtUserCallTwoParam_WIN7X64Offset,(DWORD)MyNtUserCallTwoParam,(DWORD)NtUserCallTwoParamUnhookByte,NtUserCallTwoParamRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetKeyState",NtUserGetKeyState_WIN7X64Offset,(DWORD)MyNtUserGetKeyState,(DWORD)NtUserGetKeyStateUnhookByte,NtUserGetKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserGetAsyncKeyState",NtUserGetAsyncKeyState_WIN7X64Offset,(DWORD)MyNtUserGetAsyncKeyState,(DWORD)NtUserGetAsyncKeyStateUnhookByte,NtUserGetAsyncKeyStateRet,ishook);
- }
- }
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)//02d460a0
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin7offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- Ori_DxdeviceAddr=*(DWORD*)DxdeviceAddr;
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- //if(ishook||UnhookKbd_DeviceState||UnhookMouse_DeviceState)
- //if(UnhookKbd_DeviceState||Kbd_DeviceStateAddr==0)
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardWin7offse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,ishook);
- //if(UnhookMouse_DeviceState||Mouse_DeviceStateAddr==0)
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseWin7offse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,ishook);////HOOK:dinput8.dll的GetDeviceState函数
- }
- }
- else if(SySTpye==5)//win8系统
- {
- IsWin8=true;
- typedef bool (__stdcall * myWow64DisableWow64FsRedirection)(LPVOID);
- myWow64DisableWow64FsRedirection f_myWow64DisableWow64FsRedirection= NULL;
- HINSTANCE hlibrary;
- hlibrary = LoadLibrary(_T("Kernel32.dll"));
- f_myWow64DisableWow64FsRedirection=(myWow64DisableWow64FsRedirection)GetProcAddress(hlibrary,"Wow64DisableWow64FsRedirection");
- PVOID vlau=NULL;
- bool ret=f_myWow64DisableWow64FsRedirection(&vlau);
- //如果是win8x64系统ret返回true
- if(!ret)
- {
- //TSRuntime::add_log( "WIN8X86"); //WIN8X86
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin8offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:系统下的:USER32.dll的InternalCallWinProc函数
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetThreadState",NtUserGetThreadState_WIN8X86Offset,(DWORD)MyNtUserGetThreadState,(DWORD)NtUserGetThreadStateUnhookByte,NtUserGetThreadStateRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserCallTwoParam",NtUserCallTwoParam_WIN8X86Offset,(DWORD)MyNtUserCallTwoParam,(DWORD)NtUserCallTwoParamUnhookByte,NtUserCallTwoParamRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetKeyState",NtUserGetKeyState_WIN8X86Offset,(DWORD)MyNtUserGetKeyState,(DWORD)NtUserGetKeyStateUnhookByte,NtUserGetKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserGetAsyncKeyState",NtUserGetAsyncKeyState_WIN8X86Offset,(DWORD)MyNtUserGetAsyncKeyState,(DWORD)NtUserGetAsyncKeyStateUnhookByte,NtUserGetAsyncKeyStateRet,ishook);
- }
- }
- else //win8x64
- {
- //TSRuntime::add_log( "win8x64");
- IsWin8X64=true;
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin8x64offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:系统下的:USER32.dll的InternalCallWinProc函数 //
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetThreadState",NtUserGetThreadState_WIN8X64Offset,(DWORD)MyNtUserGetThreadState,(DWORD)NtUserGetThreadStateUnhookByte,NtUserGetThreadStateRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserCallTwoParam",NtUserCallTwoParam_WIN8X64Offset,(DWORD)MyNtUserCallTwoParam,(DWORD)NtUserCallTwoParamUnhookByte,NtUserCallTwoParamRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","NtUserGetKeyState",NtUserGetKeyState_WIN8X64Offset,(DWORD)MyNtUserGetKeyState,(DWORD)NtUserGetKeyStateUnhookByte,NtUserGetKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","NtUserGetAsyncKeyState",NtUserGetAsyncKeyState_WIN8X64Offset,(DWORD)MyNtUserGetAsyncKeyState,(DWORD)NtUserGetAsyncKeyStateUnhookByte,NtUserGetAsyncKeyStateRet,ishook);
- }
- }
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin8offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- Ori_DxdeviceAddr=*(DWORD*)DxdeviceAddr;
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseWin8offse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,ishook);////HOOK:dinput8.dll的GetDeviceState函数
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardWin8offse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,ishook);
- //HookKbdMouse_Thread=(HANDLE)_beginthread(HookKbdMouse,0,0);
- }
- }
- if(TSRuntime::pData->Isdxantiapi==false)//开启次盾属性可能会导致部分后台功能失效,默认不开启
- {
- GetHookModFuntion(L"user32.dll","GetForegroundWindow",0,(DWORD)MyGetForegroundWindow,(DWORD)UnhookGetForegroundWindow,HookGetForegroundWindowRet,ishook);
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","SetCursor",0,(DWORD)MySetCursor,(DWORD)USER32SetCursor,HookSetCursorRet,ishook);
- }
- GetHookModFuntion(L"Imm32.dll","ImmGetCompositionStringA",0,(DWORD)MyIMM32ImmGetCompositionStringA,(DWORD)IMM32ImmGetCompositionStringA,HookImmGetCompositionStringARet,ishook);
- GetHookModFuntion(L"Imm32.dll","ImmGetCompositionStringW",0,(DWORD)MyIMM32ImmGetCompositionStringW,(DWORD)IMM32ImmGetCompositionStringW,HookImmGetCompositionStringWRet,ishook);
- }
- if(TSRuntime::pData)
- {
- TSRuntime::pData->isInject=true;
- TSRuntime::pData->ispichook=false;
- g_InjectHWND=TSRuntime::pData->InjectHwnd;
- }
- }
- //DWORD g_GetRawInputData=0;//xp:0x11ac,2003:,win7:
- void HookandUnhookAPI(void *para)
- {
- //TSRuntime::add_log( "HookandUnhookAPI-start");
- ////TSRuntime::add_log( "hprocess:%d",::GetCurrentProcess());
- ////TSRuntime::add_log( "HookandUnhookAPI-start,TSRuntime::IsVirtualProtectEx:%d",TSRuntime::IsVirtualProtectEx);
- bool ishook=(bool)para;
- bool isHSProtect=false;//下钩子前检测是否有HS保护的模块
- //SySTpye=TSRuntime::InitialWindowsVersion();//先获取系统版本后在HOOK,1:XP,2:2003,4:win7
- //if(ishook)
- //{
- // GetHookModFuntion(L"user32.dll","PeekMessageA",0,(DWORD)MyPeekMessageA,(DWORD)UnhookPeekMessage,HookPeekMessageARet,ishook);
- // GetHookModFuntion(L"user32.dll","PeekMessageW",0,(DWORD)MyPeekMessageW,(DWORD)UnhookPeekMessage,HookPeekMessageWRet,ishook);
- //}
- if(IsWindow(g_InjectHWND)==FALSE&&g_InjectHWND!=NULL)//判断注入进程是否异常退出
- {
- //if(TSRuntime::pData)
- // delete [] TSRuntime::pData;
- char pszMapName[MAX_PATH]={0};
- sprintf( pszMapName,"%s%d",TS_MAPVIEW_NAME,GetCurrentProcessId());
- HANDLE hFileMap = OpenFileMappingA(FILE_MAP_ALL_ACCESS, FALSE, pszMapName);
- //如果hFileMap句柄不为空并且pData==NULL说明DLL被注入,准备启动注入线程
- if(hFileMap!=NULL)
- {
- //这里先打开共享内存,共享内存和程序是一对一的关系
- CShareMemory *sm=new CShareMemory(pszMapName);
- TSRuntime::pData=(CMessageData*)sm->GetBuffer();
- }
- }
- HMODULE HSmode=GetModuleHandle(L"EhSvc.dll");
- if(HSmode)
- isHSProtect=true;
- if(SySTpye==1||SySTpye==2) //SySTpye==1:XP系统,
- {
- if(SySTpye==1)
- {
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallWinProcXPoffse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentXPoffse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- g_OriSetCursor=0x11ff;
- g_GetRawInputData=0x11ac;
- dwMoveGetKeyboardState=0x119e;
- //TSRuntime::add_log( "WinXP");
- }
- else if(SySTpye==2) //SySTpye==2:Win2003系统
- {
- // TSRuntime::add_log( "Win2003");
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallWinProcWin2003offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin2003offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- g_OriSetCursor=0x11fd;
- g_GetRawInputData=0x11ab;
- dwMoveGetKeyboardState=0x119d;
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","ScreenToClient",0,(DWORD)MyScreenToClient,(DWORD)USER32ScreenToClient,HookScreenToClientRet,ishook);//HOOKScreenToClient
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseXPoffse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,ishook);//HOOK:XP系统下的:dinput8.dll的GetDeviceState函数
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardXPoffse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,ishook);
- }
- }
- else if(SySTpye==4)//win7系统
- {
- if(!TSRuntime::IsWin7X64)
- {
- //TSRuntime::add_log( "IWProcWIN7"); //WIN7X86
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin7offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数
- g_GetRawInputData=0x11c0;
- }
- else //win7x64
- {
- //TSRuntime::add_log( "IWProcWIN7X64");
- IsWin7X64=true;
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin7x64offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:XP系统下的:USER32.dll的InternalCallWinProc函数 //
- g_GetRawInputData=0x12be;
- }
- //g_OriSetCursor=0x1221;
- //dwMoveGetKeyboardState=0x11b2;
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin7offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- //TSRuntime::add_log( "MyD3D9Present");
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","ScreenToClient",0,(DWORD)MyScreenToClient,(DWORD)UnhookScreenToClientRet,HookScreenToClientRet,ishook);//HOOKScreenToClient
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseWin7offse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,ishook);////HOOK:dinput8.dll的GetDeviceState函数
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardWin7offse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,ishook);
- //MessageBox(NULL,L"dinput8",L"TS",NULL);
- }
- }
- else if(SySTpye==5)//win8系统
- {
- if(!TSRuntime::IsWin8X64)
- {
- //TSRuntime::add_log( "WIN8X86"); //WIN8X86
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin8offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:系统下的:USER32.dll的InternalCallWinProc函数
- }
- else //win8x64
- {
- //TSRuntime::add_log( "win8x64");
- IsWin8X64=true;
- GetHookModFuntion(L"user32.dll","InternalCallWinProc",USER32InternalCallProcWin8x64offse,(DWORD)MyInternalCallWinProc,(DWORD)UnhookInternalCallWinProc,HookInternalCallWinProcRet,ishook);//HOOK:系统下的:USER32.dll的InternalCallWinProc函数 //
- }
- if((TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ispichook)&&UnhookPresent==false)
- {
- if(UnhookPresent==false&&DxdeviceAddr==0)
- GetHookModFuntion(L"d3d9.dll","Present",D3D9PresentWin8offse,(DWORD)MyD3D9Present,(DWORD)D3D9Present,HookD3D9PresentRet,ishook);
- else if(ishook==true)
- {
- *(DWORD*)DxdeviceAddr=(DWORD)MyD3D9Present;//把真正的函数地址修改到我们的函数地址,
- UnhookPresent=true;
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","ScreenToClient",0,(DWORD)MyScreenToClient,(DWORD)UnhookScreenToClientRet,HookScreenToClientRet,ishook);//HOOKScreenToClient
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJMouseWin8offse,(DWORD)MyGetDeviceStateMouse,(DWORD)GetDeviceStateMouse,HookGetDeviceStateMouseRet,ishook);////HOOK:dinput8.dll的GetDeviceState函数
- GetHookModFuntion(L"dinput8.dll","GetDeviceState",GetDeviceStateOBJkeyboardWin8offse,(DWORD)MyGetDeviceStateKbd,(DWORD)GetDeviceStateKbd,HookGetDeviceStateKbdRet,ishook);
- }
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","GetActiveWindow",0,(DWORD)MyGetActiveWindow,(DWORD)UnhookGetActiveWindow,HookGetActiveWindowRet,ishook);
- GetHookModFuntion(L"user32.dll","GetFocus",0,(DWORD)MyGetFocus,(DWORD)UnhookGetFocus,HookGetFocusRet,ishook);
- GetHookModFuntion(L"user32.dll","IsWindowEnabled",0,(DWORD)MyIsWindowEnabled,(DWORD)USER32IsWindowEnabled,HookIsWindowEnabledRet,ishook);
- GetHookModFuntion(L"user32.dll","GetForegroundWindow",0,(DWORD)MyGetForegroundWindow,(DWORD)UnhookGetForegroundWindow,HookGetForegroundWindowRet,ishook);
- GetHookModFuntion(L"user32.dll","GetTopWindow",0,(DWORD)MyGetTopWindow,(DWORD)UnhookGetTopWindow,HookGetTopWindowRet,ishook);
- GetHookModFuntion(L"user32.dll","WindowFromPoint",0,(DWORD)MyWindowFromPoint,(DWORD)UnhookWindowFromPoint,HookWindowFromPointRet,ishook);
- GetHookModFuntion(L"user32.dll","GetAsyncKeyState",0,(DWORD)MyGetAsyncKeyState,(DWORD)USER32GetAsyncKeyState,HookGetAsyncKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","GetRawInputData",0,(DWORD)MyGetRawInputData,(DWORD)USER32GetRawInputData,HookGetRawInputDataRet,ishook);
- //GetHookModFuntion(L"user32.dll","GetCapture",0,(DWORD)MyGetCapture,(DWORD)USER32GetCapture,HookGetCaptureRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->ismousehook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","GetCursorPos",0,(DWORD)MyGetCursorPos,(DWORD)USER32GetCursorPos,HookGetCursorPosRet,ishook);//HOOKGetCursorPos
- GetHookModFuntion(L"user32.dll","SetCursor",0,(DWORD)MySetCursor,(DWORD)USER32SetCursor,HookSetCursorRet,ishook);
- GetHookModFuntion(L"user32.dll","GetMessagePos",0,(DWORD)MyGetMessagePos,(DWORD)UnhookGetMessagePos,HookGetMessagePosRet,ishook);
- GetHookModFuntion(L"user32.dll","SetCursorPos",0,(DWORD)MySetCursorPos,(DWORD)USER32SetCursorPos,HookSetCursorPosRet,ishook);
- }
- if(TSRuntime::IsVirtualProtectEx||TSRuntime::pData->iskeyboardhook||ishook==false)
- {
- GetHookModFuntion(L"user32.dll","GetKeyState",0,(DWORD)MyGetKeyState,(DWORD)USER32GetKeyState,HookGetKeyStateRet,ishook);
- GetHookModFuntion(L"user32.dll","GetKeyboardState",0,(DWORD)MyGetKeyboardState,(DWORD)UnhookGetKeyboardState,HookGetKeyboardStateRet,ishook);
- }
- GetHookModFuntion(L"Imm32.dll","ImmGetCompositionStringA",0,(DWORD)MyIMM32ImmGetCompositionStringA,(DWORD)IMM32ImmGetCompositionStringA,HookImmGetCompositionStringARet,ishook);
- GetHookModFuntion(L"Imm32.dll","ImmGetCompositionStringW",0,(DWORD)MyIMM32ImmGetCompositionStringW,(DWORD)IMM32ImmGetCompositionStringW,HookImmGetCompositionStringWRet,ishook);
- if(TSRuntime::pData)
- {
- TSRuntime::pData->isInject=true;
- TSRuntime::pData->ispichook=false;
- g_InjectHWND=TSRuntime::pData->InjectHwnd;
- }
- //TSRuntime::ZwProtectVirtualMemoryRet
- //TSRuntime::add_log( "HookandUnhookAPI-end,TSRuntime::IsVirtualProtectEx:%d",TSRuntime::IsVirtualProtectEx);
- }
- void ReadShareMemoryThreadFunc(void *para)//创建读写共享数据线程
- {
- g_Unbind=false;
- memset(TSRuntime::SetPath,0,MAX_PATH);
- //g_currentHwnd=TSRuntime::GetProcessMainWnd(::GetCurrentProcessId()); //获取自身进程ID的窗口句柄
- g_currentHwnd=TSRuntime::pData->m_hwnd;
- //是否开启dxkmprotect盾,启动不同的钩子
- if(TSRuntime::pData->Isdxkmprotect)
- VIPHookandUnhookAPI(para);
- else
- HookandUnhookAPI(para);
- }
|