问题标签 [disassembly]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
7312 浏览

python - 对 .pyo python 文件进行反向工程

我有 2 个 .pyo python 文件,我可以将它们转换为 .py 源文件,但它们不能像 decompyle 的验证所暗示的那样完美编译。

因此查看源代码,我可以看出 config.pyo 只是在数组中包含变量:

ADMIN_USERIDS = [116901、141、349244、39、1159488]

我想采用原始的 .pyo 和反汇编或任何我需要做的事情来更改这些 ID 之一。

或者....

在 model.pyo 中,来源表示

if (productsDeveloperId != self.getUserId()):

我想做的就是将 != 十六进制编辑为 == ..... 使用 windows exe 程序很简单,但我在任何地方都找不到好的 python 反汇编程序。

欢迎任何建议......我是阅读字节码的新手,也是 python 的新手。

0 投票
2 回答
574 浏览

.net - 是否可以使用托管代码以编程方式检查程序集的 IL 指令?

见标题。Reflection.Emit 似乎更多的是关于创建一个新的动态程序集,而不是用于加载现有程序集并检查其 IL。

0 投票
3 回答
92 浏览

pointers - 从指令中获取操作数

给定以下 x86 汇编指令:

我如何在运行时获得偏移量(第二个操作数)?这是场景:一个程序(在运行时注入到进程中)用它自己的一些偏移量替换偏移量,导致:

该程序允许通过它编写和加载插件,但不公开替换地址。那么,鉴于上述指令存在的地址,我如何找到偏移量 X 和 Y ?

0 投票
2 回答
1986 浏览

ruby - 在 Ruby 中,如何从外部进程读取内存值?

所以我只想做一个 Ruby 程序,从另一个进程的虚拟内存中的已知内存地址读取一些值。通过我的研究和十六进制编辑内存中正在运行的进程的 x86 程序集的基本知识,我找到了我想要的内存值的基地址和偏移量。我不想改变它们;我只想读它们。我询问了内存编辑器的开发人员如何处理这种语言摘要并假设是 Windows 平台。他告诉我对 OpenProcess、CreateProcess、ReadProcessMemory 和 WriteProcessMemory 的 Win32API 调用是使用 C 或 C++ 的方式。我认为要走的路就是使用 Win32API 类并映射它的两个实例;一个用于 OpenProcess 或 CreateProcess,取决于用户是否已经运行了进程,另一个实例将映射到 ReadProcessMemory。我可能仍然需要找到用于获取正在运行的进程列表的函数,这样我就知道哪个正在运行的进程是我想要的,如果它已经在运行的话。

