如何从其他程序控制一个程序

时间:2013-07-21 07:56:08

标签: c++ reverse-engineering dll-injection ollydbg

我想要一些帮助。我知道java和小c ++。我见过可以设置玩家健康状况和产生汽车等的游戏培训师。我想做类似的事情。

例如我们有扫雷运行。当我运行我的java程序并单击一个按钮时,它应该调用minesweepers函数和minesweeper游戏应该显示我赢了。 所以我的问题是如何建立连接或其他程序运行的东西,并通过传递参数调用程序的函数。这怎么可能。我听说过逆向工程并下载了一个名为OllyDBG的程序。还有一个winject dll注入器。我不知道该怎么办。结合所有这些我如何制作一个程序。请给我有用的想法或代码或资源。

2 个答案:

答案 0 :(得分:3)

首先,您需要对扫雷进行反向工程,以找出不同变量的内存位置。请记住,由于上下文,您可能无法运行扫雷功能,但您可以在其上注入代码来运行它们。不过,你可以轻松阅读内存。

要注入代码,必须单独组装,然后将其写入流程虚拟空间。

在Windows API中,有几个函数允许打开进程并访问它内存,但是你必须拥有该权限。

总结:要做到这一点,您需要学习的第一件事是如何反汇编和理解程序。只有这样你才能弄清楚扫雷是多么容易理解。

顺便说一句:扫雷艇将地图原始存储在内存中。一个简单的内存检查器将允许您获取它的地图。

答案 1 :(得分:1)

嗯,你的起始句是: “我已经看过可以设置运动员健康状况和产生汽车等的游戏培训师。我想制作类似的东西。”

这是一个非常好的参考代码,可以完成您在C ++中所讨论的内容 http://www.codeproject.com/Articles/7468/Game-Wizard

首先加强你的C ++技能,然后研究他在那里做的事情。

一般描述是“受害者”进程内存正在搜索某个值。 通常代表您所知道的值的东西 - 例如,角色的子弹数量。 通常首先会找到内存中的大位置列表。 但是,你拍了一颗子弹,现在你搜索的是你之前找到的列表(只有它!)。 每个步骤都会丢弃“误报”查找,直到最后您知道您搜索的变量的位置。 完成此操作后,您也可以更改它。

现在,转到一般主题 - 这种技术只是一种特定的方法,虽然在某些情况下非常有用,但很多时候你需要更强大和不同的工具。

这是一个非常相似的问题:How can I find the data structure that represents mine layout of Minesweeper in memory?

我个人觉得IDA是一个用于逆向工程和分析应用程序(静态和动态)的神奇工具。 结合“idapython”(用于python的ida绑定),它感觉不可阻挡:)

逆向工程要求您至少掌握目标机器架构的基本知识 - 例如,x86指令。

搜索IDA教程以掌握它。 有许多“裂缝”漂浮在周围,这些是破解(用于教育目的)不同类型的应用程序保护的挑战。 它会教你很多。

您还可以搜索谷歌“为初学者进行逆向工程”。 网络上有很多关于这个主题的资源。信息量最初可能令人生畏,因此请确保找到一个可以帮助您逐步建立技能的基本网站。

你应该知道的另一个重要术语是“挂钩”。虽然自己做它会教你最多,但有些库可以为你执行此操作。 我们的想法是控制某个功能。 每当有人调用该函数时,控件首先会传递给您的代码,您可以决定该怎么做。 例如,您可以决定只是将此调用记录到文件并调用原始函数, 或者你可以做更复杂的事情。

我发现http://tuts4you.com/包含许多有用的教程和信息片段。

哦,正如人们所说,在这种情况下,Java不是你的朋友。 C / C ++ /汇编可能是。

开始一个全新的话题,特别是逆向工程在开始时很棘手,但我可以向你保证这是非常有益的。

编辑: 我有个惊喜给你: http://www.uninformed.org/?v=1&a=7

我只是谷歌搜索反向工程教程扫雷车;)

祝你好运:)

相关问题