Advertisement
Guest User

Cheat Engine Multi Injection Lua Script

a guest
Nov 14th, 2015
434
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.88 KB | None | 0 0
  1. function makeMultiInjectionAAScript()
  2.   --main GUI--
  3.   local mainF = createForm(false)
  4.   mainF.Width = 492
  5.   mainF.Height = 103
  6.   mainF.Caption = "Multi code inject template"
  7.  
  8.   local mainLabel = createLabel(mainF)
  9.   mainLabel.Top = 10
  10.   mainLabel.Left = 10
  11.   mainLabel.AutoSize = true
  12.   mainLabel.Caption = "On what addresses do you want the jumps?"
  13.  
  14.   local addAddrB = createButton(mainF)
  15.   addAddrB.Top = mainF.Height - 35
  16.   addAddrB.Left = 10
  17.   addAddrB.Width = 100
  18.   addAddrB.Height = 25
  19.   addAddrB.Caption = "Add Address"
  20.  
  21.   local removeAddrB = createButton(mainF)
  22.   removeAddrB.Top = mainF.Height - 35
  23.   removeAddrB.Left = 120
  24.   removeAddrB.Width = 100
  25.   removeAddrB.Height = 25
  26.   removeAddrB.Caption = "Remove Address"
  27.   removeAddrB.setVisible(false)
  28.  
  29.   local okB = createButton(mainF)
  30.   okB.Top = mainF.Height - 35
  31.   okB.Left = mainF.Width - 170
  32.   okB.Width = 75
  33.   okB.Height = 25
  34.   okB.Caption = "OK"
  35.  
  36.   local cancelB = createButton(mainF)
  37.   cancelB.Top = mainF.Height - 35
  38.   cancelB.Left = mainF.Width - 85
  39.   cancelB.Width = 75
  40.   cancelB.Height = 25
  41.   cancelB.Caption = "Cancel"
  42.  
  43.   local addrBoxes = {}
  44.  
  45.   --control functions--
  46.   local makeAddrBox = function()
  47.     local tempEdit = createEdit(mainF)
  48.     tempEdit.Top = 35 + #addrBoxes * 33
  49.     tempEdit.Left = 10
  50.     tempEdit.Width = 472
  51.     tempEdit.Height = 23
  52.     tempEdit.Caption = "Address " .. tostring(#addrBoxes + 1)
  53.  
  54.     addrBoxes[#addrBoxes + 1] = tempEdit
  55.  
  56.     mainF.Height = 70 + #addrBoxes * 33
  57.     addAddrB.Top = mainF.Height - 35
  58.     removeAddrB.Top = mainF.Height - 35
  59.     okB.Top = mainF.Height - 35
  60.     cancelB.Top = mainF.Height - 35
  61.  
  62.     removeAddrB.setVisible(#addrBoxes > 1)
  63.   end
  64.  
  65.   local removeAddrBox = function()
  66.     if #addrBoxes < 2 then return end
  67.  
  68.     addrBoxes[#addrBoxes].destroy()
  69.     addrBoxes[#addrBoxes] = nil
  70.  
  71.     mainF.Height = 70 + #addrBoxes * 33
  72.     addAddrB.Top = mainF.Height - 35
  73.     removeAddrB.Top = mainF.Height - 35
  74.     okB.Top = mainF.Height - 35
  75.     cancelB.Top = mainF.Height - 35
  76.  
  77.     removeAddrB.setVisible(#addrBoxes > 1)
  78.   end
  79.  
  80.   local createScript = function()
  81.     local is64bit = targetIs64Bit()
  82.     local injectPoints = {}
  83.     errorOnLookupFailure(false)
  84.     for _,v in ipairs(addrBoxes) do
  85.       local tempAddy = getAddress(v.Text)
  86.       if tempAddy ~= 0 then
  87.         local addrInfo = {}
  88.         addrInfo.address = tempAddy
  89.         addrInfo.disasmInfo = {}
  90.  
  91.         local size = 0
  92.         local num = 1
  93.         local totalBytes = ""
  94.         while size < 5 do
  95.           addrInfo.disasmInfo[num] = {}
  96.  
  97.           local ex,op,by,ad = splitDisassembledString(disassemble(tempAddy+size))
  98.           addrInfo.disasmInfo[num].extra = ex
  99.           addrInfo.disasmInfo[num].opcode = op
  100.           addrInfo.disasmInfo[num].bytes = by
  101.           addrInfo.disasmInfo[num].address = ad
  102.           addrInfo.disasmInfo[num].size = getInstructionSize(tempAddy+size)
  103.  
  104.           size = size + getInstructionSize(tempAddy+size)
  105.           num = num + 1
  106.           totalBytes = totalBytes .. by .. " "
  107.         end
  108.         addrInfo.disasmInfo.size = size
  109.  
  110.         totalBytes = string.gsub(totalBytes, " ", "")
  111.         for j=2, string.len(totalBytes)*3/2, 3 do
  112.           totalBytes = string.sub(totalBytes,1,j) .. " " .. string.sub(totalBytes,j+1)
  113.         end
  114.  
  115.         addrInfo.disasmInfo.bytes = totalBytes
  116.  
  117.         injectPoints[#injectPoints + 1] = addrInfo
  118.       elseif messageDialog("Could not lookup the address " .. v.Text .. ".", mtError, mbIgnore, mbAbort) == mrAbort then
  119.         mainF.close()
  120.       end
  121.     end
  122.     errorOnLookupFailure(true)
  123.  
  124.     local al = getAddressList()
  125.     local scriptRec = al.createMemoryRecord()
  126.     scriptRec.Type = vtAutoAssembler
  127.     scriptRec.Description = "Custom AA Script"
  128.     scriptRec.Script = "[ENABLE]\n// memory allocation\n"
  129.  
  130.     --allocate memory, declare labels
  131.     for i,v in ipairs(injectPoints) do
  132.       if is64bit then
  133.         scriptRec.Script = scriptRec.Script .. string.format([[
  134. alloc(newmem%d,1024,%s)
  135. label(return%d)
  136. label(originalcode%d)
  137.  
  138. ]],i,getNameFromAddress(v.address),i,i)
  139.       else
  140.         scriptRec.Script = scriptRec.Script .. string.format([[
  141. alloc(newmem%d,1024)
  142. label(originalcode%d)
  143. label(return%d)
  144.  
  145. ]],i,i,i)
  146.       end
  147.     end
  148.  
  149.     scriptRec.Script = scriptRec.Script .. "\n// new memory\n"
  150.     --newly allocated memory declaration
  151.     for i,v in ipairs(injectPoints) do
  152.       --basic1
  153.       scriptRec.Script = scriptRec.Script .. string.format([[
  154. newmem%d:
  155. originalcode%d:]],i,i)
  156.  
  157.       --originalcode(s)
  158.       for _,d in ipairs(v.disasmInfo) do
  159.         scriptRec.Script = scriptRec.Script .. "  " .. d.opcode
  160.       end
  161.  
  162.       --basic2
  163.       scriptRec.Script = scriptRec.Script .. string.format("  jmp return%d\n\n",i)
  164.     end
  165.  
  166.     scriptRec.Script = scriptRec.Script .. "\n// old memory"
  167.     --old memory jumps
  168.     for i,v in ipairs(injectPoints) do
  169.       --basic1
  170.       scriptRec.Script = scriptRec.Script .. string.format("%s:\n  jmp newmem%d",getNameFromAddress(v.address),i)
  171.  
  172.       --append nops
  173.       for k = 6, v.disasmInfo.size, 1 do
  174.         scriptRec.Script = scriptRec.Script .. "  nop"
  175.       end
  176.  
  177.       --basic2
  178.       scriptRec.Script = scriptRec.Script .. string.format("return%d:\n\n",i)
  179.     end
  180.  
  181.     scriptRec.Script = scriptRec.Script .. "[DISABLE]\n"
  182.     --dealloc memory
  183.     for i,v in ipairs(injectPoints) do
  184.       scriptRec.Script = scriptRec.Script .. string.format("dealloc(newmem%i)\n",i)
  185.     end
  186.  
  187.     --restore old code
  188.     for i,v in ipairs(injectPoints) do
  189.       scriptRec.Script = scriptRec.Script .. string.format("\n%s:",getNameFromAddress(v.address))
  190.  
  191.       --restore originalcode(s)
  192.       for _,d in ipairs(v.disasmInfo) do
  193.         scriptRec.Script = scriptRec.Script .. string.format("  %s\n",d.opcode)
  194.       end
  195.  
  196.       scriptRec.Script = scriptRec.Script .. string.format("// alt: db %s\n",v.disasmInfo.bytes)
  197.     end
  198.  
  199.     mainF.close()
  200.     getMainForm().bringToFront()
  201.   end
  202.  
  203.   local cancelScript = function()
  204.     mainF.close()
  205.   end
  206.  
  207.   local closeForm = function()
  208.     return caFree
  209.   end
  210.  
  211.   --events and wrapup--
  212.   addAddrB.OnClick = makeAddrBox
  213.   removeAddrB.OnClick = removeAddrBox
  214.   okB.OnClick = createScript
  215.   cancelB.OnClick = cancelScript
  216.   mainF.OnExit = closeForm
  217.  
  218.   makeAddrBox()
  219.   addrBoxes[1].Text = getNameFromAddress(getMemoryViewForm().DisassemblerView.SelectedAddress)
  220.  
  221.   mainF.centerScreen()
  222.   mainF.setVisible(true)
  223. end
  224.  
  225. function addCustomAAMenuItem()
  226.   if customAAMenuItem == nil then
  227.     for i = 0, getMemoryViewForm().Menu.Items.Count-1, 1 do
  228.       local mi = getMemoryViewForm().Menu.Items[i]
  229.       if mi.Caption == "Tools" then
  230.         customAAMenuItem = createMenuItem(mi)
  231.         mi.add(customAAMenuItem)
  232.         break
  233.       end
  234.     end
  235.   end
  236.   customAAMenuItem.Caption = "Multi-Code Injection"
  237.   customAAMenuItem.OnClick = makeMultiInjectionAAScript
  238. end
  239.  
  240. addCustomAAMenuItem()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement