首页 > 其他分享 >Chrome修改添加JS与dll交互

Chrome修改添加JS与dll交互

时间:2024-02-07 18:44:47浏览次数:25  
标签:CMD pDat Chrome cmd Uint8Array JS dat ArySet dll

注入dll后拦截js相关函数, 可以通讯以及控制
安全沙箱问题前面有写文章
为了方便快速, 使用Uint8Array::Set 函数拦截
之前尝试了 crypto.subtle 相关的函数, 这些函数速度很慢, 而且是异步, 很不方便

C++ 的dll代码

BOOL	CChrome::HookUint8ArraySetByte()
{
	BYTE	*pCode;
	BOOL	bRetVal;

	bRetVal = FindModCode("chrome.dll", "5589E553575683E4F883EC5089D3894C24108B7508A1240071A831E88944244889D0250000FCFF", &pCode);
	if(bRetVal == FALSE)
		return FALSE;

	bRetVal = AsmHook::Hook(pCode, &Hook_Uint8ArraySetByte, this, &Info_Uint8ArraySetByte, sizeof(void*)*0);
	return TRUE;
}

#define Uint8Array_ObjDatSize							0x0017
#define Uint8Array_ObjDat								0x001B
#define Uint8Array_ObjDatOffset							0x001F
#define ArySet_ObjDat									0x0007
#define ArySet_ObjDatOffset								0x0007

const	int		CMD_Index = 1000;
const	int		CMD_Value = 0x32650000;

AsmHook::HOOK_INFO	Info_Uint8ArraySetByte;
BOOL WINAPIV Hook_Uint8ArraySetByte(VOID *pUserParam, AsmHook::PUSHAD_DAT *pReg)
{
	CChrome			*pThis = (CChrome *)pUserParam;

#ifdef _WIN64
	return TRUE;
#else
	//	BOOL		bRetVal;
	void		*backaddr;
	void		**params;
	void		*Uint8Array, *ecx, *ArySet;
	int			nCount, nOffset, nDatOft, nDatSize, nCmdValue;
	BYTE		*pDat, *pSetDat;
	CHAR		*pCmd;

	AsmHook::GetCallParam32(pReg, backaddr, params);

	ecx = (void *)pReg->Ecx;
	ArySet = (void *)pReg->Edx;
	Uint8Array = params[0];
	nCount = (int)params[1];
	nOffset = (int)params[2];
	
	GetObjProp(Uint8Array, nDatSize, Uint8Array_ObjDatSize);
	GetObjProp(Uint8Array, pDat, Uint8Array_ObjDat);
	GetObjProp(Uint8Array, nDatOft, Uint8Array_ObjDatOffset);
	pDat += nDatOft;

	GetObjProp(ArySet, pSetDat, ArySet_ObjDat);
	pSetDat += ArySet_ObjDatOffset;
	nCount;

	nCmdValue = *(int *)pSetDat;
	nCmdValue >>= 1;
	if(nOffset == CMD_Index && nCmdValue == CMD_Value && nCount == 1 && nDatSize > 1024)
	{
		pCmd = (CHAR *)pDat;
		pDat += 1024;
		nDatSize -= 1024;
		pThis->OnCmdDat(pCmd, pDat, nDatSize);
	}

	return TRUE;
#endif
}

BOOL	CChrome::OnCmdDat(CHAR *pCmd, BYTE *pDat, int nSize)
{
	CDatString	datCmd;
	CHAR		szCmd[256], szName[256];
	CHAR		*pText;

	if(pCmd[0] != '#')
		return FALSE;

	datCmd.ParseString(pCmd+1);
	szCmd[0] = 0;
	datCmd.GetData("cmd", szCmd, sizeof(szCmd));
	if(strcmp(szCmd, "WriteLog") == 0)
	{
		szName[0] = 0;
		datCmd.GetData("name", szName, sizeof(szName));
		pText = (CHAR *)pDat;
		CmdWriteLog(szName, pText);
	}

	return FALSE;
}

Js代码

function	DllSendCmd(cmd, dat)
{
	const CMD_Index = 1000;
	const CMD_Value = 0x32650000;
	var encoder = new TextEncoder();
	var cmd_dat = encoder.encode(cmd+"\0");
	var send_dat = new Uint8Array(1024+dat.length);
	send_dat.set(cmd_dat, 0);
	send_dat.set(dat, 1024);
	
	send_dat.set([CMD_Value], CMD_Index);
}


