[闲聊] 逆向

楼主: int0x80 (请逐项修改)   2022-06-26 04:37:41
仔细想想 逆向工程这件事似乎不是很好 formalize
和混淆不同 混淆蛮容易定义的
例如定义完美的混淆器为:
即使攻击者拿到混淆过后的程式码
攻击者能做到的事 和单纯拿到oracle能做到的事一模一样
(也就是只知道输入输出对应关系)
虽然这种混淆器已经在 2001 年被证明不可能达成了
不过定义混淆这件事还是蛮容易的
或是像 indistinguishability obfuscation 的定义方式
两个输入输出相同的 circuit 经过混淆器后没有办法分辨
这也是一种定义方式
但相反的 怎样算是逆向成功 就有点麻烦了
感觉最好的说法是:
知道这支程式“在干麻”
而这个“在干麻”必须是人类可以理解的样子
但这样就会是主观的了
例如你拿到一个算平方的程式,如果你说你逆向的结果是
输入1会回传1、输入2会回传4,...一直到int的上限的话
没人会当你成功逆向了
或是你的结果是一串不是很明显知道在干麻的指令:
先push某个值在干麻干麻的,也没有人会当你逆向成功
必须说出这个程式是在算“平方”才行
再举一个例子,假如有一个程式
在输入 >=0 时会输出它的平方根
而 <0 的部份则被塞了一大堆垃圾程式码
经过编译后到你手上 怎样算是成功逆向呢
应该只要能说出:
>=0 时会输出平方根,否则是垃圾
这样就可以了 不需要知道 <0 时到底确切是什么行为
甚至可以说如果还花力气去看 <0 的部份的话就是被对方拐了
因为这部份“不重要”
也就是说,逆向这件事是和“人”的目的密切相关的
比较像是在问:当初作者是因为什么原因而写下这个程式的
应该很难正式的定义什么是逆向
作者: NTUEE2CS (EE转CS)   2022-06-26 06:41:00
大师逆向可以把贫果的垃圾hash偷扫描照片关掉吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com