标签: reverse-engineering

我需要通过检查原始内容来识别二进制文件

我遇到过这个文件 - 并且非常了解它的结构......

\n\n

512 字节标头(其中包含字段定义记录的“计数器”。)

\n\n

768 字节字段定义记录 - 多个实例。显然后续数据记录中的每个字段都有一个。

\n\n

数据 - 在固定长度记录中(数据记录长度也在标头中。)

\n\n

我检查了来自同一来源的几个文件 - 每个文件的前几个字节都不同 - 彼此不同。

\n\n

有一个十六进制字符的字符串与我的示例中相同 - 但这些十六进制字符不代表可读字符串: \xc5\xa0\xc2\xbe\xc5\xbdY#d\xc3\x8b@=q\ xc3\x92\xc3\xa3\xc2\xbcd\xc3\x90

\n\n

标头中没有人类可读的字符串。

\n\n

有人知道我这里有什么样的文件吗?

\n\n

编辑\n昨晚,我能够到达源计算机 - 并注意到 - 对于这个文件,至少还有其他三个具有相同基本名称的文件 - 扩展名:.blb、.blk 和 .idx。

\n\n

我还没有这些附加文件的副本......

\n\n

这有帮助吗?有人知道这会进入什么样的“数据库”吗?

\n

file-type reverse-engineering binary-data

4
推荐指数
1
解决办法
6163
查看次数

是否可以将二进制可执行文件转换为其原始代码和其他文件?

和标题要求的差不多。例如,如果我拿了一张 Playstation 光盘,是否可以编写一个程序将磁盘上的所有二进制文件转换回其原始代码文件、艺术资源等?这不就是解密之类的吗?如果没有,是否有可能创建一种语言或向我们当前的语言添加代码,使未来的程序可以向后转换?谢谢!

binary assembly playstation decompiling reverse-engineering

4
推荐指数
1
解决办法
1万
查看次数

__imp_ 符号的语义

调用 DLL 函数涉及链接器生成存根,除非函数被声明,__declspec(dllimport)在这种情况下存根可以被绕过,以支持直接对导入表的间接调用,这样效率更高,例如

__declspec(dllimport) void ExitProcess(int);
ExitProcess(0);
Run Code Online (Sandbox Code Playgroud)

产生

call qword ptr [__imp_ExitProcess]
Run Code Online (Sandbox Code Playgroud)

where__imp_ExitProcess解析为可执行文件中导入表中的一个位置。

我试图弄清楚究竟是如何__imp_ExitProcess解决的。可以肯定的是,它作为 kernel32.lib 中的一个符号出现,但该符号具有存储类IMAGE_SYM_CLASS_EXTERNAL、段号零和值零,这相当于只是说“这将在其他地方定义”而没有实际定义它。

__imp_前缀是否具有特殊含义,即链接器是否注意到该前缀并将其作为将符号解析为名称已删除该前缀的 DLL 函数的导入表条目的指令?还是有其他事情发生?

windows dll linker reverse-engineering portable-executable

4
推荐指数
1
解决办法
2710
查看次数

无需源代码即可调试/排除 Windows 应用程序的故障

几天前,我在工作中遇到了这个问题,我想知道有没有办法从场景中挖掘出更多的数据,而不是去微软。已经有很多这样的案例,作为 Windows 开发人员,我想探索一下,获取大部分信息的最佳/最佳方式是什么。我来描述一下情况:

  1. 使用某些设置(涉及 cmyk 颜色空间)进行打印时,Office 应用程序会抛出一个对话框错误,其中描述错误。“文件 %s 无法打开,因为它被其他应用程序锁定”。它不提供文件名,事件查看器也不提供。打印中止。

  2. 在使用时procmon,我们发现当 apiCreatefileMapping被相关进程调用时,在几个文件上出现“文件锁定错误”,例如 office 应用程序、假脱机程序、splwow64.exe(是的,它是 64 位系统,应用程序是 32 位)。

  3. 当不涉及 splwow64 时,问题不存在,这意味着在 64 位操作系统上使用 64 位应用程序。

我想知道在这种情况下哪些工具对获取更多信息有用。这包括在需要时将 MS 符号与 windbg 和调试程序集一起使用。基本上我需要被锁定的文件名,它显示为 %s 和问题的根源。

assembly windbg reverse-engineering debug-symbols symbol-server

4
推荐指数
1
解决办法
975
查看次数

HexRays - “__OFSUB__()”的目的是什么?

在以下使用 Ida pro 的 Hex 射线的反编译函数中:

