博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
了解Jalangi2
阅读量:6166 次
发布时间:2019-06-21

本文共 1908 字,大约阅读时间需要 6 分钟。

hot3.png

什么是Jalangi

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

技术细节

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

广泛的影响力和应用

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

Jalangi转换

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

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

21214602_MClS.png

Jalangi Firefox扩展

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

21214603_6LFb.png

Jalangi2工作流程:

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

21220834_zsRs.png

目标代码(target code)是要转换和分析的源代码(即网站源代码)。

(修改此文件以查看Jalangi如何转换不同的程序结构。)

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

(您不能修改此代码,因为转换是Jalangi的工作。)

analysis.js是Jalangi运行时框架代码,它实现了转换代码中调用的这些钩子。这些钩子保留目标代码的语义,并调用第三方插件中定义的第三方回调函数。

(您可以修改此文件,但是我们建议您在第三方插件中进行修改。)

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

(修改此文件以创建任何所需的程序分析模块。)

一个例子:

原始代码:

/* Target code to be transformed and analysed *//* Do not put code here that will not terminate :) */var a = 1;// read variable avar b = a + 2; // read object console// read variable bconsole.log(b);

 

jalangi2转义后代码:

/* 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

转载于:https://my.oschina.net/HuoQibin/blog/906290

你可能感兴趣的文章
6.13心得
查看>>
java父子进程通信
查看>>
Java集合---HashMap源码剖析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
用tar和split将文件分包压缩
查看>>
Linux磁盘分区与挂载
查看>>
大数据传输,文件传输的专业解决方案!
查看>>
常用URL地址
查看>>
struts国际化
查看>>
数据库 : 事物以及隔离性导致的问题
查看>>
Jquery乱码终极解决方案
查看>>
Android Fragment 真正的完全解析(上) (转载)
查看>>
多线程依次打印abcabc
查看>>
一:学习Linux前准备工作
查看>>
how to install wireless driver for Dell 630 in Ubuntu
查看>>
Kafka 配置参数汇总及相关说明
查看>>
弄清 CSS3 的 transition 和 animation
查看>>
服务器指定网卡进行备份数据避免影响业务口
查看>>
在Sublime Text 2下面开发Sass
查看>>
四则运算个人项目3
查看>>