论坛: 编程破解 标题: [原创]我做了个吉大课件的批量修复程序。 复制本贴地址    
作者: jhkdiy [jhkdiy]    版主   登录
[原创]我做了个吉大课件的批量修复程序。
呵呵,放假了,到网上找点课件视频看看,结果到了美河,课件还真不少,自己选了个吉林大学的《高级语言程序设计》课件下载(我在后面会提供下载地址^_^),我的ADSL下载速度可以到200Kb每秒,本来是高兴极了,下载了第一个课件后就立即打开看看,晕・・・・・・・,不能播放;于是再到论坛看了相关帖子,帖子说可以用UltraEdit打开CSF文件,然后把离文件头的第六个字节由原来的06改为04就可以播放了。于是立即试了一下,确实是可以的,不过使用UltraEdit打开一个60多M的文件已经够慢了,修改保存它还会自动备份一个出来。可能原意是好的,不过这对于我本来就不多的硬盘来说却不可容忍了。网上也有人做了这方面的修改程序,但我个人觉得不好用,使用也不够直观和功能不强。于是自己便拿起了许久未动的Win32汇编,动了一个晚上,终于觉得满意了。现在特献给大家:
    程序的目标大家都很清晰:将CSF文件的从文件头开始的第六个字节由原来的06改为04。从技术角度来说这很容易解决:用CreateFile创建一个写权限的文件句柄,然后用SetFilePointer将文件指针移到第六个字节处,跟着用WriteFile函数直接将04写入此处即可冲洗掉原来的06,核心代码如下:
代码:

;--------------------------------------------------------------------------------
_EditCSFFile  proc  lpszCSFFile:ptr byte, @dwEditPos:dword, @dbEditBit:byte
;功能:修改CSF文件指定位置的一个字节
;参数:
;    lpszCSFFile:CSF文件路径的地址。
;    @dwEditPos: 待修改的位置
;    @dbEditBit: 新值
;返回值:没有   
;--------------------------------------------------------------------------------

    LOCAL  @hFile:dword
    LOCAL  @WrittenBits:dword
   
        ;--------------------------------------------------------------------------------
        invoke  CreateFile, lpszCSFFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
        .if eax != INVALID_HANDLE_VALUE
            mov @hFile, eax
        .else
            invoke  _ShowError, hWinMain
        .endif
        ;移动文件指针到dwEditPos的位置.
        invoke  SetFilePointer, @hFile, @dwEditPos, NULL, FILE_BEGIN
        .if eax == INVALID_HANDLE_VALUE
            invoke  _ShowError, hWinMain    ;如果移动有错则显示错误
       
        .else
            invoke  WriteFile, @hFile, addr @dbEditBit, sizeof @dbEditBit, addr @WrittenBits, NULL
            .if  !eax
                ;如果写入有错则解释错误
                invoke  _ShowError, hWinMain
            .else
            invoke  lstrlen, lpszCSFFile
        mov    ebx, 8
        mul    ebx
        ;为列表框设置水平滚动条
        invoke  SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, 194h, eax, 0
                ;无错则加入到成功修改列表框中
                invoke  SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, LB_ADDSTRING, 0, lpszCSFFile
            ;显示条目总数
                invoke  SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, LB_GETCOUNT, 0, 0
    invoke  SetDlgItemInt, hWinMain, IDC_EDT_CHANGEFILECOUNT, eax, FALSE

            .endif
        .endif 
               
        invoke  CloseHandle, @hFile
        ;--------------------------------------------------------------------------------

    ret

_EditCSFFile endp



    网上的程序基本上这个核心是做到了,但界面操作的灵活性和功能的通用性就差了,在此我不便多言,还是说说自己的程序吧:单击程序的“添加CSF文件”按钮,将待修改CSF文件添加进来,支持多选和单选。选择完后程序会将CSF文件的路径添加到列表框中,用户还可以对CSF文件进行选择,跟着可以在“修改选项”中填写需要修改那个字节,改为什么内容”,选好后即可单击“修改选定项”按钮来对CSF文件进行修复。成功修改后CSF文件会添加到“成功修改的CSF文件”列表框中,双击一个条目即可打开修改后CSF文件来进行播放测试。一切的操作都是直观而容易的。
    最后再介绍一下代码:
开发环境:Windows2000 + RadAsm2.2 + MASMV8.2
测试环境:Windows2000sp4
运行环境:应该Win9X系列和WinNt系列都没问题。
文件内容:一张程序界面图片、源代码、程序。单一个程序为6.5kb,整个压缩包为61Kb

有需要的朋友可以下载该程序使用,如果当前没这个需要的朋友也可以下载看看程序源代码,因为关于Win32Asm的开发实例现在实在是太难找了,从该实例中可以学习到在ASM中列表控件的操作,文件读写的操作和代码风格等等的知识,这也就是为什么只有不断的写程序、读程序才会不断提高自己的原因了。哦,差点忘了,高级语言程序设计课件的下载地址:
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第01讲.csf

http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第02讲.csf

http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第03讲.csf

。。。。。。。。自己按这个顺序加
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第64讲.csf

http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导1.csf

http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导2.csf

http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导3.csf

http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导4.csf

程序界面


程序和源代码
212116.rar


[此贴被 jhkdiy(jhkdiy) 在 01月20日21时58分 编辑过]

地主 发表时间: 06-01-20 21:56

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号