Advertisement
Guest User

KnoleFunktionen.ahk

a guest
Jun 18th, 2017
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include ./Includes/SAMP.ahk
  2. ;Benötigt die SAMP UDF!
  3. ;Funktionen by KnoLe_x3
  4.  
  5. /*
  6. #############################################################################
  7. getGameText(type, length)
  8. setGameText(type, text)
  9. getPlayerWeapon()
  10. getWeaponName(weaponid)
  11. GetChatLine(line, variable)
  12. SetChatLine(line, text)
  13. getPlayerSkin()
  14. GetPlayerRotationToPos(x1, y1, x2, y2, unit=1)
  15. getDistanceToPoint(x, y, z = 0)
  16. getCheckpointPos(ByRef x, ByRef y, ByRef z)
  17. getCheckpointDistance()
  18. getCheckpointZone()
  19. getCheckpointCity()
  20. getLabelText()
  21. dialogHide()
  22. getSkinFraction(id)
  23. getPeds()
  24. getKills()
  25. restart()
  26. #############################################################################
  27. */
  28.  
  29. global pedStates := {}
  30.  
  31. AddZone("Bohrinsel", 585.5817, -3193.8582, -90.0, 1053.7162, -2670.0791, 280.0)
  32.  
  33. ;GTA Adressen
  34. global ADDR_CURRENT_WEAPON          := 0xBAA410
  35. global ADDR_VEHICLE_CVEH            := 0xB6F980
  36. global ADDR_VEHICLE_SPEED_X         := 0x44
  37. global ADDR_VEHICLE_SPEED_Y         := 0x48
  38. global ADDR_VEHICLE_SPEED_Z         := 0x4C
  39. global GAMETEXT_1                   := 0xBAAD40
  40. global GAMETEXT_2                   := 0xBAADC0
  41. global GAMETEXT_3                   := 0xBAAE40
  42. global GAMETEXT_4                   := 0xBAAEC0
  43. global GAMETEXT_5                   := 0xBAABC0
  44. global GTA_IS_CHECKPOINT            := 0x0220214C
  45. global GTA_CHECKPOINT               := 0x00C7DEC8
  46. global GTA_CHECKPOINT_OFF_X         := 0x00
  47. global GTA_CHECKPOINT_OFF_Y         := 0x04
  48. global GTA_CHECKPOINT_OFF_Z         := 0x08
  49.  
  50. ;SAMP Adressen
  51. ; Eigene Adressen
  52. global SAMP_SKIN_OFFSET             := 0x22
  53. global SAMP_DIALOG_OFFSET           := 0x34
  54. global SAMP_DIALOG_SIZE             := 2048
  55. global SAMP_DIALOG_TITLE            := 0x40
  56. global SAMP_DIALOG_TITLE_SIZE       := 64
  57. global SAMP_3DTEXT                  := 0x12C7BC
  58. global SAMP_DIALOG_SHOW_OFFSET      := 0x28
  59.  
  60. ;GTA Funktionen
  61. isCheckpointAviable(){
  62.     if(!checkHandles())
  63.         return
  64.     dwAddr := readDWORD(hGTA, dwSAMP + 0x0220214C)
  65.     return readMem(hGTA, dwAddr + 0x24, 1)
  66. }
  67.  
  68. getCheckpointPos(ByRef x, ByRef y, ByRef z) {
  69.     if(!checkHandles())
  70.         return 0
  71.    
  72.     x := readFloat(hGTA, GTA_CHECKPOINT + GTA_CHECKPOINT_OFF_X)
  73.     y := readFloat(hGTA, GTA_CHECKPOINT + GTA_CHECKPOINT_OFF_Y)
  74.     z := readFloat(hGTA, GTA_CHECKPOINT + GTA_CHECKPOINT_OFF_Z)
  75.    
  76.     return 1
  77. }
  78.  
  79. getCheckpointDistance() {
  80.     getCheckpointPos(x, y, z)
  81.    
  82.     return getDistanceToPoint(x, y, z)
  83. }
  84.  
  85. getCheckpointZone() {
  86.     getCheckpointPos(x, y, z)
  87.     return calculateZone(x, y, z)
  88. }
  89.  
  90. getCheckpointCity() {
  91.     getCheckpointPos(x, y, z)
  92.    
  93.     return calculateCity(x, y, z)
  94. }
  95.  
  96. getDistanceToPoint(x, y, z = 0) {
  97.     getPlayerPos(_x, _y, _z)
  98.    
  99.     if(z == 0)
  100.         return sqrt((_x-x)**2+(_y-y)**2)
  101.     else
  102.         return sqrt((_x-x)**2+(_y-y)**2+(_z-z)**2)
  103.    
  104.     return 0
  105. }
  106.  
  107. GetPlayerRotationToPos(x1, y1, x2, y2, unit=1){
  108.     pi := 4 * ATan(1)
  109.     y := y2 - y1, x := x2 - x1
  110.     if(x = 0){
  111.         if(y < 0)
  112.             angle := 270
  113.         else if(y > 0)
  114.             angle := 90
  115.         else
  116.             angle := 0
  117.         degree := 1
  118.     }
  119.     else if(y = 0){
  120.         angle := 180
  121.         degree := 1
  122.     }
  123.     else
  124.         angle := ATan(y / x)
  125.     if(degree){
  126.         if(unit = 0)
  127.             angle *= pi / 180
  128.     }
  129.     else if(unit != 0)
  130.         angle *= 180 / pi
  131.     if(unit = 2)
  132.         angle /= 45
  133.     return angle / 1.0
  134. }
  135.  
  136. getGameText(type = 1, length = 12) {
  137.     if(!checkHandles())
  138.         return 0
  139.    
  140.     if(type == 1){
  141.         text := readString(hGTA, GAMETEXT_1, length)
  142.     }else if(type == 2){
  143.         text := readString(hGTA, GAMETEXT_2, length)
  144.     }else if(type == 3){
  145.         text := readString(hGTA, GAMETEXT_3, length)
  146.     }else if(type == 4){
  147.         text := readString(hGTA, GAMETEXT_4, length)
  148.     }else if(type == 5){
  149.         text := readString(hGTA, GAMETEXT_5, length)
  150.     }
  151.     return text
  152. }
  153.  
  154. setGameText(type, text) {
  155.     if(!checkHandles())
  156.         return 0
  157.    
  158.     if(type == 1){
  159.         return writeString(hGTA, GAMETEXT_1, text)
  160.     }else if(type == 2){
  161.         return writeString(hGTA, GAMETEXT_2, text)
  162.     }else if(type == 3){
  163.         return writeString(hGTA, GAMETEXT_3, text)
  164.     }else if(type == 4){
  165.         return writeString(hGTA, GAMETEXT_4, text)
  166.     }else if(type == 5){
  167.         return writeString(hGTA, GAMETEXT_5, text)
  168.     }
  169.     return
  170. }
  171.  
  172. getPlayerWeapon() {
  173.     if(!checkHandles())
  174.         return -1
  175.    
  176.     weaponID := readMem(hGTA, ADDR_CURRENT_WEAPON, 4, "Int")
  177.     if(ErrorLevel) {
  178.         ErrorLevel := ERROR_READ_MEMORY
  179.         return -1
  180.     }
  181.    
  182.     ErrorLevel := ERROR_OK
  183.     return Round(weaponID)
  184. }
  185.  
  186. getWeaponName(id) {
  187.     weapons := {0: "Fist", 1: "Brass Knuckles", 2: "Golf Club", 3: "Nightstick", 4: "Knife", 5: "Baseball Bat", 6: "Shovel", 7: "Pool Cue", 8: "Katana", 9: "Chainsaw", 10: "Purple Dildo", 11: "Dildo", 12: "Vibrator", 13: "Silver Vibrator", 14: "Flowers", 15: "Cane", 16: "Grenade", 17: "Tear Gas", 18: "Molotov Cocktail", 22: "9mm", 23: "Silenced 9mm", 24: "Desert Eagle", 25: "Shotgun", 26: "Sawnoff Shotgun", 27: "Combat Shotgun", 28: "Micro SMG/Uzi", 29: "MP5", 30: "AK-47", 31: "M4", 32: "Tec-9", 33: "Country Rifle", 34: "Sniper Rifle", 35: "RPG", 36: "HS Rocket", 37: "Flamethrower", 38: "Minigun", 39: "Satchel Charge", 40: "Detonator", 41: "Spraycan", 42: "Fire Extinguisher", 43: "Camera", 44: "Night Vis Goggles", 45: "Thermal Goggles", 46: "Parachute", 47: "Fake Pistol", 49: "Vehicle", 50: "Helicopter Blades", 51: "Explosion", 53: "Drowned", 54: "Splat", 255: "Suicide"}
  188.     if(weapons[id]) {
  189.         return weapons[id]
  190.     }
  191.     return "Unknown"
  192. }
  193.  
  194. getSkinFraction(id) {
  195.     skins := {"LSPD": [163, 164, 265, 266, 267, 280, 281, 283, 284, 288, 194], "FBI": [165, 166, 286, 294, 194], "Sanitäter": [70, 274, 275, 276, 193], "Feuerwehr": [255, 277, 278, 279, 191], "Russen Mafia": [111, 112, 113, 124, 125, 126, 127, 272, 40, 43, 258], "Yakuza Mafia": [122, 123, 186, 203, 204, 228, 169, 224, 121], "Hitman": [], "Wheelman": [], "San News": [60, 170, 188, 227, 240, 250, 56, 226], "Grove Street": [105, 106, 107, 269, 269, 271, 65], "Ballas": [102, 103, 104, 293, 13], "Los Chickos Malos": [46, 47, 48, 98, 185, 223, 214, 30], "Ordnungsamt": [8, 50, 71, 233, 42], "Transport GmbH": [34, 44, 132, 133, 202, 206, 261, 31, 131], "San Fierro Rifa": [114, 115, 116, 173, 174, 175, 184, 273, 195, 198], "Los Santos Vagos": [108, 109, 110, 292, 91], "Triaden": [117, 118, 120, 208, 263, 49]}
  196.     fraction := ""
  197.     For key, array in skins
  198.     {
  199.         For index2, value2 in array
  200.         {
  201.             if(value2 == id) {
  202.                 fraction := key
  203.                 Break, 2
  204.             }
  205.         }
  206.     }
  207.     if(fraction) {
  208.         return fraction
  209.     }
  210.     return "Zivilist"
  211. }
  212.  
  213. getKills() {
  214.     if(!checkHandles()) {
  215.         return false
  216.     }
  217.     pedLocal := readDWORD(hGTA, 0xB6F5F0)
  218.     if(!pedLocal) {
  219.         return false
  220.     }
  221.     peds := getPeds()
  222.     if(!peds) {
  223.         return false
  224.     }
  225.     data := []
  226.     For index, object in peds {
  227.         state := readMem(hGTA, object.PED + 0x530, 4, "UInt")
  228.         if((pedStates[object.PED] == 55 || pedStates[object.PED] == 54) == (state == 55 || state == 54)) {
  229.             Continue
  230.         }
  231.         pedStates[object.PED] := state
  232.         if(object.PED && !object.ISNPC && (state == 55 || state == 54)) {
  233.             pedMurderer := readDWORD(hGTA, object.PED + 0x764)
  234.             murderer := false
  235.             For index2, object2 in peds
  236.             {
  237.                 if(object2.PED == pedMurderer) {
  238.                     murderer := object2
  239.                     Break
  240.                 }
  241.             }
  242.             weapon := readMem(hGTA, object.PED + 0x760, 4, "UInt")
  243.             skin := readMem(hGTA, object.PED + 0x22, 2, "UShort")
  244.             if(!murderer)
  245.                 data.Push({victim: object, weapon: weapon, skin: skin})
  246.             else
  247.                 data.Push({victim: object, murderer: murderer, weapon: weapon, skin: skin})
  248.         }
  249.     }
  250.     return data
  251. }
  252.  
  253. getPeds() {
  254.     if(!checkHandles()) {
  255.         return false
  256.     }
  257.     if(!updateScoreboardDataEx()) {
  258.         return false
  259.     }
  260.     dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0F8)
  261.     dwAddress := readDWORD(hGTA, dwAddress + 0x3CD)
  262.     dwAddress := readDWORD(hGTA, dwAddress + 0x18)
  263.     data := []
  264.     wID := readMem(hGTA, dwAddress + 0x4, 2, "UShort")
  265.     dwPed := readDWORD(hGTA, 0xB6F5F0)
  266.     if(readDWORD(hGTA, dwAddress + 0x1A) <= 16) {
  267.         sName := readString(hGTA, dwAddress + 0xA, 16)
  268.     }
  269.     else {
  270.         sName := readString(hGTA, readDWORD(hGTA, dwAddress + 0xA), 20)
  271.     }
  272.     data.Push({LOCAL: true, ID: wID, PED: dwPed, ISNPC: false, NAME: sName})
  273.     Loop % 1000
  274.     {
  275.         i := A_Index - 1
  276.         dwRemotePlayer := readDWORD(hGTA, dwAddress + 0x2E + i*4)
  277.         if(!dwRemotePlayer) {
  278.             Continue
  279.         }
  280.         dwRemotePlayerData := readDWORD(hGTA, dwRemotePlayer)
  281.         dwRemotePlayerData := readDWORD(hGTA, dwRemotePlayerData)
  282.         dwPed := readDWORD(hGTA, dwRemotePlayerData + 0x2A4)
  283.         if(!dwPed) {
  284.             Continue
  285.         }
  286.         dwIsNPC := readDWORD(hGTA, dwRemotePlayer + 0x4)
  287.         if(readMem(hGTA, dwRemotePlayer + 0x1C, 4, "Int") <= 16)
  288.         {
  289.             sName := readString(hGTA, dwRemotePlayer + 0xC, 16)
  290.         }
  291.         else {
  292.             sName := readString(hGTA, readDWORD(hGTA, dwRemotePlayer + 0xC), 20)
  293.         }
  294.         data.Push({LOCAL: false, ID: i, PED: dwPed, ISNPC: dwIsNPC, NAME: sName})
  295.     }
  296.     return data
  297. }
  298.  
  299. ;SAMP Funktionen
  300. changeUserColor(playerID) {
  301.     if(!checkHandles() || !playerID)
  302.         return 0
  303.    
  304.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  305.     if(ErrorLevel || dwAddress==0) {
  306.         ErrorLevel := ERROR_READ_MEMORY
  307.         return 0
  308.     }
  309.    
  310.     dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  311.     if(ErrorLevel || dwAddress==0) {
  312.         ErrorLevel := ERROR_READ_MEMORY
  313.         return 0
  314.     }
  315.    
  316.     dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  317.     if(ErrorLevel || dwPlayers==0) {
  318.         ErrorLevel := ERROR_READ_MEMORY
  319.         return 0
  320.     }
  321.    
  322.     i := playerID
  323.    
  324.     dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4)      ;pRemotePlayer
  325.     if(ErrorLevel) {
  326.         ErrorLevel := ERROR_READ_MEMORY
  327.         return 0
  328.     }
  329.    
  330.     if(dwRemoteplayer==0)
  331.         return
  332.    
  333.     dwPing := readMem(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET, 4, "Int")
  334.     if(ErrorLevel) {
  335.         ErrorLevel := ERROR_READ_MEMORY
  336.         return 0
  337.     }
  338.    
  339.     dwScore := readMem(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, 4, "Int")
  340.     if(ErrorLevel) {
  341.         ErrorLevel := ERROR_READ_MEMORY
  342.         return 0
  343.     }
  344.     writeRaw(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET, "{000000}" . dwScore, "4")
  345.    
  346.     dwIsNPC := readMem(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET, 4, "Int")
  347.     if(ErrorLevel) {
  348.         ErrorLevel := ERROR_READ_MEMORY
  349.         return 0
  350.     }
  351.    
  352.     dwTemp := readMem(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET, 4, "Int")
  353.     if(ErrorLevel) {
  354.         ErrorLevel := ERROR_READ_MEMORY
  355.         return 0
  356.     }
  357.     sUsername := ""
  358.     if(dwTemp <= 0xf)
  359.     {
  360.         sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)
  361.         writeString(hGTA, dwRemoteplayer + SAMP_SZPLAYERNAME_OFFSET, "{000000}" . sUsername)
  362.         if(ErrorLevel) {
  363.             ErrorLevel := ERROR_READ_MEMORY
  364.             return 0
  365.         }
  366.     }else{
  367.         dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  368.         if(ErrorLevel || dwAddress==0) {
  369.             ErrorLevel := ERROR_READ_MEMORY
  370.             return 0
  371.         }
  372.         sUsername := readString(hGTA, dwAddress, 25)
  373.         writeString(hGTA, dwAddress, "{000000}" . sUsername)
  374.         if(ErrorLevel) {
  375.             ErrorLevel := ERROR_READ_MEMORY
  376.             return 0
  377.         }
  378.     }
  379.    
  380.     ErrorLevel := ERROR_OK
  381.     return 1
  382. }
  383.  
  384. getLabelText() {
  385.     if(!checkHandles())
  386.         return 0
  387.    
  388.     ADDR_3DText := readDWORD(hGTA, dwSAMP + SAMP_3DTEXT)
  389.     TEXT_3DTEXT := readString(hGTA, ADDR_3DText, 512)
  390.     return TEXT_3DTEXT
  391. }
  392.  
  393. dialogHide() {
  394.     if(!checkHandles())
  395.         return 0
  396.    
  397.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
  398.    
  399.     VarSetCapacity(data, 4, 0)
  400.     NumPut(0, data, 0x0, "UInt")
  401.     writeRaw(hGTA, dwAddress + SAMP_DIALOG_SHOW_OFFSET, &data, 4)
  402.    
  403.     SendInput, {F6}{ESC}
  404.     return
  405. }
  406.  
  407. GetChatLine(line, ByRef Output, timestamp = 0, color = 0) {
  408.     if(!checkHandles())
  409.         return false
  410.    
  411.     dwPTR := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  412.     chat := readString(hGTA, dwPTR + 0x136 + 0xfc*(99-line) + 0x1c, 144)
  413.    
  414.     if(!color)
  415.         Output := RegExReplace(chat, "Ui)\{[a-f0-9]{6}\}")
  416.     return
  417. }
  418.  
  419. SetChatLine(line, string) {
  420.     if(!checkHandles())
  421.         return false
  422.    
  423.     dwPTR := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  424.     writeString(hGTA, dwPTR + 0x136 + 0xfc*(99-line) + 0x1c, string)
  425.     return
  426. }
  427.  
  428. getPlayerSkin() {
  429.     if(!checkHandles())
  430.         return -1
  431.    
  432.     dwCPedPtr := readDWORD(hGTA, ADDR_CPED_PTR)
  433.     if(ErrorLevel) {
  434.         ErrorLevel := ERROR_READ_MEMORY
  435.         return -1
  436.     }
  437.    
  438.     dwAddr := dwCPedPtr + SAMP_SKIN_OFFSET
  439.     skinID := readMem(hGTA, dwAddr, 2, "Int")
  440.     if(ErrorLevel) {
  441.         ErrorLevel := ERROR_READ_MEMORY
  442.         return -1
  443.     }
  444.    
  445.     ErrorLevel := ERROR_OK
  446.     return skinID
  447. }
  448.  
  449. setrestart() {
  450.     VarSetCapacity(old, 4, 0)
  451.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)         ;g_SAMP
  452.         if(ErrorLevel || dwAddress==0) {
  453.             ErrorLevel := ERROR_READ_MEMORY
  454.             return 0
  455.     }
  456.  
  457.     NumPut(9,old,0,"Int")
  458.     writeRaw(hGTA, dwAddress + 957, &old, 4)
  459. }
  460.  
  461. restart() {
  462.     restartGameEx()
  463.     disconnectEx()
  464.     addChatMessage("{FFFFFF}Der Keybinder verbindet erneut in ~15 Sekunden.")
  465.     Sleep 16000
  466.     setrestart()
  467. }
  468.  
  469. restartGameEx() {
  470.     if(!checkHandles())
  471.         return -1
  472.    
  473.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)         ;g_SAMP
  474.     if(ErrorLevel || dwAddress==0) {
  475.         ErrorLevel := ERROR_READ_MEMORY
  476.         return -1
  477.     }
  478.    
  479.     dwFunc := dwSAMP + 0xA060
  480.    
  481.     VarSetCapacity(injectData, 11, 0) ;mov, call, retn
  482.    
  483.     NumPut(0xB9, injectData, 0, "UChar")    ;mov ecx    0+1
  484.     NumPut(dwAddress, injectData, 1, "UInt")            ;1+4
  485.     NumPut(0xE8, injectData, 5, "UChar")    ;call       5+1
  486.     offset := dwFunc - (pInjectFunc + 10)
  487.     NumPut(offset, injectData, 6, "Int")    ;           6+4
  488.     NumPut(0xC3, injectData, 10, "UChar")   ;       10+1
  489.    
  490.     writeRaw(hGTA, pInjectFunc, &injectData, 11)
  491.     if(ErrorLevel)
  492.         return false
  493.    
  494.     hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  495.     if(ErrorLevel)
  496.         return false
  497.    
  498.     waitForSingleObject(hThread, 0xFFFFFFFF)
  499.    
  500.     return true
  501.    
  502. }
  503.  
  504. disconnectEx() {
  505.     if(!checkHandles())
  506.         return 0
  507.    
  508.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)         ;g_SAMP
  509.     if(ErrorLevel || dwAddress==0) {
  510.         ErrorLevel := ERROR_READ_MEMORY
  511.         return 0
  512.     }
  513.    
  514.     dwAddress := readDWORD(hGTA, dwAddress + 0x3c9)         ;pRakClientInterface
  515.     if(ErrorLevel || dwAddress==0) {
  516.         ErrorLevel := ERROR_READ_MEMORY
  517.         return 0
  518.     }
  519.    
  520.     ecx := dwAddress        ;this
  521.    
  522.     dwAddress := readDWORD(hGTA, dwAddress)         ;vtable
  523.     if(ErrorLevel || dwAddress==0) {
  524.         ErrorLevel := ERROR_READ_MEMORY
  525.         return 0
  526.     }
  527.    
  528.    
  529.    
  530.     VarSetCapacity(injectData, 24, 0) ;mov, call, retn
  531.    
  532.     NumPut(0xB9, injectData, 0, "UChar")    ;mov ecx    0+1
  533.     NumPut(ecx, injectData, 1, "UInt")          ;1+4
  534.    
  535.     NumPut(0xB8, injectData, 5, "UChar")    ;mov eax    5+1
  536.     NumPut(dwAddress, injectData, 6, "UInt")            ;6+4
  537.    
  538.     ;NumPut(0x006A006A, injectData, 10, "UInt")  ; 2x push          10+4
  539.    
  540.     NumPut(0x68, injectData, 10, "UChar")       ;10 + 1     ;push style
  541.     NumPut(0, injectData, 11, "UInt")       ;11 + 4
  542.    
  543.     NumPut(0x68, injectData, 15, "UChar")       ;15 + 1     ;push style
  544.     NumPut(500, injectData, 16, "UInt")     ;16 + 4
  545.    
  546.     ;---
  547.    
  548.     NumPut(0x50FF, injectData, 20, "UShort")            ;20 + 2
  549.     NumPut(0x08, injectData, 22, "UChar")           ;22 + 1
  550.    
  551.     NumPut(0xC3, injectData, 23, "UChar")   ;retn       23+1
  552.    
  553.     writeRaw(hGTA, pInjectFunc, &injectData, 24)
  554.     if(ErrorLevel)
  555.         return false
  556.    
  557.     hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  558.     if(ErrorLevel)
  559.         return false
  560.    
  561.     waitForSingleObject(hThread, 0xFFFFFFFF)
  562.    
  563.     return true
  564. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement