实验吧此处无声WP
step1 Get软件
实验吧下载软件,http://ctf5.shiyanbar.com/crack/5/
Get基本要求:找出nsfocus的正确注册码。
step2 PEID初步分析
先PEID,发现有壳,尝试脱壳失败,大致的流程是启动时先调用LoadLibrary加载kernel32.dll,然后调用GetProcAddress把函数加载到内存中。
使用插件查找到OEP地址4027F0
step3 OD逆向
加载OD,下硬件断点he 4027f0,然后F9执行,程序直接停在了EOP,比较欣慰。
用户名输入nsfocus,注册信息testtest,提示失败
OD下端口 bp MessageBoxA,并初步分析如下:
- 先获取用户名并计算长度
EDI 0018F648 ASCII “nsfocus”
- 取注册信息的输入,并判断是否是32字节0~9\A-F之间的数据,判断为MD5。
于是计算nsfocus的MD5填入注册文本框,通过分析把数据内容保存到下面的地址
0018F648 42 39 42 37 44 44 31 43 34 32 31 45 30 30 35 42 B9B7DD1C421E005B
0018F658 43 39 41 37 46 37 30 42 38 34 38 45 33 44 30 45 C9A7F70B848E3D0E
- sub4018C0的目的是吧输入的MD5的数据由字符串转换为hex,保存到下面的地址
0018F58C B9 B7 DD 1C 42 1E 00 5B C9 A7 F7 0B 84 8E 3D 0E 狗?B.[骚?剮=
0018F59C 05 72 87 D9 ED 85 6A DA B2 97 CF 63 56 C3 61 8A r囐韰j诓椣cV胊?
然后比较上面两行是否相同,如果相同则成功。
那么问题来了18F59C的数据怎么来的?
- 重新跟踪分析发现,sub401AA0把输入的“nsfoucs”进行了MD5,并保存在0018F59C
5. 然后才到步骤3,此时18F58C==18F59C
6. 当执行sub4012f0时,发现18F58C的内容发生了变化,应该是对MD5(用户名)进行了处理。
综上,程序大致的意思是把输入的注册信息进行了加密,加密的结果与MD5(用户名)相同即成功获得flag。
那么相反,把MD5(用户名)进行解密的内容就是flag
直接修改汇编指令,让sub4012f0重新执行一次,发现并不能解密出想要的内容,看了一下大佬们的WP,
说是用RC6的算法,(本人目前没有道行如何判断使用哪种算法…),大概调研了一下,不同于AES,RC6虽然是对称加密,但他的加密和解密的算法不同,无法直接调用sub4012f0来解密。
于是找工具进行解密…
收工,哎,,不是很完美。