如何用IDA Pro分析破解crackme的函数调用(sub_41A1b8)?

How to analyze the function call (sub_41A1b8) for solving crackme with IDA Pro?

请提示代码中哪里有条件检查?如何定义,IDA Pro 中 crackme 的密码是 "Benadryl"?据我了解,如果密码正确,则会调用 "call sub_4038D0" 函数,我们跳转到 loc_42D555。帮助理解它是如何工作的?

如果设置了零标志,

jz short loc_42D555 跳转到 loc_42D555。否则执行下一条指令。

请注意,下一条指令是引用失败字符串 ("Wrong code DUDE") 的地方。另请注意,loc_42D555 是引用成功字符串 ("Thanks you made...") 的地址。

因此,如果在 jz short loc_42D555 指令处设置了零标志,那么您可能已经解决了 crackme。

在前面的指令中,调用了sub_41A1b8函数。如果 eaxedx 中引用的字符串(在本例中,您的输入字符串和 "Benadryl")中引用的字符串相等,则此函数很可能设置零标志,但您需要分析 sub_41A1b8 函数来确定这一点。

要理解这一点,您需要学习 x86 汇编。有 plenty of tutorials 可以帮助您入门。