Automatic Magic Code Locating Loader
4 views
ac7f99a7...
Description
Automatic Magic Code Locating 010 Editor App for macOS Loader(Bypass License Patcher) Created by B.S. Usage: frida --codeshare iDone/automatic-magic-code-locating-loader -f /Applications/010\ Editor.app/Contents/MacOS/010\ Editor --no-pause
How to Use
Download the script and run it with Frida CLI:
Download ScriptThen run with Frida:
frida -U -f YOUR_PACKAGE_NAME -l automatic-magic-code-locating-loader.js
Replace YOUR_PACKAGE_NAME with the target app's package name.
Source Code
JavaScript
// Created by B.S.
console.warn("\nFrida.version= " + Frida.version);
console.warn("Process.arch= " + Process.arch);
console.warn("Process.platform = " + Process.platform);
console.log("Java.available= " + Java.available);
//console.log("Java.androidVersion= " + Java.androidVersion);
// Save the js file to 010Editor-MacOS-BS.js
console.error("\\n frida -f /Applications/010\ Editor.app/Contents/MacOS/010\ Editor -l ./010Editor-MacOS-BS.js --no-pause \\n");
//
function get_rva(module, offset) {
var base_addr = Module.findBaseAddress(module);
if (base_addr === null)
base_addr = enum_to_find_module(module);
console.log(module + ' base_addr = ' + base_addr);
var target_addr = base_addr.add(offset);
return target_addr;
}
// - Registered to
// 83 F9 4E
// v9.0.1
//var target_addr = get_rva("010 Editor", 0xE9680);
// v9.0.2
//var target_addr = get_rva("010 Editor", 0xE9640);
// v10.0
var target_addr = get_rva("010 Editor", 0xF5820);
//
console.log("target_addr = " + target_addr);
//
console.error("******************************");
console.error("Automatic Magic Code Locating");
console.error("Automatic signature locating");
console.error("******************************");
//
// Auto Finder
var Process = Process.findModuleByName("010 Editor");
var process_base_addr = Process.base;
var process_size = Process.size;
if (process_base_addr === null)
process_base_addr = enum_to_find_module("010 Editor");
//
console.log("\nprocess path = " + Process.path);
console.log("process name = " + Process.name);
console.log("process base = " + process_base_addr);
console.log("process size = " + process_size);
//
target_addr = process_base_addr.add(0xF5820);
//console.log("\033[1;32;40m+ target_addr CheckSN = " + target_addr + "\033[0m"); // python3 enable
console.log("+ target_addr CheckSN = " + target_addr);
// 83 F9 4E
// 83 f9 4e
// 83 ?? 4e
var pattern = "83 f9 4e";
var searchResult_list = Memory.scanSync(process_base_addr, process_size, pattern);
//
for (var index in searchResult_list) {
//
console.warn("+ searchResult_list [" + index + "] = " + searchResult_list[index].address);
}
//
target_addr = ptr(searchResult_list[0].address - 0x37);
//console.log("\033[1;32;40m+ 自动定位到的特征码地址 = " + target_addr + "\033[0m"); // python3 enable
console.error("+ Magic Code Address = " + target_addr);
//
//var target_buf = Memory.readByteArray(target_addr, 64);
console.log(hexdump(target_addr, {
offset: 0,
length: 64,
header: true,
ansi: true
}));
//
Interceptor.attach(ptr(target_addr), {
onEnter: function(args) {
//
console.error('Context information:');
console.error('Context : ' + JSON.stringify(this.context));
console.error('Return : ' + this.returnAddress);
console.warn('ThreadId : ' + this.threadId);
console.warn('Depth : ' + this.depth);
console.warn('Errornr : ' + this.err);
//
console.log("onEnter CheckSN()");
// Backtracer.FUZZY 模糊抓取
// Backtracer.ACCURATE 精准抓取
console.error("[BS] [!] backtrace:\n" + Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join("\n") + "\n");
//
this.context_rdi = args[0];
// users RBX+0x30 1000
// C7 43 30 E8 03 00 00 mov dword ptr [rbx+30h], 03E8h
console.log("onEnter CheckSN() users= " + Memory.readInt(this.context_rdi.add(48)));
Memory.writeInt(this.context_rdi.add(48), 1000);
console.warn("onEnter CheckSN() users= " + Memory.readInt(this.context_rdi.add(48)));
// check net RBX+0x3C 0
// C7 43 3C 00 00 00 00 mov dword ptr [rbx+3Ch], 0
console.log("onEnter CheckSN() net check= " + Memory.readInt(this.context_rdi.add(60)));
Memory.writeInt(this.context_rdi.add(60), 0);
console.warn("onEnter CheckSN() net check= " + Memory.readInt(this.context_rdi.add(60)));
// left days RBX+0x44 4097088000000 2099-10-31 08:00:00
// C7 43 44 3B B9 00 00 mov dword ptr [rbx+44h], 0B93Bh
console.log("onEnter CheckSN() left days= " + Memory.readInt(this.context_rdi.add(68)));
Memory.writeInt(this.context_rdi.add(68), 47419);
console.warn("onEnter CheckSN() left days= " + Memory.readInt(this.context_rdi.add(68)));
},
onLeave: function(retval) {
// left days RBX+0x44 4097088000000 2099-10-31 08:00:00
// C7 43 44 3B B9 00 00 mov dword ptr [rbx+44h], 0B93Bh
console.log("onLeave CheckSN() left days= " + Memory.readInt(this.context_rdi.add(68)));
Memory.writeInt(this.context_rdi.add(68), 47419);
console.warn("onLeave CheckSN() left days= " + Memory.readInt(this.context_rdi.add(68)));
//
console.log("onLeave CheckSN() return : " + retval.toInt32());
//
// B8 DB 00 00 00 mov eax, 0DBh
// E9 98 00 00 00 jmp loc_1000E970E
retval.replace(ptr(0xDB));
//
console.warn("onLeave CheckSN() return : " + retval.toInt32());
},
});
Comments