这几天在作Whale CTF的基础题目,练手试着加强人肉反编译的能力~~~数组
看到关键处以下两段代码,尝试把它们翻译一下...学习
/***********************************************************/ mov ecx, [rbp+var_24] ;[rbp+var_24]为index mov edx, 55555556h mov eax, ecx imul edx mov eax, ecx sar eax, 1Fh sub edx, eax mov eax, edx add eax, eax add eax, edx sub ecx, eax mov edx, ecx movsxd rax, edx mov rsi, [rbp+rax*8+var_20] ;[rbp+var_20]为数组起始地址,每一个元素大小为8 bytes /************************************************************/ mov ecx, [rbp+var_24] ;[rbp+var_24]为数组起始地址,每一个元素大小为1 byte mov edx, 55555556h mov eax, ecx imul edx mov eax, ecx sar eax, 1Fh sub edx, eax mov eax, edx add eax, eax cdqe add rax, rsi movzx eax, byte ptr [rax] movsx edx, al
这种题目,要是以往我就直接F5大法解决了,确实F5很快很便捷,同时Whale CTF视频教程中用的是符号执行的方法。虽然这两种方法都能解决,可是我以为过于粗暴,逆向工程的根本功底之一就是强大的汇编阅读能力,而此时处于学习阶段的咱们,更要注重基本功的培养。因此在初次解决问题的时候,咱们应该尽可能用眼睛和脑子去调试静态反汇编出来的汇编代码,在脑子里将代码不断抽象,最终获得正确的关键逻辑。若是脑子不够用,但又要解决问题,此时咱们再动用IDA F5和符号执行也不迟...翻译