逆向工程战争故事

时间:2008-10-10 21:05:58

标签: reverse-engineering

有时您没有源代码,需要对程序或黑匣子进行反向工程。任何有趣的战争故事?

这是我的一个:

几年前我需要重写一个我没有源代码的设备驱动程序。设备驱动程序在旧的CP / M微型计算机上运行,​​并通过串行端口驱动专用的照排机。几乎没有关于照相排版机的文件可供我使用。

我最终在DOS PC上乱砍了一个串口监视器,模拟了照相排版机器的响应。我将DOS PC连接到CP / M机器,并在我通过CP / M机器输入数据时开始记录来自设备驱动程序的数据。这使我能够找出设备驱动程序使用的握手和编码,并为DOS机器重新创建一个等效的。

13 个答案:

答案 0 :(得分:43)

答案 1 :(得分:40)

答案 2 :(得分:10)

早在90年代初,我就忘记了我的Compuserve密码。我在CIS.INI中有加密版本,所以我编写了一个小程序来进行明文攻击和分析,试图对加密算法进行逆向工程。 24小时后,我弄清楚它是如何工作的以及我的密码是什么。

在此之后不久,我进行了清理并将程序作为免费软件发布,以便Compuserve客户可以恢复丢失的密码。公司的支持人员经常会将这些人介绍给我的计划。

它最终进入了几个公告牌(还记得吗?)和互联网论坛,并被收录在一本关于Compuserve的德国书中。它仍然漂浮在某处。事实上,Google带我straight to it.

答案 3 :(得分:10)

好吧,这不是逆向工程(相当),而是一个简单的硬件黑客,它源于纯粹的挫败感。我是90年代初期西南贝尔手机服务区域的IT经理。我的IT部门资金严重不足,所以我们把钱花在聪明人而不是设备上。

我们在主要城市之间设有WAN,专门用于客户服务,具有关键IP链接。我们的公司老板坚持要求我们安装一个网络监控系统,以便在线路出现故障时通知我们(没有资金用于冗余,但花费大量资金来处理故障。叹气。)

强烈建议的解决方案是在SPARC工作站上运行,起价为30,000美元加上SPARC站的费用(当时约为20,000美元),这是我预算的很大一部分。我看不到它 - 这是浪费$$。所以我决定有点黑客行为。

我带了一台计划销毁的老电脑并放了一份ProComm(还记得ProComm吗?)并让它沿着路线ping每个所需节点(这是ProComm的后续版本之一,脚本化FTP以及串行线路,KERMIT等。当无法到达节点时,编码中的一点逻辑触发了寻呼机消息。我已经用它来为我们的技术人员拼凑一个寻呼机系统,所以我重新使用了寻呼机代码。该脚本连续运行,每分钟在每个关键链接上发送一次ping,并在未返回ping时分支到寻呼机代码。

我们在每个关键位置复制此系统,成本低于500美元,并在链接断开时发出非常快速的通知。下一期 - 我们的第一个故障排除方法之一就是对我们的路由器和/或终端服务器进行电源循环。我有一些拨号X10控制器和一些X10开/关设备电源开关。您必须知道要使用的正确电话号码和正确的音调,但我们为每位技术人员打印了一张作弊卡,并将其与寻呼机保持在一起。即时快速响应!然后,我的一位技术人员编写了我们所有人必须在每个站点重置特定设备作为快速拨号的电话。 One-tech解决了这个问题!

现在“告诉你了”揭幕。

我和我们在达拉斯的公司网络经理坐在一起吃饭,他坚持购买基于Sun的网络管理产品。我得到一个页面,其中一个链接已关闭,然后是第二页。由于寻呼机消息来自两个不同的服务器,我确切知道涉及哪个路由器(这是一个设置,我知道无论如何,因为与我会面的技术人员在用餐期间排队等候“路由器”,所以我们可以炫耀。)我向经理展示寻呼机消息并询问他将如何解决这个问题。他怀疑地看着我,因为他还没有成功地被他的Solaris NMS系统分页,该系统应该跟踪关键链接。 “好吧,我想你最好打电话给技术人员,让他们重置路由器,看看是否能修复它。”我转向跟我们一起吃午餐的技术人员,请他处理。他抽出手机(这次是在桌子上方)并按下他编程的快速拨号盘来重置有问题的路由器。电话拨打了X10交换机,告诉它关闭路由器电源,暂停5秒钟,告诉它启动路由器,然后断开连接。我们的ProComm脚本向我们发送了页面,告诉我们在此例程的三分钟内链接已恢复。 :-)

