直到我使用如下技术反转简单的keygen应用程序之时:
看有关字符串文本的参考信息,以找到有趣的代码区域。
进行键gen钓鱼。
并绕过
IsDebuggerPresent
检查。是的,我知道,这确实是基本内容。这是一个与我通常的工作类似的视频:
http://www.youtube.com/watch?v=tJY_Tv7o5bE
仅供学习有时我会尝试撤消我在Windows上购买的一些中小型应用程序,看起来像没有很多保护的简单产品。
这是我两个月前购买的软件,整个安装过程约为50MB 。在这里尝试应用我的基本知识的动机之一是因为我想看看我在keygen中学习的内容是否真的可以在现实生活中工作,我的经验是,由于keygen很小并且很容易找到例程,因此中等软件要难得多你要。 :)
**为了明确起见,我已经获得了该程序的许可,我的目的只是学习和增加我的知识。由于我没有破坏它的商业意图或造成任何损害,因此我不会透露该申请-希望您理解。 **
好,走吧。该应用程序包含一个主要的可执行文件(〜33MB),6个DLL(非常小的DLL,其中一些是
libeay32.dll
等)和大约90个.xsd
文件(XML格式)。我的第一步是尝试确定所使用的编程语言,如果有包装工具,请查看以下屏幕截图:它确实似乎是在Delphi中开发的,我证实了CFF。另外,没有一节指向包装员查看CFF信息和EXE信息,RDG也说这很干净。但是,RDG发现了
IsDebuggerPresent
,并指出您可能会看到一种保护软件。但是,我不确定它是否为假阳性。在我的应用程序中,序列是在这样的字段中输入的:
一旦输入了错误的序列号(长度为30个字符),我会收到如下消息:
我猜这不是
MessageBox
,或者至少是非常定制的。对于这种消息,我应该在MessageBoxA
等处保留断点吗?还是有不同的API?当我附加到正在运行的应用程序后,以下是屏幕截图:
当我按下“运行”时在OllyDbg上,我得到的是:
这里是SEH链的列表:
这里是可用的“ Windows”,包括我想拆卸,检查并放置断点的Windows:
但是调试失败,请参见下文,请:
是某种保护吗?如何禁用这部分代码,放置断点等?
查看“文本字符串引用”,我只能看到部分消息,而看不到自定义“
MessageBox
”上显示的消息。 br /> 此外,有很多部分看起来像一条消息,它们会即时完成,例如“ A chave informationata esta”,意思是“他们输入的密钥是”或“查韦不正确n”,表示“键输入错误”。
[img] http://img5.imageshack.us/img5/3382/11ionlyseetextstringsre.png [/ img]
此外,当某些文本未存储为“ TextString”时,我注意到这是应用程序的一部分,相反,我在OllyDbg上依次看到“ char by char”创建了一些字符串(对我来说也不太有用) )。
如果我在这些TextString中的任何一个处定义了断点,则会发生-例外:知道如何绕过它吗?
从这里,我唯一能做的就是将控制权传递给应用程序,一切都结束了。 :(
此外,如果我拒绝将控制权传递给应用程序,而我继续使用F7 / F8,则会得到类似的信息:
它以OllyDbg无法识别的指令结尾。
我还尝试在
user32.dll
的名称中设置断点,例如GetDlgItemTextA
和GetDlgItemTextW
,因为我认为它们是用于读取输入序列的API数字。奇怪的是它们是导出的,而不是导入,如下所示。这是正常的吗?一旦我创建了断点并声明进入其中,就可以了再次出现异常,我被迫将控制权再次传递给应用程序和游戏。:(
我认为这可能是一些基本的反调试保护,所以我启用了具有许多选项的“ aadp4olly”和“ Olly Advanced”,但无法解决问题,因此,我不确定问题是什么。
所有帮助和答案都非常赞赏,但请e,请记住,我是一个初学者。
**已更新**
大家好,
感谢您的回答,但是它不能解决整个问题。请查看下面的详细信息。
首先,我通过以下链接更新了PEid数据库:
https://code.google.com/p/reverse-engineering-scripts/ downloads / detail?name = UserDB.TXT
以下屏幕截图演示了PE的详细信息:
http://img444.imageshack.us/img444/8295/16pedetails.png
以下是有关PE部分的详细信息:
对于未打包的二进制文件有些奇怪,对吗?但是我找不到正确的打包程序。
http://img5.imageshack.us/img5/5764/17pesections.png
熵和快速检查说“未打包”,但EP检查点已打包:
http://img571.imageshack.us/img571/6251/18epappearstobepacked.png
以下是找到的原始EP:
http://img12.imageshack.us/img12/990/19originalep.png
RDG Packer Detector指出存在黑曜石保护,但是我想这是一个误报。请参阅解压程序无法识别格式:
解压程序可在此处使用:http://down.52pojie.cn/Tools/Unpackers/
http:// img29 .imageshack.us / img29 / 7 / 20obsidiumunpackingfail.png
此外,用于OllyDB的出色的Ferrit反抗调试脚本还不足以允许我对其进行调试。请参见以下内容:
http://img836.imageshack.us/img836/4352/21ferritantiantidebugis.png
http://img42.imageshack.us/img42/ 8721 / 22ferritantiantidebugis.png
从这里开始,我被迫将控制权交给应用程序,并且失去了对if的控制,正如我在第一篇文章中所展示的。我试图冻结所有线程,仅使主线程保持运行状态,但仍继续失败。
Resource Hacker无法读取Delphi资源:
http:// img812。 imageshack.us/img812/9861/23resourcehackerfailsto.png
即使Resource Hacker FX失败,因为它说使用新版本的Delphi进行编译。
http:// img560。 imageshack.us/img560/7538/24resourcehackerfxfails.png
Delphi反编译器也失败了。首先,我尝试附加到目标:
http://img11.imageshack.us/img11/89/25dedeattachingtotarget.png
分析完成后便找到了类信息:
http://img600.imageshack.us/img600/5935/26dedeloadedtarget.png
但是重要的是“表单”和“过程”,什么都没有找到:
http://img600.imageshack.us/img600/986/27dedeisunabletofindany.png
IDR(交互式Delphi重构器)似乎也没有用,因为目标应用程序是使用Delphi 2011或2012编译的,并且此版本没有定义文件。有建议吗?
再次感谢您的帮助和努力。
**更新**
#1 楼
看看R4ndom关于使用Delphi二进制文件并破解它们的教程#17:http://thelegendofrandom.com/blog/archives/1472他描述了如何使用Resource Hacker(我更喜欢XN资源编辑器)以找到用于调用您要查找的对话框的表单的事件处理程序。
了解了您感兴趣的表单后,下载DeDe并将其加载到该应用程序中。 DeDe完成分析之后,单击“表单”选项卡,您将看到与该表单关联的所有事件处理程序(OnClick可能是您在此处查找的内容)。使用事件处理程序的名称,单击“过程”并找到事件,您将看到其地址。
从此处,在OllyDbg中加载应用程序,在您感兴趣的事件处理程序的地址上设置一个断点。这应该使您靠近注册对话框提示您的位置。 R4ndom教程可以从那里描述任何必要的后续步骤。
评论
嗨,米克·格罗夫,谢谢您的回答。有点复杂。请检查我对原始帖子的更新。再次感谢您的所有帮助和努力。最好的祝福。
– Araujo
13年5月9日在23:54
#2 楼
我不确定您的情况是否如此,但是一个常见的反密钥生成/调试技巧是压缩要断点的代码部分,并在运行时覆盖它们。这样,如果在初始加载时修补了int3,则重新加载将重新初始化文本部分并删除断点。它具有更广泛的应用,但这将是一个简单的应用。
评论
解决此问题的方法当然是使用硬件断点。
– amccormack
13年5月6日19:32
如果存在aslr或其他随机技术,则不会
–RobotHumans
2013年5月6日23:26
好点子。我没想到。
– amccormack
13年5月9日在4:48
大家好,谢谢回答。那么这种情况下的解决方案是什么?根据我更新的原始帖子,您认为这可能适用于我的目标?谢谢。
– Araujo
2013年5月9日23:57
您可以通过更新与keygenme的链接来获得更好的响应。如果我忽略了它,那就说...
–RobotHumans
13年5月10日在0:09
#3 楼
您可以使用IDR(交互式Delphi Reconstractor)在delphi代码RE流程中协助您。这是一个很棒的工具。
评论
请说明为什么它是一个很棒的工具。答案不仅是为OP写的,而且是为将来可能遇到此问题的所有其他人写的。因此,合理性也将使其对其他所有人也有用。
–asheeshr
13年5月9日在1:59
嗨,Hanan N.,我尝试过,但是由于它是用Delphi 2011或2012编译的,因此对我来说是没有用的。请检查我更新的帖子。非常感谢。最好的祝福。
– Araujo
13年5月9日23:58
自2012年12月29日起,IDR支持Delphi 2011和2012
–user1974
13年5月11日在17:09
@crypto因为在此答案中已经提到IDR,所以最好对其进行注释,然后将信息编辑到该信息中,而不是编写另一个多余的答案。由于您都还没有声誉,我建议您环顾四周,看看是否有什么可以回答的,或者问几个问题。获得50个代表后,您就可以进行编辑和评论。
–asheeshr
13年5月12日在2:04
评论
Delphi将自己的“消息框”实现为MessageDlg,这很可能是您所看到的。这是一个很好的第一个问题。希望有人会给出更具体的答案,但是在那之前,您是否看过关于tuts4you的Lena教程?他们从基本开始,但很快就无法击败代码保护。
@amccormack:我很想投票关闭,但后来决定对其进行编辑。您仍然可以在修订历史记录中看到它的状态,真是令人遗憾。
您可以减少图像数量吗?只需链接到非必需的链接即可。加载需要很多时间。
真的很难告诉您这个问题的具体目标是什么,您应该在帖子末尾总结您的问题并删除一些图片。