首页
社区
课程
招聘
[原创]看雪CTF2018-第四题writeup
发表于: 2018-6-22 22:53 3085

[原创]看雪CTF2018-第四题writeup

2018-6-22 22:53
3085

用IDA打开程序,定位到main函数

jz,jnz到同一个地址,明显是花指令,用IDA的快键键U和C调整一下,再分析发现一共执行了这三条有用指令后(push ebp;mov ebp, esp;sub esp, 7Ch),跳转到loc_403136处执行

不难发现是作者自己把main函数的流程更改了,先在函数起始处加了跳转,然后加了一些花指令,故只需要用IDA的插件Keypatch修改回原样即可

继续往下看,发现还有花指令

直接把.test:00403156到.text:00403167的代码全部修改为nop,然后删除一些函数的定义,重新修改函数的结束点,就可以用IDA的F5进行分析了,后面的函数还有花指令一样处理即可



发现函数前面有利用时间差反调试,然后有一个解密字符串的函数sub_401078(ps:后面一直有用到这个解密函数),解密函数比较简单,只是把字符串依次异或1到字符串长度。
继续分析发现,有一个反调试的函数sub_40100A(),在里面判断了当前进程的父进程是否为explorer.exe,如果不是就将dword_495728赋值为1(dword_495728后面会用到),如果是则创建一个新的CrackMe进程,然后将dword_495728赋值为2,但创建新的CrackMe进程后,原程序就崩溃了,新进程执行时,dword_495728还是会被赋值为1,这个反调试就没有起到效果,感觉这里是作者的代码写的出了问题,故这个函数可以不用管。

然后解密了success和error两个字符串,对输入的长度做了判断,必须小于等于23,并把输入分为了2部分A和B,前3个字节为A和后面的字节为B,并把B转化为了ASCII码的16进制字符串,分别执行函数sub_40128F()和sub_40125D()进行判断。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//