FC2 ザ掲示板

カテゴリ
テーマ別トーク >> デジタル・家電

ソースを解読したいのですが…

このエントリーをはてなブックマークに追加

[0] マリアンヌ 2008/09/18 11:06

以下のHPのソースを表示したところ、暗号化(?)されているのか、
正しいソースがわかりません。
そこで、復号化を試みたいのですが、HTMLはだいたいわかりますが、
Java Scriptについては無知なので、復号化できるJava Scriptのプログラムを
組みたくても組むことができません。
正しいソースが表示されるようにするには、ソースコードをどのように
記述すればよいのでしょうか?

24件のコメント 1番から24番を表示中

最新20件 dat viwedatをダウンロード
[1] Jester 2008/09/18 14:37

 まず半角カナはインターネットでは使ってはいけないので以後使わないでください。
 JavaScriptに関しては入門サイトがいくらでもあるはずです。またJavaScriptに関する書籍はたくさん出ているので
ソースを表示してみましたがJavaScript内にデータが記述されています。
 暗号化もそれ程高度でないようなので入門書一冊とJavaScriptのリファレンス(大概HTMLとセットになっている)で理解できるでしょう。

[2] ぽこ 2008/09/18 23:12

>>0

要はsに符号化された文字列があって、それを復号して
tに格納しているだけです。

Google chromeのJavaScriptデバッガで変数tを表示してみてください。
たぶんそれがソースです。

[3] Jester 2008/09/19 09:44

google chromeのJavaScriptデバッガでprint tやprint sとやってみたんですが全部は表示されませんでした。

[4] ぽこ 2008/09/19 19:27

>>3
JavaScriptコンソールではどうですか?

[5] azt 2008/09/20 12:06

単純なxor暗号を3回かけてます。
HTMLそのものを取り出しましたがここに貼りましょうか?

[6] Jester 2008/09/20 14:18

>4
やってみました。tやsと入力するとソースが表示されました。
最初print sやprint tとやったらエラーになりました。

[7] マリアンヌ 2008/09/20 15:13

皆さん、レスありがとうございます。
ただ今、Jesterさんのアドバイスに従い、JavaScriptのリファレンスを
読んだりしながら、ソースの解読を試みていますが、
未だに解読することができません。

ぽこさんが教えて下さったGoogle chromeのJavaScriptデバッガや
JavaScriptコンソールですが、Firefoxを持っていなくても
使用できるのでしょうか?
(私はIEのブラウザを利用しています)

aztさんがおっしゃるXOR暗号というと、JavaScriptではなく、
C言語でしょうか???
もしよろしければ、HTMLを貼り出していただけるとありがたいです。

[8] azt 2008/09/20 17:00

<HTML>
<HEAD>
<TITLE>天声空間</TITLE>

<bgsound src="Dana_International.mid" loop="-1">

<meta http-equiv="content-script-type" content="text/javascript">
<meta name="author" content="">
<meta name="copyright" content="">
<meta name="robots" content="">
<meta name="keywords" content="">
<meta name="description" content="">
<link rel="stylesheet" href="diary/diary.css" type="text/css" charset="Shift_JIS">
<link rel="stylesheet" href="scr.css" type="text/css" charset="Shift_JIS">
<link rev="made" href="">

<body bgcolor="#000000" text="FFFFFF" link="#FFFFFF" alink="#BBBBBB" vlink="#B7CACA" style="scrollbar-face-color:#000000; scrollbar-track-color:#110022; scrollbar-arrow-color:#669999; scrollbar-highlight-color:#224444; scrollbar-shadow-color:#112222; scrollbar-3dlight-color:#335555; scrollbar-darkshadow-color:#224444;" bgproperties="fixed" background="" onload="typeWriter()">

<STYLE TYPE="text/css">
<!--
BODY {
background-image: url(bga/water/bg_0050.jpg);
background-repeat: fixed;

}
input,textarea,select, {
border-left: 1px solid;
border-right: 1px solid;
border-top: 1px solid;
border-bottom: 1px solid;
border-color: #ffffff;
color: #666666;
background-color: #000000;
font-size: 9pt;
font-family: "";

}

