最近听到我一直在听杰夫阿特伍德和乔尔斯波尔斯基的电台节目,他们一直在谈论狗食(重复使用你自己的代码的过程,见杰夫阿特伍德的博客文章).所以我的问题是程序员应该使用反编译器来查看程序员代码是如何实现和工作的,以确保它不会破坏你的代码.或者你应该相信程序员编码并适应它,因为使用反编译器会违背我们程序员学习隐藏数据的所有内容(至少是OO程序员)?
注意:我不确定这会是哪个标签,所以请随意重新标记.
编辑:只是为了澄清我问的反编译器是最后的手段,说你出于某种原因无法获得源代码.对不起,我应该在原始问题中提供这个.
我们知道,有很多java反编译工具可以将.class转换为.java文件.
因此,我们需要保护我们的.java文件免受反编译.我知道这是一个很大的话题,也许没有结局.
通常,有两种方式:混淆器和自定义类加载器.
是否有任何成熟的解决方案或开源框架,这两种方式相结合?
另一个方面与exe4j有关,它将jar包装到exe文件中,看起来它可以保护java代码,因为我们可以看到的是exe文件而不是jar文件或类文件.但实际上,当它运行时,它会将所有jar文件分解为临时目录,这意味着很容易获得反编译器的类文件.那么从exe4j方面保护java代码的任何考虑因素呢?
感谢您的意见和建议.
更新
感谢大家的建议或经验分享.这对我很有帮助.为了得出结论,我将放弃任何具有加密功能的混淆器或自定义类加载器.因为最终Java代码可以在聪明的黑客之前公开.
我将在编译时使用C语言中的"#ifdef"等技巧删除一些核心代码.在Java中,static和final布尔类变量可用于执行相同的工作.然后,compilered类文件将不包含受需要保护的java代码.
我正在考虑学习汇编语言,以获得逆向工程恶意软件的专业知识.我的问题是,当市场上有复杂的反编译器时,是否值得学习逆向工程的汇编语言(六角射线的反编译器非常好,据我所知).
虽然反编译不会重现原始代码,但它仍然降低了在汇编语言中理解代码的复杂性.那么,通过查看汇编代码,是否有任何强有力的理由尝试进行逆向工程?
谢谢.
使用ildasm.exe工具拆卸其他.Net应用程序时,我遇到了以下行.
program.exe没有有效的CLR标头,无法进行反汇编
但是当我试图反汇编我的代码时,它没有显示任何错误,并轻松地反汇编代码.
因此,我很好奇什么是CLR标题,以及为您的程序集提供有效CLR标题的优点/缺点是什么?
有人可以回答上述问题吗?
我检查了msdn,但找不到有关该主题的更多信息.
我已经通过 dotPeek 1.4 反编译了 DLL 以查看内部发生了什么,但是有一些奇怪的 c# 代码(请查看附件)。有
为什么生成该代码?dll 是否可以防止反编译或 dll 发布为 realease?

使用Reflector试用版反编译也出现同样问题

于是我通过de4dot运行了一个C#大学程序,然后通过reflector反编译,在VS中运行时出现如下错误。
[程序集:System.Runtime.CompilerServices.Extension]
错误 CS1112 不要使用“System.Runtime.CompilerServices.ExtensionAttribute”。请改用“this”关键字。客户端 C:\Users\user\Desktop\333\as2\decom\AssemblyInfo.cs 15 Active
我尝试用 this 和 this() 替换代码,但这只会导致其他问题。有人能解释一下我要用“这个”代替什么吗?我觉得我在这里遗漏了一些明显的东西。
我有 200 个需要在文件夹中转换的 pyc 文件。我知道将 pyc 转换为 py 文件,uncompyle6 -o . 31.pyc但是由于我有很多 pyc 文件,这将需要很长时间。我找到了很多文档,但没有多少批量转换为 py 文件。uncompyle6 -o 。*.pyc 不受支持。
关于如何实现这一目标的任何想法?
此代码将字符串的每个字符(位于ebp+arg_0)与不同的常量(ASCII 字符)进行比较,例如“I”、“o”和“S”。我猜,基于其他代码部分,这段代码最初是用 C 编写的。

这个比较代码部分看起来效率很低。我的问题是,你认为这段代码在 C 中看起来如何?最初使用什么代码结构?到目前为止我的想法
这不是for 循环。因为我没有看到任何向上跳跃和停止条件。
这不是一个 while/case/switch 代码构造
我最好的猜测是,这是很多连续的 if/else 语句。你能帮我吗?
是的,这是挑战的一部分,我已经有了标志/解决方案,不用担心。只是想更好地理解代码。
我尝试使用 Dotpeek 和 ILSpy.Net 反编译(我自己的代码),但失败了。
我需要对 .Net Core 3自包含单个可执行文件的分布式二进制文件进行特殊混淆吗?
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PublishTrimmed>true</PublishTrimmed>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud) 我对组装很陌生,我正在尽力学习它。我参加了一门课程来学习它,他们提到了一个非常补救的 Hello World 示例,我反编译了它。
原始c文件:
#include <stdio.h>
int main()
{
printf("Hello Students!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是使用以下命令反编译的:
C:> objdump -d -Mintel HelloStudents.exe > disasm.txt
Run Code Online (Sandbox Code Playgroud)
反编译(组装):
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0x10
call 401e80 <__main>
mov DWORD PTR [esp], 0x404000
call 4025f8 <_puts>
mov eax, 0x0
leave
ret
Run Code Online (Sandbox Code Playgroud)
我在将这个输出从反编译映射到原始 C 文件时遇到问题有人可以帮忙吗?
非常感谢!
decompiling ×10
.net ×3
assembly ×3
c# ×3
c ×2
obfuscation ×2
.net-core ×1
disassembly ×1
dotpeek ×1
ilspy ×1
java ×1
objdump ×1
pyc ×1
python ×1
python-3.x ×1
windows ×1
x86 ×1