我对逆向工程完全陌生,但是我遇到了一个挑战,他需要一个朋友来破解他编写的计算机程序。以前从未做过此事,我的在线研究建议我使用OllyDbg搜索尝试提供无效代码时给出的错误消息。问题是,如果代码无效,则永远不会启用用于提交代码的按钮。我可以使用OllyDbg查找单击该按钮然后以某种方式覆盖它会发生什么情况吗?

这里是我对该程序的全部了解:


我无法访问源代码,也不知道它是用什么语言编写的。它使我看不到它。

鉴于我以前从未涉足逆向工程,那么我最好的攻击计划是什么,我将如何进行?

评论

我建议您阅读Lena的教程以熟悉基础知识。

#1 楼

如果您对二进制RE的经验很少,我建议您先准备很多未知的信息,这些信息会“扔给”您,时间和耐心:-)。

现在进入主题。要完成您正在谈论的工作,您将需要工具,并且需要充分了解它们:Olly-对二进制文件进行动态分析。您已经拥有的一个,我希望已经打开它以获得现在的工具。

IDA-进行静态分析。它将帮助您浏览二进制文件。您可以从提供的链接下载免费版本,该版本足以满足您的任务。
CFF浏览器-了解二进制文件的类型,并了解其依赖项和资源。

下一个,据说二进制文件不会被混淆:


尝试执行二进制文件并研究其行为,并记笔记-字符串(标题,消息),按钮名称。给它一些输入并寻找结果。
基于二进制类型:


.Net


本机



将其加载到IDA中,并检查是否可以从注释中找到/验证二进制文件中的数据。
因为这是GUI应用程序,所以我会在GetMessageTranslateMessageCreateWindow的区域中与MSDN进行检查,并查找负责处理窗口消息的Window proc。


上述之后,我还建议像@Dominik一样,仔细阅读Lena的教程,以涵盖您的二进制类型所需的所有信息。

我认为以上内容可以帮助您找到所需的关键。
从正在进行的分析中添加更多信息,我们将尝试提供另一种帮助。 !

评论


谢谢你的解释。这可能会花费我一些时间,因为不仅我对逆向工程一无所知,而且我也没有使用OllyDbg的经验,所以这里有两条学习曲线。

–DaveTheMinion
15年5月19日在18:03

#2 楼

我认为您的朋友没有将反调试和打包二进制文件之类的技巧作为您的第一个挑战。假设不适合回答问题,那么您下次应该提供更多详细信息:)我将如何处理:

通过Lena的教程。应用程序是用什么编写的。

有多种工具,例如:PEID或ProtectionID。
可以在这里找到更多信息。和他们一起玩:)



所以,从它的声音中,您的朋友有这样的地方:
因此,我们知道,如果文本框包含右键,则该按钮将被激活。在输入右键并按下按钮之后,也可能会出现祝贺消息。由此,您可以假定将具有启用按钮或MessageBox窗口的功能。

最终,应用程序中某处会出现一个条件,该条件决定您是否拥有正确的密钥,如果不涉及任何欺骗,则密钥本身将位于应用程序中某处。
Olly将向您展示机器语言,条件(if)将转换为跳转操作数(jejzjne,...)。



(在这种情况下,操作是启用按钮并显示消息)这些,现在是时候环顾四周了。运行该应用程序,附加Olly,或者您可以从olly启动您的应用程序,并将其设置为在主要功能上中断。这可能很方便,因为从那里您可以逐步遵循应用程序的执行流程。现在,您知道要查找什么功能。放置一些断点并观察。列出二进制文件中的所有字符串。查看是否有任何看起来像硬编码的密码。

如果找到确定输入是否正确的代码,则可以对其进行修补,也可以简单地找到硬编码的密码并输入而无需修改(修补)二进制文件。

如果精疲力尽,想要继续面对更高级的挑战,那就去crackmes.de。

评论


谢谢你的解释。这可能会花费我一些时间,因为不仅我对逆向工程一无所知,而且我也没有使用OllyDbg的经验,所以这里有两条学习曲线。

–DaveTheMinion
15年5月19日在18:03

如果您听我的话,那么您可以从Lena的教程开始,这实际上是到目前为止我发现的最好的教程,并且从一开始就解释了所有内容。它也完全专注于您的朋友为您制作的这类应用程序。

–多米尼克·安塔尔(Dominik Antal)
15年5月19日在18:34

我现在正在检查Lena的教程。

–DaveTheMinion
15年5月19日在18:39

#3 楼

下面的说明仅适用于本机应用程序:
如果您想了解如何找出按钮事件发生的位置,建议您学习以下语言的编码:ASM,C ++和Delphi(至少获得通用语言)方法)。然后,尝试在已编译的文件中查找代码发生事件的地方。 .com / f / showthread.php?11276

评论


“ Delphi”不是语言,而是IDE。该语言是Pascal的面向对象方言。

–杂件
15年5月22日在13:35

“ Delphi”是一种语言... Wiki:en.wikipedia.org/wiki/Delphi_(programming_language)

– Yaser Al-Najjar
2015年5月23日在3:37



#4 楼

在该函数的开头设置一个断点,命中该断点,然后逐步查看会发生什么。确实,这是最干脆的答案。