Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function makeMultiInjectionAAScript()
- --main GUI--
- local mainF = createForm(false)
- mainF.Width = 492
- mainF.Height = 103
- mainF.Caption = "Multi code inject template"
- local mainLabel = createLabel(mainF)
- mainLabel.Top = 10
- mainLabel.Left = 10
- mainLabel.AutoSize = true
- mainLabel.Caption = "On what addresses do you want the jumps?"
- local addAddrB = createButton(mainF)
- addAddrB.Top = mainF.Height - 35
- addAddrB.Left = 10
- addAddrB.Width = 100
- addAddrB.Height = 25
- addAddrB.Caption = "Add Address"
- local removeAddrB = createButton(mainF)
- removeAddrB.Top = mainF.Height - 35
- removeAddrB.Left = 120
- removeAddrB.Width = 100
- removeAddrB.Height = 25
- removeAddrB.Caption = "Remove Address"
- removeAddrB.setVisible(false)
- local okB = createButton(mainF)
- okB.Top = mainF.Height - 35
- okB.Left = mainF.Width - 170
- okB.Width = 75
- okB.Height = 25
- okB.Caption = "OK"
- local cancelB = createButton(mainF)
- cancelB.Top = mainF.Height - 35
- cancelB.Left = mainF.Width - 85
- cancelB.Width = 75
- cancelB.Height = 25
- cancelB.Caption = "Cancel"
- local addrBoxes = {}
- --control functions--
- local makeAddrBox = function()
- local tempEdit = createEdit(mainF)
- tempEdit.Top = 35 + #addrBoxes * 33
- tempEdit.Left = 10
- tempEdit.Width = 472
- tempEdit.Height = 23
- tempEdit.Caption = "Address " .. tostring(#addrBoxes + 1)
- addrBoxes[#addrBoxes + 1] = tempEdit
- mainF.Height = 70 + #addrBoxes * 33
- addAddrB.Top = mainF.Height - 35
- removeAddrB.Top = mainF.Height - 35
- okB.Top = mainF.Height - 35
- cancelB.Top = mainF.Height - 35
- removeAddrB.setVisible(#addrBoxes > 1)
- end
- local removeAddrBox = function()
- if #addrBoxes < 2 then return end
- addrBoxes[#addrBoxes].destroy()
- addrBoxes[#addrBoxes] = nil
- mainF.Height = 70 + #addrBoxes * 33
- addAddrB.Top = mainF.Height - 35
- removeAddrB.Top = mainF.Height - 35
- okB.Top = mainF.Height - 35
- cancelB.Top = mainF.Height - 35
- removeAddrB.setVisible(#addrBoxes > 1)
- end
- local createScript = function()
- local is64bit = targetIs64Bit()
- local injectPoints = {}
- errorOnLookupFailure(false)
- for _,v in ipairs(addrBoxes) do
- local tempAddy = getAddress(v.Text)
- if tempAddy ~= 0 then
- local addrInfo = {}
- addrInfo.address = tempAddy
- addrInfo.disasmInfo = {}
- local size = 0
- local num = 1
- local totalBytes = ""
- while size < 5 do
- addrInfo.disasmInfo[num] = {}
- local ex,op,by,ad = splitDisassembledString(disassemble(tempAddy+size))
- addrInfo.disasmInfo[num].extra = ex
- addrInfo.disasmInfo[num].opcode = op
- addrInfo.disasmInfo[num].bytes = by
- addrInfo.disasmInfo[num].address = ad
- addrInfo.disasmInfo[num].size = getInstructionSize(tempAddy+size)
- size = size + getInstructionSize(tempAddy+size)
- num = num + 1
- totalBytes = totalBytes .. by .. " "
- end
- addrInfo.disasmInfo.size = size
- totalBytes = string.gsub(totalBytes, " ", "")
- for j=2, string.len(totalBytes)*3/2, 3 do
- totalBytes = string.sub(totalBytes,1,j) .. " " .. string.sub(totalBytes,j+1)
- end
- addrInfo.disasmInfo.bytes = totalBytes
- injectPoints[#injectPoints + 1] = addrInfo
- elseif messageDialog("Could not lookup the address " .. v.Text .. ".", mtError, mbIgnore, mbAbort) == mrAbort then
- mainF.close()
- end
- end
- errorOnLookupFailure(true)
- local al = getAddressList()
- local scriptRec = al.createMemoryRecord()
- scriptRec.Type = vtAutoAssembler
- scriptRec.Description = "Custom AA Script"
- scriptRec.Script = "[ENABLE]\n// memory allocation\n"
- --allocate memory, declare labels
- for i,v in ipairs(injectPoints) do
- if is64bit then
- scriptRec.Script = scriptRec.Script .. string.format([[
- alloc(newmem%d,1024,%s)
- label(return%d)
- label(originalcode%d)
- ]],i,getNameFromAddress(v.address),i,i)
- else
- scriptRec.Script = scriptRec.Script .. string.format([[
- alloc(newmem%d,1024)
- label(originalcode%d)
- label(return%d)
- ]],i,i,i)
- end
- end
- scriptRec.Script = scriptRec.Script .. "\n// new memory\n"
- --newly allocated memory declaration
- for i,v in ipairs(injectPoints) do
- --basic1
- scriptRec.Script = scriptRec.Script .. string.format([[
- newmem%d:
- originalcode%d:]],i,i)
- --originalcode(s)
- for _,d in ipairs(v.disasmInfo) do
- scriptRec.Script = scriptRec.Script .. " " .. d.opcode
- end
- --basic2
- scriptRec.Script = scriptRec.Script .. string.format(" jmp return%d\n\n",i)
- end
- scriptRec.Script = scriptRec.Script .. "\n// old memory"
- --old memory jumps
- for i,v in ipairs(injectPoints) do
- --basic1
- scriptRec.Script = scriptRec.Script .. string.format("%s:\n jmp newmem%d",getNameFromAddress(v.address),i)
- --append nops
- for k = 6, v.disasmInfo.size, 1 do
- scriptRec.Script = scriptRec.Script .. " nop"
- end
- --basic2
- scriptRec.Script = scriptRec.Script .. string.format("return%d:\n\n",i)
- end
- scriptRec.Script = scriptRec.Script .. "[DISABLE]\n"
- --dealloc memory
- for i,v in ipairs(injectPoints) do
- scriptRec.Script = scriptRec.Script .. string.format("dealloc(newmem%i)\n",i)
- end
- --restore old code
- for i,v in ipairs(injectPoints) do
- scriptRec.Script = scriptRec.Script .. string.format("\n%s:",getNameFromAddress(v.address))
- --restore originalcode(s)
- for _,d in ipairs(v.disasmInfo) do
- scriptRec.Script = scriptRec.Script .. string.format(" %s\n",d.opcode)
- end
- scriptRec.Script = scriptRec.Script .. string.format("// alt: db %s\n",v.disasmInfo.bytes)
- end
- mainF.close()
- getMainForm().bringToFront()
- end
- local cancelScript = function()
- mainF.close()
- end
- local closeForm = function()
- return caFree
- end
- --events and wrapup--
- addAddrB.OnClick = makeAddrBox
- removeAddrB.OnClick = removeAddrBox
- okB.OnClick = createScript
- cancelB.OnClick = cancelScript
- mainF.OnExit = closeForm
- makeAddrBox()
- addrBoxes[1].Text = getNameFromAddress(getMemoryViewForm().DisassemblerView.SelectedAddress)
- mainF.centerScreen()
- mainF.setVisible(true)
- end
- function addCustomAAMenuItem()
- if customAAMenuItem == nil then
- for i = 0, getMemoryViewForm().Menu.Items.Count-1, 1 do
- local mi = getMemoryViewForm().Menu.Items[i]
- if mi.Caption == "Tools" then
- customAAMenuItem = createMenuItem(mi)
- mi.add(customAAMenuItem)
- break
- end
- end
- end
- customAAMenuItem.Caption = "Multi-Code Injection"
- customAAMenuItem.OnClick = makeMultiInjectionAAScript
- end
- addCustomAAMenuItem()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement