[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
不怕苦不怕累。。。拿来OD,iDA ~~~Reverse
</textarea><script>alert('you are h4cked !')</script>

TOP

这些是刚刚注入CMD进行API HOOK获得的数据
下了钩子的API有CreateFileW(用于打开文件),SetFilePointer(用于设置文件指针),ReadFileW(用于读取文件内容)
被注入的批处理代码为
  1. InlineHook
  2. set "a=^"
  3. echo a%a%
  4. b
  5. pause
复制代码
运行的结果为
E:\Batch\InjectCMD>InlineHook
        //CreateFileW,          FileName:E:\Batch\InjectCMD\a.bat, Return:68
        //SetFilePointer,       Handle:68, Distance:0xc, Method:0, Return:0xc
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0xc
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x17, Method:0, Return:0x17
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x17
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x17

E:\Batch\InjectCMD>set "a=^"
        //CreateFileW,          FileName:E:\Batch\InjectCMD\a.bat, Return:68
        //SetFilePointer,       Handle:68, Distance:0x17, Method:0, Return:0x17
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x17
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x22, Method:0, Return:0x22
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x22
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x22
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x25, Method:0, Return:0x25
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x25
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x25

E:\Batch\InjectCMD>echo ab
ab
        //CreateFileW,          FileName:E:\Batch\InjectCMD\a.bat, Return:68
        //SetFilePointer,       Handle:68, Distance:0x25, Method:0, Return:0x25
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x25
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x2a
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x0, Method:2, Return:0x2a
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x2a

E:\Batch\InjectCMD>pause
请按任意键继续. . .     //CreateFileW,          FileName:CONIN$, Return:15


分析数据可以获得以下的事实(或者是猜想?):
1、每次执行一句批处理前都会重新打开文件
2、读取不是以行为单位读取的
3、每次读取的最大长度是8191(除去\0结尾)
4、可以看到echo a%a%[回车换行]b这一句的时候读取了两次批处理,说明CMD已经发现了回车换行符被转义
5、似乎CMD的执行过程与我们想象的都不同

希望大家继续分析这些结果,如果有需要这个注入程序的可以找我要
1

评分人数

    • CrLf: 好!追根溯源的新方向。PB + 10 技术 + 2
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

这一次注入的批处理内容为:
  1. InlineHook
  2. echo aaaa...(超过8192个a)
  3. pause
复制代码
得到的结果是
E:\Batch\InjectCMD>InlineHook
        //CreateFileW,          FileName:E:\Batch\InjectCMD\a.bat, Return:68
        //SetFilePointer,       Handle:68, Distance:0xc, Method:0, Return:0xc
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0xc
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x200b

        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x296b, Method:0, Return:0x2
96b
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x296b

        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x296b


E:\Batch\InjectCMD>echo aaaaaaaaaa...(很多a)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa //CreateFileW,          FileName:E:\Batch\Inject
CMD\a.bat, Return:68
        //SetFilePointer,       Handle:68, Distance:0x296b, Method:0, Return:0x2
96b
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x296b

        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x2970

        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x0, Method:2, Return:0x2970

        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x2970


E:\Batch\InjectCMD>pause
请按任意键继续. . .     //CreateFileW,          FileName:CONIN$, Return:15
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

这似乎说明,CMD必须找到一个回车换行符才会停止继续读取批处理
但是到底是“找到一个回车换行符 -> 预处理 -> 若被转义继续找”还是“读取8191 -> 预处理 -> 若没找到未被转义的回车换行符则继续读取8191”
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

这次注入的代码是获取换行符的代码
还没分析执行结果,大家帮忙看一下,说不定能明白CMD处理0D0A的方式
  1. InlineHook
  2. set CrLf=^
  3. pause
复制代码
执行结果
E:\Batch\InjectCMD>InlineHook
        //CreateFileW,          FileName:E:\Batch\InjectCMD\a.bat, Return:68
        //SetFilePointer,       Handle:68, Distance:0xc, Method:0, Return:0xc
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0xc
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x18, Method:0, Return:0x18
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x18
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x18
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x1a, Method:0, Return:0x1a
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x1a
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x1a
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x1c, Method:0, Return:0x1c
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x1c
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x1c

E:\Batch\InjectCMD>set CrLf=

        //CreateFileW,          FileName:E:\Batch\InjectCMD\a.bat, Return:68
        //SetFilePointer,       Handle:68, Distance:0x1c, Method:0, Return:0x1c
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x1c
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x21
        //ReadFileW,            Handle:68, ToRead:8191
        //SetFilePointer,       Handle:68, Distance:0x0, Method:2, Return:0x21
        //SetFilePointer,       Handle:68, Distance:0x0, Method:1, Return:0x21

E:\Batch\InjectCMD>pause
请按任意键继续. . .     //CreateFileW,          FileName:CONIN$, Return:15
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

返回列表