引言
今天来解逆向工程的题目吧!
逆向工程 听起来好像很厉害,但其实就是一种过程而已。
[维基百科: 逆向工程]
逆向工程(Reverse Engineering),又称反向工程,是一种技术过程,即对一专案标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能效能规格等设计要素,以制作出功能相近,但又不完全一样的产品。
对市面上软件的深入分析後再设法重造,也算是一种逆向工程。
这主题的题目会提供一些结果给你 (档案等) ,请你设法从中找出正常使用下或许无法取得的资讯。
一个最好理解的例子是:拿到二进位档,设法取得某程序码区块的资讯,或是某某变数的值等。
Reverse Engineering / Transformation
这题看起来跟编码有关,因为它除了提供了一个叫做 enc
的档案外,
也提供了一段 Python code ,能看到程序码中有 chr
、 ord
等熟悉语法,
这两者正是用来做字串、编码转换用途的。
分析完题目,我们先把 enc
下载下来看看:
灩捯䍔䙻ㄶ形楴獟楮獴㌴搂潦弸强㕤㐸㤸扽
很好,这就是我们玩游戏或是使用国外软件时常遇到的乱码对吧!
这边也可以来学习一点小知识,其实所谓的乱码,就是编码不对的问题罢了。
世界上所有的编码,包括 UTF-8, ASCII, BIG5 等等常看到的编码,
最後都是转换成 01010101... ,因为电脑也只看得懂 0101 对吧?
所以你可以试想一个情境:
假设 apple
这个字的 UTF-8 编码是 01010000 (纯粹假设,并不是这个编码) ,
今天如果写信的人他使用 UTF-8 编码规则,写了一个 apple
并编成 UTF-8 ,
最後送到你手里,因此你会收到 01010000 这个编码後的资料。
然後你搞错对方的编码方式,你用 ASCII 来解码这个讯息,
01010000 刚好是 P
的 ASCII code ,所以这封信意思就变成 P
。
从头到尾,信件内容 (01010000) 都没变,变的是你们双方的编码方式。
所以乱码其实就是双方编码不同造成的误会,
日本人写的游戏中的文字编码可能是 Shift_JIS 这个编码,
拿到你的电脑来可能用 BIG5 解码,当然就是一堆乱码罗。
所以才会有万国码的存在,让各种语言都可以统一成一种编码来表示。
回到题目,提示说你可以到网路上找找解码器,但是我们并不知道这个乱码本来的编码是什麽。
所以我先找到一个多功能编码器:
https://string-functions.com/encodedecode.aspx
它可以解编码许多不同的编码方式,这时候就只能猜了。
但是并不是瞎猜,还记得题目有给一段 Python 程序对吧,
可以看到它将 flag 字串每个字元编码往左边移八位 (位元运算) ,
然後加上该字元的右边字元的编码,最後再编成新字元。
讲起来很复杂,其实就是将两个字元编成一个字元的概念,
UTF-8 是很常使用的编码,我们先猜测原本是用 UTF-8 来撰写讯息的,
那麽两个八位元的字元组合成一个十六位元的字元,合理猜测有可能是 UTF-16 !
所以我们将乱码丢到转换器中,选择 UTF-16 转 UTF-8 :
哦?结果看起来不是乱码了,非常像 flag 形式,但又不是...
观察後发现两两一组的话,每一组都前後颠倒了,
难道编码还是错误?
打开转换的选单:
还有另一种 UTF-16 ?
改成这个以後:
成功找到 flag !
p.s: UTF-16 有分成 Big Endian 以及 Little Endian (位元组顺序) ,
这题刚好是需要 BE (Big Endian) 的版本。
学习内容 这篇内容是纪录阅读官方文件 Create a feature component 的内容。...
本文开始 使用OpenCV DNNs方式来侦测人脸,虽然这个方式会使用到深度学习神经网路(框架为SS...
同步(Synchronous)与非同步(Asynchronous) 在理解执行上下文与呼叫堆叠之後,...
前言 Array 跟 Object 两兄弟的故事告一段落了,接着是 Object 在外面养(?)的另...
Swagger UI 是一个将 API 文件与 API 请求产生结合的介面套件,官方已於建立核心的 ...