Prepare documented WhatsApp injector with portable Python bundle

This commit is contained in:
Ops Agent committed 2026-10-11 07:57:48 +02:00
commit d2b621bce7
49 files changed
+5737

No files matched your search

+43
View File
@@ -0,0 +1,43 @@
"""Bounded oldest-message reading through the app's JavaScript database API."""
PROBE = r'''(async () => {
if(location.origin!=='https://web.whatsapp.com')throw Error('Unexpected origin');
const table=require('WAWebSchemaMessage').getMessageTable();
const serializer=require('WAWebDBMessageSerialization');
if(!(await indexedDB.databases()).some(d=>d.name==='model-storage'))throw Error('Database absent');
const db=await new Promise((resolve,reject)=>{
const r=indexedDB.open('model-storage');
r.onupgradeneeded=()=>{r.transaction.abort();reject(Error('Refusing database upgrade'));};
r.onsuccess=()=>resolve(r.result);r.onerror=()=>reject(Error('Database open failed'));
});
let scanned=0;
try {
const oldest=await new Promise((resolve,reject)=>{
const tx=db.transaction('message','readonly'),store=tx.objectStore('message'),rows=[];
const r=store.openCursor();
r.onerror=()=>reject(Error('Cursor failed'));tx.onabort=()=>reject(Error('Transaction aborted'));
r.onsuccess=()=>{
const c=r.result;if(!c){resolve(rows);return;}
if(++scanned>100000) {reject(Error('History scan exceeds 100000 rows'));return;}
const t=c.value.t;
if(typeof t==='number'&&Number.isFinite(t)&&t>0){
rows.push({key:c.primaryKey,t});rows.sort((a,b)=>a.t-b.t);if(rows.length>5)rows.pop();
}
c.continue();
};
});
const messages=[];
for(const candidate of oldest){
const row=await table.get(candidate.key);
if(!row)throw Error('Selected row disappeared');
if(row.msgRowOpaqueData&&typeof row.msgRowOpaqueData==='object'&&'_data' in row.msgRowOpaqueData)
throw Error('Payload remains encrypted');
const m=serializer.messageFromDbRow(row);
messages.push({id:candidate.key,timestamp:m.t,type:m.type,
body:typeof m.body==='string'?m.body:null,caption:typeof m.caption==='string'?m.caption:null,
selected_timestamp:candidate.t});
}
return {scanned,sample_limit:5,source:'WAWebSchemaMessage.getMessageTable().get + WAWebDBMessageSerialization.messageFromDbRow',
cdp:false,messages};
}finally{db.close();}
})()'''