无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 158508|回复: 696
打印 上一主题 下一主题

native版的mini pecmd测试,添加mount命令--2011-4-4

    [复制链接]
跳转到指定楼层
1#
发表于 2011-3-9 16:58:15 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2011足迹 于 2014-1-8 17:19 编辑

最近在精简小马的2003pe,精简到19M(未精简srs驱动)的时候卡壳了...系统文件只剩下必须的win内核,win32子系统,cmd.exe运行环境,wim驱动和dll还有个额外的wimx.exe即使精简掉srs驱动也有10M左右...再精简我们还是有余地的...微软为windows提供了一个可以在win32子系统加载前执行程序的途径...就是注册表bootexecute项...默认是autocheck程序....这个程序有些特别...他是一个native程序...可以用C/C++编写...但是标准C的大多数函数不能使用.开发难度大..但是我们需要的功能也不多...能解压cap包...能挂在wim包...能拷贝文件就可以...如果此想法能够实现把pe内核压缩到5M将会成为可能...不知道有没有懂相关技术的可以加入...



谢谢大家的关注.
发布一个测试版下载地址http://bbs.wuyou.net/attachment.php?aid=116420
再发布一个测试版 native.zip (30.35 KB, 下载次数: 265)
现在expand可以自动创建文件夹了
再发一个测试 native.zip (30.37 KB, 下载次数: 189)
修正一个读取光盘的错误的bug
发布一个win7(pe3)专用版.. native.zip (30.58 KB, 下载次数: 268) (上个版本用错nt.lib,现在更新,抱歉)
发布新版本 native.zip (31.11 KB, 下载次数: 721) 现在可以支持mount wim了
现在支持的命令主要有:
        cd,md,copy,poweroff,dir,del,reboot,devtree,shutdown,exit,sysinfo,lm,vid,lp,move,if,load,expand, mount
其中
if支持if [not] exist [file|dir] command .command还可以是if
load加载一个文本文件作为批处理
expand x y 解压一个cab包
expand -d x显示cab包中的文件

mount 命令用法 mount wim [index] path
index 可以省略,默认是1
目前相对路径中出现.或..或\可能会无法识别..
每条命令最长1024字节(包含null)

加载方式
该程序是native应用程序.不是win32应用程序所以不能在已登录的windows操作系统中运行.(执行后会有错误提示,不会破坏系统)
加载方式有两种(还有其他的方式,可以自己研究)
可以在注册表HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager下面的BootExecute项中添加命令行(xp原来的内容是autocheck autochk *,pe的是空)该项可以是多行文本..每行一个命令,类似批处理
另外一个办法就是替换smss.exe(虽然能启动但是不能接收自定义参数)

现在正在研究wimgapi.dll.逆向出来的代码逻辑混乱...一时还看不大明白..但是找到了思路...
挂载wim时wimgapi.dll只是向驱动发送了一个消息.这个消息是使用fltmgr.dll中的函数发送的..消息的格式是驱动定义的...现在正在研究这个消息的格式..
希望大家多多帮助
谢谢

补充:此程序是pecmd的一个补充,开发的目的是为了使pe可以更模块化.降低一级内核的大小.解决在pecmd前需要额外处理时pecmd检查父进程是不是winlogon.exe的问题.至于其他方面或许也有用武之地.
由于运行环境不受文件锁限制所以请谨慎使用文件操作..

演示pe下载http://u.115.com/file/f34c5d489f
使用"小马PE2011超级精简版"为模板,保留所有驱动,内核压缩至13M
谢谢大家关注和支持

mount 挂载演示pe http://www.wiiki.cn/pe.iso.rar 下载后改名pe.iso即可
冗余文件可能有不少..


公开fltmgr驱动的的部分操作代码,代码来自于wimgapi.dll的逆向,数据结构结合wimgapi.h猜测,api只提供了部分,win7版api处理的相当复杂。。没有实现。
fltmgr.zip (153.01 KB, 下载次数: 117)

[ 本帖最后由 2011足迹 于 2011-4-4 21:30 编辑 ]

native.zip

30.36 KB, 下载次数: 559, 下载积分: 无忧币 -2

评分

参与人数 1无忧币 +8 收起 理由
yueming9712 + 8 精品文章

查看全部评分

2#
 楼主| 发表于 2011-3-11 13:29:35 | 显示全部楼层
看来关系的人不多...
自己顶起来..呵呵..
这两天找到一个叫native shell的开源项目就以他为基础了...
回复

使用道具 举报

3#
 楼主| 发表于 2011-3-22 10:58:47 | 显示全部楼层
