EK中fromCharCode和parseInt的配合使用

基于web的漏洞攻击的第一步通常是:在landing page中通过<script>标签下的JavaScript脚本引入一些恶意链接。这些脚本往往会采用各种各样的混淆、加密手法来躲避AV和browser的拦截,以使得一些恶意脚本源代码不轻易暴露。即使这些landing page被拦截,设计精巧的混淆手法也能加大安全工程师对恶意代码的分析难度。

利用JavaScript内置的parseInt函数和String对象的fromCharCode函数配合使用,来加密恶意脚本是一种常见的手法。先简单说明两个函数:

1、parseInt(string, radix):解析一个字符串并返回一个整数

参数说明: string 必须,要被解析的字符串

radix   可选,表示要解析的数字的基数,该值介于2-36之间。如果省略,则表示按十进制来解析(除非第一个参数是以0x开头的字符串,则按16进展来解析)。如     果该参数小于2或大于36则返回NaN。

2、String.formCharCode(numX1, numX2, ..., numXn):介绍一个或多个指定的unicode值,返回对应的字符串

parseInt和fromCharCode配合加密的流程通常是:对于一段数字形式的字符串,由parseInt依次解析为数字,解析出来的数字再由fromCharCode转化为对应的字符串。下面截取2014-10-06发现的sweet orange EK中的一段脚本为例说明:

<span style="font-size:14px;">var PmD = "e111d1b1ab1df058e249a23c274896bde041c016a0dc1f534e24ce29c31a6d3dbcdd4750b95ed6532bdfa7c16dc0dde4b9013fb32af2770affa5c7fa3d966932ee31d91505f93aa616";
var uSVpT = "8965a5c19132df3e832ad653553bb8d88738b062c9bd71302150ba46ad690554cea9347eda31bb7c5bb0ceaf09a5a590dc7310c34f801270d0ccb59b53b90d408141bd7a729714cc65";
var GOGP = "";
var w = 0x00;
for (var i = 0; i < (PmD.length / 2); i++) {
     GOGP += String.fromCharCode(parseInt((PmD[w] + PmD[w + 1]), 16) ^ parseInt((uSVpT[w] + uSVpT[w + 1]), 16));
     w += 2;
}</span>

解密出来的字符串保存在GOGP中,真正内容为:

http://factors.egyptiancottonshirts.com/poindexter/perez/iran/dropdown.js

该链接包含恶意的js脚本,已被chrome拦截:

时间: 2024-10-21 03:20:01

EK中fromCharCode和parseInt的配合使用的相关文章

详解JS中Number()、parseInt()和parseFloat()的区别

转载:详解JS中Number().parseInt()和parseFloat()的区别 三者的作用: Number(): 可以用于任何数据类型转换成数值: parseInt().parseFloat(): 专门用于把字符串转换成数值: 一.Number( ): (1)如果是Boolean值,true和false将分别转换为1和0. (2)如果是数字值,只是简单的传入和返回. (3)如果是null值,返回0. (4)如果是undefined,返回NaN. (5)如果是字符串,遵循下列规则: 如果字

数据类型转换中 Number()、parseInt()、parseFloat()的区别

1. Number() 只要出现非数字就是NaN ‘0100’→ 100 ‘+100’→ 100 ‘2.1’→ 2.1 true转为1,false转为0      a.如果转换的内容可以转成数字,那么就直接返回这个内容对应的数字.( 数组里有单个纯数字.单个只含数字的字符串可以转换:如果数组里有多组数据,就无法转数字,返回NaN.) b.将整体进行转换,如果有一个不可以转换那么返回NaN.(‘100px’ 这种数字加字母的字符串,返回NaN) c.如果在内容中出现小数,那么小数会保留,也会输出小

关于TabLayout与ViewPager在Fragment中嵌套Fragment使用或配合使用的思考

注意: 因为继承的是Fragment,所以getSupportFragmentManager()与getFragmentManager()方法无法使用,这里需要用到getChildFragmentManager()方法: (用getFragmentManager()方法并不会报错,但到时候运行的时候会出问题,查了好久才知道这个错误) 统一Fragment类型,要么为"android.support.v4.app.Fragment",要么为"android.app.Fragme

Java中 intValue,parseInt,Valueof

  intValue() 1.intValue()是java.lang.Number类的方法,Number是一个抽象类.Java中所有的数值类都继承它.也就是说,不单是Integer有intValue方法,Double,Long等都有此方法. valueOf() String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 ,也就是 String.valueOf() 这个参数多载的方法 有以下几种 (1)String.valueOf(boolean b) : 将 bo

JS中parseInt()、Numer()深度解析

JS中字符串转换为数字有两种方式: 1.parseInt函数 定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt 语法:parseInt(string [ , radix]) 参数: string:要被解析的值.如果参数不是一个字符串,则将其转换为字符串.字符串开头的空白符将会被忽略. radix:一个2到36之间的整数值,用于指定转换中采用的基数. 如果省略该参

javascript中parseInt(),08,09,返回0

javascript中在使用parseInt(08).parseInt(09),进行整数转换的时候,返回值是0 工具/原料 浏览器 文本编辑器 方法/步骤 javascript中在使用parseInt(08).parseInt(09),进行整数转换的时候,返回值是0,而parseInt("01")...parseInt("07")都是正确的,原因是当在前面有"0"时,javascript会认为这是一个八进制数,而"08"和&q

JavaScript中的map()函数

概述Array.map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,同时不会改变原来的数组. 用法 Array.map(callback); 示例 //简单数组 const arr = [1, 3, 4, 5, 6, 7, 8, 10]; const cube = (num) => { return num * num; } const res = arr.map(cube);//[ 1, 9, 16, 25, 36, 49, 64, 100 ] // or const

【转载】Keil中的USE MicroLib说明

在keil建立ARM的工程时 其中有一项是选 use MicroLIB 由于对KEIL不是很熟悉,于是就查了查,得到了以下信息: microlib 是缺省 C 库的备选库. 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用. 这些应用程序不在操作系统中运行. microlib 进行了高度优化以使代码变得很小. 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性. 某些库函数的运行速度也比较慢,例如,memcpy(). 与缺省 C 库之间的差异 microlib 与缺省 C

Js 字符串中提取数字

一 parseInt()方法: 首先想到的是js提供的parseInt方法,例子: var str ="4500元"; var num = parseInt(str); alert(num);//4500 以为就这么简单,那就错了.如果字符串前面有非数字字符,上面这种方法就不行了: var str ="价格:4500元"; var num = parseInt(str); alert(num);//NaN 解决这个问题,最简单的方法是:知道字符串格式后,去掉前面的非