学习js逆向笔记

This commit is contained in:
luzhisheng 2021-09-23 18:40:11 +08:00
parent 53c3b58cba
commit 6352281fd5
5 changed files with 73 additions and 8 deletions

View File

@ -0,0 +1,11 @@
# js 默认支持unicode
原始代码
var ayf = 1;
AA加密
゚ω゚ノ= /`m´)ノ ~┻━┻ //*´sojson.com*/ ['_']; 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) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚o゚])(゚Θ゚))((゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚o゚]);
测试网站: https://www.sojson.com/aaencode.html

View File

@ -0,0 +1,49 @@
# btoa 和 atob
* btoa 编码
* atob 解码
编写加密程序,这样变量 ayf 和 BCM 就被加密了
// YXlm == ayf QkNN == BCM
var xxx = ['YXlm', 'QkNN']
var ayf = 1;
var BCM = "0";
// atob解码
function x1(id){
return atob(xxx[id])
}
// 混淆的变量名称
console.log(window[x1(1)]);
# eval混淆
我们知道浏览器自带v8引擎eval的作用其实很简单就是把一段字符串传递给v8引擎由v8引擎将这段字符串解释成Javascript代码并且执行他。
<script type="text/javascript">
eval("alert(1+1)");
<script>
这样我们就可以用 btoa 加密 console.log(window[x1(1)]); 方法
btoa("window[x1(1)]")
输出:
"d2luZG93W3gxKDEpXQ=="
执行
eval(atob("d2luZG93W3gxKDEpXQ=="))
也能得到结果
也可以将 atob 赋值给自定义的变量,如下
function x(id){
window.ayf = atob;
}
全局变量 ayf 就可以变成解密函数 atob
eval 混淆严重的缺陷,调试的时候直接进入 eval 的虚拟空间,就能直接进入运行的代码程序

View File

@ -0,0 +1,2 @@
/* */

View File

@ -89,4 +89,10 @@ js 中的‘:’是对象中的属性
这在是加密方法 这在是加密方法
utils.md5(args.params.password) utils.md5(args.params.password)
我们全局搜索 utils=,发现只有一个地方有‘= ,这里可以判断utils是一个全局变量 [搜狐md5全扣.js](./搜狐md5全扣.js) 我们全局搜索 utils=,发现只有一个地方有‘= ,找到你想要的变量 utils 将其变成全局变量
utils = {....}
window.ayf = utils;
var isSohu = /\.sohu.com/.test(location.host)
[搜狐md5全扣.js](./搜狐md5全扣.js)

View File

@ -1,4 +1,3 @@
!function(window, factory) { !function(window, factory) {
"undefined" != typeof module && module.exports ? module.exports = factory(window) : "function" == typeof define && define.amd ? define(function() { "undefined" != typeof module && module.exports ? module.exports = factory(window) : "function" == typeof define && define.amd ? define(function() {
return factory(window) return factory(window)
@ -201,7 +200,8 @@
return hex_md5(args) return hex_md5(args)
} }
} }
, isSohu = /\.sohu.com/.test(location.host) window.ayf = utils;
var isSohu = /\.sohu.com/.test(location.host)
, browser = function() { , browser = function() {
var w = window var w = window
, ver = w.opera ? opera.version().replace(/\d$/, "") - 0 : parseFloat((/(?:IE |fox\/|ome\/|ion\/)(\d+\.\d)/.exec(navigator.userAgent) || [, 0])[1]); , ver = w.opera ? opera.version().replace(/\d$/, "") - 0 : parseFloat((/(?:IE |fox\/|ome\/|ion\/)(\d+\.\d)/.exec(navigator.userAgent) || [, 0])[1]);
@ -450,6 +450,3 @@
window.SohuPassport = SohuPassport, window.SohuPassport = SohuPassport,
SohuPassport SohuPassport
}); });
console.log(utils.md5("123456"));