首页
社区
课程
招聘
[求助]windows mobile dll的一个问题
发表于: 2009-4-13 22:27 25710

[求助]windows mobile dll的一个问题

2009-4-13 22:27
25710
我是最近在学习WM手机开发,发现一个有趣的问题。在WM模拟器中的\Windows目录下怎么看不到DLL?
但是使用远程文件查看器就可以看到很多DLL。但是想导出来分析这些DLL就不行,每次都提示找不到DLL文件。
但是他们确实是存在的。

[课程]Linux pwn 探索篇!

收藏
免费 7
支持
分享
最新回复 (46)
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
是不是因为资源管理器里没选中显示所有文件?

ps:我是真机WM6
上传的附件:
2009-4-13 23:01
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
3
小金可以试试看真机能否看到coredll.dll这样的系统核心DLL。
在真机上有了实验结果,给大家说说。
2009-4-13 23:12
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
4
我以前在模拟器上做过实验,即使是\Storage Card下没有设置隐藏属性的DLL还是看不到的。
我估计是微软的一种安全措施避免核心DLL被误操作,破坏系统。

前面有个帖子是介绍分析WM平台DLL文件破解的。我曾经做过实验要使用WM API访问\Windows下的DLL都会返回“文件不存在”错误,比如CreateFile想生成文件句柄就会返回这个错误。估计就是因为安全原因。

实验中只有一组API可以正常访问这些DLL就是FindFirstFile()和FindNextFile()这组函数。

另一个佐证是,如果你把你自己写的DLL放在\Windows目录下是可以用远程文件工具导出的。
而系统核心的DLL比如coredll.dll就不能导出,提示错误正是“系统找不到指定文件”。
2009-4-13 23:21
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
报告老大,你赢了……自带的资源管理器果然是看不到的,即使我打了增强补丁。
必须用第三方工具如Resco Explorer来看,会发现它是一个ROM属性的文件。
WM里默认是不显示隐藏文件系统文件这些的,而ROM属性的文件则是打死都不会显示的……

另外,核心的ROM属性的文件无法被复制删除替换,非核心的ROM属性文件不能被复制删除替换,但是可以另外复制一份在RAMDisk中做个镜像拷贝,然后系统会读取RAM中的镜像而忽略ROM中的源文件,当你把RAM里的文件删除后,系统就会恢复读取ROM里的。
上传的附件:
2009-4-14 00:39
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
6
其实我并不能肯定真机上的结果所以请小金试试。

非常感谢小金的实验和结果发布!

号召大家向小金学习!多对比,多做实验,多交流。就能逐步提高对系统的了解,提高水平。
2009-4-14 08:28
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
7
估计第三方软件也是使用FindFirstFile(),FindNextFile()得到全部DLL列表的。

小金说的很对,使用远程文件查看工具也可以看到这些DLL的属性是ROM属性,并且无法修改。
若要修改还是提示“文件找不到”

并且这些DLL加载到内存后,最开始的4K字节(含有PE文件头)内存具有不可访问属性。估计也是微软的安全策略。
2009-4-14 08:31
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
8
使用IDA PRO 5.2,静态分析这些软件,可以看看他们用了什么API。
2009-4-14 08:39
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
的确是FindFirstFileW

; Attributes: thunk

; HANDLE __stdcall FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData)
FindFirstFileW
LDR     R12, =__imp_FindFirstFileW
LDR     PC, [R12]
; End of function FindFirstFileW

sub_3184C

hwnd= -0x490
lptpm= -0x48C
var_488= -0x488
var_484= -0x484
var_480= -0x480
hMenu= -0x47C
var_478= -0x478
var_474= -0x474
var_470= -0x470
var_46C= -0x46C
var_468= -0x468
var_464= -0x464
prc= -0x460
FindFileData= -0x450