有点成果了...
现在已经支持一些基本的cmd命令另外还有个expand命令可以解压cab包不过还不完善..
下一步准备继续完善expand命令尽量兼容ms的expand命令
目前还不支持批处理
也不支持外部参数
一步一步改进吧
分享一下代码
google code项目空间http://code.google.com/p/nativeshell/
svn checkout http://nativeshell.googlecode.com/svn/trunk/ nativeshell-read-only
回复

使用道具 举报

4#
 楼主| 发表于 2011-3-22 17:07:07 | 显示全部楼层

回复 #8 friend8179 的帖子

对驱动不太了解...不知道应该怎么操作..囧...希望有人能帮忙...当初只是想挂wim的...只是不知道怎么弄..才先弄个cab
回复

使用道具 举报

5#
 楼主| 发表于 2011-3-23 13:14:34 | 显示全部楼层

回复 #15 chenall 的帖子

呵呵..终于见到你了...关于wim能不能指点一下...
回复

使用道具 举报

6#
 楼主| 发表于 2011-3-26 00:53:53 | 显示全部楼层
发一个测试版
现在支持的命令主要有:
        cd,md,copy,poweroff,dir,del,reboot,devtree,shutdown,exit,sysinfo,lm,vid,lp,move,if,load,expand
其中
if支持if [not] exist [file|dir] command .command还可以是if
load加载一个文本文件作为批处理
expand x y 解压一个cab包
expand -d x显示cab包中的文件

目前相对路径中出现.或..或\可能会无法识别..
每条命令最长1024字节(包含null)

native.zip

30.2 KB, 下载次数: 969, 下载积分: 无忧币 -2

回复

使用道具 举报

7#
 楼主| 发表于 2011-3-29 17:02:10 | 显示全部楼层
再顶起来...
好像没大有人关心了...
今天逆了一下WIMGAPI..dll和FLTLIB.DLL找到了一些思路
谢谢liulaotou2的帖子
回复

使用道具 举报

8#
 楼主| 发表于 2011-3-30 12:37:26 | 显示全部楼层

回复 #24 lxl1638 的帖子

谢谢提示...
有空就用现有命令弄个演示pe..
应该没有什么问题..
回复

使用道具 举报

9#
 楼主| 发表于 2011-3-30 13:02:41 | 显示全部楼层

回复 #26 pseudo 的帖子

现有的命令把win32子系统移出到cab已经基本上成为可能..尚缺的命令就是这个cab文件如何搜索到..其他的都可以了.
回头弄个演示版的pe你参照一下
其实一楼的说明感觉应该挺详细了.
无论如何眼见为实..还是出个演示吧.
回复

使用道具 举报

10#
 楼主| 发表于 2011-3-30 18:59:39 | 显示全部楼层

回复 #30 yichya 的帖子

可以直接替换...但是不能接收参数...这样意义就不大了...在bootexecute里面可以写成native load file来执行批处理..
回复

使用道具 举报

11#
 楼主| 发表于 2011-3-30 19:01:25 | 显示全部楼层

回复 #31 yichya 的帖子

native加载win32子系统好像还有很多步骤...目前貌似难度比较大..
回复

使用道具 举报

12#
 楼主| 发表于 2011-3-30 19:03:15 | 显示全部楼层

回复 #34 friend8179 的帖子

cab压缩是不支持文件夹的...如果支持的话..请发个有文件夹的cab包..或者告知制作方法..
回复

使用道具 举报

13#
 楼主| 发表于 2011-3-30 19:07:57 | 显示全部楼层

回复 #37 uiojkmm 的帖子

如果是驱动的话应该是可以支持的..其他的就没办法了
回复

使用道具 举报

14#
 楼主| 发表于 2011-3-30 20:44:37 | 显示全部楼层

回复 #42 friend8179 的帖子

呵呵..确实可以创建带文件夹的..回头研究一下..
根据你的截图来看只需要判断是不是需要创建文件夹然后创建一下就可以了...
你也可以用if exist判断然后创建一下...
回复

使用道具 举报

15#
 楼主| 发表于 2011-3-30 21:41:39 | 显示全部楼层

回复 #44 friend8179 的帖子

我的意思是cab文件中有什么文件夹应该是知道的..
那么就可以在解压之前用if exist判断...先把这些文件夹创建..然后再解压..
这个办法似乎比较傻..暂且只能这样了...下一个测试版加上这个功能.
主要是以前不知道能用cab打出来有文件夹的包...就没考虑这一块..
回复

使用道具 举报

16#
 楼主| 发表于 2011-3-31 12:48:00 | 显示全部楼层
