如何分析加载了awesomium的WebApp与原生程序之间的通信?

逆向工程 javascript
2021-06-12 07:13:46

我有一个使用awesomium来显示 WebApp的 Windows 程序这个 WebApp 通过一些本机调用以某种方式与客户端程序进行通信。在 JS 源代码中找到了window.externalHost和 的引用window.native,但它是用YUI构建的,有数万行代码和单个字符变量,我不太清楚它们到底在做什么(静态分析)。

我已将 Javascript 注入 WebApp 以检查这两个对象:

try {
    document.write(JSON.stringify(window.externalHost, null, 4))
} catch (err) {
    document.write(err)
}

但是window.externalHostundefined并且window.native{}

所以我的问题是:

  • 本地调用通常如何设置?
  • 存在哪些接口以及如何使用它们?(两个方向)
  • 我可以“绕道”/“拦截”本机调用以查看它们发送的内容吗?
  • 是否有任何我可以注入的远程 JS 调试项目来动态调试复杂的 WebApp?

更新 1:我相信它使用window.native. 因为这个 Object {}window.externalHost.postMessage()根据我在awesomium wiki上阅读的内容,似乎没有实现通信

我现在尝试捕获对其调用的方法。我的想法是覆盖window.onerror以捕获所有错误并设置window.native = undefined;为捕获异常,例如Cannot call aNativeCall() on undefined. 不幸的是,它似乎windows.native无法被覆盖 - 它不会保持未定义状态。

还有其他想法吗?


更新2:

我想出了这个 javascript 代码来检查一些有趣的对象,比如window.external,等等......

obj = ['external', 'externalHost', 'native', 'Y', ['Y','native'],['Y','Native'], ['Y','external'], ['Y','externalHost']];
for(i=0; i< obj.length; ++i) {
    try {

        if(obj[i] instanceof Array) {
            var tmp = window[obj[i][0]];
            for(j=1; j<obj[i].length; ++j) {
                tmp = tmp[obj[i][j]]
            }
            document.write(obj[i]+" | <b>"+Object.getOwnPropertyNames(tmp)+"</b><br>");
        } else {
            document.write(obj[i]+" | <b>"+Object.getOwnPropertyNames(window[obj[i]])+"</b><br>");
        }

    } catch(err) {
        document.write(obj[i]+" | <i>Error: "+err+"</i><br>");
    }
}

它变得越来越清楚,它必须是window.native该对象具有以下属性:'on'、'isNative'、'scale'、'Emitter'、'call'、'register'、'_ready'

当我尝试调用window.native.call()本机程序时崩溃。并且调试信息显示它在一个ProcessRequest函数中崩溃了所以我找到了正确的界面。

我现在需要找出这个接口是如何使用的。不幸的是,我无法覆盖window.native.call = function() { ... }以记录通话。

有人有别的想法吗?

0个回答
没有发现任何回复~