【发布时间】:2016-05-30 16:58:24
【问题描述】:
请提示在代码中哪里有条件检查?如何定义,破解我的密码是 IDA Pro 中的“Benadryl”?据我了解,如果密码正确,则会调用“call sub_4038D0”函数,我们会跳转到loc_42D555。帮助理解它是如何工作的?
【问题讨论】:
标签: reverse-engineering cracking ida
请提示在代码中哪里有条件检查?如何定义,破解我的密码是 IDA Pro 中的“Benadryl”?据我了解,如果密码正确,则会调用“call sub_4038D0”函数,我们会跳转到loc_42D555。帮助理解它是如何工作的?
【问题讨论】:
标签: reverse-engineering cracking ida
如果设置了零标志,jz short loc_42D555 会跳转到 loc_42D555。否则执行下一条指令。
请注意,下一条指令是引用失败字符串(“错误代码 DUDE”)的地方。另请注意,loc_42D555 是引用成功字符串(“Thanks you made...”)的地址。
因此,如果在jz short loc_42D555 指令处设置了零标志,您可能解决了crackme。
在前面的指令中,调用了sub_41A1b8 函数。如果eax 和edx 中引用的字符串(在这种情况下,您的输入字符串和“Benadryl”)相等,则此函数很可能会设置零标志,但您需要分析sub_41A1b8 函数才能知道这一点肯定的。
【讨论】:
sub_41A1B8 函数中发生了什么,是的,您需要分析该函数。您可以使用 OllyDbg 之类的调试器介入,或者直接双击 IDA 中的函数名称。话虽如此,如果你不先学习 x86 汇编的基础知识,这个练习的价值就完全丧失了。否则您将无法明确理解该功能。