Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Collect/Identify memory Protectionflags [Solved]

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting
View previous topic :: View next topic  
Author Message
paul44
Expert Cheater
Reputation: 2

Joined: 20 Jul 2017
Posts: 206

PostPosted: Sat Aug 24, 2024 2:52 am    Post subject: Collect/Identify memory Protectionflags [Solved] Reply with quote

Table @FRF: "fearless rev Collecting Memory Regions" (Tools section)


images here: [ https://ibb.co/album/bRVwYY ] (pic_order not quite in par)

I'm currently working on an asm scanner, which allows me to find asm opcode while filtering on 'static addrs, structaddr & structname'.
Apart from the obvious ptr_checks,i'm getting far more issues now when trying to inmplement the structaddr part.

Practically, i'm "only" interested in opcode_hits here. Iow "Read Exec".
(there are games where opcode_flag can be writatble actually ~ usually game dlls)

=> Q: is it possible to find out what the protectionflags are of a particular memory_address (page ?); lua-wise t.i. ?

ps: initially i was using 'getInstructionSize(addrOpcode)' to get the number of bytes, but that gave me them errors? "Calculating" ( string.gsub(string.match(sASM,"- (.-)- "), "%s+", "") )them does not seem to cause this issue, but i'm not holding my breath on that one...
ps2: I also thought about doing an aobscan w/protectionflags set as such to identify protect_status, but i feel this is overkill (not to mention the performance hit)


Last edited by paul44 on Wed Sep 04, 2024 12:19 pm; edited 2 times in total
Back to top
View user's profile Send private message
ParkourPenguin
I post too much
Reputation: 152

Joined: 06 Jul 2014
Posts: 4706

PostPosted: Sat Aug 24, 2024 9:35 am    Post subject: Reply with quote

paul44 wrote:
=> Q: is it possible to find out what the protectionflags are of a particular memory_address (page ?); lua-wise t.i. ?
There's `enumMemoryRegions`
Code:
function do_work()
  local memregions = enumMemoryRegions()

  -- https://learn.microsoft.com/en-us/windows/win32/memory/memory-protection-constants
  local function get_protect(addr)
    addr = getAddressSafe(addr)
    if not addr then return nil, 'Invalid address' end

    for _,t in ipairs(memregions) do
      if t.BaseAddress <= addr and addr < t.BaseAddress + t.RegionSize then
        return t.Protect
      end
    end

    return nil, 'Invalid address'
  end

  assert(get_protect(0) == 1) -- PAGE_NOACCESS
end

do_work()

_________________
I don't know where I'm going, but I'll figure it out when I get there.
Back to top
View user's profile Send private message
paul44
Expert Cheater
Reputation: 2

Joined: 20 Jul 2017
Posts: 206

PostPosted: Wed Aug 28, 2024 4:48 am    Post subject: i will need some time to detail... Reply with quote

thx, tried out your script and provides proper info: [ https://ibb.co/sRpT7C6 ]

I'll need to look into how to interpret them bits here; surely based on that referenced page...
that said: do you happen to know if one can collect the modulename, based on - in this case - 'BaseAddress' ?

Reason: 2 things i miss in this overview:
a. quick jump to selected address
b. copy/paste of part/all regions

=> did a quick celua scan, and got: enumRegisteredSymbolLists() & getModuleList() ?
Need to try this, plus getting the feeling it only produces the game's modulelist...

-EDIT-
I will take some time to work this out the way i entend, so putting 'in progress'...


Last edited by paul44 on Sat Aug 31, 2024 4:10 am; edited 2 times in total
Back to top
View user's profile Send private message
ParkourPenguin
I post too much
Reputation: 152

Joined: 06 Jul 2014
Posts: 4706

PostPosted: Wed Aug 28, 2024 9:47 am    Post subject: Reply with quote

I'd do `enumModules` to get the name and base address, then `getModuleSize` to get the max size of each module.
The algorithm is very similar to my previous code in the `get_protect` function.

_________________
I don't know where I'm going, but I'll figure it out when I get there.
Back to top
View user's profile Send private message
paul44
Expert Cheater
Reputation: 2

Joined: 20 Jul 2017
Posts: 206

PostPosted: Sun Sep 01, 2024 9:06 am    Post subject: Finished... Reply with quote

see image: [ https://ibb.co/3M6RSq7 ]

I will be uploading this table some time later this week @FRF, and update this post with appropriate link. If you'd like to discuss things, do via that site...

@ParkourPenguin: as always, feedback is/was much appreciated.

-EDIT-
A minor hickup: in order to "place" oneself a bit below the top, i do:
oMemDis.TopAddress = process
oMemDis.SelectedAddress = addrItem + 0x15

However: most of the time, this does not work (meaning, you still wind up at the top of disassembler view). And if i move 'topaddress' after 'selectedaddr' then it jumps to start of memory ?!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites