问题标签 [reverse-engineering]

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 投票
11 回答
25413 浏览

javascript - 谷歌的无图像按钮

最近有几篇关于谷歌新的无图像按钮的文章:

我真的很喜欢这些新按钮在 Gmail 中的工作方式。如何在我的网站上使用这些或类似的按钮?是否有任何具有类似外观和感觉的开源项目?

如果我想使用 JQuery/XHTML/CSS 像这样滚动我自己的按钮包,我可以使用哪些元素?我最初的想法是:

  1. 使用 css 改进外观的标准<input type="button">(设计文章主要讨论了 css/imges 所涉及的内容。)

  2. Jquery javascript 会弹出一个自定义对话框,该对话框植根于“onclick”事件上的按钮,其中包含<a>标签和用于过滤的搜索栏?该弹出窗口的表格布局是否合理?

我对网络上的东西进行逆向工程很糟糕,我可以使用哪些工具来帮助对这些按钮进行逆向工程?使用 Firefox 的 Web 开发人员工具栏,我看不到按钮弹出对话框中使用的 css 或 javascript(即使它已被缩小)。我可以使用什么浏览器工具或其他方法来查看它们并获得一些想法?

我不想窃取任何 Google 的 IP,只是想知道如何创建类似的按钮功能。

0 投票
5 回答
17372 浏览

encoding - 解密 MMORPG 协议编码

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

棘手的部分是弄清楚他们如何编码他们的协议......要让机器人四处奔跑很容易,只需让角色运行并记录它在wireshark中所做的事情。但是,解释环境更加困难......如果您空闲,它每秒会收到大约 5 个数据包,因此会有很多垃圾。

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

  1. 有谁知道我在哪里可以获得允许数据包注入的代理或我可以在哪里执行数据包注入(不是通过硬件,就像无线或任何东西一样!)
  2. 我在哪里可以找到重新发送捕获的数据包的服务器/代理(即:重放连接)。
  3. 有更好的模式匹配工具或方法吗?可以从多条消息中突出显示模式的东西会很棒。

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

0 投票
2 回答
1395 浏览

windows - 如何在 Windows 应用程序中对加扰数据包进行反向工程?

我有一个 Windows exe 应用程序,用于将数据包明文发送到服务器。这个应用程序(让我们称之为客户端应用程序)绝对是封闭源的,但是一些聪明的黑客对二进制文件进行了十六进制编辑,并让它发送被加扰的数据包。

现在,显然,这些数据包以一种可破译的方式进行了加扰(否则服务器将无法理解它),但我想做的是编写一个仿真器来模拟这个二进制应用程序,将相同的数据包发送到服务器,并且能够解读响应(如果它被加扰)。

十六进制客户端需要额外的 dll 才能运行,而旧客户端则不需要。我假设十六进制客户端设法以某种方式加载该dll(让我们称之为client.dll)并且该dll的功能是通过连接到一些重新路由从发送的所有数据包的windows api来实现加扰/解扰client.exe 进程。

如果有人可以指导我如何开始研究这一切是如何工作的,以及我如何对加扰进行逆向工程,那将非常感激。

我不知道要提供什么样的信息,但如果有任何不足,请回复,我会发布更多详细信息,如果有人想要二进制文件,我很乐意提供。


任何感兴趣的各方的二进制下载:

http://dl.getdropbox.com/u/46623/client.dll

http://dl.getdropbox.com/u/46623/newClient.exe

http://dl.getdropbox.com/u/46623/originalClient.exe

这些不会运行,因为需要资源文件 - 它们大约 3 gig,所以太大而无法上传到任何地方。名称已更改以保护有罪 =) ,但这可能不保护 dll 的名称...

0 投票
8 回答
7396 浏览

reverse-engineering - 逆向工程在哪里使用?

我问自己在哪里使用逆向工程。我有兴趣学习它。但我不知道我是否可以/应该把它放在我的简历上。

我不希望我的新上司认为我是一个邪恶的黑客之类的。:)

  • 那么值得吗?
  • 我应该学习它还是将精力放在其他地方?
  • 有没有好的书或教程?:)
0 投票
3 回答
22569 浏览

c++ - 如何反汇编 Pro*C/C++ 程序?

有没有办法反汇编 Pro*C/C++ 可执行文件?

0 投票
5 回答
1662 浏览

