这是Antiy的一个游戏。。通关就好了。。
Ps:听说有三个等级的。。这个应该是初级的。。
Ps2:有一个关卡忘记写了,哎。。
========================================
1.公司成立于2000年
2.二进制算一算
3.下了个Filemon文件读写监控,可是刷新速度特别看,字体也特别小,必须在菜单栏设置字体,然后再“过滤”那里把某些不必要的进程排除,只剩下AntiyCards,看看它到底写了什么就行了。
4.base64解码就行了。
NT系统在试图执行一个从命令行调用的可执行文件运行请求时,先会检查运行程序是不是可执行文件,如果是的话,再检查格式的,然后就会检查是否存在。。如果不存在的话,它会提示系统找不到文件或者是“指定的路径不正确等等。
嗯,和这个有关:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
我尝试过了,如果新建一个项如“123.exe”,然后在这个项里面,新建一个字符串值“Debugger”,填写“程序b的路径”。在系统然后随便把一个什么exe改名为123.exe,双击后竟然是程序b,而不是我们要的程序“123.exe”!
原理:
关键在这个Debugger:直接翻译为“调试器”,它是IFEO里第一个被处理的参数,其作用是属于比较匪夷所思的,系统如果发现某个程序文件在IFEO列表中,它就会首先来读取Debugger参数,如果该参数不为空,系统则会把Debugger参数里指定的程序文件名作为用户试图启动的程序执行请求来处理,而仅仅把用户试图启动的程序作为Debugger参数里指定的程序文件名的参数发送过去!
深入原理(为什么要这么设计):
MS这么设计是为了让程序员能够通过双击程序文件直接进入调试器里调试自己的程序。
进一步探讨(会不会陷入死循环呢):
根据原理,我们可以在程序A的Debugger填写程序B的路径,在程序B填写程序A的路径,是不是会陷入死循环呢?
不会!实验结果是:Windows 找不到文件 '程序A的路径' 。请确认文件名是否正确后,再试一次。
哎,真沮丧~~不过也对,微软这帮货,如果能够死循环那就杯具了。。
更进一步探讨(为什么不能死循环呢):
1。满足“从命令行调用”才能启用IFEO规则。
2。为了与用户操作区分开来,系统自身加载的程序、调试器里启动的程序,它们就不属于“从命令行调用”的范围,从而绕开了IFEO,避免了这个加载过程无休止的循环下去。
所以当它们程序A和B,从Debugger调用后就不再用IFEO规则了,也就不会死循环了。
既然是从Debugger里启用程序,那么就不用IFEO规则(很可惜,实验结果是这个规则还是起了作用,但是不明白怎么起的作用),找不到文件名这种bug我也就不深入探讨了,浅尝则止。
查看文件关联:assoc .exe 结果出来:.exe = exefile
修改文件关联: assoc .exe = exefile
9.还是用工具叫Process Explorer,然后找到AntiyCards的互斥量即可。
10.下个TCPview监听本机端口就解决了。
11.抓包,然后加上提示就能得到答案。
12.打开regmon看了下注册表,发现services.exe,进去就能找到答案了。蓝蓝说冰刃看下服务就行。
13.打开regmon看了下注册表,还是发现了services.exe,然后有个项写的是CARD4。。。
15.用filemon找到me.exe,发现偏移量1024,length 10,换算成16进制1024是400,用UltraEditor打开直接找到400处,发现答案。
16.依旧是用filemon找到相关东西,看偏移量和length,然后用UE打开查看信息。
17.依旧是用filemon找到相关东西,看偏移量和length,然后用UE打开查看信息。这个好像是可以看版本信息。
================================================================
用到的工具:
1.filemon
2.regmon
3.Process Explorer
4.TCPView
5.Wireshark
6.UE
下载地址:http://download.csdn.net/detail/xihuanqiqi/4679453