随笔-13  评论-72  文章-1  trackbacks-0
  2008年7月11日
     摘要: Method Active Constructor Always Construct Always TestDeviceFilter Always AddParsedSubObject Always DeterminePostBackMode Always OnPreInit Always LoadPersonalizationData Always InitializeThemes Always... 阅读全文
posted @ 2008-07-11 03:41 C# hack 阅读(176) | 评论 (0)编辑
  2007年6月22日

白天服务的压力在50-100请求/秒

程序是通过js调用web services,该应用池的w3wp.exe进程不断涨,直到显示outofmemory的异常的窗口,关闭后iis将重开w3wp.exe

各位大侠有没有遇到过这种情况,拉兄弟一把!

posted @ 2007-06-22 01:06 C# hack 阅读(437) | 评论 (4)编辑
  2006年9月26日
最近在写个小工具的时候需要通过网址得到域名,不知道怎么Uri里只有得到主机名的方法而没有得到域名的方法,于是只有自己实现一个,但是我感觉这个方法比较变态,希望拿出来和大家一起讨论下,看看有没有更好的方法?

例如:http://www.google.co.uk,应该返回google.co.uk,http://www.test.googlepages.com,应该返回googlepages.com

我的程序如下,拿出来讨论下,写的比较弱智,必须预先知道所有的域名后缀。
请大家告诉我好的方法:

private string GetDomain(string url)
        {
            
string host;
            Uri uri;
            
try
            {

                uri 
= new Uri(url);
                host 
= uri.Host + " ";
            }
            
catch
            {
                
return "";
            }

            
string[] BeReplacedStrs = new string[] { ".com.cn"".edu.cn"".net.cn"".org.cn"".co.jp"".gov.cn"".co.uk""ac.cn"".edu"".tv"".info"".com"".ac"".ag"".am"".at"".be"".biz"".bz"".cc"".cn"".com"".de"".es"".eu"".fm"".gs"".hk"".in"".info"".io"".it"".jp"".la"".md"".ms"".name"".net"".nl"".nu"".org"".pl"".ru"".sc"".se"".sg"".sh"".tc"".tk"".tv"".tw"".us"".co"".uk"".vc"".vg"".ws"".il"".li"".nz" };

            
foreach (string oneBeReplacedStr in BeReplacedStrs)
            {
                
string BeReplacedStr = oneBeReplacedStr + " ";
                
if (host.IndexOf(BeReplacedStr) != -1)
                {
                    host 
= host.Replace(BeReplacedStr, string.Empty);
                    
break;
                }
            }

            
int dotIndex = host.LastIndexOf(".");
            host 
= uri.Host.Substring(dotIndex + 1);
            
return host;
        }

谢谢了!
posted @ 2006-09-26 00:56 C# hack 阅读(1391) | 评论 (11)编辑
  2006年9月15日

Failure to install Toolbox controls via ContentInstaller or Tools.InstallCommunityControls

If you have the SQL Server Management Studio Express CTP or SQL Server 2005, then it is overwriting some registry key settings. The workaround for this is:

  1. Under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{36839529-3AF3-47fa-8194-F4A3FA9F0ED7}change the CodeBase value to use the Visual Studio 8.0 location, for e.g. file:///D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\Microsoft.VisualStudio.ToolBoxControlInstaller.dll
  2. Under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{36839529-3AF3-47fa-8194-F4A3FA9F0ED7}\SatelliteDll, change the Path value to point to the Common7\IDE folder for e.g. D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\
  3. Open the Visual Studio Command Prompt and run devenv /setup
posted @ 2006-09-15 01:45 C# hack 阅读(292) | 评论 (0)编辑
  2006年6月7日

private static string ConvertToAbsoluteUrls (string html, Uri relativeLocation) {
    IHTMLDocument2 doc = new HTMLDocumentClass ();
    doc.write (new object [] { html });
    doc.close ();

    foreach (IHTMLAnchorElement anchor in doc.links) {
        IHTMLElement element = (IHTMLElement)anchor;
        string href = (string)element.getAttribute ("href", 2);
        if (href != null) {
            Uri addr = new Uri (relativeLocation, href);
            anchor.href = addr.AbsoluteUri;
        }
    }

    foreach (IHTMLImgElement image in doc.images) {
        IHTMLElement element = (IHTMLElement)image;
        string src = (string)element.getAttribute ("src", 2);
        if (src != null) {
            Uri addr = new Uri (relativeLocation, src);
            image.src = addr.AbsoluteUri;
        }
    }

    string ret = doc.body.innerHTML;

    return ret;
}