在C中
RtlCreateHeap( HEAP_GROWABLE, NULL, 0x100000, 0x1000, NULL, &sHeapDef );
创建一个堆
然后在一个循环中调用了若干次
RtlAllocateHeap
而且用完后都
RtlFreeHeap
为什么最后就堆溢出了呢?
回复

使用道具 举报

17#
 楼主| 发表于 2011-4-1 00:23:58 | 显示全部楼层
再发布一个测试版,下载请到一楼.
演示pe差不多快完成了...
敬请期待
回复

使用道具 举报

18#
 楼主| 发表于 2011-4-2 08:59:47 | 显示全部楼层

回复 #57 lmle 的帖子

可以访问U盘,只要是被驱动好的设备都可以访问...这个只和驱动有关...
native程序运行时所有启动级的驱动都已经加载完成..因此只要是驱动安装正确..并设置为启动级别就可以了..
回复

使用道具 举报

19#
 楼主| 发表于 2011-4-2 10:24:19 | 显示全部楼层
原帖由 jianliulin 于 2011-4-2 10:11 发表


能否让native直接解压ud里的文件?

这个不是不可以..如果有ud的驱动并且可以把ud mount到盘符的话现在native就可以读取..
如果没有类似的驱动那就需要在native中增加读取ud的代码..这个ud的格式没大研究过.据我所知的信息..这个ud算是一个新的文件系统..用windows 的native api去读取应该是不现实的..工作量应该不小..
回复

使用道具 举报

20#
 楼主| 发表于 2011-4-2 10:33:30 | 显示全部楼层
原帖由 jianliulin 于 2011-4-2 10:25 发表
工作量应该不大的,只要当ud是一个文件来读可以了,ud的文件结构很简单

有空参考一下别人的代码..试试看...最近可能要休息一下..抽空还要研究一下wim的挂在...还是希望有人能写个驱动..这样比较方便..
如果你会C语言的话..倒是可以考虑自己增加这个功能,6#楼的svn上有代码...每个发布的测试版都有更新..
还是希望有更多人能加入开发..毕竟native api开发还是有点难度的..
回复

使用道具 举报

21#
 楼主| 发表于 2011-4-2 11:25:47 | 显示全部楼层
原帖由 jianliulin 于 2011-4-2 10:47 发表



你用什么编译环境的,能否提供你的编译环境???

编译是使用的windows ddk(最新版是7600).
发布的版本都是使用server 2003 check 环境编译的,不知道在win7和xp上会不会有问题
ddk中编译只需要执行b.cmd脚本就可以.
用visual studio也可以编译..不过设置比较麻烦...百度上有相关的文章.
回复

使用道具 举报

22#
 楼主| 发表于 2011-4-2 11:31:19 | 显示全部楼层
原帖由 thttht 于 2011-4-2 10:43 发表


希望能早日实现wim的挂在那可就太好了!wim的挂在是不是可以联系liulaotou2  探讨一下 。

这个成功了对PE已及RAMOS都会有极大的帮助吧!十分期待!!!

本人倒是很想向liulaotou2学习.但是据说最近他一直没有在线.
曾经有人希望liulaotou2公开liulao.sys的源码.他给的回复至自己反汇编就可以.于是我也反汇编了一下..没有得到需要的代码(主要是看不懂驱动的逻辑).倒是反汇编wimgapi.dll却得到了一些有用的代码.

[ 本帖最后由 2011足迹 于 2011-4-2 11:37 编辑 ]
回复

使用道具 举报

23#
 楼主| 发表于 2011-4-2 12:04:11 | 显示全部楼层
原帖由 jianliulin 于 2011-4-2 11:49 发表
楼主顺便把演示PE的驱动也掏空吧

楼主能整理一下如何在vs2008 下编译的步骤可以吗,这样参与的人会慢慢多起来!!

本人对驱动的精简没有研究..也曾经试过...经常蓝屏.这方面0pe已经相当成熟了.其他也有发布的精简驱动的pe.我就不班门弄斧了..
记得cmdpe中驱动的大小好像是2M左右..现在去掉驱动的大小也是2M多..看来精简到5M不是什么问题了..

vs2008编译回头研究研究.直接弄个工程文件.不过还是推荐使用ddk编译.
回复

使用道具 举报

24#
 楼主| 发表于 2011-4-2 12:13:56 | 显示全部楼层
原帖由 jianliulin 于 2011-4-2 12:09 发表




WINDDK 可以单步调试吗??

native的调试比较麻烦..用vs2008也不能单步调试(因为native程序无法在win32子系统中运行)..
调试native程序需要双机调试(或者使用虚拟机).
本人现在使用的是windb.
调试方法百度上也有..
回复

使用道具 举报

