标签: reverse-engineering

解密MMORPG协议编码

我计划为游戏编写一个自动机器人.

棘手的部分是弄清楚他们如何编码他们的协议......为了使机器人易于运行,只需让角色运行并记录它在wireshark中的作用.然而,解释环境更加困难......如果你闲置,它每秒收到大约5个数据包,因此有很多装饰.

我的计划:因为游戏是在TCP下运行的,所以我将使用freecap(http://www.freecap.ru/eng)强制游戏连接到我机器上运行的代理.我将需要此代理能够进行数据包注入,或者可能需要能够重新发送捕获的数据包的服务器.通过这种方式,我可以重新创建并修改服务器发送的内容,并了解其协议编码.

  1. 有谁知道我在哪里可以获得允许数据包注入的代理或我可以执行数据包注入的地方(不是通过硬件,如无线或任何东西的情况!)
  2. 在哪里可以找到重新发送捕获的数据包的服务器/代理(即:重放连接).
  3. 任何更好的模式匹配工具或方法?可以突出显示来自多个消息的模式的东西将是伟大的.

或者,有没有更好的方法来破译这里?可能是一种解决策略(通过挂钩winsock函数并从那里开始反汇编)?我之前没有这样做,所以我不确定.或者,还有其他想法吗?

encryption encoding reverse-engineering

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

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

从现有Oracle数据库生成数据库图表/ ER图的工具?

寻找工具(windows平台)从现有的Oracle数据库中生成ER图(或类似的).
有哪些好的工具可以免费使用或成本低廉?

oracle reverse-engineering data-modeling documentation-generation er-diagram

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

考虑进入逆向工程/反汇编

假设对通用CPU架构(例如:x86)上的汇编有一个很好的理解,那么如何才能探索逆向工程领域的潜在路径(职业,乐趣和利润等)?那里的教育指南很少,所以很难理解今天它有什么潜在的用途(例如:正在寻找仍然常见的缓冲区溢出漏洞,或者堆栈监控程序是否使这一点成为现实?).我不是在寻找任何一步一步的程序,只是一些相关的信息,如有关如何有效地找到程序的特定区域的提示.交易中的基本内容.以及它目前用于今天的东西.

那么回顾一下,目前逆向工程产量目前的用途是什么?如何才能找到一些关于如何学习交易的基本信息(同样,它不必一步一步,只需通过线索就可以提供任何帮助).

reverse-engineering

18
推荐指数
2
解决办法
5116
查看次数

是否可以调用驻留在exe中的非导出函数?

我想调用驻留在第三方.exe中的函数并获取其结果.似乎应该有一种方法,只要我知道函数地址,调用约定等...但我不知道如何.

有谁知道我会怎么做?

我意识到任何解决方案都是非标准的黑客攻击,但必须有办法!


我的非恶意用例:我正在为我的软件逆向工程文件格式.这个函数的计算过于复杂,我的小脑子无法弄清楚; 我已经能够将汇编代码直接拉到我自己的DLL中进行测试,但当然我无法释放它,因为那样会被窃取.我将假设用户已预先安装了此特定应用程序,因此我的软件将运行.

c windows x86 assembly reverse-engineering

18
推荐指数
2
解决办法
2211
查看次数

处理ELF重定位 - 了解重定位,符号,节数据以及它们如何协同工作

TL; DR

我试图将这个问题作为一个简短的问题,但这是一个复杂的问题所以它最终会变长.如果您可以回答这方面的任何部分或提供任何建议或提示或资源或任何内容,那将非常有帮助(即使您没有直接解决我的所有问题).我现在正撞在墙上.:)

以下是我遇到的具体问题.请阅读下面的更多信息.

  • 我正在寻找有关如何处理重定位条目和更新节数据中未解析的符号的指导.我根本不明白如何处理我从重定位和部分等中提取的所有信息.
  • 我也希望了解链接器遇到重定位时发生了什么.试图正确实现重定位方程并以正确的方式使用所有正确的值是非常具有挑战性的.
  • 当我遇到操作码,地址和符号等时,我需要了解如何处理它们.我觉得我错过了一些步骤.
  • 我觉得我没有很好地掌握符号表条目如何与重定位进行交互.我应该如何使用符号的绑定,可见性,值和大小信息?
  • 最后,当我使用已解析的数据和可执行文件使用的新重定位条目输出我的文件时,数据都是不正确的.我不确定如何遵循所有重新安置并提供所需的所有信息.可执行文件对我有什么期望?

到目前为止我的方法

我正在尝试以特定的[未记录的]专有格式创建一个重定位文件,该格式主要基于ELF.我编写了一个工具,它接受一个ELF文件和一个部分链接文件(PLF)并处理它们以输出完全解析的rel文件.此rel文件用于根据需要加载/卸载数据以节省内存.该平台是一个32位PPC.一个问题是该工具是用c#编写的,但数据是针对PPC的,因此需要注意有趣的endian问题等.

我一直试图了解在用于解析未解析的符号等时如何处理重定位.到目前为止我所做的是从PLF复制相关部分,然后对于每个相应的.rela部分,我解析条目并尝试修复部分数据并根据需要生成新的重定位条目.但这就是我的困难所在.我离开了我的元素,这种事情似乎通常是由链接器和加载器完成的,所以没有很多好的例子可以借鉴.但是我发现了一些有帮助的东西,包括这一个.