algorithm - 识别二进制文件中的算法

你们中是否有人知道在已编译的文件中识别算法的技术,例如通过测试某些模式的反汇编?

我所拥有的罕见信息是库中有一些(未导出)代码可以解压缩 Byte[] 的内容,但我不知道它是如何工作的。我有一些我认为以未知方式压缩的文件,看起来这些文件没有任何压缩头或尾。我假设没有加密,但只要我不知道如何解压缩,它对我来说毫无价值。

我拥有的库是用于低容量目标的 ARM9 二进制文件。

编辑:这是一种无损压缩,存储二进制数据或纯文本。

0 投票
2 回答
269 浏览

winapi - 用符号反汇编 Win32 DLL

我搜索了谷歌,发现了大量的工具和答案。我想将 DLL 分解成至少可读的东西,例如通过名称识别 Win32 API 调用等。我该怎么做?

0 投票
10 回答
21437 浏览

debugging - 你最喜欢的反调试技巧是什么?

在我以前的雇主中,我们使用了一个第三方组件,它基本上只是一个 DLL 和一个头文件。该特定模块在 Win32 中处理打印。但是,制造该组件的公司破产了,所以我无法报告我发现的错误。

所以我决定自己修复错误并启动调试器。我很惊讶地发现反调试代码几乎无处不在,通常IsDebuggerPresent是这样,但引起我注意的是:

乍一看,我只是跳过了被调用两次的例程,然后事情就变得一团糟。过了一会儿,我意识到位旋转的结果总是一样的,即 jmp eax 总是直接跳到mov eax, 0x310fac09指令中。我剖析了这些字节,它是用于测量 DLL 中一些调用之间所用时间0f31的指令。rdtsc

所以我的问题是:你最喜欢的反调试技巧是什么?

0 投票
2 回答
1747 浏览

debugging - 调用本机 C DLL 时尝试读取或写入受保护的内存

我有一个本机 C dll,它导出除 DllEntryPoint、FuncX 之外的一个函数。我试图找出 FuncX 如何与它的调用者通信,因为它有一个 void 返回类型并且没有参数。当我从 C# 工具调用它时,我得到一个 AccessViolationException - 试图读取或写入受保护的内存。

我有一种预感,它的客户端应用程序可能会分配一个缓冲区来发送或接收来自 dll 的值。这是一个有效的预感吗?

我无法调试客户端应用程序,因为由于某种原因它没有运行,所以我无法启动它并附加到进程。但是,我可以在 IDA Pro 中对其进行反汇编,但如果可以的话,我不知道如何尝试在其中调试它。

0 投票
8 回答
3213 浏览

c# - 保护我的代码免受逆向工程

正如在此处此处的类似问题中所讨论的,我想保护我的代码免受逆向工程的影响。

我的情况就像Simucal在他的(优秀)回答中所描述的那样

基本上,归根结底,您成为源盗窃目标的唯一机会是,如果您有一些与您的域相关的非常具体、难以设计的算法,可以让您在竞争中占得先机。这几乎是唯一一次尝试对应用程序的一小部分进行逆向工程具有成本效益。

我正好有这种情况。一种难以设计的算法,它对我们的特定领域来说既优雅又有价值。

经过几个月的微调和开发,最终结果非常紧凑(大约 100 行代码)且优雅。我想保护代码的这个特定部分免受逆向工程的影响,或者至少让它变得合理困难。

该场景是一个用 C# 编写的富客户端应用程序,我必须部署这部分代码 - 我无法从 Web 服务执行它。

我认为由于性能原因(和跨界问题),提取代码并将其重写为非托管本机二进制文件不是一种选择。

最初我想做简单的混淆,但考虑到代码的体积很小,我认为这不会提供太多保护。

理想情况下,我想保护我的整个应用程序,但有两个主要问题似乎使普通混淆器和 3rd 方打包器难以使用:

  1. 应用程序提供了一个插件接口,因此一些程序集(和接口/类)不应该被混淆和打包

  2. 我们仍然希望在收到错误报告时能够获得真正的堆栈跟踪——这可能是通过我将混淆映射到真实代码来完成的。

撇开这些问题不谈(尽管我也希望对此有任何意见),什么是保护我的一小部分代码免受逆向工程的好方法?我不关心任何人更改或破解代码,但希望使其难以理解和逆向工程。