25#
 楼主| 发表于 2011-4-2 19:49:34 | 显示全部楼层
原帖由 liulaotou2 于 2011-4-2 18:59 发表
WIM的问题,我负责搞掂。
我早就有不用DLL挂载WIM的代码了。
但是那是WIN32下面的,NATIVE的编程环境我先熟悉一下。

反汇编是很耗时间的,前前后后我花了差不多6个月的时间,写了很多测试代码,弯路很多。 ...

见到君真高兴..呵呵.
把微软的wimgapi.dll逆到C看了一下..
了解了wim挂载的大体流程..
用 native api挂载应该不复杂.
我大体上说一下..不知道对不对.请指正
1.创建一个message结构.
2.连接wimfltr驱动
3.向wimfltr发送这个结构.
今天正准备要研究这个结构呢..看到了君的回复.是在是太高兴了..
不知道君愿不愿意分享你的代码..
需要的话我把你加入到google code项目.

关于native app编程

和驱动差不多..只能使用ntdll.dll的导出函数..头文件使用ndk.对君来说应该不难.

[ 本帖最后由 2011足迹 于 2011-4-2 19:54 编辑 ]
回复

使用道具 举报

26#
 楼主| 发表于 2011-4-2 20:27:42 | 显示全部楼层
原帖由 liulaotou2 于 2011-4-2 20:08 发表
过程就是这样的,由于电脑已经重装了,所以麻烦一点。
能使用NTDLL.DLL的函数就没有问题了。
你把最新的代码发1份给我,清明节期间我抽时间合进去。
SVN我还没有装。

我尝试了很多次,无法在驱动中实现, ...

nativeshell.part01.rar (97.66 KB, 下载次数: 133)
nativeshell.part02.rar (97.66 KB, 下载次数: 119)
nativeshell.part03.rar (97.66 KB, 下载次数: 118)
nativeshell.part04.rar (97.66 KB, 下载次数: 118)
nativeshell.part05.rar (32.57 KB, 下载次数: 103)
回复

使用道具 举报

27#
 楼主| 发表于 2011-4-2 21:42:50 | 显示全部楼层

回复 #86 liulaotou2 的帖子

你的编译参数好像有问题..
f:\nativeshell\nativeshell\readhuff.h(118) : error C2220: warning treated as err
or - no 'object' file generated
f:\nativeshell\nativeshell\readhuff.h(118) : error C2220: warning treated as err
or - no 'object' file generated
f:\nativeshell\nativeshell\qtmd.c(316) : error C2220: warning treated as error -
no 'object' file generated
这三处错误本来应该是警告..
这些警告是因为使用的一个cab库造成...有几处类型不匹配..
不知道应该怎么修正..而且没有造成运行错误就没有修正..
以备以后发现问题的时候可以按图索骥.
使用b.bat编译应该是可以通过的..
如果b.bat也不通过的话可以按照提示在那些位置加上类型强制转换..
回复

使用道具 举报

28#
 楼主| 发表于 2011-4-2 21:44:52 | 显示全部楼层
原帖由 pseudo 于 2011-4-2 21:08 发表
谢谢楼主提供资源。

cmdpe.gz从9MB减为3.5MB。读盘总数据量(含grldr、SRS驱动)不到5MB即可启动到开始执行native.exe。

呵呵..很欣慰..看来一楼的承诺可以兑现了..
以后pe可以彻底替代dos了
回复

使用道具 举报

29#
 楼主| 发表于 2011-4-2 22:04:12 | 显示全部楼层
原帖由 andos 于 2011-4-2 21:49 发表

嗯,p大弄得比5m更少呢...呵呵

我本来想弄到7PE中...

可是出蓝屏,蓝屏是在进度条之后出的
应该是少了些文件吧? 不过少了什么我就不知道了

还是等其他高手出的7PE native模板,看看需要什么文件呢....

上面说过以前发布的版本是用server 2003环境编译的..xp上应该可以运行.
win7蓝屏属于正常.
win7版本已上传至一楼..欢迎测试.
顺便说句...蓝屏愿意是进程创建失败.
回复

使用道具 举报

30#
 楼主| 发表于 2011-4-2 22:09:05 | 显示全部楼层
原帖由 pseudo 于 2011-4-2 21:08 发表
谢谢楼主提供资源。

cmdpe.gz从9MB减为3.5MB。读盘总数据量(含grldr、SRS驱动)不到5MB即可启动到开始执行native.exe。

还有个事要说下..
现在system32下应该还有nls文件可以删除..
根据经验..内核中的文件不压缩..最后得到的压缩内核会更小..不知道这个对gz压缩内核是不是有效.cab是这样的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-9 02:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表