企业网络经理对此印象深刻。他问我新系统的成本是多少。当我告诉他不到1千美元时,他就是中风。他刚刚为我所说明的任务订购了一套大的Sun Solaris网络管理解决方案。我认为他花了大约15万美元。我告诉他魔术是如何完成的,并以午餐价格向他提供了ProComm脚本。 TANSTAAFL。他告诉我,他会给我买午饭让我闭嘴。

清理掉旧的磁盘抽屉等,我找到了代码的副本 - “Pingasaurus Rex”就是我给它的名字。那是过去的好日子。

答案 4 :(得分:9)

有一次,当玩Daggerfall II时,我买不起Daedric Dai-Katana,所以我对这个游戏进行了十六进制编辑。

虽然很严肃,但多年前我设法使用SoftICE删除了我父亲AutoCAD安装上的加密狗检查。这是在互联网很大之前。他是一名工程师,所以他有一份合法的副本。他刚刚忘记了加密狗的工作,他需要做一些事情,我认为这将是一个有趣的挑战。之后我非常自豪。

答案 5 :(得分:7)

对我来说最痛苦的是这个产品,我们想在Excel电子表格中包含一个图像(几年前就是开放标准之前)。因此,如果存在文档的内部格式,我必须得到并“理解”。我最终在有和没有图像的文件之间进行了一些Hex比较,以找出如何将它放在那里,再加上一些小端数学....

答案 6 :(得分:7)

我曾经研究过一种工具,可以在登录网络时从PC收集库存信息。我们的想法是跟踪贵公司的所有PC。

我们有一个新的要求来支持Banyan VINES网络系统,现在已经很久没有被遗忘,但在它出现的时候非常酷。我无法弄清楚如何从Banyan的适配器获取以太网MAC地址,因为没有文档化的API来执行此操作。

在网上挖掘,我找到了一个其他榕树书呆子发布的程序,执行了这个确切的操作。 (我认为它会将MAC地址存储在环境变量中,因此您可以在脚本中使用它)。我试着写信给作者,以了解他的计划是如何运作的,但他要么不想告诉我,要么想要一些荒谬的资金来获取信息(我不记得)。

所以我简单地启动了一个反汇编程序并将他的实用程序拆开了。事实证明他正在对服务器进行一次简单调用,这是Banyan API中未记录的功能代码。我很容易搞清楚这个电话的细节,它基本上是通过RPC向服务器询问这个工作站地址,MAC是Banyan网络地址的一部分。

然后,我只是通过电子邮件向Banyan的工程师发送电子邮件,告诉他们我需要做什么。 “嘿,似乎RPC函数528(或其他)返回我需要的东西。这样可以安全地调用吗?”

榕树工程师非常酷,他们证实我发现的功能是正确的,并且不太可能消失。我写了自己的新代码来调用它,然后我就开始运行了。

多年以后,我使用了基本相同的技术来对未记录的文件格式的非文档压缩方案进行逆向工程。我找到了一个鲜为人知的支持工具,该工具由(现已解散)公司提供,可以解压缩这些文件,并对其进行逆向工程。事实证明,这是一种非常简单的Lempel-Ziv变体,适用于其文件格式的块结构。该作品的结果将在Wireshark source code中为后代录制,只需搜索我的名字。