这需要一些工作才能将所有内容放在一起,但我认为编写代码并不会太糟糕。这对我来说只是一个新的编程领域,因为我从来没有从高级语言(嗯,比 C 更高的级别)工作过这个低级别。我只是想知道解决这个问题的方法。我可以只使用一堆或 Win32API 调用,但这意味着必须处理一堆字符串和数组包以及依赖于系统的解包我希望最终使这项工作跨平台,因为我正在读取的过程是从产生的具有多个平台构建的可执行文件,(我知道内存地址因系统而异。想法是拥有一个包含所有内存映射的平面文件,因此 Ruby 程序可以将当前平台环境与匹配的内存映射匹配。

据我所知,可能已经存在一个 Ruby gem 可以为我处理所有这些我只是没有找到的。我也可以尝试编辑每个构建的可执行文件,以便每当我想读取的内存值被进程写入时,它也会将新值的副本写入我以某种方式拥有的共享内存中的空间Ruby 创建一个类的实例,该实例是指向该共享内存地址的指针,并以某种方式向 Ruby 程序发出该值已更新并应重新加载的信号。基本上基于中断的系统会很好,但由于读取这些值的目的只是发送到从中央服务器广播的记分牌,我可以坚持使用基于轮询的系统,该系统以固定的时间间隔发送更新。我也可以完全放弃 Ruby,转而使用 C 或 C++,但我也不太了解这些。实际上,我比 C++ 了解更多 x86,而且我只了解与系统无关的 ANSI C 的 C,并且以前从未处理过共享系统库。

那么是否有可用的 gem 或鲜为人知的模块已经做到了这一点?如果没有,那么有关如何完成此操作的任何其他信息都会很好。我想,长话短说,我该怎么做?

提前致谢, Grg

PS:另外确认那些 Win32API 调用应该针对 kernel32.dll 库会很好。

0 投票
2 回答
4203 浏览

code-generation - x86 指令编码表

我正在重写我的汇编程序。在此期间,我也对实现反汇编感到好奇。我想让它简单而紧凑,并且在这样做时我可以利用一些概念。

可以从操作码确定其余的 x86 指令编码(可能也需要前缀字节,有点)。我知道很多人为此写了表格。

我对助记符不感兴趣,但对指令编码不感兴趣,因为这是一个真正的难题。对于我需要知道的每个操作码编号:

  • 该指令是否包含 modrm?
  • 该指令有多少个立即字段?
  • 立即使用什么编码?
  • 字段中的立即数是指令指针的相对地址吗?
  • modrm 使用什么样的寄存器来存储操作数和寄存器字段?

sandpile.org 有一些我需要的东西,但它的格式不容易解析。

在我自己开始编写和验证这些表之前,我决定写下这个问题。你知道这种表存在于某处吗?以不需要太多精力来解析的形式。

在这里,我有第一个操作数的表。该格式使得表格可以直接从包含它的文本文件中解析出来。我留下了一些与 CISC 和分段相关的说明。

对于两字节指令,我可能需要四个这样的表。对于三字节指令,我还需要两张表。FPU 指令需要 8 个表,幸好非常简单。在那之后,我会覆盖相当大的 x86 指令块。虽然我只用一两张桌子就很好。

此外,很少有指令组可能需要一些小数组来识别指令类型。

0 投票
5 回答
20425 浏览

c# - 从 .NET DLL 文件生成 PDB?

我需要一些可以从 DLL 文件(C# .NET 代码)生成 PDB 的东西,有没有免费的程序可以做到这一点?

0 投票
3 回答
1639 浏览

embedded - 需要 PIC 反汇编程序

我想反汇编PIC16F877A的十六进制文件。有什么好的反汇编程序吗?反汇编后是否可以再次编译?我需要照顾哪些事情?

0 投票
3 回答
123 浏览

disassembly - 跟踪什么值在哪里的反汇编程序

所以最近我一直在查看我的 C++ 代码的反汇编,并且不得不手动跟踪每个寄存器中的内容,如下所示:

等等。注释是我的,通过查找 C++ 类中各种字段(例如 sink、table、baseCol、starts)的偏移量手动添加的。

这很简单,但是乏味且耗时:对于程序来说,这是完美的事情。gdb 似乎知道结构中各个字段的偏移量:我可以做 &((Table *)0x1200)->starts 并告诉正确的地址。所以,这个信息就在身边。

是否有一些反汇编程序可以使用此信息为我注释代码?

如果做不到这一点,我可以自己写。gdb 从哪里获得偏移量?

0 投票
1 回答
1486 浏览

assemblies - 如何更改可执行文件的 assemblyIdentity?

我想隐藏我用来创建 .exe 文件的工具。我没有做任何违法的事情,我只是想保护我的知识产权不被复制。如果我在文本编辑器中打开 exe 文件,我会看到以下部分。

我试图将名称更改为:
name="Microsoft.Windows.SomeOtherName"

当我尝试执行文件时,这导致了以下消息。“此应用程序无法启动,因为它的并排配置不正确。”

我该如何解决这个问题?

0 投票
2 回答
447 浏览

assembly - 汇编指令地址

为什么每次我反汇编同一个 .exe 文件时,相同的指令都在同一个地址?那是什么地址(RAM?HDD?虚拟?)?