Page 1 of 1

How does NoScript handle this?

Posted: Sat Mar 28, 2009 6:43 pm
by luntrus
Hi Giorgio Maone,

I went over here, and tried this out:
http://fantomaster.com/fantomasSuite/sh ... ersv-e.cgi
First I found up this code somewhere:

Code: Select all

<html>
<head>
<title>Expandible row test in firefox</title>
<STYLE type="text/css">
.collapsed
{
DISPLAY: none;
}
</STYLE>
<script language="javascript" type="text/javascript">
//***collapsible rows
function outliner(evt) {
evt = (evt) ? evt : (window.event) ? window.event : "";
var oMe;
if (evt.srcElement) {
oMe = evt.srcElement;
} else if (evt.target) {
oMe = evt.target;
}
if (evt.srcElement) {
//for IE
var child = document.all[oMe.getAttribute("child",false)];
}
else {
//for Firefox
var child = document.getElementById[oMe.getAttribute("child",false)];
}
//get child element
//if child element exists, expand or collapse it.
if (null != child)
child.className = child.className == "collapsed" ? "expanded" : "collapsed";
}
function changepic(evt) {
evt = (evt) ? evt : (window.event) ? window.event : "";
var uMe;
if (evt.srcElement) {
uMe = evt.srcElement;
} else if (evt.target) {
uMe = evt.target;
}
var check = uMe.src.toLowerCase();
if (check.lastIndexOf("expand.gif") != -1)
{
uMe.src = "collapse.gif";
}
else
{
uMe.src = "expand.gif";
}
}
</script>
</head>
<body onclick="outliner(event)">
<table cellpadding="2" cellspacing="0" width="98%" class="infotable" bgcolor="#f4f4f4">
<caption class="issuetitle">NARMC Sleep Disorders Clinic Intake Form</caption>
<thead >
<tr>
<th class="header" width="1%" />
<td class="header"> Last Name:</td>
<td class="header"> First Name:</td>
<td class="header"> Gender:</td>
</tr>
</thead>

<tr>
<td class="content"><A HREF="javascript:" onClick="document.getElementById['srcidDBData115847296']"><IMG border="0" alt="expand/collapse" class="expandable" height="11" onclick="changepic(event)" src="expand.gif" width="9" child="srcidDBData115847296" ></A></td>
<td class="content">Caloris</td>
<td class="content">Morris</td>
<td class="content">M</td>
</tr>

<tr class="collapsed" bgcolor="#ffffff" id="srcidDBData115847296">
<td colspan="4"> Test
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

then encoded it to this

Code: Select all