答案 7 :(得分:6)

大约10年前,我在当地一家书店的便宜货箱里拿起UFO / XCOM珍藏版,主要是出于怀旧情绪。当我回到家时,我有点兴奋它已被移植到Windows(DOS版本没有在win2k下运行)......然后对它的图形乱码感到失望。

我正要耸耸肩膀(讨价还价和所有),但后来我的朋友说:“你以前没有......以前修好过的软件吗?”,这导致了一个晚上喝了很多可乐和与我的朋友一起出去时进行逆向工程。最后,我写了一个修正了音高与宽度问题的bugfix加载器,最终可以在没有启动旧硬件的情况下播放两个第一个XCOM游戏(DOSBOX还没有,我的机器功能不够强大全面虚拟化)。

加载程序获得了一些人气,甚至在STEAM重新发布游戏的过程中分发了一段时间 - 我认为他们现在已经切换到了dosbox。

答案 8 :(得分:4)

我为Atari ST编写了一个支持Wacom平板电脑的驱动程序。一些Wacom信息可以在他们的网站上找到,但我仍然需要自己弄清楚。

然后,一旦我编写了一个库来访问wacom表(以及一个显示结果的测试应用程序) - 我突然意识到OS没有用于实际放置鼠标光标的操作系统(GEM窗口系统)的API某处。我最终不得不在称为VDI的东西中挂钩一些中断(比如Windows中的GDI),并且非常小心不要让计算机内部崩溃。我从VDI(NVDI)加速版的开发者那里获得了一些帮助(以建议的形式),所有内容都是用PurePascal编写的。我偶尔会有人问我如何在GEM中移动鼠标光标等。

答案 9 :(得分:2)

我不得不对一个视频处理应用程序进行逆向工程,在那里我只有部分源代码。我花了几周甚至几周的时间来完成控制流,因为它一直使用CORBA来调用自己,或者在应用程序的某些部分从CORBA调用我无法访问。

纯粹的白痴。

答案 10 :(得分:2)

我最近写了一个应用程序,它使用Curl从Domino Webmail服务器下载整个内容。这是因为运行服务器的转包商要求每个存档请求几百美元。

他们在我为部门发布应用程序大约一周后改变了他们的网络邮件版本,但设法使用大量的正则表达式和XML再次使用

答案 11 :(得分:2)

当我在高中时,他们每周都会引入特殊时间(如果我没记错的话,还有3个小时)我们必须在那里选一间教室,帮助解决有关他们主题的任何问题。当然不是每个人都想花时间在电脑室里玩电脑。

要选择你必须去的房间有一个应用程序可以监控有多少学生去某个房间,所以你必须按时预订你的插槽或者没有多少选择去哪里

当时我总是喜欢在那里的电脑上玩游戏,而且我已经获得了管理员访问权限,仅适用于对我这么多没用的应用程序。因此,我使用管理员访问权限制作应用程序的副本并将其带回家进行检查。现在我不记得所有细节,但我发现这个应用程序使用了隐藏网络共享上的一些访问数据库文件。然后在获取此数据库文件的副本后,我发现数据库上有一个密码。使用一些Linux访问数据库工具,我可以轻松地解决这个问题,之后很容易在我自己的mysql服务器中导入这个数据库。 然后,通过一个简单的网络界面,我可以找到学校每个学生的详细信息,以便改变他们的位置,并促使自己每次都坐在我选择的房间里。

下一步是编写我自己的应用程序,这样我就可以从列表中选择一个学生并更改任何内容,而无需查找仅在几个小时内实现的密码。

虽然这个帖子中的其他人不是一个非常令人印象深刻的故事,但我仍然记得那时为一个高中生做的事情很有趣。

答案 12 :(得分:0)

不是个人故事,但仍然是一本很好的读物:From the Eye of a Legal Storm, Murdoch's Satellite-TV Hacker Tells All