int sub_409650()
{
  int v0; // ecx@1
  int result; // eax@1
  bool v2; // zf@1
  bool v3; // sf@1
  unsigned __int8 v4; // of@1
  unsigned __int16 v5; // cx@2
  unsigned int v6; // ecx@2

  v0 = gS1_dword_62EEA8 & 7;
  result = gS1_dword_62EEA8 - v0;
  v4 = __OFSUB__(gS1_dword_62EEA8 - v0, 16);
  v2 = gS1_dword_62EEA8 - v0 == 16;
  v3 = gS1_dword_62EEA8 - v0 - 16 < 0;
  gS1_dword_62EEA8 -= v0;
  gs2_dword_62EFB4 >>= v0;
  if ( …
Run Code Online (Sandbox Code Playgroud)

c reverse-engineering ida decompiler

4
推荐指数
1
解决办法
3690
查看次数

对 Android 应用进行逆向工程时,Smali 代码与 Java 源代码

我只是在看android逆向工程教程,我注意到他们大多数都是在apk反编译后修改smali代码而不是实际的java源代码,这是有原因的吗?

任何帮助表示赞赏。

谢谢

java android reverse-engineering smali

4
推荐指数
1
解决办法
2086
查看次数

Binwalk - 压缩数据已损坏

root@kali:~/ROUTER# binwalk new-firmware.bin 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
84            0x54            uImage header, header size: 64 bytes, header CRC: 0xE52A7F50, created: 2012-02-10 07:27:12, image size: 819799 bytes, Data Address: 0x80002000, Entry Point: 0x801AC9F0, data CRC: 0x6A10D412, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: lzma, image name: "Linux Kernel Image"
148           0x94            LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 2386252 bytes
917588        0xE0054         Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 2588426 bytes, 375 inodes, …
Run Code Online (Sandbox Code Playgroud)

reverse-engineering

4
推荐指数
1
解决办法
1万
查看次数

逆向工程专有浮点数编码

我正在尝试分析一些没有任何规范的旧二进制格式。我发现有一个 96 个浮点数的数组,每个 4 字节长。

我花了很多时间使用不同的十六进制<->浮动工具,但没有运气。我找不到任何模式。所以我怀疑它是某种不寻常的浮点表示,而不是像 IEEE-754 这样的标准。

这是字节如何映射到浮点值的一长串示例:https : //gist.github.com/anonymous/e67dd27706ba1f289a895fef70399dc9

几个例子:

80 00 00 80   =  0
00 FF 00 00   =  0
B8 EB 83 43   =  1.86281420496466
F8 AF 86 43   =  1.9018805660946
7B C2 F2 43   =  3.42793766176755
37 43 F5 43   =  3.46327992859723
6A 4D 03 44   =  3.70816455369089
26 C6 0A 44   =  3.919173581123
AF C3 79 43   =  1.76342447568475
Run Code Online (Sandbox Code Playgroud)

我能够为任何可能对分析有用的字节组合提供浮点值。

你能帮我弄清楚如何将这些原始字节转换为浮点数的公式吗?

floating-point decode reverse-engineering decoding ieee-754

4
推荐指数
1
解决办法
505
查看次数

qemu-arm 运行编译后的二进制文件

尝试运行我从 qemu 上的固件中提取的已编译二进制文件,但是我遇到了这个错误:

root@ubuntu14:~# qemu-arm -L /usr/arm-linux-gnueabi ~/x
/system/bin/linker: No such file or directory

root@ubuntu14:~# file ./x
./x: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), stripped
Run Code Online (Sandbox Code Playgroud)

我正在使用“-L”标志,如建议的: qemu-arm can't run arm compiler binary

但是,这个标志对我来说似乎没有什么不同,设置 QEMU_LD_PREFIX 也没有

可能是缺少一些依赖项吗?

c arm reverse-engineering qemu firmware

4
推荐指数
1
解决办法
4024
查看次数

理解内存 - 游戏黑客

我正在尝试开始学习如何用 C++ 编写游戏秘籍。但目前我想了解内存的布局等 - 我有几个问题要问,并将使用游戏Assault Cube作为参考。请帮助我并以简单的形式解释任何内容。我是新的。

1)假设图像基址ac_client.exe0x4000000- 这是否仅仅意味着进程的开头分配在该内存地址?

2) 接下来是 Image Base + Offset ( &ac_client.exe + 0x10F4F4) - 偏移量是否意味着它将您从起点带到流程内的某个位置或功能?

3) 在作弊引擎中,我加载了 Assault Cube。我寻找我的健康价值。我找到了健康的动态地址。现在我需要找到静态地址,因为没有直接指向健康的指针,我点击“查找访问此地址的内容”选项 - 这是否意味着我正在尝试找到一个正在使用或传递我的动态健康的函数多变的?

4) 找到健康值的静态地址后。我找到了偏移量0xF8。另外ac_client.exe + 0x10F4F4-> 0x50F4F4- 人们说这0x50F4F4是本地玩家基类,但如果我没有被告知,我怎么知道这一点?这是否也意味着所有游戏变量都在类中?

仍然有点困惑,有人可以解释一下它是如何在视觉上工作的。

reverse-engineering cheat-engine

4
推荐指数
1
解决办法
3502
查看次数