所以发生的事情是:

  1. 从PLF复制部分数据以用于rel文件.我只对.init(无数据),.text,.ctors,.dtors,.rodata,.data,.bss(无数据)和我们正在使用的另一个自定义部分感兴趣.
  2. 迭代PLF中的.rela部分并读入Elf32_Rela条目.
  3. 对于每个条目,我提取r_offset,r_info和r_addend字段,并从r_info(符号和reloc类型)中提取相关信息.
  4. 从PLF的符号表中,我可以得到symbolOffset,symbolSection和symbolValue.
  5. 从ELF,我得到symbolSection的加载地址.
  6. 我计算int localAddress =(.relaSection.Offset + r_offset).
  7. 我从r_offset的symbolSection的内容中获取了uint relocValue.
  8. 现在我拥有了我需要的所有信息,因此我对reloc类型进行了切换并处理数据.这些是我支持的类型:
    R_PPC_NONE
    R_PPC_ADDR32
    R_PPC_ADDR24
    R_PPC_ADDR16
    R_PPC_ADDR16_LO
    R_PPC_ADDR16_HI
    R_PPC_ADDR16_HA
    R_PPC_ADDR14
    R_PPC_ADDR14_BRTAKEN
    R_PPC_ADDR14_BRNTAKEN
    R_PPC_REL24
    R_PPC_REL14
    R_PPC_REL14_BRTAKEN
    R_PPC_REL14_BRNTAKEN
  9. 怎么办??我需要更新节数据并构建随播重定位条目.但我不明白该做什么以及如何做.

我这样做的全部原因是因为有一个旧的过时不支持的工具不支持使用自定义部分,这是该项目的关键要求(出于内存原因).我们有一个自定义部分,其中包含一堆我们想要在启动后卸载的初始化代码(总计大约一兆).现有工具只是忽略该部分中的所有数据.

因此,虽然制作支持自定义部分的自己的工具是理想的,但如果有任何明智的想法以实现这一目标的另一种方式,我全都耳朵!我们已经提出了将.dtor部分用于我们的数据的想法,因为它几乎是空的.但这很麻烦,如果它阻止干净关闭,可能无论如何都无法工作.


重定位加示例代码

当我处理搬迁,我工作过的公式和信息在ABI文档中发现的HERE(约4.13节,第80ish),以及一些我已经挖出了其他代码示例和博客文章.但是这一切都让人感到困惑,并没有真正拼写出来,而且我发现的所有代码都有所不同.

例如,

  • R_PPC_ADDR16_LO - > half16:#lo(S + A)
  • R_PPC_ADDR14_BRTAKEN - > low14*:( S + A)>> 2
  • 等等

所以,当我看到这种代码时,我该如何解读呢?

这是一个例子(来自这个来源)

case ELF::R_PPC64_ADDR14 : {
    assert(((Value + Addend) & 3) == 0); …
Run Code Online (Sandbox Code Playgroud)

reverse-engineering elf opcode relocation symbol-table

18
推荐指数
1
解决办法
7029
查看次数

REPNZ SCAS汇编指令细节

我正在尝试对二进制文件进行逆向工程,以下指令让我感到困惑,有人可以澄清这究竟是什么吗?

=>0x804854e:    repnz scas al,BYTE PTR es:[edi]
  0x8048550:    not    ecx
Run Code Online (Sandbox Code Playgroud)

哪里:

EAX: 0x0
ECX: 0xffffffff
EDI: 0xbffff3dc ("aaaaaa\n")
ZF:  1
Run Code Online (Sandbox Code Playgroud)

我看到它在某种程度上以每次迭代递减1次ECX,并且EDI沿着字符串的长度递增.我知道它会计算字符串的长度,但至于它是如何发生的,以及为什么"al"涉及到我不太确定.

x86 assembly reverse-engineering

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

在IDA Pro中编辑(修补)二进制文件

我想知道如何在ida pro中编辑二进制文件(我只需要更改一条指令!)

(它的ARM二进制文件)

谢谢

binary arm reverse-engineering

17
推荐指数
5
解决办法
3万
查看次数

制作商业Java软件(DRM)

我打算制作一些通过互联网销售的软件.我之前只创建过开源,所以我真的不知道如何保护它免受破解和分发为warez.请记住,我知道两个程序既没有破解或没有真正有用,我认为唯一或多或少可靠的方式可能如下所示:

  1. 连接到服务器并提供许可信息和某种硬件摘要信息
  2. 如果一切正常,服务器将返回绑定到该特定PC的程序的一些关键缺失部分以及2天的使用限制
  3. 关键的东西不会保存到硬盘上,所以每次程序启动时都会下载,如果程序运行超过2天,数据会再次下载
  4. 如果从不同的计算机使用相同的信息,请暂停客户帐户

你怎么看待这件事?这似乎有点限制,但我最好先减少销售,然后最终免费下载我的宝贝杀手级应用程序.无论如何,首先我需要一些基本的理论/教程/指南,关于如何确保用户只使用某个Java应用程序,如果他已付费,所以请建议一些.

谢谢

java protection reverse-engineering commerce

17
推荐指数
3
解决办法
7594
查看次数

如何访问Chrome的在线书签?

通过Google Chrome浏览器,您可以使用自己的Google帐户登录以同步书签和设置.然后将这些书签与我的帐户一起存储在他们的服务器上.

我想为书签创建另一个客户端.请注意,我对从硬盘读取本地书签文件不感兴趣.相反,我想直接连接在线服务器.

因此,我需要访问Chrome用于同步的相同API.有没有办法找出如何使用该API?

api bookmarks google-chrome sync reverse-engineering

17
推荐指数
1
解决办法
8047
查看次数