文章目录

  • 引言
  • 本文主要工作
  • 完整代码
    • 编码
    • 解码
  • 参考资料

引言

偶然发现了一种有趣的编码方法,这种方法的特点是:一个明文可能得到多个密文,但一个密文可以得到唯一的明文。于是我们希望把这种方法学会,并用python复现。我们要逆的网站:http://z.duoluosb.com/,该网站没有特意做反调试,可以说难度很小。

作者:hans774882968以及hans774882968以及hans774882968

本文52pojie:https://www.52pojie.cn//thread-1690132-1-1.html

本文juejin:https://juejin.cn/post/7145144041741500447/

本文csdn:https://blog.csdn.net/hans774882968/article/details/126945146

本文主要工作

去看一下按钮绑定的click事件,并打下断点,很容易就能定位这些函数:

a.shzyhxjzgEncode = function(t) {return o(k(h(t)))
}function h(t) {var u = /[A-Za-z0-9\-\_\.\!\~\*\'\(\)]/g, w = t.replace(u, function(z) {return z.codePointAt(0).toString(16)}), x = encodeURIComponent(w), y = x.replace(/%/g, '').toUpperCase();return y
}function k(t) {f('string' == typeof t);var u = [], _iteratorNormalCompletion2 = !0, _didIteratorError2 = !1, _iteratorError2 = void 0;try {for (var x, w = t[Symbol.iterator](); !(_iteratorNormalCompletion2 = (x = w.next()).done); _iteratorNormalCompletion2 = !0) {var y = x.value, z = Number.parseInt(y, 16);10 > z ? u.push(z) : g() ? (u.push(10),u.push(z - 10)) : (u.push(11),u.push(z - 6))}} catch (A) {_didIteratorError2 = !0,_iteratorError2 = A} finally {try {!_iteratorNormalCompletion2 && w.return && w.return()} finally {if (_didIteratorError2)throw _iteratorError2}}return u
}function g() {return 0.5 <= Math.random()
}// p = '富强民主文明和谐自由平等公正法治爱国敬业诚信友善'
function o(t) {return t.map(function(u) {return p[2 * u] + p[2 * u + 1]}).join('')
}// h('这里输入明文') = E8BF99E9878CE8BE93E585A5E6988EE69687

这里catch块和finally块的内容都不是我们需要关注的。

oh都不难。说说k。对于10 <= v < 16v - 10v - 6都小于10,所以解码时,读到10和11,我们可以借鉴汇编的概念,认为这是一个”opcode”,有唯一的解码方式。因此我们可以在这里加上一个巧妙的随机化,即g函数,于是一个明文可以得到多个密文,但一个密文对应唯一的明文。

接下来看怎么decode。后两步都是小模拟,我们只看看第一步的h函数:

    function j(t) {f('string' == typeof t, 'utfs Error');var u = t.length;f(0 == (1 & u));for (var w = [], x = 0; x < u; x++)0 == (1 & x) && w.push('%'),w.push(t[x]);return decodeURIComponent(w.join(''))}

为16进制串加上'%'再调用decodeURIComponent即可。

完整代码

  1. 根据参考链接1,decodeURIComponentencodeURIComponent分别对应urllib.parse.unquoteurllib.parse.quote

编码

enc.py

from typing import List
from urllib import parse
import random
import redef step3(inp: List[int]) -> str:VALUE = '富强民主文明和谐自由平等公正法治爱国敬业诚信友善'return ''.join(list(map(lambda v: VALUE[v << 1] + VALUE[v << 1 | 1], inp)))def step2(inp: str) -> List[int]:ans = []for c in inp:v = int(c, 16)if v < 10:ans.append(v)elif random.random() < 0.5:ans.append(11)ans.append(v - 6)else:ans.append(10)ans.append(v - 10)return ansdef step1(inp: str) -> str:reg = re.compile(r'[A-Za-z0-9\-\_\.\!\~\*\'\(\)]')tmp = reg.sub(lambda g: hex(ord(g.group(0)))[2:], inp)return parse.quote(tmp).replace('%', '').upper()def enc(inp: str) -> str:return step3(step2(step1(inp)))if __name__ == '__main__':inps = ['全文搜索Hans774882968', '愛してます', '这里输入明文','x64dbg\nIDA7.7\nuser', '%e', '我知道,我是一个美男子!']for inp in inps:e = enc(inp)print(e)from dec import decd = dec(e)assert d == inp

解码

dec.py

from typing import List
from urllib import parsedef step3(enc: str) -> List[int]:assert len(enc) % 2 == 0VALUE = '富强民主文明和谐自由平等公正法治爱国敬业诚信友善'ans = []for i in range(0, len(enc), 2):ans.append(VALUE.index(enc[i:i + 2]) >> 1)return ansdef step2(enc: List[int]) -> str:ans = ''i = 0while i < len(enc):if enc[i] < 10:ans += str(enc[i])i += 1elif enc[i] == 10:ans += hex(enc[i + 1] + 10)[2:]i += 2elif enc[i] == 11:ans += hex(enc[i + 1] + 6)[2:]i += 2else:raise f'step2 failed. 不合法数据{enc}'return ansdef step1(enc: str) -> str:tmp = ''for i in range(len(enc)):if not i % 2:tmp += '%'tmp += enc[i]return parse.unquote(tmp)def dec(enc: str) -> str:return step1(step2(step3(enc)))def test1():ans = step2([11, 8, 8, 10, 1, 11, 9, 9, 9, 11, 8, 9, 8, 7, 8, 10, 2,11, 8, 8, 10, 1, 10, 4, 9, 3, 11, 8, 5, 8, 5, 10, 0, 5,10, 4, 6, 9, 8, 8, 10, 4, 11, 8, 6, 9, 6, 8, 7])assert ans == 'e8bf99e9878ce8be93e585a5e6988ee69687'ans = step1(ans)assert ans == '这里输入明文'def test2():encs = ['友善爱国爱国诚信民主友善敬业敬业敬业诚信自由敬业爱国法治爱国诚信文明诚信自由爱国诚信民主诚信自由敬业和谐诚信自由平等爱国平等诚信富强平等诚信自由公正敬业爱国爱国诚信自由友善爱国公正敬业公正爱国法治','诚信自由爱国诚信民主友善敬业敬业敬业友善爱国敬业爱国法治爱国友善公正友善爱国爱国诚信民主友善爱国敬业和谐友善爱国平等爱国平等友善自由平等友善爱国公正敬业爱国爱国友善爱国诚信自由公正敬业公正爱国法治']for enc in encs:assert dec(enc) == '这里输入明文'def test3():encs = ['公正爱国公正民主公正友善爱国法治和谐文明富强公正民主公正和谐公正友善法治公正平等法治文明','公正爱国公正民主公正诚信自由法治和谐文明富强公正民主公正和谐公正友善法治公正平等法治文明']for enc in encs:assert dec(enc) == 'hans acmer'def test4():encs = ['友善爱国公正爱国爱国敬业民主友善爱国公正敬业爱国友善自由诚信平等公正爱国公正民主公正友善爱国法治和谐和谐法治和谐法治和谐自由和谐爱国和谐爱国和谐文明和谐敬业和谐公正和谐爱国','友善爱国公正爱国爱国敬业民主友善爱国公正敬业爱国友善自由友善敬业公正爱国公正民主公正诚信自由法治和谐和谐法治和谐法治和谐自由和谐爱国和谐爱国和谐文明和谐敬业和谐公正和谐爱国']for enc in encs:assert dec(enc) == '我是hans774882968'def test5():encs = ['友善爱国公正爱国自由敬业诚信民主友善爱国和谐爱国民主敬业法治诚信自由和谐爱国民主诚信富强公正诚信自由和谐爱国民主友善平等诚信自由友善爱国和谐爱国民主敬业敬业','诚信自由公正爱国自由敬业诚信民主友善爱国和谐爱国民主敬业法治诚信自由和谐爱国民主诚信富强公正友善爱国和谐爱国民主友善平等友善爱国诚信自由和谐爱国民主敬业敬业']for enc in encs:assert dec(enc) == '愛してます'if __name__ == '__main__':test1()test2()test3()test4()test5()

参考资料

  1. decodeURIComponent(rv)用python表达:https://www.cnblogs.com/aotumandaren/p/14081685.html

【前端逆向】社会主义核心价值观加密方法解析+python版复现相关推荐

  1. 【JS 逆向百例】你没见过的社会主义核心价值观加密

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...

  2. 社会主义核心价值观解码

    今天随机刷题时,遇到了一个蛮有意思的题,浅浅记录一下,挺好玩的. 题目: [鹤城杯 2021]easy_crypto 难度:很小啦,差不多签到题 文件下载的内容如下: 最开始我以为是把每个词按社会主义 ...

  3. JavaScript网页特效-浮现社会主义核心价值观文字动画效果

    1.案例呈现 用户在页面单击鼠标左键,页面浮现"富强"."民主"."文明"."和谐"."自由".&q ...

  4. PTA 7-189 sdut-sel-while-1 社会主义核心价值观之理解与输出

    PTA 7-189 sdut-sel-while-1 社会主义核心价值观之理解与输出 社会主义核心价值观是社会主义核心价值体系的内核. 党的十八大提出,倡导富强.民主.文明.和谐,倡导自由.平等.公正 ...

  5. PTA 7-3 sdut-sel-while-1 社会主义核心价值观之理解与输出 (10 分) java AC题解

    社会主义核心价值观是社会主义核心价值体系的内核. 党的十八大提出,倡导富强.民主.文明.和谐,倡导自由.平等.公正.法治,倡导爱国.敬业.诚信.友善,积极培育和践行社会主义核心价值观. 富强.民主.文 ...

  6. 7-3 sdut-sel-while-1 社会主义核心价值观之理解与输出 (10 分)

    社会主义核心价值观是社会主义核心价值体系的内核. 党的十八大提出,倡导富强.民主.文明.和谐,倡导自由.平等.公正.法治,倡导爱国.敬业.诚信.友善,积极培育和践行社会主义核心价值观. 富强.民主.文 ...

  7. 7-189 sdut-sel-while-1 社会主义核心价值观之理解与输出

    7-189 sdut-sel-while-1 社会主义核心价值观之理解与输出 社会主义核心价值观是社会主义核心价值体系的内核. 党的十八大提出,倡导富强.民主.文明.和谐,倡导自由.平等.公正.法治, ...

  8. 考研政治——思修-社会主义核心价值观+道德修养

    价值观是更精炼,仍然符合社会主义核心价值体系 核心价值观包括 历史,现实,道义 问:社会主义核心价值观的历史底蕴是什么? 答:中华优秀传统文化 社会主义核心价值观以什么而居于人类社会的价值至高点? 先 ...

  9. 社会主义核心价值观PPT模板

    模板介绍 精美PPT模板设计,社会主义核心价值观PPT模板.一套教育宣传幻灯片模板,内含红色多种配色,精美风格设计,动态播放效果,精美实用. 一份设计精美的PPT模板,可以让你在汇报演讲时脱颖而出. ...

最新文章

  1. 【iOS】快速集成轮播控件
  2. 美国AI博士指出:60天掌握Python全栈需要...
  3. OpenCVSharp::FindContours 错误:“total()==0||data!=NULL“
  4. 活久见的设备连接故障
  5. Fedora设置DVD为yum源
  6. 编译原理之正则表达式
  7. maven创建的工程eclipse 项目--属性--为什么没有deployment assembly 按钮呢
  8. 使用线程——创建线程
  9. opencv 手册_有兴趣吗?程序员分手手册,教你如何恢复单身
  10. c语言中c4700在哪个位置,C语言单链表问题。。高手来啊warning C4700
  11. #题目:GCD XOR UVA - 12716
  12. 最全eclipse自由轻松来回切换项目的jdk版本的方法
  13. 【2(2N+1)魔方阵 】
  14. Cisco常见命令大全
  15. oracle 数据库 去重查询
  16. matlab数组中含有逻辑变量,MATLAB逻辑数组
  17. http测试工具:httpbin
  18. 视频分割算法在移动端如何应用
  19. 2020-12-20随笔
  20. PADS2007中怎么设置过孔盖油与过孔开窗及其验证过程

热门文章

  1. RuntimeError: mat1 and mat2 shapes cannot be multiplied (axb and cxd)
  2. Android Virtualview:淘宝、天猫又开源了一个动态化、高性能的UI框架
  3. 学车日记—科目三学习考试
  4. 自然语言生成技术现状调查:核心任务、应用和评估(4)
  5. 解决Element-ui中Table表格里的show-overflow-tooltip不兼容safari浏览器问题。
  6. 视频剪辑,如何批量将视频进行顺时针旋转90°
  7. java peek pop_Peek和Pop手势功能介绍
  8. 技术女性职业规划及其它
  9. 动漫迷高清收集壁纸|经典动漫宫崎骏
  10. Java通用进程调用