posted @ 2006-06-07 00:03 C# hack 阅读(799) | 评论 (8)编辑
  2006年5月9日

一直听说TaskVision这个任务跟踪工具不错,而且开源,公司目前任务管理比较混乱,所以今天打算安装起来,但是安装过程老是出错,所以只有自己手动安装!

  1. 进入http://www.windowsforms.net/TaskVision/
    下载C# TaskVision - Now in C#!!! - This package contains the TaskVision source code in C#.(你也可以下载VB版本TaskVision Source Code
     
  2. 文件列表如图

     
  3. 在远程或者本地IIS中设置一个虚拟目录 TaskVisionWS ,指向TaskVisionWsCsVS目录,运行权限是脚本,记得安装了2.0的话,.net Framework版本要选择1.1
     
  4. 建立数据库TaskVsion,建立相应用户
     
  5. 建表和存储过程,并且初始化数据
    脚本下载:http://www.cnblogs.com/Files/csharphack/SQL脚本.rar,解压后在Sql查询分析器中按顺序运行SqlServer_TaskVision_Create_DB.sql和SqlServer_TaskVision_DataLoad.sql
     
  6. 修改TaskVisionWsCsVs项目中的Web.Config设置数据库连接
    <add key="dbConn.ConnectionString" value="data source=XXXX;initial catalog=TaskVision;persist security info=False;user id=TaskVision;password=******;integrated security=false;" />
     
  7. 这个时候你可以访问你在第三步建立的Web服务测试一下
    http://xxx.xxx.xxx.xxx/taskvisionws/authservice.asmx
     
  8. 修改TaskVision项目中的app.config,TaskVision将依据该配置文件动态加载Web服务
    修改一下两条记录到你的域名或者IP(127.0.0.1)
    <add key="TaskVision.AuthWS.AuthService" value="http://xxx.xxx.xxx.xxx/taskvisionws/authservice.asmx"/>
    <add key="TaskVision.DataWS.DataService" value="http://xxx.xxx.xxx.xxx/taskvisionws/dataservice.asmx"/>
     
  9. 运行\TaskVision\Bin里面的AppStart.exe,输入初始化的用户名密码(该用户可以在Users表里面找到)
     
  10. 一切搞定

 

posted @ 2006-05-09 18:02 C# hack 阅读(1136) | 评论 (10)编辑
  2006年1月24日
多听别人的想法,少说自己的主意。主意太多让人无所适从,增强了别人的挫折感。

多启发别人的思维,少说自己的决定。人是被自己激励的,不是被他人驱使的。

多进行一件事情的深化,少被新的事情和新的想法激动得彻夜难眠。一个人和一个企业的资源是有限的,想法比资源多,会让自己和企业陷入被动。无数的事情和想法,只会让企业的战略越来越模糊、越大而无当。

多考虑执行,少考虑战略。确定一个战略,必须结合企业有没有合适的人在合适的时候取执行。战略和执行是密不可分的,无法执行的、没有人执行的战略只能称为妄想。

多接触有能力的人,少当教师爷。一个人的自信是靠不停的学习和一步一步的成功建立的,不是靠演讲和被吹捧支撑的。

多做实事,少说空话。事情是做出来的,不是靠说出来的。总结是为了记住自己的教训,不是为了教育别人。

多鼓励别人,少批评别人。人们的动力来自承认,而不是指责。

分配任务时多说目标的评价标准,少说任务的实现方式。每个人都是聪明和主动的,不需要掰着手指头教。

多注重现在,少寄望未来。只有生存好,才能有发展。

多看一些书,少上一些网。书让人深入,网让人发散。

多微笑宽容,少抢白苛求。许多人都喜欢对面的脸孔充满灿烂的阳光,许多人都坚信“山人自有妙计”。

posted @ 2006-01-24 14:30 C# hack 阅读(272) | 评论 (0)编辑
  2005年12月15日


大四时为www.gameres.com写的一篇文章



  各位朋友大家好,嗷嗷,我第一次在这里发文章,好高兴,本人技术有限,不要笑话,如有错误请您告诉我一声。

  刚才我玩了几把疯狂坦克,输了好几盘,觉得无聊就搞搞这个,下面开始说说如何得到游戏中的动态数据(地址改变),以得到疯狂坦克中坦克X坐标为例
