Python_CryptoJs_js逆向破解

  • 一、前言
    • 1、Redeme
  • 二、对称加密解密DES
    • 1、对称加密与非对称加密
    • 2、DES对称加密介绍
    • 3、实现DES的4种模式
    • 4、关于补位PKCS7和PKCS5区别
  • 三、网站案例分析
  • 四、通过Python还原CryptoJS
    • 1、DES_CBC模式参数
    • 2、Python将CryptoJS的DES还原

一、前言

1、Redeme
  • 如果对DES加密解密了解的话,可以跳过目录二,直接看目录三目录四实例操作;
  • 简单的DES案例可以看这篇文章
  • 本博文主要是对js里面CryptoJS进行逆向,并用python进行还原实现,只用于js逆向交流学习

二、对称加密解密DES

1、对称加密与非对称加密
  • 对称加密:加密和解密时使用同一个密钥,加密速度非常快,适合经常发送数据的场合;缺点是密钥的传输比较麻烦;
#mermaid-svg-SlkuRGQ2UItn5Oj6 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .label text{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .node rect,#mermaid-svg-SlkuRGQ2UItn5Oj6 .node circle,#mermaid-svg-SlkuRGQ2UItn5Oj6 .node ellipse,#mermaid-svg-SlkuRGQ2UItn5Oj6 .node polygon,#mermaid-svg-SlkuRGQ2UItn5Oj6 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .node .label{text-align:center;fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .node.clickable{cursor:pointer}#mermaid-svg-SlkuRGQ2UItn5Oj6 .arrowheadPath{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edgeLabel rect{opacity:0.9}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edgeLabel span{color:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .cluster text{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-SlkuRGQ2UItn5Oj6 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-SlkuRGQ2UItn5Oj6 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-SlkuRGQ2UItn5Oj6 .actor-line{stroke:grey}#mermaid-svg-SlkuRGQ2UItn5Oj6 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .sequenceNumber{fill:#fff}#mermaid-svg-SlkuRGQ2UItn5Oj6 #sequencenumber{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .messageText{fill:#333;stroke:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-SlkuRGQ2UItn5Oj6 .labelText,#mermaid-svg-SlkuRGQ2UItn5Oj6 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-SlkuRGQ2UItn5Oj6 .loopText,#mermaid-svg-SlkuRGQ2UItn5Oj6 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-SlkuRGQ2UItn5Oj6 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-SlkuRGQ2UItn5Oj6 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-SlkuRGQ2UItn5Oj6 .noteText,#mermaid-svg-SlkuRGQ2UItn5Oj6 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-SlkuRGQ2UItn5Oj6 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-SlkuRGQ2UItn5Oj6 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-SlkuRGQ2UItn5Oj6 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-SlkuRGQ2UItn5Oj6 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .section{stroke:none;opacity:0.2}#mermaid-svg-SlkuRGQ2UItn5Oj6 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .section2{fill:#fff400}#mermaid-svg-SlkuRGQ2UItn5Oj6 .section1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .section3{fill:#fff;opacity:0.2}#mermaid-svg-SlkuRGQ2UItn5Oj6 .sectionTitle0{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .sectionTitle1{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .sectionTitle2{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .sectionTitle3{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-SlkuRGQ2UItn5Oj6 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .grid path{stroke-width:0}#mermaid-svg-SlkuRGQ2UItn5Oj6 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .task{stroke-width:2}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskText:not([font-size]){font-size:11px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .task.clickable{cursor:pointer}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskText0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskText1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskText2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskText3{fill:#fff}#mermaid-svg-SlkuRGQ2UItn5Oj6 .task0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .task1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .task2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutside0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutside2{fill:#000}#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutside1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .taskTextOutside3{fill:#000}#mermaid-svg-SlkuRGQ2UItn5Oj6 .active0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .active1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .active2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeText0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeText1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeText2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeText3{fill:#000 !important}#mermaid-svg-SlkuRGQ2UItn5Oj6 .done0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .done1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .done2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneText0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneText1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneText2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneText3{fill:#000 !important}#mermaid-svg-SlkuRGQ2UItn5Oj6 .crit0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .crit1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .crit2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCrit0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCrit1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCrit2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCrit0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCrit1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCrit2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-SlkuRGQ2UItn5Oj6 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .milestoneText{font-style:italic}#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCritText0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCritText1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCritText2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .doneCritText3{fill:#000 !important}#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCritText0,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCritText1,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCritText2,#mermaid-svg-SlkuRGQ2UItn5Oj6 .activeCritText3{fill:#000 !important}#mermaid-svg-SlkuRGQ2UItn5Oj6 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.classGroup text .title{font-weight:bolder}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.clickable{cursor:pointer}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-SlkuRGQ2UItn5Oj6 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-SlkuRGQ2UItn5Oj6 .dashed-line{stroke-dasharray:3}#mermaid-svg-SlkuRGQ2UItn5Oj6 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 .commit-id,#mermaid-svg-SlkuRGQ2UItn5Oj6 .commit-msg,#mermaid-svg-SlkuRGQ2UItn5Oj6 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-SlkuRGQ2UItn5Oj6 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-SlkuRGQ2UItn5Oj6 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-SlkuRGQ2UItn5Oj6 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-SlkuRGQ2UItn5Oj6 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edgeLabel text{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SlkuRGQ2UItn5Oj6 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-SlkuRGQ2UItn5Oj6 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-SlkuRGQ2UItn5Oj6 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-SlkuRGQ2UItn5Oj6 .note-edge{stroke-dasharray:5}#mermaid-svg-SlkuRGQ2UItn5Oj6 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-SlkuRGQ2UItn5Oj6 .error-icon{fill:#522}#mermaid-svg-SlkuRGQ2UItn5Oj6 .error-text{fill:#522;stroke:#522}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-SlkuRGQ2UItn5Oj6 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-SlkuRGQ2UItn5Oj6 .marker{fill:#333}#mermaid-svg-SlkuRGQ2UItn5Oj6 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-SlkuRGQ2UItn5Oj6 {color: rgba(0, 0, 0, 0.75);font: ;}

