通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 安全技术 >> 软件破解 >> 破解实例 >> 文章正文
如何让crackcode变得具有粘贴功能
责任编辑:admin   更新日期:2005-8-6
前言:
    整个过程当成一个project(项目),真的可以过把瘾哦!:)

1、如何让crackcode变得具有粘贴功能的经过
       当初豆豆虾修改成突破25位后,无意中看到一个贴,说到crackcode不具有粘贴功能,使用起来特不方便的。豆豆虾想,嘿!还真的是挺实用的一个功能。开始琢磨如何修改代码。这其中的过程,从琢磨、修改、调试自至成功。

2、编写具有粘贴功能的程序
        需要加入粘贴功能,必须得知道如何编写具有粘贴功能的程序,以及实现的原理。
        豆豆虾说“简单,在internet上,随时随地都能找到你需要的东西”,于是找到了如下的程序:
how to place text on the clipboard

    cstring source;
    //put your text in source
    if(openclipboard())
    {
        hglobal clipbuffer;
        char * buffer;
        emptyclipboard();
        clipbuffer = globalalloc(gmem_ddeshare, source.getlength()+1);
        buffer = (char*)globallock(clipbuffer);
        strcpy(buffer, lpcstr(source));
        globalunlock(clipbuffer);
        setclipboarddata(cf_text,clipbuffer);
        closeclipboard();
    }
how to get text off of the clipboard
this is easy really but here it is for completeness


    char * buffer;
    if(openclipboard())
    {
        
        buffer = (char*)getclipboarddata(cf_text);
        //do something with buffer here
        //before it goes out of scope
        
    }

    closeclipboard();



对以上的代码作了小小的调整。如何使用这段代码?在vc中自动生成一个基于于对话框程序,双击ok按钮,把以下程序粘贴过去,这样大功告成。运行程序,点击ok键,这样在剪贴板中的内容就是“test for clipbroad!!”
void CClipbroadDlg::OnOK()
{
    // TODO: Add extra validation here
    CString source("test for clipbroad!!!");    //初始化source
    //put your text in source
    if(OpenClipboard())                              //打开剪贴板
    {
        HGLOBAL clipbuffer;
        char * buffer;
        clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1);
                                                      //分配一段dde内存
            EmptyClipboard();    //清空剪贴板
        buffer = (char*)GlobalLock(clipbuffer);  //锁定申请到的内存
        strcpy(buffer, LPCSTR(source));          //复制字符串到内存
        GlobalUnlock(clipbuffer);                      //解锁内存 
        SetClipboardData(CF_TEXT,clipbuffer); //设定剪贴板的内容
        CloseClipboard(); }                          //关闭剪贴板
}

3、转换vc程序为汇编程序。
    为什么要这样呢??原因有两点:
一、对于CF_TEXT之类的宏,不知道到底是代表什么值
二、汇编程序反编译可以非常简单的照搬到程序中。
    我把iczelion的第一个masm的ok演示程序修改成如下:
  .386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data

MsgCaption      db "Iczelion's tutorial no.2",0
MsgBoxText      db "Win32 Assembly is Great!",0


.data?
hMemory HANDLE ?
pMemory DWORD ?


.code
start:
    
invoke OpenClipboard,NULL  ;打开剪贴板
test eax,eax
je endpro
mov edi,offset MsgCaption  ; 取得标题,把它当成剪贴板中的内容
or ecx,0FFFFFFFFh
xor eax,eax
repnz scasb               
not ecx                  ;得到标题长度
sub edi,ecx
push ecx
push edi              ;这两个push也许不需要。没有时间去尝试
inc ecx
invoke GlobalAlloc,GMEM_DDESHARE,ecx  ;锁定申请到的内存
mov hMemory,eax
invoke EmptyClipboard                ;/清空剪贴板
invoke GlobalLock,hMemory      ;锁定申请到的内存
mov  pMemory,eax
pop esi
pop ecx
mov edi,eax
rep movs byte ptr [edi],byte ptr [esi]  ;/复制字符串到内存

invoke GlobalUnlock,pMemory          ;解锁内存
invoke SetClipboardData,CF_TEXT,pMemory;  ;设定剪贴板的内容
invoke CloseClipboard                                      ;关闭剪贴板
endpro:
    invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    invoke ExitProcess,NULL
end start

4、再看看反编译的结果:(其中一个目的是想得到需要宏的数值,其实也有简单
的方法,就是查询windows.h)

//******************** Program Entry Point ********
:00401000 6A00                    push 00000000

* Reference To: USER32.OpenClipboard, Ord:01D0h
                                  |
:00401002 E88B000000              Call 00401092
:00401007 85C0                    test eax, eax
:00401009 745B                    je 00401066

* Possible StringData Ref from Data Obj ->"Iczelion's tutorial no.2"
                                  |
:0040100B BF00304000              mov edi, 00403000
:00401010 83C9FF                  or ecx, FFFFFFFF
:00401013 33C0                    xor eax, eax
:00401015 F2                      repnz
:00401016 AE                      scasb
:00401017 F7D1                    not ecx
:00401019 2BF9                    sub edi, ecx
:0040101B 51                      push ecx
:0040101C 57                      push edi
:0040101D 41                      inc ecx
:0040101E 51                      push ecx
:0040101F 6800200000              push 00002000 //,GMEM_DDESHARE

* Reference To: KERNEL32.GlobalAlloc, Ord:0168h
                                  |
:00401024 E87B000000              Call 004010A4
:00401029 A334304000              mov dword ptr [00403034], eax

* Reference To: USER32.EmptyClipboard, Ord:00B3h
                                  |
:0040102E E853000000              Call 00401086
:00401033 FF3534304000            push dword ptr [00403034]

* Reference To: KERNEL32.GlobalLock, Ord:0173h
                                  |
:00401039 E86C000000              Call 004010AA
:0040103E A338304000              mov dword ptr [00403038], eax
:00401043 5E                      pop esi
:00401044 59                      pop ecx
:00401045 8BF8                    mov edi, eax
:00

[1] [2] [3] [4] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程