<html>
<head>
<title>&#069;&#120;&#112;&#097;&#110;&#100;&#105;&#098;&#108;&#101;&#032;&#114;&#111;&#119;&#032;&#116;&#101;&#115;&#116;&#032;&#105;&#110;&#032;&#102;&#105;&#114;&#101;&#102;&#111;&#120;</title>
<STYLE type="text/css">
.&#099;&#111;&#108;&#108;&#097;&#112;&#115;&#101;&#100;
{
&#068;&#073;&#083;&#080;&#076;&#065;&#089;&#058;&#032;&#110;&#111;&#110;&#101;&#059;
}
</STYLE>
<script language="javascript" type="text/javascript">
//***&#099;&#111;&#108;&#108;&#097;&#112;&#115;&#105;&#098;&#108;&#101;&#032;&#114;&#111;&#119;&#115;
&#102;&#117;&#110;&#099;&#116;&#105;&#111;&#110;&#032;&#111;&#117;&#116;&#108;&#105;&#110;&#101;&#114;(&#101;&#118;&#116;)&#032;{
&#101;&#118;&#116;&#032;=&#032;(&#101;&#118;&#116;)&#032;?&#032;&#101;&#118;&#116;&#032;&#058;&#032;(&#119;&#105;&#110;&#100;&#111;&#119;.&#101;&#118;&#101;&#110;&#116;)&#032;?&#032;&#119;&#105;&#110;&#100;&#111;&#119;.&#101;&#118;&#101;&#110;&#116;&#032;&#058;&#032;""&#059;
&#118;&#097;&#114;&#032;&#111;&#077;&#101;&#059;
&#105;&#102;&#032;(&#101;&#118;&#116;.&#115;&#114;&#099;&#069;&#108;&#101;&#109;&#101;&#110;&#116;)&#032;{
&#111;&#077;&#101;&#032;=&#032;&#101;&#118;&#116;.&#115;&#114;&#099;&#069;&#108;&#101;&#109;&#101;&#110;&#116;&#059;
}&#032;&#101;&#108;&#115;&#101;&#032;&#105;&#102;&#032;(&#101;&#118;&#116;.&#116;&#097;&#114;&#103;&#101;&#116;)&#032;{
&#111;&#077;&#101;&#032;=&#032;&#101;&#118;&#116;.&#116;&#097;&#114;&#103;&#101;&#116;&#059;
}
&#105;&#102;&#032;(&#101;&#118;&#116;.&#115;&#114;&#099;&#069;&#108;&#101;&#109;&#101;&#110;&#116;)&#032;{
//&#102;&#111;&#114;&#032;&#073;&#069;
&#118;&#097;&#114;&#032;&#099;&#104;&#105;&#108;&#100;&#032;=&#032;&#100;&#111;&#099;&#117;&#109;&#101;&#110;&#116;.&#097;&#108;&#108;[&#111;&#077;&#101;.&#103;&#101;&#116;&#065;&#116;&#116;&#114;&#105;&#098;&#117;&#116;&#101;("&#099;&#104;&#105;&#108;&#100;",&#102;&#097;&#108;&#115;&#101;)]&#059;
}
&#101;&#108;&#115;&#101;&#032;{
//&#102;&#111;&#114;&#032;&#070;&#105;&#114;&#101;&#102;&#111;&#120;
&#118;&#097;&#114;&#032;&#099;&#104;&#105;&#108;&#100;&#032;=&#032;&#100;&#111;&#099;&#117;&#109;&#101;&#110;&#116;.&#103;&#101;&#116;&#069;&#108;&#101;&#109;&#101;&#110;&#116;&#066;&#121;&#073;&#100;[&#111;&#077;&#101;.&#103;&#101;&#116;&#065;&#116;&#116;&#114;&#105;&#098;&#117;&#116;&#101;("&#099;&#104;&#105;&#108;&#100;",&#102;&#097;&#108;&#115;&#101;)]&#059;
}
//&#103;&#101;&#116;&#032;&#099;&#104;&#105;&#108;&#100;&#032;&#101;&#108;&#101;&#109;&#101;&#110;&#116;
//&#105;&#102;&#032;&#099;&#104;&#105;&#108;&#100;&#032;&#101;&#108;&#101;&#109;&#101;&#110;&#116;&#032;&#101;&#120;&#105;&#115;&#116;&#115;,&#032;&#101;&#120;&#112;&#097;&#110;&#100;&#032;&#111;&#114;&#032;&#099;&#111;&#108;&#108;&#097;&#112;&#115;&#101;&#032;&#105;&#116;.
&#105;&#102;&#032;(&#110;&#117;&#108;&#108;&#032;!=&#032;&#099;&#104;&#105;&#108;&#100;)
&#099;&#104;&#105;&#108;&#100;.&#099;&#108;&#097;&#115;&#115;&#078;&#097;&#109;&#101;&#032;=&#032;&#099;&#104;&#105;&#108;&#100;.&#099;&#108;&#097;&#115;&#115;&#078;&#097;&#109;&#101;&#032;==&#032;"&#099;&#111;&#108;&#108;&#097;&#112;&#115;&#101;&#100;"&#032;?&#032;"&#101;&#120;&#112;&#097;&#110;&#100;&#101;&#100;"&#032;&#058;&#032;"&#099;&#111;&#108;&#108;&#097;&#112;&#115;&#101;&#100;"&#059;
}
&#102;&#117;&#110;&#099;&#116;&#105;&#111;&#110;&#032;&#099;&#104;&#097;&#110;&#103;&#101;&#112;&#105;&#099;(&#101;&#118;&#116;)&#032;{
&#101;&#118;&#116;&#032;=&#032;(&#101;&#118;&#116;)&#032;?&#032;&#101;&#118;&#116;&#032;&#058;&#032;(&#119;&#105;&#110;&#100;&#111;&#119;.&#101;&#118;&#101;&#110;&#116;)&#032;?&#032;&#119;&#105;&#110;&#100;&#111;&#119;.&#101;&#118;&#101;&#110;&#116;&#032;&#058;&#032;""&#059;
&#118;&#097;&#114;&#032;&#117;&#077;&#101;&#059;
&#105;&#102;&#032;(&#101;&#118;&#116;.&#115;&#114;&#099;&#069;&#108;&#101;&#109;&#101;&#110;&#116;)&#032;{
&#117;&#077;&#101;&#032;=&#032;&#101;&#118;&#116;.&#115;&#114;&#099;&#069;&#108;&#101;&#109;&#101;&#110;&#116;&#059;
}&#032;&#101;&#108;&#115;&#101;&#032;&#105;&#102;&#032;(&#101;&#118;&#116;.&#116;&#097;&#114;&#103;&#101;&#116;)&#032;{
&#117;&#077;&#101;&#032;=&#032;&#101;&#118;&#116;.&#116;&#097;&#114;&#103;&#101;&#116;&#059;
}
&#118;&#097;&#114;&#032;&#099;&#104;&#101;&#099;&#107;&#032;=&#032;&#117;&#077;&#101;.&#115;&#114;&#099;.&#116;&#111;&#076;&#111;&#119;&#101;&#114;&#067;&#097;&#115;&#101;()&#059;
&#105;&#102;&#032;(&#099;&#104;&#101;&#099;&#107;.&#108;&#097;&#115;&#116;&#073;&#110;&#100;&#101;&#120;&#079;&#102;("&#101;&#120;&#112;&#097;&#110;&#100;.&#103;&#105;&#102;")&#032;!=&#032;-&#049;)
{
&#117;&#077;&#101;.&#115;&#114;&#099;&#032;=&#032;"&#099;&#111;&#108;&#108;&#097;&#112;&#115;&#101;.&#103;&#105;&#102;"&#059;
}
&#101;&#108;&#115;&#101;
{
&#117;&#077;&#101;.&#115;&#114;&#099;&#032;=&#032;"&#101;&#120;&#112;&#097;&#110;&#100;.&#103;&#105;&#102;"&#059;
}
}
</script>
</head>
<body onclick="outliner(event)">
<table cellpadding="2" cellspacing="0" width="98%" class="infotable" bgcolor="#f4f4f4">
<caption class="issuetitle">&#078;&#065;&#082;&#077;&#067;&#032;&#083;&#108;&#101;&#101;&#112;&#032;&#068;&#105;&#115;&#111;&#114;&#100;&#101;&#114;&#115;&#032;&#067;&#108;&#105;&#110;&#105;&#099;&#032;&#073;&#110;&#116;&#097;&#107;&#101;&#032;&#070;&#111;&#114;&#109;</caption>
<thead >
<tr>
<th class="header" width="1%" />
<td class="header">&#032;&#076;&#097;&#115;&#116;&#032;&#078;&#097;&#109;&#101;&#058;</td>
<td class="header">&#032;&#070;&#105;&#114;&#115;&#116;&#032;&#078;&#097;&#109;&#101;&#058;</td>
<td class="header">&#032;&#071;&#101;&#110;&#100;&#101;&#114;&#058;</td>
</tr>
</thead>

