JS逆向|AAEncode还原代码分享
【摘要】
关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
一.实战地址
这里我使用 网洛者 - 反反爬虫练习平台 的第三题作为实例进行讲解,地址:
http://spider.wangluozhe.com/challenge/3
抓包后发现有个 ...
关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
一.实战地址
这里我使用 网洛者 - 反反爬虫练习平台 的第三题作为实例进行讲解,地址:
http://spider.wangluozhe.com/challenge/3
抓包后发现有个 _signature 参数:
全局搜索后,定位到这里:
上面有个 get_sign 函数,跟进去看看:
红色箭头的位置就是 AAEncode,这种代码没人能看懂,一般复制到控制台运行。将实参和括号去掉,控制台运行后:
可以看到 window.sign的赋值就在这里。具体的请求就不在这里讲了。
好像没用到代码来还原AAEncode。
那这里就结束了?
其实不然,可以考虑这样的一种情况:
加密的参数是动态的js返回的,而动态的js又被AAEncode加密了,或者某个字段被混淆了,而且请求一次变化一次,这是无法在控制台运行的,因此可以写个代码将其还原,然后提取有效信息即可。
二.还原源码
这里我直接给出大佬写好的代码:
-
# -*- coding: utf-8 -*-
-
import re
-
class AAencode():
-
b = [
-
"(c^_^o)",
-
"(゚Θ゚)",
-
"((o^_^o) - (゚Θ゚))",
-
"(o^_^o)",
-
"(゚ー゚)",
-
"((゚ー゚) + (゚Θ゚))",
-
"((o^_^o) +(o^_^o))",
-
"((゚ー゚) + (o^_^o))",
-
"((゚ー゚) + (゚ー゚))",
-
"((゚ー゚) + (゚ー゚) + (゚Θ゚))",
-
"(゚Д゚) .゚ω゚ノ",
-
"(゚Д゚) .゚Θ゚ノ",
-
"(゚Д゚) ['c']",
-
"(゚Д゚) .゚ー゚ノ",
-
"(゚Д゚) .゚Д゚ノ",
-
"(゚Д゚) [゚Θ゚]"
-
]
-
-
-
def __init__(self):
-
pass
-
-
-
def encode(self, text):
-
r = "゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); "
-
if re.match("ひだまりスケッチ×(365|356)\s*来週も見てくださいね[!!]", text):
-
r += "X=_=3; "
-
r += "\r\n\r\n X / _ / X < \"来週も見てくださいね!\";\r\n\r\n"
-
r += "(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);" +\
-
"(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] " +\
-
",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] " +\
-
",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];" +\
-
"(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];" +\
-
"(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];" +\
-
"(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + " +\
-
"((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+" +\
-
"((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+" +\
-
"((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+" +\
-
"((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];" +\
-
"(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+" +\
-
"((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+" +\
-
"((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; " +\
-
"(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\'; " +\
-
"(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];" + \
-
"(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];" +\
-
"(゚Д゚) [゚o゚]='\\\"';" + \
-
"(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+"
-
r += "(゚Д゚)[゚o゚]+ "
-
for i in text:
-
n = ord(i)
-
t = "(゚Д゚)[゚ε゚]+"
-
if n <= 127:
-
m = '%o' % n
-
for j in m:
-
t += self.b[int(j)] + "+ "
-
else:
-
t += "(o゚ー゚o)+ "
-
m = "%x" % n
-
m = ("000" + m)[-4:]
-
for j in m:
-
t += self.b[int(j, 16)] + "+ "
-
r += t
-
r += "(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');"
-
return r
-
-
-
def decode(self, text):
-
for i in range(len(self.b)):
-
if i <= 7:
-
text = text.replace(self.b[i] + "+ ", str(i))
-
else:
-
text = text.replace(self.b[i] + "+ ", "%x" % i)
-
text = text.replace("(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');", "")
-
rs = text.split("(゚Д゚)[゚ε゚]+")
-
print(rs[1:])
-
t = ""
-
for i in rs[1:]:
-
if i.startswith("(o゚ー゚o)+ "):
-
t += chr(int(i[9:], 16))
-
else:
-
t += chr(int(i, 8))
-
return t
-
-
-
-
-
AA = AAencode()
-
print(AA.decode("""゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');"""))
在此感谢,可直接运行,需要的自取吧。
另外一个大佬写了个js版本的,能兼容更多情况,由于文件太多,我发在星球里了,如果你需要学习研究,可以加我微信私聊获取。
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/124418498
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)