1、准备一台Android root后的设备,CrackMe1是一个ELF可执行文件,可在Android中独立执行
2、通过adb(Android SDK中默认带有adb工具)将CrackMe1 push到远程Android设备中,建议放在/data/local/tmp目录下
3、打开adb shell,执行su命令进入root权限的shell,使用“chmod 777 /data/local/tmp/CrackMe1”命令给予CrackMe1可执行权限
4、在shell中执行CrackMe1程序,提示"Input Your Answer"
5、输入正确字符串,回车,如果程序输出"True Answer"则表示通过,输出"Wrong Answer"则表示失败
IDA 反编译结果:
在main函数中看不到有关字符串验证的信息,不知道该如何下手
文件的下载地址:
链接:https://pan.baidu.com/s/1Tfbtk792UgYLj9XxUmb8yg?pwd=49ff
提取码:49ff
scanf 函数输入保存在v4变量,然后调用了函数loc_E08处理, 点进去看loc_E08
1、首先下载并安装IDA(Interactive Disassembler),它是一个专业级的反汇编工具。
2、在IDA中打开CrackMe1可执行文件
3、查看CrackMe1的代码,尝试理解其结构和功能。
4、查找与输入字符串有关的代码,尝试找到正确字符串的生成代码。
5、研究生成的正确字符串与输入字符串的比较代码,尝试找到正确答案。
最后根据以上分析的结果手动输入正确的字符串,就可以通过CrackMe1了。请注意,反编译程序需要严格遵守相关法律法规,不得在非法的地方使用反编译工具。
应该是工具的问题,用不同的工具看到的肯定不一样,https://blog.csdn.net/mayue_web/article/details/128863698 ,希望这个对您有帮助
在这种情况下,通常需要使用动态调试工具或汇编代码分析来进一步了解程序的实际运行流程。
您可以使用gdb或lldb在Android设备上进行动态调试。例如:
gdb /data/local/tmp/CrackMe1
或
lldb /data/local/tmp/CrackMe1
您还可以使用objdump分析汇编代码:
objdump -d /data/local/tmp/CrackMe1 > dump.txt
然后,您可以在汇编代码中查找有关字符串验证的信息。您可以尝试搜索字符串"True Answer"和"Wrong Answer",以查找代码段,并进一步了解程序的实际运行流程。
继续之前,请确保您已经设置了远程设备的开发环境,并且可以在该设备上使用gdb或lldb进行动态调试。
一旦您启动了gdb或lldb,您可以设置断点并进行单步调试。例如,您可以设置在main函数开头处的断点,并在该断点处进行单步调试。您可以使用x/s命令查看内存中的字符串,并使用ni命令进行单步调试。
如果您没有在汇编代码中找到有关字符串验证的信息,您还可以使用反汇编工具(如IDA Pro)进一步分析程序。您可以尝试搜索"True Answer"和"Wrong Answer",以查找代码段,并通过分析汇编代码来了解字符串验证的实际实现方式。
另外,您还可以尝试使用静态分析工具,例如strings和grep,以快速搜索字符串。例如:
strings /data/local/tmp/CrackMe1 | grep "True Answer"
strings /data/local/tmp/CrackMe1 | grep "Wrong Answer"
这可以帮助您找到代码段,以便更详细地了解字符串验证的实现方式。
如果仍然无法找到字符串验证的信息,您还可以尝试使用动态调试工具,例如gdb或lldb,设置断点并监视程序的执行。
您可以设置在每次输入字符串时的断点,然后记录每次的输入字符串和对应的输出结果。最终,您可以通过分析记录的数据,确定字符串验证的实现方式。
同样的,您也可以尝试在输入字符串的位置设置断点,并通过监视程序的执行,查找字符串验证的信息。
如果仍然无法找到字符串验证的信息,您还可以尝试使用更先进的逆向工程技术,例如符号执行,以进一步分析程序的执行流程。
望采纳。
不知道你这个问题是否已经解决, 如果还没有解决的话: