首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除代码流的技术?

消除代码流的技术?
EN

Stack Overflow用户
提问于 2017-08-27 04:33:31
回答 1查看 41关注 0票数 0

我想知道是否有任何众所周知的技术来融合应用程序的代码流。在我的例子中,我想在我自己的字节码上使用它们,这些字节码是由我为项目编写的一个小vm执行的。我非常有兴趣尝试转换字节码的流程,以了解一些关于这项技术的知识。我在inet上搜索了一下,几乎找不到任何关于它的信息。

干杯。

EN

回答 1

Stack Overflow用户

发布于 2017-08-27 04:52:39

我在一个项目中工作(几年前),以混淆闪存ActionScript代码,以破坏反向工程的尝试,并确保游戏的安全。我们建立了一个工具,每当有人加载游戏时,它就会混淆flash。

实际的混淆是在VM模型上完成的,它基于以下简单的模式,您必须根据您的VM的特定字节码来定义这些模式。对我们来说,真正困难的部分是编写Flash格式的读取器/写入器,然后使用参数将实际代码字节转换为字节码助记符。但是一旦你做到了这一点就很容易了。

您可以查找特定的指令,然后用出现的不同指令来替换它们。例如,一些标准代码可能如下所示:

代码语言:javascript
复制
load_to_stack 100
:label_01
do_something
get_from_stack
decrement
put_to_stack
jump_if_non_zero label_01

然后,您可以做的一件事是,一旦找到表示jump_if_non_zero <label>的代码行,就将该行替换为jump to <end of code>,并在代码末尾添加jump_if_non_zero label_01。这将导致在代码末尾有多个条件跳转,而在其他地方则直接跳转。

您还可以做更多的事情,比如用add 99; increment替换add 100,对于其他数学运算也是如此。

然后,您可以找到条件跳转并反转条件,将跳转指向文件的末尾(遵循上面的技巧),并将必要的跳转无条件地放置为下一条指令。就像这样

代码语言:javascript
复制
jump_if_non_zero :forward
do_something
:forward

更改为

代码语言:javascript
复制
jump_if_zero :new_label_at_end
jump :forward
:additional_label
do_something
:forward
[.....]
:new_label_at_end
jump :additional_label

像上面这样的技巧让代码反编译者困惑了很多。你可以变得更有创造力,这实际上是因为你的虚拟机中有各种各样的指令,以及你愿意让你的混淆程序复杂化,并接受由于额外的操作而产生的代码可能会变得更慢。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45899444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档