------------------------------------------------------------------------------
工具:
SoftICE动态调试程序,游戏修改工具(金山游侠),反汇编(W32Dasm),Hex Workshop
------------------------------------------------------------------------------
一、找到内存中坦克X坐标
  1、用金山游侠搜索,方法如下(金山游侠的使用我就不说了)
    把坦克往左移动一些,就搜索“减少”;坦克往右移动,就搜索“增大”
    反复搜索将会找到一个地址(当然其他游戏可能不止一个),这里是08BFAACC
    注:动态的内存分配就是下次你如果再次搜索,地址将不再是08BFAACC
  2、找到那条代码修改了这个数据(X坐标)
    加载 SoftIce
    在游戏状态 Ctrl+D 调出SoftIce,输入 BPM 08BFAACC W,这里的W表示如果这个地 址被写将中断
    回到游戏,移动坦克,左移一下,程序中断,SoftIce指向的上面一句是
      004640B3       MOV DWORD PTR [ESI+000001A4],EAX
    这句就是修改坦克坐标的代码,当然右移也能找到一句,这里就不重复了
  3、修改程序使动态的数据变成静态
    这里说点题外话,修改程序包括两种,一种是直接修改程序,一种是修改内存中的程序(内存补丁),这里由于我懒,所以用了第一种
  修改程序:
    疯狂坦克程序存在Fortress2.dat当中,如果你把这个文件改名为EXE文件一样可以运行,这里我们就把他修改成Fortress2.exe
    打开W32Dasm反汇编,SHIFT+F12跳到004046B3,你看到这几行
      004046B3 8986A4010000       MOV DWORD PTR [ESI+000001A4],EAX
      004046B9 8B8644020000       MOV EAX,DWORD PTR [ESI+00000244]
      004046BF C744241001000000   MOV [ESP+10],00000001
    刚才我们说了004046B3是修改X坐标的那条语句,现在我们要让他每次修改完程序就能够把X坐标存储到一个固定的地址
    现在要让它运行到这里就JMP到一个我们自己的代码的地方,于是在程序的尾部我们找到一段空白的区域00465A52,于是我修改004046BF为代码
    JMP 00465A52,机器码为E98E130600,因为这句的长度不够以前的那句长,所以要加入几个NOP,机器码为90,所以我们打开HEX Workshop修改程序,CTRL+G跳到位移为000046BF的地方,看到了C744241001000000,我们把它修改为E98E130600909090,现在程序将一运行到这里就跳到00465A52运行我们的代码。
  4、实现我们自己的代码,然后跳回
    我们的代码要做的是把动态变成静态,
           PUSH EAX
           MOV  EAX,[ESI+000001A4]
           MOV  [00470000],EAX
           POP  EAX
           JMP  004046C7
    这样这个数值无论运行多少次,只要你移动(当然右移也要修改)就能在00470000中找到X坐标,这段机器码为
    50 8B86A4010000 A300004700 58 E95BECF9FF
    忘了说刚才我们把004046BF替换掉的那句MOV [ESP+10],00000001也必须加上,所以打开HEX Workshop,CTRL+G跳到00465A52,修改加入
    C744241001000000 50 8B86A4010000 A300004700 58 E95BECF9FF
    这样动态数据就变成了静态
------------------------------------------------------------------------------
现在回顾一下
    首先搜索坐标地址
    找到改变这个地址的代码
    修改代码让他跳到自己的代码中运行
    在程序的空白段加入自己的代码,当然要补上被替换了的那句,还有修改了寄存器,必须先PUSH,再POP
    下面的工作就是写一个程序读取这个地址了,我用VC写了一个,顺便贴一下关键代码
------------------------------------------------------------------------------

CProcess m_process;
bool m_ret=m_process.FindProcess("FortressII");
if (m_ret)
{
    BYTE tank1xL = m_process.ReadByte(0x00470000);
    BYTE tank1xR = m_process.ReadByte(0x00470001);
    WORD tank1x = tank1xL+tank1xR*256;
    temp = tank1x;
    str.Format("%d",temp);
    m_tank1x=str;
    UpdateData(FALSE);
    return TRUE;
}
else
    return FALSE;

-----------------------------------------------------------------------------
CProcess是一个我编写的修改类,这里用到的函数代码如下

HANDLE CProcess::OpenProcess(char *p_ClassName, char *p_WindowTitle)
{
    HWND hWindow;
    DWORD pid;

    hWindow = FindWindow(p_ClassName, p_WindowTitle);
    if (hWindow)
    {
        GetWindowThreadProcessId(hWindow, &pid);
        return ::OpenProcess(PROCESS_ALL_ACCESS, false, pid);
    }
    return NULL;
}

bool CProcess::FindProcess(char *p_WindowTitle)
{
    if (m_hProcess == NULL)
    {
        m_hProcess = this->OpenProcess(NULL, p_WindowTitle);
        if (m_hProcess)
            m_bGameRunning = true;
        return m_bGameRunning;
    }
    else
        return false;
}