STMFD   SP!, {R4-R8,LR}
LDR     R12, =0x478
SUB     SP, SP, R12     ; hwnd
MOV     R1, #0x270
ADD     R1, SP, R1
MOV     R7, R0
BL      sub_31488
LDR     R1, =a_lnk      ; wchar_t *
MOV     R0, #0x270
ADD     R0, SP, R0      ; wchar_t *
BL      wcscat
LDR     R8, =off_46120
MOV     R4, #0
ADD     R0, SP, #0x490+var_488
STR     R4, [SP,#0x490+hMenu]
STR     R8, [SP,#0x490+var_488]
STR     R4, [SP,#0x490+var_484]
STR     R4, [SP,#0x490+var_480]
BL      sub_1CAD0
MOV     R3, #0x14
ADD     R1, SP, #0x490+FindFileData ; lpFindFileData
STR     R4, [SP,#0x490+var_474]
MOV     R0, #0x270
ADD     R0, SP, R0      ; lpFileName
STR     R4, [SP,#0x490+var_46C]
STR     R4, [SP,#0x490+var_470]
STR     R4, [SP,#0x490+var_464]
STR     R4, [SP,#0x490+var_478]
STR     R3, [SP,#0x490+var_468]
BL      FindFirstFileW
MOVL    R3, 0xFFFFFFFF
MOV     R5, R0
CMP     R5, R3
BEQ     loc_31A50
2009-4-14 08:56
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
10
小金的速度就是快啊!

由此我们可以得出这样的结论:在WM中如果要写自定义函数判断某个文件是否存在?
最好使用FindFirstFile()这样的API。在桌面Windows平台有些朋友喜欢用fopen()尝试获取读文件指针,作为判断方法。WM平台则不可靠了。
2009-4-14 09:01
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
11
我觉得楼主如果想学好WM开发,最好还是能自己购入个WM手机,WM2003就不要了,WM5/6就行,全新的现在市场价也就1000多,除非你要超高档的Touch HD啥的,否则神达A700之类的1300--1500左右,还带GPS。

如果不嫌弃二手,500---800之间就能收到一个不错的。

因为很多东西你在模拟器里是没法调试的,我写一个定制工具的时候我程序一在模拟器里跑就崩溃,真机却没问题。

还有一些涉及到电话方面的功能用模拟器也很累人的。

我现在是多普达828+升级WM6简体中文版,上个月花了400元收的-_-然后我才开始接触真正的WM-PPC编程,以前用MPX200是Smartphone平台,没多少程序好写。
2009-4-14 10:16
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
12
小金的建议相当详细中肯!

如果经济条件允许有真机或者实验板确实会好很多。
2009-4-14 19:37
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
高手,都是高手
2009-4-14 21:33
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
14
楼主想要什么DLL?WM6的我可以给你,我这里解开了一个WM6的ROM,整个Windows目录的文件都完整的。
2009-4-14 21:52
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
15
小金厉害啊!是用什么方法搞得。介绍一下吧?

我都想要,不知行不?
2009-4-14 22:07
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
16
有个ROM定制工具包叫Kitchen Rom……可以把真正WM机的ROM文件分成xip和os两部分然后再解开文件……

所有dll是50MB,完整目录是70多MB
2009-4-14 22:29
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
17
小金研究的工具还真多!如果能够搞到,下一个回去好好破一破。

XIP是什么文件?
2009-4-14 22:33
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
18
楼主的问题,提的不错。真是越来越有搞头了。

多研究,多交流,收获极大!
2009-4-14 22:34
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
19
XIP是一系列核心文件的统称。
WM-PPC真机里系统是分两个区存储的,核心区叫做XIP,就是eXecute In Place,立即执行。里面的文件是未经过压缩的,可以直接在ROM芯片里执行。当然由于真机用的还是NAND类型的芯片,所以实际上还是要复制到RAM里执行的,这是SPL加载系统后立即执行的部分,类似于x86里ntldr加载ntoskrnl启动Windows的过程一样。XIP里的核心程序nk.exe这些执行后才会加载OS区的其他系统文件,类似于x86里Csrss、Smss这些初始子系统的调用。

XIP之后就是OS区,也就是外壳和其他众多服务的地方了,这上面的东西都是建立在XIP区里核心文件启动出来的子系统环境基础上的。

SPL是用于加载XIP和OS的引导区,而加电点亮机器的是IPL负责的,这部分你可以看成是BIOS。
2009-4-14 22:59
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
20
http://www.cotulla.pp.ru/Magician2.html
到这里下载一个ROM文件解压,然后有个os.nbf,就是压缩好的整个ROM文件了,等你下完这文件我再告诉你解压方法@@
2009-4-14 23:01
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
21
回答的太好了!

nk.exe经常在进程列表中看到,知道是个非常重要的核心文件。
2009-4-14 23:05
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
22
正在下。

晚上速度蛮快啊。哈哈。
2009-4-14 23:05
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
23
从顶级域名看:ru,似乎是一个俄国网站?
2009-4-14 23:07
0
雪    币: 164
活跃值: (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
24
此人是我828+能用上WM6系统的大神~~~~用他的ROM做例子是因为他的ROM解开步骤简单。
2009-4-14 23:11
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
25
智能手机可以重新刷新系统升级确实是一个相当大的卖点!

相信未来:智能手机能像现在的PC一样自由的换装安装不同的OS系统和软件。

去年研究Android手机的时候,就看到国外有高手把Google放出的模拟器系统改装后装在Nokia手机上,用起来非常爽。
2009-4-14 23:15
0
游客
登录 | 注册 方可回帖
返回
//