我知道,将GDB附加到应用程序的攻击者可以提取有关我的代码的许多信息。他还可以强制返回方法并修改应用程序的行为。无论如何,有些事情我还不了解。 如果我有这样的方法:
-(int)example_method :(int)parameter_1 :(int)parameter_2{
int value_1=300;
int value_2=1240445;
int sub_result_1 = parameter_1*parameter_2;
int sub_result_2 = parameter_1*value_1;
int sub_result_3 = value_1*value_2;
int result = sub_result_1+sub_result_2+sub_result_3;
return result;
}
据我所知,GDB中的攻击者可以提取和操纵:
我的问题是,攻击者可以看到结果如何产生吗? 他可以在方法中看到这些行吗?
int value_1=300;
int value_2=1240445;
int sub_result_1 = parameter_1*parameter_2;
int sub_result_2 = parameter_1*value_1;
int sub_result_3 = value_1*value_2;
答案 0 :(得分:1)
使用gdb的攻击者可以看到您的代码...至少在程序集级别
如果您的程序是用调试符号(-g
)编译的,则可以将程序与其源代码相关联。
如果在没有它们的情况下编译程序,调试器仍将能够查看代码的汇编指令。请注意,汇编程序的级别很低,因此将缺少很多信息(变量名,高级源代码等)。但是有了一些汇编知识,就可以对二进制文件进行反向工程以查看执行了什么操作。
使用obfuscation techniques可以使这种逆向工程过程变得更加困难。
我的问题是,攻击者可以看到结果如何产生吗?他可以在方法中看到这些行吗?
汇编中没有变量的概念,只有寄存器。有时寄存器将与变量相关联,有时程序集与您编写的程序非常不同,尤其是在混淆中。
该算法必须在功能上完全相同,但是汇编语言实际上与高级语言不同,因此不要期望1-1匹配。
请注意,您的程序可以进行逆向工程,而无需确切知道使用哪个变量。根据程序的大小和复杂性,它可能是微不足道的,也可能是极其复杂的。
如果要在汇编级别查看包含程序的文件,可以使用objdump -d -S
之类的命令。