BYTE CProcess::ReadByte(DWORD p_Address)
{
    DWORD bytes;
    BYTE tmpValue;

    if (m_bGameRunning)
    {
        if (ReadProcessMemory(m_hProcess, (void*)p_Address,
                        (void *)&tmpValue, 1, &bytes) == 0)
            return 0;
        else
            return tmpValue;
    }
    return 0;
}

posted @ 2005-12-15 21:59 C# hack 阅读(1245) | 评论 (0)编辑
  2005年12月14日

在网上找到大三写的一篇文章,保存到Blog留做纪念!

《汇编编写 可以自启动的磁盘》

下面贴出了两段代码boot.asm 和shell.asm,实现磁盘启动,并且解析了两个命令 time 和 reboot,有兴趣的朋友可以看看。

由于本人的汇编知识很菜,这篇文章只是让大家看看磁盘启动是如何实现的,如果有错误的地方,大家能够指出那就太谢谢了

步骤:放入一张磁盘,把这两段代码编译成EXE,分别执行一次,重启计算机,如果有虚拟系统环境的软件更好,如virtual PC,直接就可以看到效果。

--------------------------------------------------------------------------------

以下是boot.asm

--------------------------------------------------------------------------------


;启动代码
;-----------------------------------------------------

code_seg segment para 'code'
main proc far
assume cs:code_seg,ds:code_seg
org 00h
start:
push ds
sub ax,ax
push ax
mov ax,code_seg
mov ds,ax
mov es,ax

mov ax,0301h ;写1扇区
mov cx,0001h
mov bx,7c00h ;从代码7c00h开始
mov dx,0
int 13h

mov ax,0301h ;写2扇区,数据
mov cx,0002h
mov bx,7e00h ;从代码7e00h开始
mov dx,0
int 13h

ret
org 7c00h ;MBR开始
mov ax,0
mov es,ax

mov ax,201h
mov bx,7e00h ;把2扇区读入7e00h
mov cx,2 ;第二扇区
mov dx,0
int 13h

mov ah,6h ;清屏
mov al,26
mov bh,07h
mov cx,0
mov dh,26
mov dl,80
int 10h

mov ax,1301h ;显示文字
mov bx,04eh
mov cx,18
mov dx,0
lea bp,hello ;7e00h存放着字符串
int 10h

mov ah,3h ;换行
mov bh,0
int 10h
inc dh
mov dl,0
mov ah,2h
mov bh,0
int 10h

jmp init ;跳转到初始化代码

org 7dfeh
db 55h,0aah

org 7e00h ;数据扇区
hello db 'Loading System....'

org 7f00h ;初始化区

init:
mov ax,0
mov es,ax
mov ds,ax

mov ax,201h ;5扇区读入8000h,把命令解释器载入内存
mov bx,8000h
mov cx,5
mov dx,0
int 13h

mov ax,201h ;7扇区读入8400h,把命令处理程序
mov bx,8400h
mov cx,7
mov dx,0
int 13h

jmp command ;跳到命令解释器
org 7ffeh
db 55h,0aah
command: org 8000h

main endp
code_seg ends
end start

--------------------------------------------------------------------------------


以下是shell.asm

--------------------------------------------------------------------------------


;命令解析器
;-------------------------------------------------------------
code_seg segment para 'code'
main proc far
assume cs:code_seg,ds:code_seg
start:
push ds
sub ax,ax
push ax
mov ax,code_seg
mov ds,ax
mov es,ax

mov ax,0301h ;写5扇区
mov cx,0005h
mov bx,8000h ;从代码8000h开始
mov dx,0
int 13h

mov ax,0301h ;写7扇区数据
mov cx,0007h
mov bx,8400h ;从代码8400h开始
mov dx,0
int 13h
ret


org 8000h

kaishi: call printtsf

lea di,command ;命令输入开始
mov dx,0
push dx

begin: mov ah,0h
int 16h

cmp al,0dh ;等于回车
je finish

cmp al,08
jne sast
call backgb
jmp begin

sast: pop dx
cmp dx,13 ;命令最大14字符
ja tolong
inc dx
push dx

stosb ;存储单个字符

mov ah,9h ;打印单个字符
mov bh,0
mov bl,07h
mov cx,1
int 10h

call tuigb ;光标移动

jump1: jmp begin
tolong: push dx ;发出警告声音
mov dx,100
in al,61h
and al,11111100b
sound: xor al,2
out 61h,al
mov cx,140h
wait1: loop wait1
dec dx
jne sound
jmp begin
finish: pop dx
cmp dx,0
je nos
call scroll
nos: call check_com
jmp kaishi

