第一次发帖,由于刚开始学习逆向工程,所以文中可能有些错误或者描述不完善的地方,欢迎大家在评论中批评指正或者提出问题进行讨论。
环境
主机:Windows10 64位 专业版
虚拟机软件:VMWare 15.1.0
虚拟机环境:Windows XP
软件:IDA VSCode Notepad++
编程语言:Python3 C/C++
文件:7-3.exe SMC.idc
SMC.zip
(30.98 KB, 下载次数: 9)
2020-5-22 14:55 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB
概览
使用IDA打开7-3.exe,查看程序逻辑,并对部份意义明确的变量重命名,以便分析。
0x01
首先分析开头的汇编程序可知,程序在一开始要求用户输入字符串,即flag,对输入的flag求取长度,当flag长度length=28(0x1C)时,程序跳转至loc_40107F
mov edx, [ebp+length]
movsx eax, [ebp+edx+var_69]
cmp eax, '7Dh' //'}'
jnz short loc_4010DD
由上述可知,flag长度为28,并且最后一个字符为:}
0x02
在loc_40109E中
cmp [ebp+var_70], 43h
jge short loc_4010BC
显然,右侧框图为循环,并且var_70充当了计数的作用,对byte_414C3C进行了处理,通过相应的解密函数,我们可以得出解密的结果,可以看出,结果为一个函数,通过IDA的函数构建功能,我们可以得到sub_414C3C。
上述循环结束后,程序将byte_414C3C转化为sub_414C3C。在loc_4010BC中
mov dword ptr [ebp-6Ch], offset sub_414C3C //转化后汇编代码,截图为转化前
mov esi, esp
push offset unk_414BE0
lea edx, [ebp+flag]
push edx
call dword ptr [ebp-6Ch]
程序调用了解密出的函数sub_414C3C,传入了flag和unk_41