function	DllWriteLog(log_name, log_text)
{
	var	cmd = "#cmd=WriteLog;name=" + log_name;
	var dat = encoder.encode(log_text + "\0");
	DllSendCmd(cmd, dat);
}

标签:CMD,pDat,Chrome,cmd,Uint8Array,JS,dat,ArySet,dll
From: https://www.cnblogs.com/zzz3265/p/18011195

相关文章

  • 一个冷门的js加密逆向分析(二)
    前天发了一片js加密分析的文章,今天继续来说第二层加密是什么样的。上源代码window[""+"f"+"3"+"2"+"0"+"6"+"b"+"1"+""]=function(){;(function(v509de,m27adb,me846d07,w4656a){......
  • `resp.text` 和 `resp.json()` 是处理 `requests` 库返回的响应对象中的两个不同方法,
    resp.text和resp.json()是处理requests库返回的响应对象中的两个不同方法,用于获取服务器响应的内容。它们的区别在于:resp.text:resp.text返回响应的内容作为字符串。适用于任何响应内容,无论响应内容是HTML、JSON、XML还是纯文本。如果响应内容是JSON格式,可以使用resp.tex......
  • eslint报错:Parsing error: No Babel config file detected for E:\xxx\index.config
    eslint根据eslint配置文件的parserOption,知道了要使用babel对代码进行解析,但是解析babel需要使用babel配置文件,由于找不到配置文件(babel配置文件默认需要放在根目录下),所以会报错。因此,添加requireConfigFile:false,本质上是告诉eslint,不用查找这个配置文件了,虽然表面上可以解决这......
  • JS使用EditableProTable案例
    EditableProTable是AntDesignPro中的一个可编辑表格组件,可以方便地实现表格数据的编辑和更新。下面是一个简单的示例,演示如何在React中使用EditableProTable组件:首先,确保你已经安装了AntDesignPro相关的依赖包。然后,可以按照以下步骤创建一个简单的可编辑表格:1、创......
  • js 双对象对比拷贝数据
    应用场景:1、两个深层次对象2、第一个对象为模板对象,第二个对象为返回的实际数据对象(简称实例对象)3、如果一个属性在实例对象内,就拿取实例对象的这个属性;如果没有,就从模板对象里面拿取。如果某个属性是数组对象,那么实例对象的这个属性内每一个数组对象都要与模板对......
  • (填坑)考古,如何追索Jsp代码。
    我现在要找到一个按钮指向路径错误的原因。1.找到jsp页面——userlist.jspweb正常是不会暴露jsp文件原名的,这里我用vscode全文检索页面中的方法名unlock找到的。2.根据页面布局定位按钮标签,发现是个自定义标签——<t:dgToolBar/>3.jsp最上边有自定义标签的引用声明 ......
  • Three.js 实现年会3D抽奖页面
    突然翻到在之前公司写的抽奖软件(用于公司年会)。觉得挺感慨的,TM的一共30+人,抽15左右,代码还是我写的,就是抽不中我。(真的是,涨了人品,失了智)一、效果效果如下:二、基础效果元素周期表 照片墙?抽奖?写之前的那段时间,刚好逛博客,看到别个大神写的threejs版《元素周期表》,这效果大体有......
  • js XML 命名空间
    Node的变化在DOM2中,Node类型包含以下特定于命名空间的属性:namespaceURI,节点的命名空间URL,如果未指定则为null;prefix,命名空间前缀,如果未指定则为null。在节点使用命名空间前缀的情况下,nodeName等于prefix+":"+localName。比如下面这个例子:<head><title>Example......
  • js DOM2 和 DOM3
    DOM2(DOMLevel2)和DOM3(DOMLevel3)在这些结构之上加入更多交互能力,提供了更高级的XML特性。实际上,DOM2和DOM3是按照模块化的思路来制定标准的,每个模块之间有一定关联,但分别针对某个DOM子集。这些模式如下所示。DOMCore:在DOM1核心部分的基础上,为节点增加方法和属性。......
  • js 插入标记
    HTML5将IE发明的innerHTML和outerHTML纳入了标准,但还有两个属性没有入选。这两个剩下的属性是innerText和outerText。innerText属性innerText属性对应元素中包含的所有文本内容,无论文本在子树中哪个层级。在用于读取值时,innerText会按照深度优先的顺序将子树中所有文......