题解
下附件,是一个web页面的源码
分析js源码
只粘出了关键代码,前端输出就没粘了
let OOoooOOOoooOOOoo=0;
let OOO000O0OOOOOO = new Array(125, 130, 131, 122, 117, 110, 123, 125, 130, 131, 122, 117, 110, 123, 99, 99, 99, 99);
let s = "";
let OOO000O0O0O2 = false;
function decryptRailFence(cipherText, ooo0oooo) {
const fence = new Array(ooo0oooo);
for (let ooo000OOO = 0; ooo000OOO< ooo0oooo; ooo000OOO++) {
fence[ooo000OOO] = new Array(cipherText.length).fill('.');
}
let row = 0;
let oooo0o0o0 = 1;
for (let ooo000OOO= 0; ooo000OOO < cipherText.length; ooo000OOO++) {
if (row === 0) {
oooo0o0o0 = 1;
} else if (row === ooo0oooo - 1) {
oooo0o0o0 = -1;
}
fence[row][ooo000OOO] = '*';
row += oooo0o0o0;
}
let index = 0;
for (let ooo000OOO = 0; ooo000OOO < ooo0oooo; ooo000OOO++) {
for (let ooo000OOOOOO00o = 0; ooo000OOOOOO00o < cipherText.length; ooo000OOOOOO00o++) {
if (fence[ooo000OOO][ooo000OOOOOO00o] === '*') {
fence[ooo000OOO][ooo000OOOOOO00o] = cipherText[index++];
}
}
}
let oooOOOOO0000O0O0O0 = '';
row = 0;
oooo0o0o0 = 1;
for (let ooo000OOO = 0; ooo000OOO < cipherText.length; ooo000OOO++) {
oooOOOOO0000O0O0O0 += fence[row][ooo000OOO];
if (row === 0) {
oooo0o0o0 = 1;
} else if (row === ooo0oooo - 1) {
oooo0o0o0 = -1;
}
row += oooo0o0o0;
}
return oooOOOOO0000O0O0O0;
}
function fl(e)
{
if(clickb==true)
{
const ooo0oooo = 3;
const OOOO0000O0OO0 = '53X211WH04N';
const Text1 = decryptRailFence(OOOO0000O0OO0, ooo0oooo);
let key = e.key;
if((key<='z'&&key>='a')||(key<='Z'&&key>='A'))
{
let p=a[k[key]];
s = s + p.name;
const intArr = [];
for (let ooo000OOO = 0; ooo000OOO < s.length; ooo000OOO++)
{
const charCode = s.charCodeAt(ooo000OOO);
intArr.push(charCode);
}
if (s.length % 18 == 0)
{
let len = s.length / 18;
for (let ooo000OOO = 0; ooo000OOO < len; ooo000OOO++)
{
for (let ooo000OOOOOO00o = 0; ooo000OOOOOO00o < 18; ooo000OOOOOO00o++)
{
if (ooo000OOOOOO00o < 14)
{
intArr[ooo000OOO + ooo000OOOOOO00o] ^= Text1.charCodeAt(ooo000OOOOOO00o % 7);
intArr[ooo000OOO + ooo000OOOOOO00o] += 10;
}
else
{
intArr[ooo000OOO+ ooo000OOOOOO00o] ^= Text1.charCodeAt(ooo000OOOOOO00o -7);
intArr[ooo000OOO + ooo000OOOOOO00o] += 99;
}
}
}
for (let ooo000OOO = 0; ooo000OOO < s.length; ooo000OOO++)
{
let OOO000O0O0O = 0;
if (intArr[ooo000OOO] == OOO000O0OOOOOO[0])
{
for (let ooo000OOOOOO00o = 0; ooo000OOOOOO00o < OOO000O0OOOOOO.length && ooo000OOO+ ooo000OOOOOO00o < intArr.length; ooo000OOOOOO00o++)
{
if (intArr[ooo000OOO + ooo000OOOOOO00o] == OOO000O0OOOOOO[ooo000OOOOOO00o])
{
OOO000O0O0O++;
}
}
}
if (OOO000O0O0O >= 18) {
OOO000O0O0O2 = true;
break;
}
}
}
分析代码
监听按键盘,按26个字母会进行存储,当存储了18个时就进行运算再比较
decryptRailFence方法是进行w型栅栏解密,第一个参数是加密的字符,第二参数是分几栏
先是对‘’53X211WH04N‘字符串进行w型栅栏解密,结果为5201314WXHN
现对前14个字符与5201314WXHN的前7个字符进行xor,加10
if (ooo000OOOOOO00o < 14)
{
intArr[ooo000OOO + ooo000OOOOOO00o] ^= Text1.charCodeAt(ooo000OOOOOO00o % 7);
intArr[ooo000OOO + ooo000OOOOOO00o] += 10;
}
}
后4个与5201314WXHN的后4个字符进行xor进行xor,加99
else
{
intArr[ooo000OOO+ ooo000OOOOOO00o] ^= Text1.charCodeAt(ooo000OOOOOO00o -7);
intArr[ooo000OOO + ooo000OOOOOO00o] += 99;
}
再与let OOO000O0OOOOOO = new Array(125, 130, 131, 122, 117, 110, 123, 125, 130, 131, 122, 117, 110, 123, 99, 99, 99, 99);进行比较
let OOO000O0O0O = 0;
if (intArr[ooo000OOO] == OOO000O0OOOOOO[0])
{
for (let ooo000OOOOOO00o = 0; ooo000OOOOOO00o < OOO000O0OOOOOO.length && ooo000OOO+ ooo000OOOOOO00o < intArr.length; ooo000OOOOOO00o++)
{
if (intArr[ooo000OOO + ooo000OOOOOO00o] ==OOO000O0OOOOOO[ooo000OOOOOO00o])
{
OOO000O0O0O++;
}
}
}
if (OOO000O0O0O >= 18) {
OOO000O0O0O2 = true;
break;}
脚本:
key='5201314WXHN'
d=[125, 130, 131, 122, 117, 110, 123, 125, 130, 131, 122, 117, 110, 123, 99, 99, 99, 99]
for i in range(1):
for j in range(18):
if j<14:
d[i+j]-=10
d[i+j]^=ord(key[j%7])
else:
d[i+j]-=99
d[i+j]^=ord(key[j-7])
for i in d:
print(chr(i),end='')
FJIAXUEFJIAXUEWXHN
可以再web页面按节奏输入字符,可以弹奏出所念皆星河的前奏,然后会播放所念皆星河(好听,爱听,就喜欢这种逆向)
结语:
26个键对应的话(收藏一下^_^)
我喜欢你,不分日夜,我喜欢你,无关其他,喜欢便是喜欢,多一点不行,少一点也不可以。还有....,其他的键那些都是关于你的声音,
若逢新雪初霁,满月当空下面平铺着皓影,上面流转着亮银,而你带笑地向我走来,月色和雪色之间 ,是第三种绝色 ,与我而言, 日月星辉之中,你是第四种难得。`},
我总是想些无关紧要的事比如宇宙的目的,熬夜与猝死的关系你是否曾爱我,
我想再和你谈谈那只在你七月的暴雨中刚刚落下的鸟,
若是你决定了要来见我请务必提前一周告诉我我好将10200个小时前的相见再反复回想,
我爱你剩余一行笔给你,
我试图用那些漂亮的句子来形容你。但是不行我字字推敲写出长长一段话,你眉眼一弯熠熠生辉,就让我觉得。不行这些文字写不出你眼里的星辰,写不出你唇角的春风无论哪个词,都及不上你半分的惊艳。,
你的双眸有遥远的冬雪,你的微笑有绚烂的夏阳,你一转身便有花开为你,你一低头便有星辰黯然,你在我心里,我便拥有全世界。,
我见过沧海的云,巫峡的雨。 我见过一月的雪覆于白山,又渐变于葱茏。 我在峨眉的林里云兴霞蔚, 一径之后,雾水成露,沾于衣襟。我听过柔橹漂浮,声声入水,又归于沉寂。 我看到春风八里十里,衣袖带花。 无论何时忆起, 它们实在是人生可喜, 但都不如我此刻遇到的你。,
花盛开就是一句,夜漫过就是一篇。黄昏开始书写,黎明是无数的扉页。全世界拼成首诗。我爱你当作最后一行。,
对你的喜欢,大抵是燃烧的星星坠落在海底开成珊瑚,又或是揉碎的白云环绕着山峦流成大河。那种梦幻,不真切,却令人迷醉的心动,就像晚风拥抱月亮,海浪亲吻礁石。,
世界上美好的东西不太多,立秋傍晚从河对岸吹来的风,和二十来岁笑起来要人命的你。,
“在青山绿水之间,我想牵着你的手,走过这座桥,桥上是绿叶红花,桥下是流水人家,桥的那头是青丝,桥的这头是白发。”,
月亮照回湖心野鹤奔向闲云我步入你,
我们或者在月光下闲游,或者在灯光下谈心,手握着手,心对着心,就像一对五十岁的情人。,
草在结它的种子,风在摇它的叶子,我们站着不说话,就十分美好。,
你一眨眼,温驯的小鹿有跳动一下,柔软的暖风有轻拂一下,遥远的星星有闪烁一下,我也有心动,却不止一下。,
星河璀璨,阳光干净,在人间所有美好的存在里,不论是活着或者死去,我总是最爱你。,
我的心是亿万光年恒星爆炸后的残骸,荒烟蔓草,满目疮痍。你来到这里,携着万千欢喜,覆在贫瘠之地上。枯木逄春,从此我的世界里只有为你而绽的名为爱的绝色。,
写信真是一件温柔的事,细腻的小心思就藏在横竖撇捺之中,像是一只害羞的小兽躲在情意绵绵的字里行间,被火漆封印起来,等着解封的那一刻窜出来,跳进启信人眼底的柔波里。,
我把我整个的灵魂都给你,连同它的怪癖,耍小脾气,忽明忽暗,一千八百种坏毛病, 它真讨厌。只有一点好, 爱你,
我一生都是坚定不移的唯物主义者唯有你我希望有来生,
这个世纪疯狂,没人性,腐败。您却一直清醒,温柔,一尘不染。,
纵然万劫不复,纵然相思入骨,我也待你眉眼如初,岁月如故。,
月遇从云,花遇和风,今晚上的夜空很美,我又想你。,
跟你在一起的时光都很耀眼,因为天气好,因为天气不好,因为天气刚刚好,每一天,都很美好。
<我自幼嘴笨,词不达意<但却想给你个浪漫的开局<我喜欢你<本想晚点再告诉你,可我这颗心啊太没耐心%<第一次见面<它就给了我扑通扑通的暗示<若我不拦着< 它就想将这千万星光许诺于你%<我背上行囊往世界深处走去<我看见了星辰与海浪<我见过了月光与夕阳<也览过千万副皮囊% <直到<我遇见你<仿佛就像尘埃遇见了光<爱,产生了形状< % <我愿意为你,写满整个世界的情诗<因为我喜欢你,因为......我也想给你哪怕一点点的浪漫<当代码不止是代码的时候,它就有了新的意义。%<感谢你能看到最后<听我讲着那土的掉渣的情话,<回忆着我身后那碎落一地的青春<有热血,有感动,有受伤,有遗憾%<生活<或许就是这样<平淡如水下<因波澜而不再单调..%<钥匙,是我们输入过程中的字符<是答案<也是追逐
(本人是菜鸟,想找对CTF感兴趣的CTFer,一起交流学习,共同进步,迈向星辰大海!!!!^_^(有兴趣的加扣群:470196890))