加密_密钥K
解密_密钥K
明文
密文
  • 非对称加密:加密和解密时使用不同密钥,是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合,优点是密钥传输方便;常见的非对称加密算法为RSA、ECC和EIGamal;
#mermaid-svg-sEwfPRb3sVoxxMdq .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .label text{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .node rect,#mermaid-svg-sEwfPRb3sVoxxMdq .node circle,#mermaid-svg-sEwfPRb3sVoxxMdq .node ellipse,#mermaid-svg-sEwfPRb3sVoxxMdq .node polygon,#mermaid-svg-sEwfPRb3sVoxxMdq .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-sEwfPRb3sVoxxMdq .node .label{text-align:center;fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .node.clickable{cursor:pointer}#mermaid-svg-sEwfPRb3sVoxxMdq .arrowheadPath{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-sEwfPRb3sVoxxMdq .flowchart-link{stroke:#333;fill:none}#mermaid-svg-sEwfPRb3sVoxxMdq .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-sEwfPRb3sVoxxMdq .edgeLabel rect{opacity:0.9}#mermaid-svg-sEwfPRb3sVoxxMdq .edgeLabel span{color:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-sEwfPRb3sVoxxMdq .cluster text{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-sEwfPRb3sVoxxMdq .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-sEwfPRb3sVoxxMdq text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-sEwfPRb3sVoxxMdq .actor-line{stroke:grey}#mermaid-svg-sEwfPRb3sVoxxMdq .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-sEwfPRb3sVoxxMdq #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .sequenceNumber{fill:#fff}#mermaid-svg-sEwfPRb3sVoxxMdq #sequencenumber{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq #crosshead path{fill:#333;stroke:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .messageText{fill:#333;stroke:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-sEwfPRb3sVoxxMdq .labelText,#mermaid-svg-sEwfPRb3sVoxxMdq .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-sEwfPRb3sVoxxMdq .loopText,#mermaid-svg-sEwfPRb3sVoxxMdq .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-sEwfPRb3sVoxxMdq .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-sEwfPRb3sVoxxMdq .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-sEwfPRb3sVoxxMdq .noteText,#mermaid-svg-sEwfPRb3sVoxxMdq .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-sEwfPRb3sVoxxMdq .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-sEwfPRb3sVoxxMdq .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-sEwfPRb3sVoxxMdq .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-sEwfPRb3sVoxxMdq .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .section{stroke:none;opacity:0.2}#mermaid-svg-sEwfPRb3sVoxxMdq .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-sEwfPRb3sVoxxMdq .section2{fill:#fff400}#mermaid-svg-sEwfPRb3sVoxxMdq .section1,#mermaid-svg-sEwfPRb3sVoxxMdq .section3{fill:#fff;opacity:0.2}#mermaid-svg-sEwfPRb3sVoxxMdq .sectionTitle0{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .sectionTitle1{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .sectionTitle2{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .sectionTitle3{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-sEwfPRb3sVoxxMdq .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .grid path{stroke-width:0}#mermaid-svg-sEwfPRb3sVoxxMdq .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-sEwfPRb3sVoxxMdq .task{stroke-width:2}#mermaid-svg-sEwfPRb3sVoxxMdq .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .taskText:not([font-size]){font-size:11px}#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-sEwfPRb3sVoxxMdq .task.clickable{cursor:pointer}#mermaid-svg-sEwfPRb3sVoxxMdq .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-sEwfPRb3sVoxxMdq .taskText0,#mermaid-svg-sEwfPRb3sVoxxMdq .taskText1,#mermaid-svg-sEwfPRb3sVoxxMdq .taskText2,#mermaid-svg-sEwfPRb3sVoxxMdq .taskText3{fill:#fff}#mermaid-svg-sEwfPRb3sVoxxMdq .task0,#mermaid-svg-sEwfPRb3sVoxxMdq .task1,#mermaid-svg-sEwfPRb3sVoxxMdq .task2,#mermaid-svg-sEwfPRb3sVoxxMdq .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutside0,#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutside2{fill:#000}#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutside1,#mermaid-svg-sEwfPRb3sVoxxMdq .taskTextOutside3{fill:#000}#mermaid-svg-sEwfPRb3sVoxxMdq .active0,#mermaid-svg-sEwfPRb3sVoxxMdq .active1,#mermaid-svg-sEwfPRb3sVoxxMdq .active2,#mermaid-svg-sEwfPRb3sVoxxMdq .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-sEwfPRb3sVoxxMdq .activeText0,#mermaid-svg-sEwfPRb3sVoxxMdq .activeText1,#mermaid-svg-sEwfPRb3sVoxxMdq .activeText2,#mermaid-svg-sEwfPRb3sVoxxMdq .activeText3{fill:#000 !important}#mermaid-svg-sEwfPRb3sVoxxMdq .done0,#mermaid-svg-sEwfPRb3sVoxxMdq .done1,#mermaid-svg-sEwfPRb3sVoxxMdq .done2,#mermaid-svg-sEwfPRb3sVoxxMdq .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-sEwfPRb3sVoxxMdq .doneText0,#mermaid-svg-sEwfPRb3sVoxxMdq .doneText1,#mermaid-svg-sEwfPRb3sVoxxMdq .doneText2,#mermaid-svg-sEwfPRb3sVoxxMdq .doneText3{fill:#000 !important}#mermaid-svg-sEwfPRb3sVoxxMdq .crit0,#mermaid-svg-sEwfPRb3sVoxxMdq .crit1,#mermaid-svg-sEwfPRb3sVoxxMdq .crit2,#mermaid-svg-sEwfPRb3sVoxxMdq .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-sEwfPRb3sVoxxMdq .activeCrit0,#mermaid-svg-sEwfPRb3sVoxxMdq .activeCrit1,#mermaid-svg-sEwfPRb3sVoxxMdq .activeCrit2,#mermaid-svg-sEwfPRb3sVoxxMdq .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-sEwfPRb3sVoxxMdq .doneCrit0,#mermaid-svg-sEwfPRb3sVoxxMdq .doneCrit1,#mermaid-svg-sEwfPRb3sVoxxMdq .doneCrit2,#mermaid-svg-sEwfPRb3sVoxxMdq .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-sEwfPRb3sVoxxMdq .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-sEwfPRb3sVoxxMdq .milestoneText{font-style:italic}#mermaid-svg-sEwfPRb3sVoxxMdq .doneCritText0,#mermaid-svg-sEwfPRb3sVoxxMdq .doneCritText1,#mermaid-svg-sEwfPRb3sVoxxMdq .doneCritText2,#mermaid-svg-sEwfPRb3sVoxxMdq .doneCritText3{fill:#000 !important}#mermaid-svg-sEwfPRb3sVoxxMdq .activeCritText0,#mermaid-svg-sEwfPRb3sVoxxMdq .activeCritText1,#mermaid-svg-sEwfPRb3sVoxxMdq .activeCritText2,#mermaid-svg-sEwfPRb3sVoxxMdq .activeCritText3{fill:#000 !important}#mermaid-svg-sEwfPRb3sVoxxMdq .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-sEwfPRb3sVoxxMdq g.classGroup text .title{font-weight:bolder}#mermaid-svg-sEwfPRb3sVoxxMdq g.clickable{cursor:pointer}#mermaid-svg-sEwfPRb3sVoxxMdq g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-sEwfPRb3sVoxxMdq g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-sEwfPRb3sVoxxMdq .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-sEwfPRb3sVoxxMdq .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-sEwfPRb3sVoxxMdq .dashed-line{stroke-dasharray:3}#mermaid-svg-sEwfPRb3sVoxxMdq #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq .commit-id,#mermaid-svg-sEwfPRb3sVoxxMdq .commit-msg,#mermaid-svg-sEwfPRb3sVoxxMdq .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-sEwfPRb3sVoxxMdq g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-sEwfPRb3sVoxxMdq g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-sEwfPRb3sVoxxMdq g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-sEwfPRb3sVoxxMdq .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-sEwfPRb3sVoxxMdq .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-sEwfPRb3sVoxxMdq .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-sEwfPRb3sVoxxMdq .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-sEwfPRb3sVoxxMdq .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-sEwfPRb3sVoxxMdq .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-sEwfPRb3sVoxxMdq .edgeLabel text{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-sEwfPRb3sVoxxMdq .node circle.state-start{fill:black;stroke:black}#mermaid-svg-sEwfPRb3sVoxxMdq .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-sEwfPRb3sVoxxMdq #statediagram-barbEnd{fill:#9370db}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-state .divider{stroke:#9370db}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-sEwfPRb3sVoxxMdq .note-edge{stroke-dasharray:5}#mermaid-svg-sEwfPRb3sVoxxMdq .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-sEwfPRb3sVoxxMdq .error-icon{fill:#522}#mermaid-svg-sEwfPRb3sVoxxMdq .error-text{fill:#522;stroke:#522}#mermaid-svg-sEwfPRb3sVoxxMdq .edge-thickness-normal{stroke-width:2px}#mermaid-svg-sEwfPRb3sVoxxMdq .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-sEwfPRb3sVoxxMdq .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-sEwfPRb3sVoxxMdq .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-sEwfPRb3sVoxxMdq .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-sEwfPRb3sVoxxMdq .marker{fill:#333}#mermaid-svg-sEwfPRb3sVoxxMdq .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-sEwfPRb3sVoxxMdq {color: rgba(0, 0, 0, 0.75);font: ;}

