javascript
JS逆向基础知识个人总结
函數(shù)相關(guān)
-
函數(shù)自動(dòng)執(zhí)行-1
(function auto(){console.log("自動(dòng)執(zhí)行"); })(); -
函數(shù)自動(dòng)執(zhí)行-2
$(function auto(){console.log("自動(dòng)執(zhí)行"); }) -
函數(shù)調(diào)用
function second(){console.log(first()); }function first(){return "hi there."; } -
函數(shù)的定義-1
function say(){return "定義函數(shù)"; } -
函數(shù)的定義-2
var say = function(){return "定義函數(shù)"; } -
函數(shù)的定義-3
var obj = {"say":function(){return "對(duì)象內(nèi)的成員";} };
Base64 編碼函數(shù)
-
內(nèi)置base64編碼函數(shù) btoa,output : aGVsbG8=
let value = 'hello'; console.log(btoa(value)); -
內(nèi)置base64解碼函數(shù) atob,output : hello
let value = 'aGVsbG8='; console.log(atob(value)); -
第三方庫(kù)實(shí)現(xiàn)(CryptoJS)
const CryptoJS = require("crypto-js"); let value="hello"; let trans=CryptoJS.enc.Utf8.parse(value); let encrypted=CryptoJS.enc.Base64.stringify(trans); console.log(encrypted) -
自己編寫base64編碼算法和解碼算法
function Base64(){this.encode = function(val){//編碼邏輯return val}this.decode = function(val){//解碼邏輯return val} } encrypt = new Base64(); console.log(encrypt.encode("encode"));
JSON 對(duì)象
-
將對(duì)象轉(zhuǎn)換為字符串
var params={"username":"null119","password":"123456" } console.log(JSON.stringify(params)); -
將字符串轉(zhuǎn)換為JSON對(duì)象
var params='{"username":"null119","password":"123456"}'; console.log(JSON.parse(parms));
Array 數(shù)組基本操作
-
定義一個(gè)空數(shù)組-1
let mousePos=[]; -
定義一個(gè)空數(shù)組-2
let mousePos=new Array(); -
向數(shù)組添加元素
mousePos.push([100,50,200]); console.log(mousePos); -
刪除并返回一個(gè)元素
console.log(mousePos.pop()); -
數(shù)組轉(zhuǎn)字符串-1
let mousePos = new Array(); mousePos.push([100,50,123]); console.log(mousePos.join(";")); -
數(shù)組轉(zhuǎn)字符串-2
let mousePos = new Array(); mousePos.push([100,50,123]); console.log(mousePos.toString());
字符和Unicode編碼值互轉(zhuǎn)
-
編碼轉(zhuǎn)字符
let value=String.fromCharCode(72,69,76,76,79); //HELLO console.log(value); -
字符轉(zhuǎn)編碼
let value='h'; console.log(value.charCodeAt());
toString 函數(shù)
-
對(duì)象轉(zhuǎn)字符串
let param=[5,6,8]; console.log(param.toString()); -
字符轉(zhuǎn)二進(jìn)制
let value=6; console.log(value.toString(2)); -
字符轉(zhuǎn)十六進(jìn)制
let value=6; console.log(value.toString(16)); -
布爾值轉(zhuǎn)字符串
let value=false; console.log(value.toString()); -
判斷類型
let arr=[1,2,3]; console.log(toString.call(arr));
Val取值和設(shè)置值
-
設(shè)置對(duì)象的值
<html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){$("button").click(function(){$(":text").val("hello");}); }); </script> </head> <body> <p>Name:<input type="text" name="user" value="Hello world" /></p> <button>改變文本域值</button> </body> </html> -
返回對(duì)象的值
<html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){$("button").click(function(){alert($("input:text").val());}); }); </script> </head> <body> FirstName:<input type="text" name="fname" value="Bill" /><br/> LastName:<input type="text" name="lname" value="Gates" /><br/> <button>獲得第一個(gè)文本域的值</button> </body> </html>
return也是有語(yǔ)法的
-
單行return
function _tokenValue(v){//.....let _token= v.join("-");return _token } console.log(_tokenValue([56,78,33])); -
多行return-1 (return處給了多個(gè)值,但真正返回的只有最后一個(gè))
function first(){console.log("調(diào)用1");return "first"; } let second = function(){console.log("調(diào)用2");return "second"; } function _tokenValue(v){let _token= v.join("-");return first(),second(),_token; } console.log(_tokenValue([56,78,33])); -
多行return-2 (返回依舊是最后一個(gè))
function first(){console.log("調(diào)用1");return "first"; } let second = function(){console.log("調(diào)用2");return "second"; } function _tokenValue(v){let _token= v.join("-");return first(),_token,second(); } console.log(_tokenValue([56,78,33]));
代碼混淆
-
十六進(jìn)制混淆
let objects = {"\x66\x69\x6c\x74\x65\x72": function(){return "\x6c\x74\x65";} } -
Unicode 混淆
let objects = {"\u0073\u0069\u0067\u006e\u0056": function(){return "ENG987KJS732njH7273NH23";} } -
數(shù)組混淆:將字符串存放到數(shù)組中,通過(guò)下標(biāo)訪問(wèn)
let vales = ["sign","publicKey","Base64","encrypt","toString","decode","atob","btoa"]; let url = "http://www.null119.cn" vales[0] ="SI209U+230D86+7NB="; let full = url+"?"+vales[0]+"_"; console.log(vales[0]); console.log(full); -
變量名硬混淆
let _sh78x6 = ["sign","publicKey","Base64","encrypt","toString","decode","atob","btoa"]; let _ac87x5 = "http://www.null119.cn" _sh78x6[0] ="SI209U+230D86+7NB="; let _sh87x6 = _ac87x5+"?"+_sh78x6[0]+"_"; console.log(_sh78x6[0]); console.log(_sh87x6); -
數(shù)組+十六進(jìn)制+Unicode+變量名硬混淆
...
XHR 和 Ajax請(qǐng)求方式
-
Ajax
$.ajax({//構(gòu)造請(qǐng)求頭url: loginurl + "?uuid=" + uuid +"&r=" + Math.random(),type: 'POST',dataType: "text",contentType: "application/x-www-form-urlencoded; charset=utf-8",data: {uuid:$('#uuid').val()},error: function(){//錯(cuò)誤觸發(fā)},success: function(result){//成功返回響應(yīng)正文時(shí)觸發(fā)} }); -
XHR (XMLHttpRequest)
function SendXHR(){var xhr = new XMLHttpRequest(); //實(shí)例化xhr對(duì)象xhr.open('GET','http://www.null119.cn/index.html?p=123') //設(shè)置發(fā)送方法、URLxhr.send(null);//發(fā)送數(shù)據(jù)xhr.onreadystatechange = function(){ //回調(diào)函數(shù),拿到數(shù)據(jù)后執(zhí)行相關(guān)操作if (xhr.readyState==4){console.log(xhr.responseText);}}; }
逆向中偶有,Hook常用
-
apply : 重定義指定對(duì)象,參數(shù)用數(shù)組傳遞
let person = {fullInfo: function(city,country){return this.name + "-" + this.age +"-"+country+"-"+city;} } let person1 = {name:"Jor",age:"25" } console.log(person.fullInfo.apply(person1,["Oslo","Norway"])); -
call : 重定義指定對(duì)象,可以直接傳參數(shù)
let person = {fullInfo: function(city,country){return this.name + "-" + this.age +"-"+country+"-"+city;} } let person1 = {name:"Jor",age:"25" } console.log(person.fullInfo.call(person1,"Oslo","Norway"));
AES
window = this; navigator = {};const JSEncrypt = require("jsencrypt") const value = "123456781"; const key="......"let encrypt = new JSEncrypt.JSEncrypt(); encrypt.setPublicKey(key) let res = encrypt.encrypt(value); console.log(res)RSA
const NodeRSA = require("node-rsa"); const key = new NodeRSA({b:512});const text='hello RSA'; const encrypted = key.encrypt(text,'base64'); const decrypted = key.decrypt(encrypted,'utf8');console.log('encryted:',encrypted); console.log('decryted:',decrypted);CryptoJS 加密庫(kù)
-
AES
const CryptoJS = require("crypto-js");let value = '123456' //待加密字符串 let secret_value = 'af25-87hk=a35v-5'; //密鑰16位 let iv_value = 'af25-87hk=a35v-5'; //初始向量IV 16位//密鑰和向量處理 let secret = CryptoJS.enc.Utf8.parse(secret_value); let iv = CryptoJS.enc.Utf8.parse(iv_value);//加密 let encrypted = CryptoJS.AES.encrypt(value,secret,{iv: iv,//加密模式: CBC,CFB,CTR,ECB,OFB 默認(rèn)CBCmode: CryptoJS.mode.CBC,//填充模式: Pkcs7,Pkcs5padding: CryptoJS.pad.Pkcs7 });//加密結(jié)果轉(zhuǎn)字符串 encrypted = encrypted.toString();//解密,傳入密文、密鑰、向量并設(shè)置加密與填充模式 let decrypted = CryptoJS.AES.decrypt(encrypted,secret,{iv: iv,mode:CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7 });//解密結(jié)果轉(zhuǎn)字符串 decrypted = CryptoJS.enc.Utf8.stringify(decrypted);//打印明文、密文、解密結(jié)果 console.log(value); console.log(encrypted); console.log(decrypted);Base64
const CryptoJS = require("crypto-js");//編碼 let value = "http//www.nul119.cn"; let trans = CryptoJS.enc.Utf8.parse(value); let encrypted = CryptoJS.enc.Base64.stringify(trans);//解碼 let trans_encrypted= CryptoJS.enc.Base64.parse(encrypted); let decrypted = trans_encrypted.toString(CryptoJS.enc.Utf8);//打印明文、編碼結(jié)果、解碼結(jié)果 console.log(value); console.log(encrypted); console.log(decrypted);MD5
const CryptoJS = require("crypto-js");let value="Message"; let encrypted = CryptoJS.MD5(value); console.log(encrypted.toString());
SHA
const CryptoJS = require("crypto-js");let value="message";//加密可切換 SHA1/SHA224/SHA256/SHA384/SHA512 let hash = CryptoJS.SHA256(value);console.log(value); console.log(hash.toString()) //結(jié)果與CryptoJS.enc.Hex相同 console.log(hash.toString(CryptoJS.enc.Hex)); console.log(hash.toString(CryptoJS.enc.Base64));總結(jié)
以上是生活随笔為你收集整理的JS逆向基础知识个人总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【智能制造】工业软件:智能制造的大脑
- 下一篇: 用python的opencv画出一棵树的