<tr>
<td class="content"><A HREF="javascript:" onClick="document.getElementById['srcidDBData115847296']"><IMG border="0" alt="expand/collapse" class="expandable" height="11" onclick="changepic(event)" src="expand.gif" width="9" child="srcidDBData115847296" ></A></td>
<td class="content">&#067;&#097;&#108;&#111;&#114;&#105;&#115;</td>
<td class="content">&#077;&#111;&#114;&#114;&#105;&#115;</td>
<td class="content">&#077;</td>
</tr>

<tr class="collapsed" bgcolor="#ffffff" id="srcidDBData115847296">
<td colspan="4">&#032;&#084;&#101;&#115;&#116;
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

Question in NoScript the stealthed code is handled exactly similar to the "straight" variety? I guess so, but can you verify?

luntrus

Re: How does NoScript handle this?

Posted: Sat Mar 28, 2009 9:37 pm
by therube
Unless it is making changes to the code (either purposely or due to an error in the coding of the encoder) then there should be no difference whatsoever. All the encoding does (should do) is to make it more difficult for you or I to garner the meaning of the code.

The browser shouldn't care what it looks like, so long as it knows how to use the information presented.

But now that we know, we can take that obscured code & convert it back to a more readable form, after which we still need to ask someone else what it means :lol: .

Though even with the browser understanding how to "read" the information presented, NoScript, which I guess you could consider as a filter, must also check specifically for all potential cases. If it did not, then the code would be transparent to NoScript.

And as we've seen over time, both Mozilla & NoScript had to be updated to patch "code" that was not, or not correctly, being interpreted.

Re: How does NoScript handle this?

Posted: Sat Mar 28, 2009 9:59 pm
by Giorgio Maone
For Mozilla to run it, Mozilla must understand it first.
If Mozilla can understand it, NoScript can as well :)


However, that "ultimate stealth" is ridiculous -- just plain old HTML encoding.
There are several more convoluted ways to obfuscate code, but at the end of the day the bold proposition above applies.

Re: How does NoScript handle this?

Posted: Sun Mar 29, 2009 2:16 am
by GµårÐïåñ
Giorgio Maone wrote:For Mozilla to run it, Mozilla must understand it first.
If Mozilla can understand it, NoScript can as well :)


However, that "ultimate stealth" is ridiculous -- just plain old HTML encoding.
There are several more convoluted ways to obfuscate code, but at the end of the day the bold proposition above applies.


Agreed, the attempt at "encoding" is pretty amateur. :|