[JS每M日N练] 基于libcef应用(Steam)的js导出对象分析

导读

市面上越来越多的第三方软件的使用了cef进行客户端开发,为了丰富软件功能,这些软件一般都会封装一些全局变量,向下面这样:
在这里插入图片描述
这样的windows对象下有两三百个这样的对象,如何找到蓝色标记的自定义api呢?

方案

  • 枚举出所有目标软件中的window对象的keys,记为cefKeys;
  • 枚举任一网站的window对象的keys,记为defaultKeys;
  • 两个数组求cefKeys关于defaultKeys的相对补集cefKeys - defaultKeys

实现

目标软件window对象的keys获取

这里需要注意,因为数据大于100个,没法将数据拷贝出来,我们只能将数据转换为字符串拷贝出来。
在这里插入图片描述

直接执行Object.keys(window).toString(),最终效果如下:
在这里插入图片描述

将结果拷贝出来,放到另一个控制台,再解析为数组就可以了,var cefKeys = "*********".split(',')

求补集

// 获取某网页的windows
var defaultKeys = Object.keys(window);

// 求补集
var ret = cefKeys.filter(x => -1==defaultKeys.indexOf(x));

// 打印排序后的结果
console.log(ret.sort());

效果如下,这些就是libcef应用中,使用到的全局对象了:
在这里插入图片描述

综合案例:打印libcef应用中的全局对象属性

在libcef应用中执行下面代码:

// 获取某网页的windows
var defaultKeys = 'window,self,document,name,location,customElements,history,locationbar,menubar,personalbar,scrollbars,statusbar,toolbar,status,closed,frames,length,top,opener,parent,frameElement,navigator,origin,external,screen,innerWidth,innerHeight,scrollX,pageXOffset,scrollY,pageYOffset,visualViewport,screenX,screenY,outerWidth,outerHeight,devicePixelRatio,clientInformation,screenLeft,screenTop,defaultStatus,defaultstatus,styleMedia,onsearch,isSecureContext,performance,onappinstalled,onbeforeinstallprompt,crypto,indexedDB,webkitStorageInfo,sessionStorage,localStorage,onbeforexrselect,onabort,onblur,oncancel,oncanplay,oncanplaythrough,onchange,onclick,onclose,oncontextmenu,oncuechange,ondblclick,ondrag,ondragend,ondragenter,ondragleave,ondragover,ondragstart,ondrop,ondurationchange,onemptied,onended,onerror,onfocus,onformdata,oninput,oninvalid,onkeydown,onkeypress,onkeyup,onload,onloadeddata,onloadedmetadata,onloadstart,onmousedown,onmouseenter,onmouseleave,onmousemove,onmouseout,onmouseover,onmouseup,onmousewheel,onpause,onplay,onplaying,onprogress,onratechange,onreset,onresize,onscroll,onseeked,onseeking,onselect,onstalled,onsubmit,onsuspend,ontimeupdate,ontoggle,onvolumechange,onwaiting,onwebkitanimationend,onwebkitanimationiteration,onwebkitanimationstart,onwebkittransitionend,onwheel,onauxclick,ongotpointercapture,onlostpointercapture,onpointerdown,onpointermove,onpointerup,onpointercancel,onpointerover,onpointerout,onpointerenter,onpointerleave,onselectstart,onselectionchange,onanimationend,onanimationiteration,onanimationstart,ontransitionrun,ontransitionstart,ontransitionend,ontransitioncancel,onafterprint,onbeforeprint,onbeforeunload,onhashchange,onlanguagechange,onmessage,onmessageerror,onoffline,ononline,onpagehide,onpageshow,onpopstate,onrejectionhandled,onstorage,onunhandledrejection,onunload,alert,atob,blur,btoa,cancelAnimationFrame,cancelIdleCallback,captureEvents,clearInterval,clearTimeout,close,confirm,createImageBitmap,fetch,find,focus,getComputedStyle,getSelection,matchMedia,moveBy,moveTo,open,postMessage,print,prompt,queueMicrotask,releaseEvents,reportError,requestAnimationFrame,requestIdleCallback,resizeBy,resizeTo,scroll,scrollBy,scrollTo,setInterval,setTimeout,stop,webkitCancelAnimationFrame,webkitRequestAnimationFrame,chrome,caches,cookieStore,ondevicemotion,ondeviceorientation,ondeviceorientationabsolute,showDirectoryPicker,showOpenFilePicker,showSaveFilePicker,originAgentCluster,trustedTypes,speechSynthesis,onpointerrawupdate,crossOriginIsolated,scheduler,openDatabase,webkitRequestFileSystem,webkitResolveLocalFileSystemURL,hashMatch,bds,isOldIE,al_arr,selfOpen,isIE,E,detectIntervals,G,ns_c_pj,ns_c,A,__perf_www_datas,imgErrList,imgErrFun,cbs,ts,bdUser,bdQuery,bdUseFavo,bdFavoOn,bdCid,bdSid,bdServerTime,bdQid,bdstoken,_eclipse,login_success,$,jQuery,define,require,esl,Cookie,UPS,__restart_confirm_timeout,__confirm_timeout,__disable_is_guide,__disable_swap_to_empty,__switch_add_mask,__extends,__assign,__rest,__decorate,__param,__metadata,__awaiter,__generator,__exportStar,__values,__read,__spread,__spreadArrays,__await,__asyncGenerator,__asyncDelegator,__asyncValues,__makeTemplateObject,__importStar,__importDefault,__classPrivateFieldGet,__classPrivateFieldSet,__createBinding,addEV,_aMC,al_c,al_c2,c,TagQ,h,escapeHTML,initPreload,user_c,initPassV3,isp_hijack,isbase64,formatDate,baseChangeUrl,langChangeUrl,advChangeUrl,fileChangeUrl,queryReplace,extChangeUrl,domain,sethfPos,__callback_names,ie,ie6,url,skinDefer,langfilterTip,timefilterTip,fileTypeTip,insideSearchTip,jQuery110204841899757731367,initResultClickLog,fa,_invoke_login,browser,browserversion,browsertype,os,isWinVista,osversion,PRE_CONN,ctwin,icodetest,searchUiPcNode,searchUiPc,b_rec,scr_rec,reh_rec,hash,setSugKey,getCursortPosition,changeUrl,pageState,PDC_ASYNC,winFilter,BD_PS_C1644926387321,BD_PS_C1644926387344,v,_WWW_SRV_T,$body,__core-js_shared__,bdDataLayer,toast,setImmediate,clearImmediate,cssLinks,$scopeId,ngInspector,delayHideOnTip,delayShowOnTip,delayHideOnIcon,BD_PS_C1644926394536,jQuery110204841899757731367_1644926387224,BD_PS_C1644926410732,param,oldEnv,currentScriptElem,tplname,bd_cb_dict3_1644929345235,clickstream,BD_PS_C1644929345307,cfpromise,BD_PS_C1644929345345,swap_wait,core,_,bd_cb_dict3_1644930121647,BD_PS_C1644930121702,BD_PS_C1644930121729,BD_PS_C1644930128706,BD_PS_C1644930128726,BD_PS_C1644931438676,BD_PS_C1644931444073,BD_PS_C1644931444093,BD_PS_C1644931445203,BD_PS_C1644931776983,BD_PS_C1644931777009,BD_PS_C1644931783049,BD_PS_C1644931784101,wd,nsclickDomain,BD_PS_C1644932847342,img,src,BD_PS_C1644932965801,BD_PS_C1644933004323,BD_PS_C1644933056952,BD_PS_C1644933065939,BD_PS_C1644933065961,BD_PS_C1644933072325,BD_PS_C1644933758701,BD_PS_C1644933758720,BD_PS_C1644933759807'.split(',')

var cefKeys = Object.keys(window)

// 求补集
var ret = cefKeys.filter(x => -1==defaultKeys.indexOf(x));

// 打印排序后的结果
ret = ret.sort()
console.log(ret);

var log = '';
for (var idx in ret) {
	var name=ret[idx];
	log += '\n\n=========================================== ' + name + '\n';
	var lst_prop = []
	var obj = window[name];
	if (typeof obj == "object") {
		for(var k in obj) {
		    lst_prop.push(k);
		    log += lst_prop.toString();
		}
	}
}
console.log(log);

附赠一个知识点:获取对象属性:

  • window[name] 等价于
  • Object.getOwnPropertyDescriptor(window, name).value

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值