前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >了解Jalangi2

了解Jalangi2

作者头像
SuperHeroes
发布2018-05-30 16:50:28
1K0
发布2018-05-30 16:50:28
举报
文章被收录于专栏:云霄雨霁云霄雨霁

什么是Jalangi

Jalangi是前端和后端JavaScript的动态分析框架。它允许您监视JavaScript程序的每个操作,并编写自己的程序分析代码。

技术细节

Jalangi Firefox扩展拦截并转换网页和外部文件中的每一行JavaScript代码。代码转换增加了一些钩子,允许您监视执行执行的几乎每个操作(例如,变量读/写,一元/二进制操作,函数/方法调用等)。简单地覆盖暴露的API允许您执行自己的动态分析。您的动态分析代码将与目标程序的执行并行执行。

广泛的影响力和应用

JavaScript是一种松散类型的语言,通常是错误修剪。基于此框架,您可以快速构建一个分析模块来检查各种正确性错误和性能错误,进行各种程序分析(例如调试,性能分析,监控动态行为,运行时调用图等)

Jalangi转换

Jalangi Firefox扩展程序拦截并转换浏览器加载的每一行JavaScript代码,以显示挂钩以方便程序分析。

下面的数字显示原始代码段和转换的代码段。函数J $ .W和J $ .R是回调函数(钩子),用于通知变量的读写操作,回调函数的参数包括变量名和值。类似回调函数。这些回调函数调用特殊设计的虚拟函数,这些函数将作为API公开,以方便用户定义的动态分析。覆盖这些API函数将允许分析代码沿原始执行执行

Jalangi Firefox扩展

与服务器端JavaScript(Node.js)不同,在Web浏览器中,可以随时以各种方式添加JavaScript语句(如左图所示),我们相信网页中的每一行JavaScript代码都被拦截和转换。此外,我们的扩展也适用于使用HTML5 Webworker的网页,这是前端JavaScript的多线程API。

Jalangi2工作流程:

下图显示了四位在线编辑人员之间的关系。

目标代码(target code)是要转换和分析的源代码(即网站源代码)。 (修改此文件以查看Jalangi如何转换不同的程序结构。)

变换代码(transformed code)是Jalangi转换的目标代码。它增加了钩子(例如,用于变量读取的J$.R),它调用了在analysis.js中定义的函数。 (您不能修改此代码,因为转换是Jalangi的工作。)

analysis.js是Jalangi运行时框架代码,它实现了转换代码中调用的这些钩子。这些钩子保留目标代码的语义,并调用第三方插件中定义的第三方回调函数。 (您可以修改此文件,但是我们建议您在第三方插件中进行修改。)

第三方插件(third-party Plugin)是由第三方程序分析开发人员编写的文件(即您!!),覆盖这些预定义的API可以让您截获这些执行事件并进行程序分析。 (修改此文件以创建任何所需的程序分析模块。)

一个例子:

原始代码:

代码语言:javascript
复制
/* Target code to be transformed and analysed */
/* Do not put code here that will not terminate :) */

var a = 1;

// read variable a
var b = a + 2; 

// read object console
// read variable b
console.log(b); 

jalangi2转义后代码:

代码语言:javascript
复制
/* Code transformed by Jalangi */ 
var a = J$.W(8, 'a', J$.T(0, 1, 22, false), a, false, true);
var b = J$.W(32, 'b', J$.B(0, '+', J$.R(16, 'a', a, false, true), J$.T(24, 2, 22, false)), b, false, true);
J$.M(56, J$.I(typeof console === 'undefined' ? console = J$.R(40, 'console', undefined, true, true) : console = J$.R(40, 'console', console, true, true)), 'log', false)(J$.R(48, 'b', b, false, true));
// JALANGI DO NOT INSTRUMENT

详细jalangi2 API可以参考我的另一篇博客:jalangi2 API

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.05.21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Jalangi
  • 技术细节
  • 广泛的影响力和应用
  • Jalangi转换
  • Jalangi Firefox扩展
  • Jalangi2工作流程:
  • 一个例子:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档