Methods to see strings at "Accessed addresses by X"

Ways to see strings at "Find out what addresses this instruction access"

Place snippets of code and scripts under here to share with others. Archives and .Lua extensions are allowed


Moderator: Table Moderator

Post Reply
J1327
Enchanter
Enchanter
Apprentice Hacker
Apprentice Hacker
Posts: 86
Joined: Mon Jul 25, 2022 5:00 pm
Answers: 0
x 110

Methods to see strings at "Accessed addresses by X"

Post by J1327 »

From select list method (v1) -- 5mo ago.
replaces value with string instead. Cons stops update timer (count) yet new records will be added anyway.

Code: Select all

Strings_v1 = registerFormAddNotification(function(form)
    if (form.ClassName == 'TfrmChangedAddresses') then
        createTimer(100, function()
            form.cbDisplayType.Items.add("String")
            form.uptotask = createTimer(form)
            form.uptotask.Interval = 100
            form.uptotask.OnTimer = function() -- timer is synchronized by default. Hurray.
                if form.Changedlist.Selected and isKeyPressed(VK_CONTROL) and isKeyPressed(VK_E) then
                    getMemoryViewForm().DisassemblerView.SelectedAddress =
                        tonumber(form.Changedlist.Selected.Caption, 16)
                    getMemoryViewForm().bringToFront()
                elseif form.cbDisplayType.ItemIndex == 7 then
                    form.Timer1.Enabled = false;
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        form.Changedlist.Items.Item[i].SubItems[0] = readString(form.Changedlist.Items.Item[i].Caption)
                    end
                elseif not form.Timer1.Enabled then
                    form.Timer1.Enabled = true
                end

        end

    end)

end
end)

Right click method (v2) -- 5mo ago.

Code: Select all

local str_isWide
if utf8 then
    str_isWide = function(str)
        for _, codepoint in utf8.codes(str) do
            if codepoint > 127 then
                return true
            end
        end
        return false
    end
end
Strings_v2 = registerFormAddNotification(function(form)
    if (form.ClassName == 'TfrmChangedAddresses') then
        createTimer(100, function()
            form.showasString = createMenuItem(form.Changedlist.PopupMenu)
            form.showasString.caption = "Show as string"
            form.Changedlist.PopupMenu.Items.add(form.showasString)
            form.showasString.OnClick = function(self, sender)
                if not self.Checked then
                    self.Checked = true
                    form.colz = form.Changedlist.Columns.add()
                    form.colz.Width = 255
                    form.colz.Caption = " // String //"
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        form.Changedlist.Items.Item[i].SubItems.add("")
                    end
                else
                    self.Checked = false
                    form.colz.destroy()
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        form.Changedlist.Items.Item[0].SubItems.clear()
                    end
                end
            end
            form.Changedlist.OnInsert = function() -- let timer read string as soon as timer can (set by interval)
                synchronize(function()
                    form.Changedlist.Items.Item[form.Changedlist.Items.Count - 1].SubItems.add("")
                end)
            end
            form.uptotask = createTimer(form)
            form.uptotask.Interval = 100
            form.uptotask.OnTimer = function()
                if form.Changedlist.Selected and isKeyPressed(VK_CONTROL) and isKeyPressed(VK_E) then
                    getMemoryViewForm().DisassemblerView.SelectedAddress =
                        tonumber(form.Changedlist.Selected.Caption, 16)
                    getMemoryViewForm().bringToFront()
                elseif form.showasString.Checked then
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        if form.showasString.Checked then
                            form.Changedlist.Items.Item[i].SubItems[2] = str_isWide and
                                                                             readString(
                                    form.Changedlist.Items.Item[i].Caption) or
                                                                             readString(
                                    form.Changedlist.Items.Item[i].Caption, 255, true)
                        end
                    end
                end
            end
        end)
    end
end)

Register custom string type (v3) -- before post.
has similarity with concept v1. Yet
using registercustomtype with in lua causes problems executing code from lua engine

 ! Message from: J1327

if you have running code with celua-debugger
(defined variables gets replaced inside function -- unstable to use).
I did reported personally this bug, yet am not sure if it is gonna be fixed any time soon.

Code: Select all

Strings_v3W = registerCustomTypeLua("Wide-String", 0x1, function(...)
    local buffer = {...}
    return readString(buffer[#buffer], 255, true)
end, function() end, false, true)
-- Wide_String.destroy()

Strings_v3 = registerCustomTypeLua("String", 0x1, function(...)
    local buffer = {...}
    return readString(buffer[#buffer])
end, function(...) end, false, true)
-- String.destroy()

Code partially owned By Dark-Byte and this persons software Cheat Engine.


Post Reply