最近想到一劳永逸的破解js方案, 就是对setFileOperationDelegate就行修改。
void ScriptEngine::setFileOperationDelegate(const FileOperationDelegate& delegate) { // _fileOperationDelegate = delegate; auto onGetStringFromFile = delegate.onGetStringFromFile; const_cast<FileOperationDelegate&>(delegate).onGetStringFromFile = [onGetStringFromFile](const std::string& path) -> std::string{ return onGetStringFromFile(path+path); }; _fileOperationDelegate = delegate; }
此段二进制代码,已经插入到so文件中。
现在需要修改setFileOperationDelegate的跳转地址,跳到刚插入二进制数据块那执行。
找到原有的函数跳转地址:
跳到了0x5948. 需要计算出0x5948的实际地址: 0x54ac + 0x1e000 + 0xa00 = 0x23eac
对计算的地址进行验证,看是否正确:
是正确的, 现在就这里的5948数据, 改成刚插入二进制数据地址。
插入的二进制数据文件偏移地址为:0x218A8
修改完保存。上传到Android模拟器上运行:
经过论证,发现可行。 接下来将此方案进行实战。