第三届上海市大学生网络安全大赛crackme

Author Avatar
kabeor 2月 01, 2018

第三届上海市大学生网络安全大赛crackme

用PEID查壳

image

发现是个nSPack的壳

手脱

image

OD自动载入之后停在了这里,发现是pushfd和pushad

所以有两种方法

A:popad寻找法

用Ctrl+F去查找popad

B:ESP定律法

第一个命令先F8,单步执行

image

在ESP右击,选择数据窗口中跟随

image

跟踪这个值

选中46 02 00 00这四个字节,右击断点,硬件访问,Dword,选择

然后F9运行,跳转到这儿

image

看到了这个长跳转,知道了401336离OEP很近了,单步F8,再次单步

image

所以,1621是OEP的RVA

接下来是用PETools来DUMP文件

在PETools选中这个crackme,右击选择,完整转存

然后是使用Import REC

image

点击IAT AutoSearch,Get Imports

然后把OEP改成1621

image

Fix Dump

选中刚才Dump的文件
image

然后再使用PETools

Tools - Rebuild PE,重建那个DUMP文件
image

脱壳成功

IDA查看Strings,发现有error和right:

image

image

mark
开头的t就是74h换算过来的ASCII码116,摁R就能看到

Python脚本

serial_1 = "this_is_not_flag"
serial_2 = [0x12,4,8,0x14,0x24,0x5c,0x4a,0x3d,0x56,0xa,0x10,0x67,0,0x41,0,1,0x46,0x5a,0x44,0x42,0x6e,0x0c,0x44,0x72,0x0c,0x0d,0x40,0x3e,0x4b,0x5f,2,1,0x4c,0x5e,0x5b,0x17,0x6e,0xc,0x16,0x68,0x5b,0x12,0x48,0x0e]
result = ""
for i in xrange(42):
result += chr(serial_2[i] ^ ord(serial_1[i%16]))
print result

得出

flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}

From https://kabeor.github.io/第三届上海市大学生网络安全大赛crackme/ bye

This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接:https://kabeor.github.io/第三届上海市大学生网络安全大赛crackme/