main endp
;------------------------------------------------------------
command db 14 dup(' ') ;6扇区开始
messrb db 'System will reboot now!'
messnf db 'Input command isnot exit!'
tsf db '$'
comlist db 'reboot ',00h,84h
db 'time ',00h,85h
;------------------------------------------------------------
check_com proc near
lea bx,comlist ;便于定位每个命令的首地址
lea di,comlist ;命令表首地址
mov dx,2 ;指令的个数
cmpcom: lea si,command ;存储输入命令地址
cld
mov cx,14
repz cmpsb
jz match
add bx,16
mov di,bx
dec dx
jnz cmpcom

call getgb
mov ax,1301h ;显示文字mess2 NO
mov bx,07h
mov cx,25
lea bp,messnf ;no found地址
int 10h
call scroll

lea di,command ;清空command
mov cx,0014
cld
mov ax,20h
rep stosb
ret
match: add bx,14
call [bx] ;定位命令处理地址

lea di,command ;清空command
mov cx,0014
cld
mov ax,20h
rep stosb
ret
check_com endp
;-------------------------------------------------------------
scroll proc near
call getgb
cmp dh,23 ;是否到达23行
jbe scrend ;判断是否到达屏底
mov dl,0 ;到达屏底,到第1列
call setgb

mov ah,6 ;滚1行
mov al,1
mov bh,07
mov cx,0
mov dh,26
mov dl,80
int 10h
ret
scrend: call getgb
inc dh
mov dl,0
call setgb
ret
scroll endp
tuigb proc near
call getgb
inc dl
call setgb
ret
tuigb endp
;--------------------------------------------------------------
printtsf proc near
mov ah,9h ;打印单个字符$
mov al,tsf
mov bh,0
mov bl,07h
mov cx,1
int 10h
call tuigb
ret
printtsf endp
backgb proc near
call getgb
dec dl
call setgb
ret
backgb endp
getgb proc near
mov ah,3h
mov bh,0
int 10h
ret
getgb endp
setgb proc near
mov ah,2h
mov bh,0
int 10h
ret
setgb endp
org 83feh
db 55h,0aah

org 8400h
reboot proc near
call getgb
mov ax,1301h ;显示文字重启信息
mov bx,07h
mov cx,23
lea bp,messrb ;reboot字符地址
int 10h
call scroll

mov bl,0Feh ;重启命令,利用键盘控制器
xor cx,cx
cmd_wait:
in al,64h
test al,2
jz cmd_send
loop cmd_wait
jmp cmd_error
cmd_send:
mov al,bl
out 64h,al
xor cx,cx
cmd_accept:
in al,64h
test al,2
jz cmd_ok
loop cmd_accept
cmd_error:
mov ah,1
jmp cmd_exit
cmd_ok:
xor ah,ah
cmd_exit:
ret
reboot endp

org 8500h
time proc near
mov ah,4h
int 1ah

push cx

lea di,nowtime
mov al,ch
call bcd2asc
pop cx
mov al,cl
call bcd2asc
inc di
mov al,dh
call bcd2asc
inc di
mov al,dl
call bcd2asc

mov ah,2h
int 1ah

push cx

inc di
mov al,ch
call bcd2asc
inc di
pop cx
mov al,cl
call bcd2asc
inc di
mov al,dh
call bcd2asc

call getgb
mov ax,1301h
mov bx,07h
mov cx,19
lea bp,nowtime ;时间地址
int 10h
call scroll

ret
nowtime db 4 dup(?)
db '\'
db 2 dup(?)
db '\'
db 2 dup(?)
db ' '
db ' ',':',' ',':',' '
time endp

bcd2asc proc near
mov bl,al
mov cl,4
shr al,cl
or al,30h
mov [di],al
inc di
mov al,bl
and al,0fh
or al,30h
mov [di],al
inc di
ret
bcd2asc endp
org 85feh
db 55h,0aah
code_seg ends
;-------------------------------------------------------
end start

--------------------------------------------------------------------------------


完,Thx

 

posted @ 2005-12-14 22:29 C# hack 阅读(775) | 评论 (1)编辑
     摘要: 今天看到Google PageRank ChecksumPHP代码才发现上次发布的库写的很烂,我根本没有去理解里面的意思,有很多函数是没有必要的,如<< >>位操作都已经是现成的,我怎么还照着vb代码改写,真是愚蠢。  为了弥补我的愚蠢,把php代码改编成的.net库,发布出来。  Google PageRank 链接库下载地址:  Google PageRank .net... 阅读全文
posted @ 2005-12-14 22:18 C# hack 阅读(3045) | 评论 (13)编辑