加密_密钥A _公钥
解密_密钥B_私钥
明文
密文
2、DES对称加密介绍
  • Des对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法;
  • DES只是个基本算法,实现DES有几种模式,主要有ECB、CBC、CFB、OFB:
3、实现DES的4种模式
  • ECB模式(电子密码本模式:Electronic codebook):ECB是最简单的块密码加密模式,加密前根据加密块大小(如DES为64位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理
  • CBC模式(密码分组链接:Cipher-block chaining):CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或
  • CFB模式(密文反馈:Cipher feedback):与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文(Stream Cipher)
  • OFB模式(输出反馈:Output feedback):OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的
4、关于补位PKCS7和PKCS5区别
  • PKCS7Padding和PKCS5Padding实际只是协议不一样
  • 根据相关资料说明:PKCS5Padding明确定义了加密块是8字节,PKCS7Padding加密快可以是1-255之间
  • 但是封装的DES算法默认都是8字节,所以可以认为PKCS7和PKCS5一样
  • 数据补位实际是在数据不满8字节的倍数,才补充到8字节的倍数的填充过程

三、网站案例分析

  • 具体分析暂不介绍,分析网址为空气质量 ,类似这个分析空气质量js逆向里面有相关DES算法
  • 坑位:一年前看了空气质量逆向解析的文章,写着要反混淆,因为没有自己实操;觉得完全可以通过调试找到还原后VM里面的js真实脚本,或者是通过调用栈定位调试到VM里面的js脚本;
  • 排坑:直到最近才发现,还是要去根据看网页network里面的这个混淆的js脚本https://www.aqistudy.cn/js/encrypt_eQI0SRlwyF5D.min.js ,将其反混淆,再去分析,
  • 原因:为啥呢? 因为该网站的加密解密js脚本是动态变化的,所以你必须拿到每次响应的混淆js脚本,将其还原,去取密钥和iv;如果将密钥key,iv以及appid写死的话,到下一次就不能用了;如果你直接把当次分析的js保存下来,下次再通过该js来解析的话,也会失效的
  • 一个可以将js反混淆的网站
  • 最后一句,空气质量这网站真的不错,将混淆、md5、base64、aes、des加密解密全部应用上了,还有最新加的页面反调试,是一个非常值得学习逆向的网站

四、通过Python还原CryptoJS

  • 如下Python还原已将密钥等参数写死,实际学习中,需看网站实际情况
1、DES_CBC模式参数
  • key:加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来,必须是8位字节
  • 字符串:加密或解密的参数,字节长度需要是16位的倍数
  • 模式:des 加密常用的有 ECB 和 CBC 模式等
  • iv:偏移量 ,这个参数在 ECB 模式下不需要,在 CBC 模式下需要。
2、Python将CryptoJS的DES还原
  • python调用js三种方式:要么还原js;要么通过execjs脚本执行,要么通过node布服务执行;
  • python安装Cryptojs的库:pip install pyDes
  • 由于最近很多人关注了这篇文章,把已总结的python还原aes、rsa、des等代码做了个汇总,可点击详见
  • 简单的DES案例可以看这篇文章
import base64
from pyDes import des, CBC, PAD_PKCS5
import jsondef des_cbc_encrypt_text(decrypt_text: str, key: str, iv: str) -> str:"""加密DES_CBC明文:param decrypt_text: 明文:param key: 密钥:param iv: 密钥偏移量:return: 加密后的数据"""des_obj = des(key[:8].encode('utf-8'), CBC, iv.encode('utf-8'), pad=None, padmode=PAD_PKCS5)encrypt_text = des_obj.encrypt(decrypt_text)encrypt_text = str(base64.encodebytes(encrypt_text), encoding='utf-8').replace("\n", "")return encrypt_textdef des_cbc_decrypt_js_text(encrypt_text: str, key: str, iv: str) -> str:"""解密DES_CBC密文:param encrypt_text: 密文:param key: 秘钥:param iv:秘钥便宜量:return:解密后的数据"""decode_encrypt_text = base64.b64decode(encrypt_text)des_obj = des(key[:8].encode('utf-8'), CBC, iv.encode('utf-8'), pad=None, padmode=PAD_PKCS5)decrypt_text = des_obj.decrypt(decode_encrypt_text, padmode=PAD_PKCS5).decode('utf8')return decrypt_text# DES_CBC加密模式
param = {"appId": "cf997823ce9425ec88a91bba9c188ca5", "method": "GETDATA", "timestamp": 1599713841621, "clienttype": "WEB", "object": {"city": "杭州"}, "secret": "1c55273cdbb5c59872f74d9bb90484b7"}
decrypt_str = str(base64.encodebytes(json.dumps(param, separators=(',', ':')).encode("utf-8")), encoding='utf-8')
key_str = "86b4104a75dd865f"
iv_str = "bcefc965"
encrypt_str = des_cbc_encrypt_text(decrypt_str, key_str, iv_str)
print(f"DES_CBC加密: {encrypt_str}")# DES_CBC解密模式
encrypt_str = "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"
key_str = "5fd7461e72c4b59d"
iv_str = "6168508f"
decrypt_str = des_cbc_decrypt_js_text(encrypt_str, key_str, iv_str)
print(f"DES_CBC解密: {decrypt_str}")# base64解密
print(base64.b64decode(decrypt_str).decode("utf-8"))

Python还原CryptoJs_DES_CBC模式_js逆向学习相关推荐

  1. Python灰帽子--黑客与逆向工程师的Python编程之道 笔记,过程问题解决

    ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑电脑端的可以看看目录 跟着学习进度不断更新中....(因为懒,没更新了,也不打算继续更新文章了......) power by <p ...

  2. [安全攻防进阶篇] 四.逆向分析之条件语句和循环语句源码还原及流程控制逆向

    从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...

  3. JS逆向学习笔记 - 持续更新中

    JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...

  4. Python菜鸟入门:day16编程学习

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  5. python三大圣经-读书分享全网学习资源大合集,推荐Python学习手册等三本书「01」...

    0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.我是谁 我是一个使用python超10 ...

  6. Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计

    Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 文章目录 Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 0.前言 1.研究问题的描 ...

  7. 数据载入、存储及文件格式——《利用python数据分析》第六章学习

    数据载入.存储及文件格式--<利用python数据分析>第六章学习 前言 这次带来第六章的学习笔记,希望这次效率高点,快点写完. 代码环境这次小升级,Pycharm 2021.3 + An ...

  8. Python灰帽子——黑客与逆向工程师的Python编程之道pdf百度云

    Python灰帽子--黑客与逆向工程师的Python编程之道 内容简介 <Python灰帽子:黑客与逆向工程师的Python编程之道>是由知名安全机构Immunity Inc的资深黑帽Ju ...

  9. 画【Python折线图】的一百个学习报告(三、自动生成单一数据折线图)

    画[Python折线图]的一百个学习报告(三.自动生成单一数据折线图) 目录 画[Python折线图]的一百个学习报告(三.自动生成单一数据折线图) 前言 学习环境 探究目标 分析过程 实践过程 成果 ...

最新文章

  1. 用C++开发Web应用
  2. web前端培训之Javascript如何改变数组的长度?
  3. StreamBox Ripper 将rm转mp3时候出现g2支持的问题
  4. Fiori elements:when smart template is entered for first time, no data filled
  5. 美团大脑:知识图谱的建模方法及其应用
  6. 编写C语言代码,实现以下功能:输入平面上两个点P1(x1,y1)和P2(x2,y2)的坐标,以这两个点为左上角和右下角可以确定一个矩形,输出这个矩形的周长。要求平面上点的坐标和矩形都用结构体来表示。
  7. js如何提高for循环的效率_让你瞬间提高工作效率的常用js函数汇总
  8. group by两个条件
  9. org.apache.tomcat.jni.LibraryNotFoundError tcnative-1.dll 异常
  10. [Linux]使用宝塔面板做负载均衡时遇到的问题和解决办法
  11. linux新建两个工作组,linux添加工作组
  12. Linux 2.6 和安卓一样吗,Linux2.4和Linux2.6设备驱动的一些区别
  13. 综合布线系统工程施工管理
  14. 监控手机屏幕、监控电脑屏幕方案
  15. 微信小游戏可视化开发工具
  16. 哀其不幸的墨西哥人工智能
  17. layui实现动态多级菜单
  18. win10系统声音很大,微信等应用声音很小的问题
  19. Photoshop序列号
  20. opencv hsv(hsb)与hsl的区别

热门文章

  1. JS类教程 Lynda中文
  2. 杭州电子科技大学acm---2010
  3. 搭配购买——C++详解
  4. AD20使用技巧和笔记
  5. ffplay工具命令使用技巧浅析
  6. 如何判断是不是一个网段
  7. Octopus FS 论文学习索引
  8. ORACLE子查询的多种用法
  9. 牛叔说电影-圣堂四骑士
  10. 人工智能的前世今生,别被满大街的人工智能所迷惑