‘其它技术’ 分类的存档

HDDReg 1.71主要有3个文件:cd、dsck.tr、hddreg.exe,大家都知道直接将这3个文件放到其它DOS工具箱的IMG中,hddreg.exe是不能运行的,会出现“Incorrect Diskette”的错误提示,这是因为原作者限制了hddreg.exe只能在官方原版的IMG中运行。前段时间发现Hiren’s BootCD里也带有HDDReg 1.71,而且居然能正常运行,于是研究了一下,终于知道怎么把hddreg.exe移植到任意IMG中,下面就是方法。 hddreg.exe主要检测如下两个条件是否满足(所有数字均为16进制): 1、IMG的序列号是否为6F 14 06 1E      (这个值怎么得到的?懂汇编的可以用IDA反一下hddreg.exe,在main()函数里就可以看到了) 2、dsck.tr文件从文件偏移23423开始后的200字节是否和IMG的引导扇区完全相等      (这个又是怎么知道的?通过对比Hiren’s BootCD里的dsck.tr和原版的dsck.tr知道的) 只要有1个条件不满足,就会出现“Incorrect Diskette”的错误提示 知道了原理,操作起来就简单了,以移植HDDReg 1.71到MaxDOS 8中为例:

2010年4月6日14:03 | 2 条评论
分类: 其它技术
标签: , ,

换了WordPress后发现有时无法评论,提交评论后浏览器停在一个空白页面: wp-comments-post.php#comment- 看了下WordPress的源码,正常情况下提交评论后应该是出现: wp-comments-post.php#comment-评论ID 才对,看来是数据库没有插入成功,于是echo打印出插入评论的SQL,然后拿到phpMyAdmin里执行:

2009年11月11日16:36 | 7 条评论
分类: 其它技术

如果在一个较短的定时器里频繁的调用EnumWindows/EnumChildWindows话,那在Vista下可能会出现内存不足的错误提示,而这时物理内存的实际占用率并不高。这个问题的根本原因是Vista对程序有句柄数量的限制,EnumWindows/EnumChildWindows会获得很多窗口的句柄,当达到限制的时候就会产生错误,MFC内部有TRY捕获这个错误,然后显示内存不足。解决方法是把Vista的默认句柄限制数量调大,在注册表:

2009年5月1日22:30 | 没有评论
分类: 其它技术

SVN(即Subversion)是啥就不多说,下面介绍Windows下怎么配置SVN服务器。 SVN服务器可以有两种配置方法,一种是使用svnserve服务端,一种是使用httpd服务端(也就是Apache)。个人推荐httpd,因为它自带了SSL,简单配置下就比较安全了,而svnserve如果想要安全一些,需要配置SSH,但SSH需要另外安装。 下载SVN安装文件CollabNetSubversion-server-1.5.5-1.win32.exe,安装很简单,要注意的是如果IIS占用了80端口的话,安装时需要为httpd指定其它端口,假设安装目录为D:\Program Files\Subversion,SVN仓库根目录为E:\svn_repository,服务器IP为192.168.1.250。 接下来创建仓库,使用svnadmin工具:

2009年2月24日12:53 | 没有评论
分类: 其它技术
标签: , , ,

平时的小工作用用批处理也是挺不错的,随手备份点代码。   cmd里有个环境变量%random%可以产生0到32767之间的随机数,这样就可以用通用的公式%random%%%(max-min+1)+min来产生[min,max]区间里的随机数,批处理中求模得用两个%%符号,例子: @REM 产生10个[4,12]间的随机数 @echo off REM 启用延迟环境变量扩展 setlocal enabledelayedexpansion REM 设置随机数的最小和最大值以及求模用的变量 set min=4 set max=12 set /a mod=!max!-!min!+1   for /l %%i in (1,1,10) do ( REM 产生[min,max]之间的随机数 set /a r=!random!%%!mod!+!min! echo. echo 随机数%%i:!r! )

2008年9月5日13:07 | 没有评论
分类: 其它技术

Hacker Disassembler Engine 32,不到1K的代码实现了x86的反汇编引擎,并且提供了足够的信息,如length、prefixes、opcode等,用来做inline hook这些的足够了。帖个例子: #include <iostream> #include "hde32/hde32.h"   #pragma comment(lib, "hde32/hde32.a")   int main() { hde32s hs; void* code = (void*)0×00401006; //point to the code   unsigned int len = hde32_disasm(code,&hs);   printf("\n\n" " length: 0x%02x\n" " opcode: 0x%02x\n", len,hs.opcode);   return 0; } 注意VC编译的话得自己去下个C99的stdint.h,hde32.h里有下载地址 hde32 web – http://patkov-site.narod.ru/

2008年8月9日02:56 | 没有评论
分类: 其它技术

这方法MJ很早时就说过了,简单重复下。 大家应该发现大部分API的第一条指令都是mov edi,edi,比如在我的电脑上MessageBoxA的代码如下: 77D5058A > 8BFF mov edi, edi 77D5058C /. 55 push ebp 77D5058D |. 8BEC mov ebp, esp 77D5058F |. 833D BC04D777 >cmp dword ptr [77D704BC], 0 77D50596 |. 74 24 je short 77D505BC 77D50598 |. 64:A1 18000000 mov eax, dword ptr fs:[18] mov edi,edi完全没起任何作用,貌似一条垃圾指令。不过大家是否还发现除了mov edi,edi外,大部分API前面刚好还有5个nop,如下:

2008年2月22日11:14 | 2 条评论
分类: 其它技术
标签: ,