用vs2010自带工具制作文件证书

以便给自己的程序签名,呵呵。

当然,这样签 发的程序在别人那是不被信任的。除非把自己的根证书给别人安装。

用命令行,使用如下命令:

makecert  -pe -ss swigger -n “CN=swigger.net” -sv swigger_root.pvk -r swigger_root.cer

这里会弹出框要求密码,输入密码 root_pwd 或其它密码。共输入3次,前两次设置,后一次验证。

makecert -is swigger -n “CN=swigger file sign” -$ commercial -ic swigger_root.cer -sv fs.pvk fs.cer

这里继续弹出要密码,设置为 pwd2 或其它密码。共输入三次,两次设置,一次确认。还会弹出第四次要密码,要输入上一步设置的密码 root_pwd (或其它值)。

cert2spc fs.cer fs.spc

以下两条命令的pwd2是第二步设置的密码,如果不是pwd2,要换成其它值。

pvk2pfx -pvk fs.pvk -pi pwd2 -spc fs.spc -pfx fs.pfx -f

signtool sign /t http://timestamp.verisign.com/scripts/timstamp.dll  /v  /f fs.pfx /p pwd2  filename.exe

签名完成后,把swigger_root.cer安装到受信用的根证书,就显示文件正常签名了。

发表在 开发 | 留下评论

中国大陆所有IPV4列表

见: http://ipwhois.cnnic.cn/ipstats/detail.php?obj=ipv4&country=CN

这个很重要,先记下。稍候出一份整理好的。

update: http://code.google.com/p/chnroutes/   不用自己操刀了,哈哈。

发表在 日经 | 一条评论

移动XP不欢迎的驱动

1. iastor.sys  。这是某些机器上的SATA驱动,没它不行,但这个驱动存在一个BUG,如果没有合适的硬件,加载它就可能会导致系统蓝屏。因此把它集成到WINXP的安装盘,安装系统时,在另一种硬件下,集成的安装盘就不能用了,会蓝屏死机。解决办法:修改iastor.sys,把引发蓝屏的那一条释放内存语句跳过。可能会造成一点点内存泄漏,但这无所谓了。

2. intelppm。intel CPU的驱动。换到amd下时,它会引发蓝屏。解决办法:sc config intelppm start= demand 。 设为手动启动。

此外,遇到一个问题,系统设置的分辨率太高,启动的显示器提示分辩率太高,看不到任何东西。这样也无法修改分辨率。。。解决办法:启动到PE,挂接注册表。删除相关的硬件配置:
\SYSTEM\ControlSet001\Control\Video
\SYSTEM\ControlSet001\Hardware Profiles\000?\System\CurrentControlSet\Control\VIDEO

发表在 软件使用 | 留下评论

为android 生成 native 程序

 

为android生成原生应用程序,不难啊。
初始条件:安装android的ndk,比如目前最新的 android-ndk-r3。(2010-03版)
我的目录结构:
~/android-ndk-r3
~/android-ndk-r3/temp  这个是当前工作目录。

Step1: 写两个文件:
hello.c:

#include <stdio.h>
 
int main()
{
    printf("hello, world\n");
    return 0;
}

start.c

#include <stdlib.h>
extern int main(int argc, char **argv);
 
void _start(int argc, char **argv)
{
    exit (main (argc, argv));
}

Step2: compile
[code]
../build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-gcc \
-I ../build/platforms/android-3/arch-arm/usr/include/  -c hello.c
../build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-gcc \
-I ../build/platforms/android-3/arch-arm/usr/include/  -c start.c
[/code]

Step3: link
[code]
../build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-ld –entry=_start \
–dynamic-linker /system/bin/linker -nostdlib     -rpath /system/lib  \
-L ../build/platforms/android-3/arch-arm/usr/lib/  \
-rpath ../build/platforms/android-3/arch-arm/usr/lib/    \
-lc -o hello hello.o start.o
[/code]

Step4: execute:
[code]
adb push hello /data/hello
adb shell
cd /data
chmod 755 ./hello
./hello
hello, world
[/code]

值得注意的一点是,在/sdcard目录下,程序运行不起来。我一开始还以为是没编好呢。后来扔到/data目录下,才成功跑起来。

发表在 开发 | 一条评论

添加了ssl证书,已经支持https

去startssl 申请了一个证书。这个地方注册时一定要注意填真实信息,第一次填的有些是假的,结果要人工审核,一审核就挂了,后来换真实的一注册,就不用人工审,通过了。看来它里面有一些自动判定,对值得怀疑的要人工审核。

通过后验证email,验证网站,然后在控制面板的第二个tab就可以生成证书文件ssl.crt了。

打开hm里的cpannel里的SSL管理器,

把privatekey上传(其实我不知道这个要不要上传)

把ssl.crt上传,另外还要把startssl的根证书也一起上传(hm把这个叫做CA bundler)。

