首页
社区
课程
招聘
[讨论]Windows RT的Native开发现状
发表于: 2013-1-8 12:51 5705

[讨论]Windows RT的Native开发现状

2013-1-8 12:51
5705
信息整理来自XDA开发者论坛。

1、经过证实,ARM下的Windows RT的Win32 API是完整的,比如你熟悉的MessageBox、Process、Thread、IPC、COM及SEH、VEH等等。也分别支持ANSI、UNICODE。而外国佬把RT的内核比做是一个“干净的Windows 8”。
2、微软没有提供ARM下的Windows RT的Win32 API的很多头文件,也没有调试符号,也没有RT系统的调试器,不过Intel x86下的VS2012里面有个Remote Tools,里面就有可调试RT系统的调试器,通过USB端口进行双机调试,可进行ARM汇编级系统调试,算是WinDbg了。以及虽然没有头文件,可你只需要知道RT系统内基本上所有跟x86下的Win32 API同名的函数,原形都是一样的,你只需要用GetProcAddress就可以进行函数指针调用,当然你的编译器必需是VS2012的Native ARM编译器。(注:头文件里面连GetProcAddress都没有,你得自己写一个分析PE文件的GetProcAddress或者直接exeScope看RT系统的GetProcAddress地址,反正先取得kernel32内GetProcAddress,再用系统的GetProcAddress。RT的PE文件格式跟32位的x86的PE格式一样,仅仅只是代码不同而已,过想到连GetProcAddress微软都不给,真心笑死人了)
3、使用VS2012的个人申请应用程序签名后,编译出来的Native Desktop App可以在桌面模式下运行,不过因为微软限制只能运行自家签名的程序,所以你发布到其他RT系统上,它们在桌面也是无法运行你的程序的,而这个问题目前已经被外国佬通过我上面说的那个远程调试器xxx掉了。可因为这个验证值是硬编码在系统内核里面的,而引导方面也使用了什么UEFI安全引导,所以目前还只能在内存中手动调试来改,让RT系统能运行其他桌面程序。就跟Win7 x64无法载入无签名驱动一样,可我们可以先让一个有签名的驱动进去,然后xxx掉那个驱动签名验证,可RT的问题则是你随便签名不行,你得用微软的签名,不然你就无法运行。所以现在还只能在x86下远程修改,具体后面怎么样,我也不知道。

微软很久以前就做过ARM的WM系统(VC6年代),RT算是进化吧。还有IDA可以查看RT系统文件的ARM汇编代码,可以发现质量很高。
比如下面的CPP代码编译成ARM的本机Windows RT程序后,就能看到那个我们日思夜想的MessageBox了:
void DoThings()
{
	char *Tmp=(char*)GetTickCount64;
	Tmp=(char*)((~0xFFF)&(DWORD_PTR)Tmp);

	while(Tmp)
	{
		__try 
		{
			if(Tmp[0]=='M' && Tmp[1]=='Z')
				break;
		} __except(EXCEPTION_EXECUTE_HANDLER)
		{
		}
		Tmp-=0x1000;
	}

	if(Tmp==0)
		return;

	LoadLibraryA=(t_LLA*)PeGetProcAddressA(Tmp,"LoadLibraryA");
	GetProcAddressA=(t_GPA*)PeGetProcAddressA(Tmp,"GetProcAddress");
	CreateProcessA=(t_CPA*)PeGetProcAddressA(Tmp,"CreateProcessA");

	HMODULE hUser=LoadLibraryA("user32.dll");
	MessageBoxA=(t_MBA*)GetProcAddressA(hUser,"MessageBoxA");
	MessageBoxA(0,"A native MessageBox!","Test",MB_OK);

	STARTUPINFO si;
	memset(&si,0,sizeof(si));
	si.cb=sizeof(si);

	PROCESS_INFORMATION pi;
	
	CreateProcessA("c:\\Windows\\system32\\cmd.exe",0,0,0,FALSE,0,0,0,&si,&pi);
}


另见:
http://surfsec.wordpress.com/2013/01/06/circumventing-windows-rts-code-integrity-mechanism/
http://forum.xda-developers.com/forumdisplay.php?f=1288

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 952
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你去下载WDK 8 里面有arm的kernel32.lib之类的,难道不能用?
头文件可以直接用公用的
2013-1-8 13:56
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这是你自己写的还是转载?有点乱
2013-1-8 16:07
0
游客
登录 | 注册 方可回帖
返回
//