Use geolocated sound, voice, text, and images to craft engaging experiences for your audience. Outdoors, SonicMaps uses location services (e.g. GPS) to automatically deliver audio-visual content in response to user movement, much like a personal tour guide. At home, visitors can still explore your project through our virtual listener mode, available on the SonicMaps Player app or embedded directly on your site.
At the heart of the SonicMaps platform is our easy-to-use online Editor, offering a multi-layer approach to storytelling and audio tour creation. By overlapping multiple layers of content—such as voiceover, ambient sounds, and music—visitors can seamlessly transition between sound materials, creating their own unique mixes as they move through your map. This approach enables memorable, hands-free experiences delivered simply through a smartphone and headphones, with no need for QR codes or manual intervention. (less)
While primarily for modifying request headers, ModHeader is lightweight and perfect for specific tampering tasks (changing User-Agent, adding API keys).
For true "tamper data" behavior (pause, edit, resume), use Caido, Burp Suite, or mitmproxy.
let tamperRules = []; // Stores active modification rules// Load saved rules from storage on startup chrome.storage.local.get(['tamperRules'], (result) => if (result.tamperRules && result.tamperRules.length > 0) tamperRules = result.tamperRules; updateRules(); );
// Function to update declarativeNetRequest rules function updateRules() const dynamicRules = tamperRules.map((rule, index) => ( id: index + 1, priority: 1, action: type: 'modifyHeaders', requestHeaders: [ header: rule.headerName, operation: 'set', value: rule.newValue ] , condition: '*', resourceTypes: ['main_frame', 'sub_frame', 'xmlhttprequest', 'other'] ));
// Remove existing rules and add new ones chrome.declarativeNetRequest.updateDynamicRules( removeRuleIds: tamperRules.map((_, index) => index + 1), addRules: dynamicRules , () => if (chrome.runtime.lastError) console.error('Error updating rules:', chrome.runtime.lastError); else console.log('Tamper rules applied:', dynamicRules.length); );
// Listen for messages from popup to add/modify/delete rules chrome.runtime.onMessage.addListener((request, sender, sendResponse) => if (request.action === 'addRule') tamperRules.push( headerName: request.headerName, newValue: request.newValue, urlFilter: request.urlFilter ); chrome.storage.local.set( tamperRules ); updateRules(); sendResponse( success: true ); else if (request.action === 'removeRule') tamperRules = tamperRules.filter((_, i) => i !== request.index); chrome.storage.local.set( tamperRules ); updateRules(); sendResponse( success: true ); else if (request.action === 'getRules') sendResponse( rules: tamperRules ); return true; );
// Optional: Log intercepted requests (for debugging) chrome.declarativeNetRequest.onRuleMatchedDebug.addListener((info) => console.log('Tampered request:', info.request.url); console.log('Modified headers:', info.rules); );
Let’s walk through a practical example: you want to change a user_id parameter from 1001 to 1002 in a POST request to see if you can access another user’s data.
Step 1: Install Requestly from the Chrome Web Store.
Step 2: Open Requestly dashboard and create a new "Modify Request" rule.
Step 3: Set the URL filter – e.g., *://api.example.com/users/*
Step 4: Choose modification type:
Step 5: In the body modification field, set:
user_id: 1001 → Replace with 1002
Step 6: Save the rule and enable it.
Step 7: Use Chrome normally. Every matching request will be altered before leaving your browser. Use DevTools Network tab to confirm the change.
While primarily for modifying request headers, ModHeader is lightweight and perfect for specific tampering tasks (changing User-Agent, adding API keys).
For true "tamper data" behavior (pause, edit, resume), use Caido, Burp Suite, or mitmproxy.
let tamperRules = []; // Stores active modification rules// Load saved rules from storage on startup chrome.storage.local.get(['tamperRules'], (result) => if (result.tamperRules && result.tamperRules.length > 0) tamperRules = result.tamperRules; updateRules(); );
// Function to update declarativeNetRequest rules function updateRules() const dynamicRules = tamperRules.map((rule, index) => ( id: index + 1, priority: 1, action: type: 'modifyHeaders', requestHeaders: [ header: rule.headerName, operation: 'set', value: rule.newValue ] , condition: '*', resourceTypes: ['main_frame', 'sub_frame', 'xmlhttprequest', 'other'] ));
// Remove existing rules and add new ones chrome.declarativeNetRequest.updateDynamicRules( removeRuleIds: tamperRules.map((_, index) => index + 1), addRules: dynamicRules , () => if (chrome.runtime.lastError) console.error('Error updating rules:', chrome.runtime.lastError); else console.log('Tamper rules applied:', dynamicRules.length); ); tamper data chrome
// Listen for messages from popup to add/modify/delete rules chrome.runtime.onMessage.addListener((request, sender, sendResponse) => if (request.action === 'addRule') tamperRules.push( headerName: request.headerName, newValue: request.newValue, urlFilter: request.urlFilter ); chrome.storage.local.set( tamperRules ); updateRules(); sendResponse( success: true ); else if (request.action === 'removeRule') tamperRules = tamperRules.filter((_, i) => i !== request.index); chrome.storage.local.set( tamperRules ); updateRules(); sendResponse( success: true ); else if (request.action === 'getRules') sendResponse( rules: tamperRules ); return true; );
// Optional: Log intercepted requests (for debugging) chrome.declarativeNetRequest.onRuleMatchedDebug.addListener((info) => console.log('Tampered request:', info.request.url); console.log('Modified headers:', info.rules); );
Let’s walk through a practical example: you want to change a user_id parameter from 1001 to 1002 in a POST request to see if you can access another user’s data. While primarily for modifying request headers, ModHeader is
Step 1: Install Requestly from the Chrome Web Store.
Step 2: Open Requestly dashboard and create a new "Modify Request" rule.
Step 3: Set the URL filter – e.g., *://api.example.com/users/*
Step 4: Choose modification type:
Step 5: In the body modification field, set:
user_id: 1001 → Replace with 1002
Step 6: Save the rule and enable it.
Step 7: Use Chrome normally. Every matching request will be altered before leaving your browser. Use DevTools Network tab to confirm the change.