然后发ticket叫HM安装,装完就好了。

一开始我没有上传根据书,hostmonster的客服就让我上传CA bundler,我也不知道这个是啥,只是分析猜测是根证书,所以就上传了,结果是猜对了。

HM的客服安装完后,https就可以用了。呵呵,不过目前还不知道要拿来干嘛,纯粹研究一下。

发表在 日经 | 留下评论

卡住在 “setup is starting windows” 时的问题

用2003的setupldr.bin加载ram盘做XP的一些启动时发现,老是卡死在

“setup is starting windows” 这里,永远也不会恢复。

N天都无果,今天无意中发现,原来是必须是用windows 2003 sp1的setupldr.bin才行。sp2的就不行。

ramdisk.sy_ 倒是好像可以随意。

so, you must use win2k3sp1 ‘s sutupldr.bin to avoid hangs on “setup is starting windows”.

发表在 boot | 留下评论

调试XP/2k3的安装过程

 在安装的源盘根目录提供一个winnt.sif,写上:

[SetupData]
OsLoadOptions = “/noguiboot /fastdetect /debug /debugport=com1 /baudrate=115200 /break”

即可。

不过XP的setupldr.bin不支持这个,要win2k3的才行。(推荐sp1。sp2加载ramdisk有卡住bug)

发表在 开发 | 留下评论

regsavekey (ntsavekey) 异常的调试过程

结论非常简单,要先调用  NtInitializeRegistry. 参数见 wrk 中的 ntregapi.h

过程比较复杂,在smss.exe中用bootexecute启动的native程序里,调用 ntsavekey达不到想要的结果。

NtSaveKey会返回0,也就是没有错误。结果文件也会生成,生成的大小看起来也是对的。但是文件里面没有任何内容。所有字节都是0。

调试过程:

1. smss.exe启动的native程序是非常早的,可能是系统还有什么没准备好。试着替换其它程序而不是被smss.exe启动,来看看。

2. 替换winlogon.exe,发现能保存。

3. 替换 csrss.exe,发现也能保存。

4. 由于启动时候,smss创建csrss.exe ,后者再创建winlogon.exe。因此可以知道,在smss.exe调用native exe之后,启动csrss.exe之间,一定发生了什么事,使得ntsavekey在其前不能运行,其后可以运行。

5. 写一个简单的DLL,提供一个函数调用ntsavekey做测试,用lordpe把此DLL添加到smss.exe的依赖里。

6. WINDBG调试smss.exe启动native app后的路径,它每调几个函数就试下DLL中提供的函数看看ntsavekey是否正常。

7. 调试发现,在 NtInitializeRegistry之前,ntsavekey出现异常结果,之后,正常。

8. 结论: NtSaveKey需要用NtInitializeRegistry初始化注册表。

发表在 开发 | 留下评论

转载: windbg 如何在内核模式调试用户空间的程序

1:使用!process 0 0 获取用户空间的所有的进程的信息

 !process 0 0

**** NT ACTIVE PROCESS DUMP ****
    PROCESS 80a02a60  Cid: 0002    Peb: 00000000  ParentCid: 0000
    DirBase: 00006e05  ObjectTable: 80a03788  TableSize: 150.
    Image: System

 。。。。。

2:使用.process /p + 你需要断的应用程序的EProcess地址切换到应用程序的地址空间

   例如:

 .process  /p  0x80a02a60

3:重新加载user PDB文件

     .reload /f /user

4:使用非侵入式的切换进程空间

    .process /i /p 0x80a02a60

5:下应用层断点  bp        bu      都可以

原文:http://blog.csdn.net/purplethunder/archive/2009/04/04/4048379.aspx

另外顺便证下在windbg调试时强制调用一个函数:(设函数名是 test_reg)

r esp=esp-4 ; ed esp eip ; r eip = test_reg

发表在 开发 | 留下评论

vs中有趣的 windows message compiler

vs自带了一个mc.exe的程序,这个东西鲜有人知,它就是windows的message compiler程序。

mc编译mc代码,把它转变了一个bin格式的文件,放到资源中加载。在使用 windows event log , formatmessage的时候,就用得上这个消息了。formatmessage 有一个类似于 printf的形式的格式化能力。不过是用%1,%2这样的字眼,而不是%s,%d。这种%1,%2的形式理适合国际化。

codeproject上有一篇关于message compiler的文章:  http://www.codeproject.com/KB/system/mctutorial.aspx

windows kernel有不少地方使用mc格式的文本。比如windows 在安装的时候,提示欢迎,格式化等的文字都来源于安装盘smss.exe的message resource里。

生成的 .bin 文件格式;

binfile =  dword x + idgroups[x] + message[]

idgroup = dword startid + dword endid  + dword offset_to_message

message = dword sizeof(message) + char text[]

发表在 开发 | 留下评论