逆向就是做实验研究,需要借助不同的工具,不同的环境,它可以让我们从不同角度认识一个事物,加深对它的理解。正所谓“横看成岭侧成峰,远近高低各不同。不识庐山真面目,只缘身在此山中。 ”
粗略动态分析逆向步骤演示
1.寻找真正的 main 入口点
2.从上往下分析函数
首先粗略分析:先大概了解程序在做什么事
就像文章一样,我们先粗略阅读一下
3.从上往下分析流程
4.无关函数可以装作没看到
局部精细化分析
总结
如果我们要分析算法,肯定还是 IDA Pro 更直观一些,可以直接还原 C 代码
但是 x32dbg 仍然可以胜任,并从中锻炼强大的反汇编分析能力
拓展:局部代码还原
为了能在后期更方便的理解代码逻辑,可以尝试对局部代码进行还原
以能够在日后逆向工作中用到的时候,可以直接拿来翻阅
以循环反汇编为例
mov eax,dword ptr ss:[ebp-C]
add eax,1
mov dword ptr ss:[ebp-C],eax
mov eax,dword ptr ss:[ebp-C]
cmp eax,dword ptr ss:[ebp-18]
jge re逆向算法.E3944B
mov eax,dword ptr ss:[ebp-C]
movsx ecx,byte ptr ss:[ebp+eax-34]
mov edx,dword ptr ss:[ebp-5C]
add edx,dword ptr ss:[ebp-C]
movsx eax,byte ptr ds:[edx]
xor ecx,eax
mov edx,dword ptr ss:[ebp-C]
mov byte ptr ss:[ebp+edx-50],cl
jmp re逆向算法.E3941E
char InputKey[20]; //假如长度是20
char* XiaodiLaoshi = "xiaodilaoshi"
char OutKey[20]; //假如长度是20
for (int i = 0;i < strlen(InputKey);i++)
{
OutKey[i] = InputKey[i] ^ XiaodiLaoshi[i]
}
strcmp(OutKey,"123456789")
没有回复内容