TABLE.class1{
background-position: 100% 0%;
background-repeat: no-repeat;
}

.k:first-letter{font-size:30px; font-family:MS P明朝,MS 明朝;}
.B{font-size:larger;}
.dia2{font-family:MS P明朝,MS 明朝;}
a:link{ color:#ffffff; background-color:;}
a:visited{ color:#00dddd;background-color:;}
a:hover{color:#44FF00; }

-->
</STYLE>

[9] azt 2008/09/20 17:05

<script type="text/javascript" language="javascript"><!--
typelayer="typewriter";
cursortype="_";
var str="";
str+="<DIV STYLE='width:100%;filter:Shadow(color=#0000FF,direction=45)'>
<span class=B><span class=B>この<span class=B>
<span class=B>HP</span></span></span></span>の、
<span class=B><span class=B>管理人<A HREF='http://nun.nu/ojiji.net/kakaku/profile2.html ' class=mincho>
<RUBY><RB><span class=B><NOBR><span class=B>価格破壊</span></NOBR><RP>(<RT>かかく はかい<RP>)</RUBY>
</A></span></span></span>が<span class=B><span class=B>気の<span class=B>赴</span>
く</span>まま</span>に<span class=B><span class=B><span class=B><span class=B>作った</span>
物<span class=B>。</span>
しかし<span class=B>、</span>この度</span>
</span>完全閉鎖</span>。<span class=B><span class=B>次</span>は<span class=B>
<span class=B><span class=B><NOBR><span class=B>違う</span>
</NOBR></span></span></span>HPを作りたいと思う</span>。<span class=B><span class=B>
<span class=B>次回のコンテンツ</span></span>は<span class=B>
<span class=B><span class=B>多</span>種</span></span>に渡り</span>、<span class=B>
<span class=B><span class=B>変わった</span></span>情報<span class=B><span class=B>から</span>
特殊な<span class=B><span class=B>知</span>識</span></span>、
<span class=B><span class=B>を<span class=B>主に</span>書</span>く<span class=B><span class=B>予定</span>
</span></span>。</span>違った<span class=B><span class=B>情報</span></span>
が明記されている事を・・・<span class=B><span class=B>
<span class=B><span class=B><NOBR><RUBY><RB>今まで</span>朗読<RP>
(<RT>ROM<RP>)</RUBY></NOBR></span>を<span class=B><span class=B>
<NOBR><RUBY><RB>感</span>謝<RP>(<RT>サンキュウ<RP>)</RUBY></NOBR></span></span>で<span class=B>
ある</span>が<span class=B>この<span class=B><RUBY><RB>空間<RP>(<RT>せかい<RP>)</RUBY></span></span>
は<span class=B>また</span></span>どこかの<span class=B><span class=B>サイト</span>で<span class=B>
<span class=B>存在</span></span></span>する<span class=B><span class=B><span class=B>可能性<span class=B>が</span>
あり得る</span>事<span class=B><span class=B><span class=B><NOBR>復活</NOBR></span></span></span></span></span>
は<span class=B><span class=B><span class=B>無い</span>に</span><span class=B>等しい</span><span class=B><span class=B>
<span class=B>B</span>y</span></span> 価格破壊(本名 綾香)</span>";

[10] azt 2008/09/20 17:05


str1 = str + " ";
var str2="";
var cursorOn=5;
var stopping=0;

function typeWriter(){
timerIDtype = setInterval('starttype()',60);
}
function starttype(){
if(stopping>0){stopping--}
else{
if(str1.charAt(0)=="<"){
var i = str1.indexOf(">",0)+1;
str2+=str1.substring(0,i);
str1 = str1.substring(i,str1.length);
}
else{
str2+=str1.charAt(0);
switch(str1.charAt(0)){
case "。":stopping=12;break;
case "、":stopping=6;break;
case "!":stopping=15;break;
case "?":stopping=15;break;
case " ":stopping=6;break;
case ".":stopping=12;break;
case ",":stopping=6;break;
case "!":stopping=15;break;
case "?":stopping=15;break;
case " ":stopping=3;break;
}
str1=str1.substr(1,str1.length-1);
}
}
if(cursorOn>0){
writemes(str2,"");

if(str1==""){clearInterval(timerIDtype);return false;}
}
else{
writemes(str2,cursortype);
}
cursorOn++;
if(cursorOn>5)cursorOn=-5;

}
function writemes(mes,mes2){
if(document.all)document.all(typelayer).innerHTML=mes + mes2;
if(document.getElementById)document.getElementById(typelayer).innerHTML=mes + mes2;
if(document.layers){
with(document.layers[typelayer]){
document.open();
document.write(mes + mes2);
document.close();
}
}
}

//--></script>

[11] azt 2008/09/20 17:06



<A name="#toping"></A>
<!--
<DIV style="position: absolute; top:3; left:3; background-color: #550055;
filter: Alpha(opacity=100,finishopacity=50,style=3);" align=left class="com ll-blue"><b>Notitle</B></DIV>
-->
<TABLE align=center height="100%">
<TR align="center" height="100%">
<TD align="center" valign="center" width="100%" height="100%"><BR>

<div id="typewriter" style="border:outset 0px;" class="dia2 l-blank 18 W-100 B-0 ridge" align="center"></div>
</DIV>

<BR>

</TR>
</TABLE>
<BR>
<BR>

[12] azt 2008/09/20 17:06


<script type="text/javascript">
<!--
function expand(listID) {
if (listID.style.display=="none") {
listID.style.display="";
}
else {
listID.style.display="none";
}
window.event.cancelBubble=true;
}
//-->
</script>
<script type="text/javascript" language="JavaScript1.2">
<!--
self.onError=null;
currentX = currentY = 0;
whichIt = null;
lastScrollX = 0; lastScrollY = 0;
NS = (document.layers) ? 1 : 0;
IE = (document.all) ? 1: 0;
<!-- STALKER CODE -->
function fsq() {
if(IE) { diffY = document.body.scrollTop; diffX = document.body.scrollLeft; }
if(NS) { diffY = self.pageYOffset; diffX = self.pageXOffset; }
if(diffY != lastScrollY) {
percent = .1 * (diffY - lastScrollY);
if(percent > 0) percent = Math.ceil(percent);
else percent = Math.floor(percent);
if(IE) document.all.floater.style.pixelTop += percent;
if(NS) document.floater.top += percent;
lastScrollY = lastScrollY + percent;
}
if(diffX != lastScrollX) {
percent = .1 * (diffX - lastScrollX);
if(percent > 0) percent = Math.ceil(percent);
else percent = Math.floor(percent);
if(IE) document.all.floater.style.pixelLeft += percent;
if(NS) document.floater.left += percent;
lastScrollX = lastScrollX + percent;
}
}
<!-- /STALKER CODE -->
<!-- DRAG DROP CODE -->
function fsq1(x,y) {
stalkerx = document.floater.pageX;
stalkery = document.floater.pageY;
stalkerwidth = document.floater.clip.width;
stalkerheight = document.floater.clip.height;
if( (x > stalkerx && x < (stalkerx+stalkerwidth)) && (y > stalkery && y < (stalkery+stalkerheight))) return true;
else return false;
}

[13] azt 2008/09/20 17:07


function fsq2(e) {
if(IE) {
whichIt = event.srcElement;
while (whichIt.id.indexOf("floater") == -1) {
whichIt = whichIt.parentElement;
if (whichIt == null) { return true; }
}
whichIt.style.pixelLeft = whichIt.offsetLeft;
whichIt.style.pixelTop = whichIt.offsetTop;
currentX = (event.clientX + document.body.scrollLeft);
currentY = (event.clientY + document.body.scrollTop);
} else {
window.captureEvents(Event.MOUSEMOVE);
if(fsq1 (e.pageX,e.pageY)) {
whichIt = document.floater;
StalkerTouchedX = e.pageX-document.floater.pageX;
StalkerTouchedY = e.pageY-document.floater.pageY;
}
}
return true;
}
function fsq3(e) {
if (whichIt == null) { return false; }
if(IE) {
newX = (event.clientX + document.body.scrollLeft);
newY = (event.clientY + document.body.scrollTop);
distanceX = (newX - currentX); distanceY = (newY - currentY);
currentX = newX; currentY = newY;
whichIt.style.pixelLeft += distanceX;
whichIt.style.pixelTop += distanceY;
if(whichIt.style.pixelTop < document.body.scrollTop) whichIt.style.pixelTop = document.body.scrollTop;
if(whichIt.style.pixelLeft < document.body.scrollLeft) whichIt.style.pixelLeft = document.body.scrollLeft;
if(whichIt.style.pixelLeft > document.body.offsetWidth - document.body.scrollLeft - whichIt.style.pixelWidth - 20) whichIt.style.pixelLeft = document.body.offsetWidth - whichIt.style.pixelWidth - 20;
if(whichIt.style.pixelTop > document.body.offsetHeight + document.body.scrollTop - whichIt.style.pixelHeight - 5) whichIt.style.pixelTop = document.body.offsetHeight + document.body.scrollTop - whichIt.style.pixelHeight - 5;
event.returnValue = false;
} else {
whichIt.moveTo(e.pageX-StalkerTouchedX,e.pageY-StalkerTouchedY);
if(whichIt.left < 0+self.pageXOffset) whichIt.left = 0+self.pageXOffset;
if(whichIt.top < 0+self.pageYOffset) whichIt.top = 0+self.pageYOffset;
if( (whichIt.left + whichIt.clip.width) >= (window.innerWidth+self.pageXOffset-17)) whichIt.left = ((window.innerWidth+self.pageXOffset)-whichIt.clip.width)-17;
if( (whichIt.top + whichIt.clip.height) >= (window.innerHeight+self.pageYOffset-17)) whichIt.top = ((window.innerHeight+self.pageYOffset)-whichIt.clip.height)-17;
return false;
}
return false;
}

[14] azt 2008/09/20 17:07


function dropIt() {
whichIt = null;
if(NS) window.releaseEvents (Event.MOUSEMOVE);
return true;
}
<!-- DRAG DROP CODE -->
if(NS) {
window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN);
window.onmousedown = fsq2;
window.onmousemove = fsq3;
window.onmouseup = dropIt;
}
if(IE) {
document.onmousedown = fsq2;
document.onmousemove = fsq3;
document.onmouseup = dropIt;
}
if(NS || IE) action = window.setInterval("fsq()",1);
//-->
</script>

<!--
<div id="floater" style="position: absolute; width: 1; z-index: 10; left: 5; top: 90%; visibility: visible; height: 1;">
<div id="select">
<ul style="cursor:move;position: absolute;background-color: #502255;
width:150px;filter: Alpha(style=2,opacity=1000,finishopacity=50,
startX=0,startY=0,finishX=100,finishY=100)" class="l-blank"><center>
<li class=o><a href=../../001.html>戻る</a></li>
</div>
</ul>
</DIV>
</div>
-->
</HEAD>

</BODY>

</HTML>

[15] azt 2008/09/20 17:11

以上です。
途中の>>9 の5行目でstr+=とやっている所に適当に改行を付けています。(長すぎるとはねられたので)
実際使う場合は一行に直す必要があります。

解読というか取り出し方ですが、
元々のソースの最後でdocument.write(t)を行っていますが、
そのtを取り出すだけです。
divでもtextareaでも書き出せば簡単に取り出せます。
暗号化は3回かけられていますが、基本的に同じ構造なので、document.write部分を書きかえれば複合データを取り出せます。
3回同じように複合化を行えば以上のHTMLが取り出せます。

[16] マリアンヌ 2008/09/21 00:29

aztさん、ありがとうございました。

「取り出す」とありますが、いまいちピンと来ません‥‥。
例えば暗号化されているソースをHTMLに加工する場合、
どのような表記をすればよいか、御存知でしょうか?

「divでもtextareaでも書き出せば」とあり、HTMLで書いた場合、

<HTML>

<HEAD>

<TITLE></TITLE>

</HEAD>

<BODY>

<DIV>
e : J ; @ 9 =y E H G ……(""で囲まれた部分)
</DIV>

</BODY>

</HTML>

上記のような表記で良いのでしょうか?
(かなり違うかもしれません、すみません‥‥。)

「document.write部分を書き換える」とありますが、HTMLの中に
JavaScriptを組み込んだ場合、どのように書き換えれば複合化
(平文化?)できたのでしょうか?

自分ではかなり努力しているつもりなのですが、
質問ばかりでごめんなさい。

[17] azt 2008/09/21 15:30

どうも問題の捉え方が違うようです。
>>0 では複合化を行うjavascriptを書きたいとの事ですが、
この元のコードはブラウザで表示した時点では既に内部的に複合化された後に実行されています。
元のコード自体が複合化の為のjavascriptなんです。
なのでわざわざ新たにプログラムを書く必要はありません。
複合化したデータをどこに出力するか、を書き換えるだけで済みます。
document.writeは端的に言うと再度ブラウザにデータを読み込ませている処理となります。その為ブラウザに情報が表示されますが、そのソースは見る事が出来ません。
ソースを見るにはdocument.writeではなく、別の場所に書き出す必要があります。
javascriptで動的に要素を書き換える方法については調べてやってみて下さい。innerHTMLなどで検索するといいかもしれません。

[18] ω 2008/09/21 16:27

まず、インターネット・エクスプローラのメニュー・バーから
「ツール」→「インターネットオプション」→「セキュリティ」→ 「レベルのカスタマイズ」
と項目をたどり、
「スクリプト」→「アクティブスクリプト」のラジオボタンを「無効にする」に設定する。
ブラウザを一旦終了して、また起動すると、JavaScript が無効になっている。

この状態で、問題の URL を開く。ブラウザには変な表示がでるが、無視して、
「ページ」→「ソースの表示」を行う。
エディタ(たぶん「メモ帳」)で開かれているソースに、適当な「名前を付けて保存」する。
さあ、後は読み放題。

[19] ω 2008/09/21 16:28

読んでみると、不快な暗号文が並んでいるが、
「"」を文字列検索して「s="」の範囲を限定してしまえば、要するに

<SCRIPT LANGAGE="JavaScript">
s="何かやたら長い文字列";
k=89;
t="";
r=0;
for(i=0;i<s.length;i++){
 a=s.charCodeAt(i);
 if(a==36){
  ++i;
  r=1;
  a=s.charCodeAt(i);
 }
 if(a==32){
  ++i;
  a=(s.charCodeAt(i)-48)^k;
 }else if(a==33){
  ++i;
  a=(s.charCodeAt(i)+77)^k;
 }else if(a==35){
  ++i;
  a=(s.charCodeAt(i)+141)^k;
 }else a=a^k;
 if(r==1){
  r=2;
  e=a;
 }else if(r==2){
  r=0;
  t=t+String.fromCharCode(a*256+e);
 }else t=t+String.fromCharCode(a);
}
document.write(t);
</SCRIPT>

であることが判る。何かを document.write している訳だ。
この if else を読んで理解するのは、パスタ好きの人に任せて、
保存したファイルの document.write(t); の箇所を

document.write("<textarea rows=40 cols=120>");
document.write(t);
document.write("</textarea>");

で書き換える。
他の場所は弄らないで、拡張子を「.htm」にした名前を付け、保存する。

[20] ω 2008/09/21 16:30

それを、再び、ブラウザで開く。
このとき、最初に変更したブラウザの「アクティブスクリプト」を
「有効にする」に戻しておくのを忘れずに。

テキストエリアの中に、また不快な文字列が表示される。
これをコピペでエディタに移して、ゆっくり眺めると、
前と全く同じ仕掛けがしてあることが判る。
今度も同じように、document.write(t); の箇所を…

これを三回繰り返すと、四回目にブラウザを開いたところで、
テキストエリアの中に >>8-14 のスクリプトが現われる。
文字列を派手に表示するだけで、害のないスクリプトだから、
ここまでしてソースを読む必要があるかどうかは疑問。
(ここまでしてソースを隠す程のスクリプトであるかどうかも疑問。)

[21] マリアンヌ 2008/09/21 19:37

ωさん、わかりやすい説明をありがとうございました。
試してみたら、4回目でHTMLのソースが見事に表示されました!
こういう解読のやり方があるのか、と目からウロコが落ちました。

>>15 でaztさんのおっしゃっていたことが、やっと理解できたような
気がします。
あと、>>17 も、少しだけですが理解できました。
(aztさんが、ωさんのやり方と同じ方法で解読なさっていたのかは
 わかりませんが‥‥)

でも、皆さんすごい方たちですね。
ソースを見ただけで、xor暗号が何回かけられているかまで
わかってしまうのですから。

私は>>7 を書いた時点で、xor暗号と、それが複数回かけられている
場合もある、という情報を得ていましたが、そのようなことは
「まれ」である、という情報も得ていた後だったので、
そのような暗号がかけられていたとしても、単に1回だけだろうと
思っていました。

これでほんの少しだけですが、パソコンスキルの経験値が
あがったような気がします。

どうもありがとうございました。

[22] 似非右翼オビツ 2019/12/11 19:56 v2/yQU0V8qj

舟橋市中山

[23] エセ右翼 オビツ 2020/03/12 17:26 ff/5YiAW7Gr

昨日の8月15日にいつもの浮浪者のおっさん(60歳)と先日メールくれた汚れ好きの土方のにいちゃん
(45歳)とわし(53歳)の3人で県北にある川の土手の下で盛りあったぜ。
今日は明日が休みなんでコンビニで酒とつまみを買ってから滅多に人が来ない所なんで、
そこでしこたま酒を飲んでからやりはじめたんや。
3人でちんぽ舐めあいながら地下足袋だけになり持って来たいちぢく浣腸を3本ずつ入れあった。
しばらくしたら、けつの穴がひくひくして来るし、糞が出口を求めて腹の中でぐるぐるしている。
浮浪者のおっさんにけつの穴をなめさせながら、兄ちゃんのけつの穴を舐めてたら、
先に兄ちゃんがわしの口に糞をドバーっと出して来た。
それと同時におっさんもわしも糞を出したんや。もう顔中、糞まみれや、
3人で出した糞を手で掬いながらお互いの体にぬりあったり、
糞まみれのちんぽを舐めあって小便で浣腸したりした。ああ~~たまらねえぜ。
しばらくやりまくってから又浣腸をしあうともう気が狂う程気持ちええんじゃ。
浮浪者のおっさんのけつの穴にわしのちんぽを突うずるっ込んでやると
けつの穴が糞と小便でずるずるして気持ちが良い。
にいちゃんもおっさんの口にちんぽ突っ込んで腰をつかって居る。
糞まみれのおっさんのちんぽを掻きながら、思い切り射精したんや。
それからは、もうめちゃくちゃにおっさんと兄ちゃんの糞ちんぽを舐めあい、
糞を塗りあい、二回も男汁を出した。もう一度やりたいぜ。
やはり大勢で糞まみれになると最高やで。こんな、変態親父と糞あそびしないか。
ああ~~早く糞まみれになろうぜ。
岡山の県北であえる奴なら最高や。わしは163*90*53,おっさんは165*75*60、や
糞まみれでやりたいやつ、至急、メールくれや。
土方姿のまま浣腸して、糞だらけでやろうや。

[24] 志保‼️😡💢‼️👎 2020/03/14 09:25 ザ-000,024,717号

はあ‼️又偽物かよ‼️😡💢‼️😡💢‼️
茄子うざ‼️😡💢‼️😡💢‼️😡💢‼️😡💢‼️
テメエ死ねよ早く‼️😡💢‼️誰だよテメエ‼️😡💢‼️死ねよ早く‼️😡💢‼️💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛💢🤛

[ 削除依頼 ]

【コメントをお寄せ下さい。】