【文章标题】: DIY个人专版屏幕录像大师
【文章作者】: 漏网之鱼
【作者邮箱】: lwzy-crack@163.com
【作者主页】: http://lwzy-crack.blog.163.com
【作者QQ 】: 530747686
【软件名称】: 屏幕录像专家 共享版 V7.5  Buid 20080428
【下载地址】: 自己搜索下载
【保护方式】: 无壳,自校验
【编写语言】: Borland C++
【使用工具】: PEID 0.95  Olldbg1.10  Restorator  PE Explorer
【操作平台】: XP sp3
【软件介绍】: 非常好的一款屏幕录像软件。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  准备工作:32*32的icon图片一张,还需要一个会使用键盘和鼠标的人一个。(呵呵!)
  
  开工了。我们先用  Restorator  载入“屏录专家.exe”,出现了一个资源文件的列表。点击“图标”这个选项前面的“+”展开资源,出现了
  
  3个资源,分别是“MAINICON”、“PAUSE”、“RECORD”我们用我们事先准备好的icon图片替换“MAINICON”这个图标。然后保存。保存以后
  
  呢,我们来运行“屏录专家.exe”,出现一个提示“本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安装”。
  
  
  
  通过这个提示,我们知道,是自校验。下面我们来处理这个自校验吧!
  
  
  用Ollydbg载入目标程序。用字符串插件搜索“本软件已经损坏”,一共有五处,我们分别下 F2断电。
  
  00411904    BA C3EB5400    mov edx,屏录专家.0054EBC3               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  0041260F    BA 38EC5400    mov edx,屏录专家.0054EC38               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  00412664    BA 73EC5400    mov edx,屏录专家.0054EC73               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  004126BC    BA AEEC5400    mov edx,屏录专家.0054ECAE               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  004408B9    BA F10D5500    mov edx,屏录专家.00550DF1               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  
  
  F9运行程序。程序在这里中断下来:
  
  004118DD    E8 36411200    call 屏录专家.00535A18
  004118E2    8B8D 8CFEFFFF  mov ecx,dword ptr ss:[ebp-174]
  004118E8    8B81 580C0000  mov eax,dword ptr ds:[ecx+C58]
  004118EE    05 18FCFFFF    add eax,-3E8
  004118F3    3B85 88FEFFFF  cmp eax,dword ptr ss:[ebp-178]
  004118F9    74 44          je short 屏录专家.0041193F
  004118FB    66:C785 A0FEFF>mov word ptr ss:[ebp-160],170
  00411904    BA C3EB5400    mov edx,屏录专家.0054EBC3               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  00411909    8D85 70FFFFFF  lea eax,dword ptr ss:[ebp-90]
  0041190F    E8 583E1200    call 屏录专家.0053576C
  
  
  
  通过分析,我们知道,只有让下面这个跳转实现,程序才能正常运行。有朋友说了,直接改为jmp就可以了。其实不然。这里面另有玄机。
  004118F9    74 44          je short 屏录专家.0041193F
  
  
  要想让上面的跳转实现,只有当 cmp eax,dword ptr ss:[ebp-178],这里的eax的值和[ebp-178]的值相等的时候,这个跳转才能实现。
  
  我们在004118F3这个地址F2 下断,重新载入程序,F9运行。提示“ly.exe无法关闭,请与作者联系”,(之所以会有这个提示,是因为刚才屏
  
  幕录像专家程序异常终止,没有把ly.exe的资源释放掉。)这时我们点确定按钮,重新载入,F9运行程序。
  
  ======================================
  在004118F3中断后,在信息窗口我们发现
  堆栈 ss:[0012FD34]=000081F1
  eax=00004CED
  ======================================
  这时我们用关掉Ollydbg(因为屏幕录像专家不支持多开。呵呵。不过呢,通过技术手段也可以实现多开的。),再用Ollydbg载入原版的程序。
  
  我们在命令行窗口输入
  bp  004118F3
  
  ======================================
  F9运行程序,中断后,在信息窗口我们发现
  堆栈 ss:[0012FD34]=00004CED
  eax=00004CED
  ======================================
  
  通过对比我们发现只有当[ebp-178]==EAX的时候,程序才能正常运行。好了,聪明的你该知道从哪里入手了吧。我们在命令行里面输入
  
  dd 0012FD34 (先做一下记录。我们只要观察 这里的值在什么时候等于 [0012FD34]=000081F1)
  
  
  然后在输入
  
  bp CreateFileW
  
  
  经过了N次  F9,当堆栈中出现下面信息的时候,
  0012F140   7C801A53  /CALL 到 CreateFileW 来自 kernel32.7C801A4E
  0012F144   7FFDFC00  |FileName = "D:\屏幕录像专家 共享版 V7.5\屏录专家.exe"
  0012F148   80000000  |Access = GENERIC_READ
  0012F14C   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
  0012F150   00000000  |pSecurity = NULL
  0012F154   00000003  |Mode = OPEN_EXISTING
  0012F158   00000080  |Attributes = NORMAL
  0012F15C   00000000  \hTemplateFile = NULL
  
  
  清除断点,我们在命令行输入 
  
  dd 0012FD34 
  
  我们发现,当前的值是0,我们在地址 0012FD34  下硬件硬件访问断点-byte;F9运行程序,中断在这里。清除硬件断点
  
  0041152B   .  8BC3         mov eax,ebx                         ;  停在这里
  0041152D   .  E8 6A0AFFFF  call 屏录专家.00401F9C
  00411532   .  8BF8         mov edi,eax
  00411534   .  33C0         xor eax,eax
  00411536   .  83C9 FF      or ecx,FFFFFFFF
  00411539   .  8DB5 7CFAFFF>lea esi,dword ptr ss:[ebp-584]
  0041153F   .  F2:AE        repne scas byte ptr es:[edi]
  
  
  我们观察内存 0012FD34 处的值变为  000081F1
  向上看汇编代码
  0041151F   .  E8 881E0000  call 屏录专家.004133AC                  ;  我们可以分析出,这个call语句改变了EAX的值
  00411524   .  59           pop ecx
  00411525   .  8985 88FEFFF>mov dword ptr ss:[ebp-178],eax
  0041152B   .  8BC3         mov eax,ebx                         ;  停在这里
  0041152D   .  E8 6A0AFFFF  call 屏录专家.00401F9C
  
  
  在0041151F 这里下断点。重新来过,中断后,我们F7跟进去看看,里面是何方妖孽在作乱。进去后,我们一路F8,这时侯,我们要观察寄存器
  
  ,什么时候出现“81F1”当程序走过下面的call的时候,我们发现EAX,EDX寄存器的值都变为“81F1”
  
  
  
  0041345E   .  50           push eax                            ; /Arg3
  0041345F   .  56           push esi                            ; |Arg2
  00413460   .  8B55 08      mov edx,dword ptr ss:[ebp+8]        ; |
  00413463   .  52           push edx                            ; |Arg1
  00413464   .  E8 C3D10300  call 屏录专家.0045062C              ; \屏录专家.0045062C
  
  
  我们在 00413464  F2 下断点。重新来过。当程序中断在00413464 的时候,我们F7跟进去。来到这里:
  0045062C  /$  55           push ebp
  0045062D  |.  8BEC         mov ebp,esp
  0045062F  |.  53           push ebx
  00450630  |.  56           push esi
  00450631  |.  57           push edi
  00450632  |.  8B75 0C      mov esi,dword ptr ss:[ebp+C]
  00450635  |.  8B7D 08      mov edi,dword ptr ss:[ebp+8]
  00450638  |.  33DB         xor ebx,ebx
  0045063A  |.  68 05800000  push 8005                           ; /Arg2 = 00008005
  0045063F  |.  57           push edi                            ; |Arg1
  00450640  |.  E8 37330000  call 屏录专家.0045397C                  ; \屏录专家.0045397C
  00450645  |.  83C4 08      add esp,8
  00450648  |.  33C0         xor eax,eax
  0045064A  |.  3B45 10      cmp eax,dword ptr ss:[ebp+10]
  0045064D  |.  73 23        jnb short 屏录专家.00450672
  0045064F  |>  0FB7D3       /movzx edx,bx
  00450652  |.  C1FA 08      |sar edx,8
  00450655  |.  33C9         |xor ecx,ecx
  00450657  |.  8A0E         |mov cl,byte ptr ds:[esi]
  00450659  |.  46           |inc esi
  0045065A  |.  33D1         |xor edx,ecx
  0045065C  |.  40           |inc eax
  0045065D  |.  C1E3 08      |shl ebx,8
  00450660  |.  66:8B9497 50>|mov dx,word ptr ds:[edi+edx*4+850]
  00450668  |.  66:33D3      |xor dx,bx
  0045066B  |.  3B45 10      |cmp eax,dword ptr ss:[ebp+10]
  0045066E  |.  8BDA         |mov ebx,edx
  00450670  |.^ 72 DD        \jb short 屏录专家.0045064F
  00450672  |> \0FB7C3       movzx eax,bx                        ;  当程序走到这里的时候,我们发现EBX=81F1
  00450675  |.  8987 600C000>mov dword ptr ds:[edi+C60],eax
  0045067B  |.  8BC3         mov eax,ebx
  0045067D  |.  5F           pop edi
  0045067E  |.  5E           pop esi
  0045067F  |.  5B           pop ebx
  00450680  |.  5D           pop ebp
  00450681  \.  C3           retn
  
  
  
  00450672  |> \0FB7C3       movzx eax,bx    
   当程序走到这里的时候,我们看一下寄存器的值
  EAX 00204E58
  ECX 00000000
  EDX 000081F1
  EBX 000081F1
  ESP 0012F1A4
  EBP 0012F1B0
  ESI 027C4E5C
  ========================================
  
  
  我们在下面的地址开始打补丁
  
  先找一个零区
  0054A8DE    0000                 add byte ptr ds:[eax],al     ;零区
  
  在零区把下面的补丁代码写上。
  
  ===============补丁代码==============
  mov   ebx,4CED
  mov   edx,ebx
  movzx eax,bx
  mov   [edi+0C60],eax
  jmp   0045067B
  =====================================
  
  ----------------------------------------------------------------------------
  00450672  |> \0FB7C3        movzx eax,bx                        ;打补丁
  00450675  |.  8987 600C000> mov dword ptr ds:[edi+C60],eax
  0045067B  |.  8BC3          mov eax,ebx                         ;返回地址
  
  修改为
  00450672   /E9 67A20F00          jmp 屏录专家.0054A8DE                  
  00450677   |90                   nop
  00450678   |90                   nop
  00450679   |90                   nop
  0045067A   |90                   nop
  0045067B   |8BC3                 mov eax,ebx
  ----------------------------------------------------------------------------
  
  
  代码修改完毕,我们来保存一下。复制所有修改。保存为“修改图标.exe”关闭Ollydbg。
  
  运行 修改图标.exe ,OK 。可以运行。呵呵。这时,我们就修改好了屏幕录像大师的图标了。
  
  
  好累呀,呵呵,我打字很慢。文章写的还嗦。主要是为了让大家都能看懂。高手可以用眼睛扫一下就可以了。别仍我鸡蛋就好啊!
  
  
  
  
  
  
  
  
  
  下面我们继续DIY。
  我们录制好的录像的图片和屏幕录像大师图标是一样的。看的久了。是不是很难看呀。好吧。下面我就领着大家来修改这个图标。换成自己的
  
  图片。个性一定。虽然我是80后,但是对于90后的非主流我也不持反对态度。我也来个非主流吧。哈哈。
  
  说干就干。我用PE Explorer把“屏录专家.exe”的资源文件都看了一遍,也没有找到生成录像的图标。我就郁闷了。难度作者是动态生成的图
  
  标,不是资源文件,我开始怀疑了。这时呢,一道灵光在我的脑海里面一闪我想起了灰鸽子配置服务端的dat文件。难道这个图标也在dat
  
  文件里面。我就看了一下软件安装目录内的dat文件。通过字面意思,我一眼就定位到了“犯罪嫌疑人” Play.dat 
  
  我把Play.dat 文件修改后缀名。改为Play.exe,我发现,图标立刻变成和“屏幕录像.exe”一样了。这就更加证实了我的猜测了。我用
  
  Restorator  载入“Play.exe”,出现了一个资源文件的列表。点击“图标”这个选项前面的“+”展开资源,出现了1个“MAINICON”资源,
  
  我用事先准备好的icon图标替换,保存。我们在把Play.exe修改为Play.dat。运行“修改图标.exe”。
  
  出现了一个提示“本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安装”
  
  我晕,又是这个东西,烦死了。看来还有自校验呀。
  
  
  用Ollydbg载入“修改图标.exe”。用字符串插件搜索“本软件已经损坏”,一共有五处,我们分别下 F2断电。
  
  00411904    BA C3EB5400    mov edx,屏录专家.0054EBC3               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  0041260F    BA 38EC5400    mov edx,屏录专家.0054EC38               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  00412664    BA 73EC5400    mov edx,屏录专家.0054EC73               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  004126BC    BA AEEC5400    mov edx,屏录专家.0054ECAE               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  004408B9    BA F10D5500    mov edx,屏录专家.00550DF1               ; 本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安
  
  装
  
  
  
  
  F9运行程序。程序在这里中断下来:
  004125E0   > \8B85 8CFEFFFF      mov eax,dword ptr ss:[ebp-174]
  004125E6   .  8B90 540C0000      mov edx,dword ptr ds:[eax+C54]
  004125EC   .  81C2 0FFCFFFF      add edx,-3F1
  004125F2   .  3B95 84FEFFFF      cmp edx,dword ptr ss:[ebp-17C]
  004125F8   .  75 0C              jnz short 修改图标.00412606
  004125FA   .  81BD 84FEFFFF 7067>cmp dword ptr ss:[ebp-17C],6770
  00412604   .  74 44              je short 修改图标.0041264A
  00412606   >  66:C785 A0FEFFFF F>mov word ptr ss:[ebp-160],2F0
  
  
  看上面的代码我们知道,这里的校验和上面的原理是一样的。处理方法也一样。在004125F2下断点。重新来过。中断后,信息窗口
  004125F2   .  3B95 84FEFFFF      cmp edx,dword ptr ss:[ebp-17C]    ; 这里要让[ebp-17C] ==EDX
  ------信息窗口内容---------
  堆栈 ss:[0012FD30]=0000CD79
  edx=00006770
  ---------------------------
  
  在命令行里面输入 
  
  dd 0012FD30      (先做一下记录。我们只要观察 这里的值在什么时候等于 [0012FD30]=00006770)
  
  
  然后再输入
  
  bp CreateFileW
  
  
  经过了N次  F9,当堆栈中出现下面信息的时候,
  0012F190   7C801A53  /CALL 到 CreateFileW 来自 kernel32.7C801A4E
  0012F194   7FFDFC00  |FileName = "D:\屏幕录像专家 共享版 V7.5\\play.dat"
  0012F198   80000000  |Access = GENERIC_READ
  0012F19C   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
  0012F1A0   00000000  |pSecurity = NULL
  0012F1A4   00000003  |Mode = OPEN_EXISTING
  0012F1A8   00000000  |Attributes = 0
  0012F1AC   00000000  \hTemplateFile = NULL
  
  
  
  
  清除断点,我们在命令行输入 
  
  dd 0012FD30 
  
  我们发现,当前的值是0012FEFC,我们在地址0012FD30   下硬件硬件访问断点-byte;F9运行程序,中断在这里。清除硬件断点
  00411835   .  68 8CEB5400        push 修改图标.0054EB8C              ; /FileName = "hhctrl.ocx"
  0041183A   .  E8 3B871300        call    ; \LoadLibraryA
  
  
  我们观察寄存器,发现EAX=CD79
  
  向上看汇编代码
  00411829   .  E8 8A1D0000        call 修改图标.004135B8                  ;  F7跟进去
  0041182E   .  59                 pop ecx
  0041182F   .  8985 84FEFFFF      mov dword ptr ss:[ebp-17C],eax
  00411835   .  68 8CEB5400        push 修改图标.0054EB8C                  ; /FileName = "hhctrl.ocx"
  0041183A   .  E8 3B871300        call        ; \LoadLibraryA
  
  
  我们在这里00411829下断点。重新来过,程序中断后,F7跟进去,然后一路F8.当程序执行到00413695时,我们观察寄存器EAX=CD79,EDX=CD79
  
  0041368A   .  50                 push eax                            ; /Arg3
  0041368B   .  56                 push esi                            ; |Arg2
  0041368C   .  8B55 08            mov edx,dword ptr ss:[ebp+8]        ; |
  0041368F   .  52                 push edx                            ; |Arg1
  00413690   .  E8 EFCF0300        call 修改图标.00450684              ; \修改图标.00450684
  00413695   .  83C4 0C            add esp,0C
  
  
  我们在这里00413690下断点。重新来过。中断后,在这里 F7跟进去。
  00413690   .  E8 EFCF0300        call 修改图标.00450684              ;  F7跟进去
  
  
  
  进去后。停在下面的地方:
  00450684  /$  55                 push ebp
  00450685  |.  8BEC               mov ebp,esp
  00450687  |.  53                 push ebx
  00450688  |.  56                 push esi
  00450689  |.  57                 push edi
  0045068A  |.  8B75 0C            mov esi,dword ptr ss:[ebp+C]
  0045068D  |.  8B7D 08            mov edi,dword ptr ss:[ebp+8]
  00450690  |.  33DB               xor ebx,ebx
  00450692  |.  68 05800000        push 8005                           ; /Arg2 = 00008005
  00450697  |.  57                 push edi                            ; |Arg1
  00450698  |.  E8 DF320000        call 修改图标.0045397C              ; \修改图标.0045397C
  0045069D  |.  83C4 08            add esp,8
  004506A0  |.  33C0               xor eax,eax
  004506A2  |.  3B45 10            cmp eax,dword ptr ss:[ebp+10]
  004506A5  |.  73 23              jnb short 修改图标.004506CA
  004506A7  |>  0FB7D3             /movzx edx,bx
  004506AA  |.  C1FA 08            |sar edx,8
  004506AD  |.  33C9               |xor ecx,ecx
  004506AF  |.  8A0E               |mov cl,byte ptr ds:[esi]
  004506B1  |.  46                 |inc esi
  004506B2  |.  33D1               |xor edx,ecx
  004506B4  |.  40                 |inc eax
  004506B5  |.  C1E3 08            |shl ebx,8
  004506B8  |.  66:8B9497 50080000 |mov dx,word ptr ds:[edi+edx*4+850]
  004506C0  |.  66:33D3            |xor dx,bx
  004506C3  |.  3B45 10            |cmp eax,dword ptr ss:[ebp+10]
  004506C6  |.  8BDA               |mov ebx,edx
  004506C8  |.^ 72 DD              \jb short 修改图标.004506A7
  004506CA  |> \8BC3               mov eax,ebx                         ;  在这里打补丁
  004506CC  |.  5F                 pop edi
  004506CD  |.  5E                 pop esi
  004506CE  |.  5B                 pop ebx
  004506CF  |.  5D                 pop ebp
  004506D0  \.  C3                 retn
  
  
  通过观察代码我们发现和第一处校验的模式是一样的,直接F4到这里004506CA,观察寄存器的值
  ========================
  EAX 000A1400
  ECX 00000000
  EDX 0000CD79
  EBX 0000CD79
  ESP 0012F1A4
  EBP 0012F1B0
  ========================
  
  我们找一个零区来打补丁。
  0054A8FD    0000                 add byte ptr ds:[eax],al     ;零区
  
  
  ===============补丁代码==============
  mov edx,6770
  mov ebx,edx
  mov eax,ebx
  pop edi
  pop esi
  pop ebx
  jmp 004506CF
  =====================================
  
  =====================================================================================
  004506CA  |> \8BC3               mov eax,ebx                         ;  在这里打补丁
  004506CC  |.  5F                 pop edi
  004506CD  |.  5E                 pop esi
  004506CE  |.  5B                 pop ebx
  004506CF  |.  5D                 pop ebp
  004506D0  \.  C3                 retn
  
  修改为:
  004506CA   /E9 2EA20F00          jmp 修改图标.0054A8FD               ; 修改为
  004506CF   |5D                   pop ebp
  004506D0   |C3                   retn
  =====================================================================================
  
  
  代码修改完毕,我们来保存一下。复制所有修改。保存为“修改图标-DIY.exe”关闭Ollydbg。
  
  运行 修改图标-DIY.exe ,再次出现那个该死的提示了。郁闷……
  
  
  我们用Ollydbg载入“修改图标-DIY.exe”
  
  
  命令行里面输入 
  bp 004125F2 (错误提示的地方)
  
  
  中断后,我们继续F8走,我们发现,
  00412604   /74 44                je short 修改图标.0041264A              ; 这里跳转实现,跳过了错误提示
  
  看来后面还有校验呀。
  
  
  命令行里面输入 
  bp 004506CA (这里是我们第二次打补丁的地方)
  
  我们继续F9运行,程序中断在补丁代码处。一路F8,来到这里:
  00413A78      81FF 1B1A0000      cmp edi,1A1B                        ;  我们发现EDI=6770,这里是判断EDI是否等于1A1B
  00413A7E      75 0E              jnz short 修改图标.00413A8E
  00413A80    B0 01                mov al,1
  00413A82    8B55 CC              mov edx,dword ptr ss:[ebp-34]
  00413A85    64:8915 00000000     mov dword ptr fs:[0],edx
  00413A8C    EB 0C                jmp short 修改图标.00413A9A
  00413A8E    33C0                 xor eax,eax
  00413A90    8B55 CC              mov edx,dword ptr ss:[ebp-34]
  00413A93    64:8915 00000000     mov dword ptr fs:[0],edx
  00413A9A    5F                   pop edi
  00413A9B    5E                   pop esi
  00413A9C    5B                   pop ebx
  00413A9D    8BE5                 mov esp,ebp
  00413A9F    5D                   pop ebp
  00413AA0    C3                   retn
  
  ================================================================
  
  通过上面的分析,我们该找的给edi赋值的地方。向上看汇编代码。发现:
  00413A3F   .  E8 40CC0300        call 修改图标.00450684
  00413A44   .  83C4 0C            add esp,0C
  00413A47   .  0FB7F8             movzx edi,ax                        ;  EAX=EDX=6770,应该在此打补丁,是他们的值为1A1B
  00413A4A   .  56                 push esi                           
  00413A4B   .  E8 002B1100        call 修改图标.00526550             
  
  找零区
  0054A912    0000                 add byte ptr ds:[eax],al            ;零区
  
  ===============补丁代码==============
  add    esp,0C
  mov    eax,1A1B
  mov    edx,eax
  movzx  edi,ax 
  jmp    00413A4A
  =====================================
  
  
  
  00413A3F    E8 40CC0300          call 修改图标.00450684
  00413A44    83C4 0C              add esp,0C
  00413A47    0FB7F8               movzx edi,ax                        ; EAX=EDX=6770,应该在此打补丁,是他们的值为1A1B
  00413A4A    56                   push esi
  00413A4B    E8 002B1100          call 修改图标.00526550
  
  
  修改为:
  
  00413A3F    E8 40CC0300          call 修改图标.00450684
  00413A44    E9 C96E1300          jmp 修改图标.0054A912
  00413A49    90                   nop
  00413A4A    56                   push esi
  00413A4B    E8 002B1100          call 修改图标.00526550
  
  
  代码修改完毕,我们来保存一下。复制所有修改。保存为“修改图标-DIY-1.exe”关闭Ollydbg。
  
  运行 修改图标-DIY-1.exe ,再次出现那个该死的提示了。我要疯了,这个程序……,同时我又一次从内心里对作者的编程功底和加密强度给
  
  予了非常高的肯定。
  
  
  
  
  
  
  
  
  
  再用Ollydbg载入“修改图标-DIY-1.exe”
  
  在命令行输入 
  bp 004506CA (这里是我们第二次打补丁的地方)
  bp 00413A44 (监视程序打过补丁后,又做了什么)
  
  
  F9运行程序,中断在我们第二次打补丁的地方。F8单步走。
  004506CA   /E9 2EA20F00          jmp 修改图标.0054A8FD
  004506CF   |5D                   pop ebp
  004506D0   |C3                   retn
  
  
  当程序走到004126D4时,出现错误提示了。
  004126A6    E8 F9130000          call 修改图标.00413AA4
  004126AB    59                   pop ecx
  004126AC    3D 3EED0000          cmp eax,0ED3E
  004126B1    74 44                je short 修改图标.004126F7
  004126B3    66:C785 A0FEFFFF 080>mov word ptr ss:[ebp-160],308
  004126BC    BA AEEC5400          mov edx,修改图标.0054ECAE
  004126C1    8D85 C0FEFFFF        lea eax,dword ptr ss:[ebp-140]
  004126C7    E8 A0301200          call 修改图标.0053576C
  004126CC    FF85 ACFEFFFF        inc dword ptr ss:[ebp-154]
  004126D2    8B00                 mov eax,dword ptr ds:[eax]
  004126D4    E8 5BA20D00          call 修改图标.004EC934                  ; 这里出现错误提示
  
  
  我们向上看代码发现,当004126AC 这里的EAX==ED3E的时候,这个跳转才能实现。如果不跳就出错。
  004126A6    E8 F9130000          call 修改图标.00413AA4
  004126AC    3D 3EED0000          cmp eax,0ED3E
  004126B1    74 44                je short 修改图标.004126F7
  
  我们在004126A6 下断点。重新来过。中断后在这里004126A6后,我们F8,中断在我们第二次打补丁的地方。F8单步走。
  004506CA   /E9 2EA20F00          jmp 修改图标.0054A8FD
  004506CF   |5D                   pop ebp
  004506D0   |C3                   retn
  
  当程序走到00413B84的时候,我们看eax的值是6770,edx的值是6770
  00413B7C    E8 03CB0300          call 修改图标.00450684
  00413B81    83C4 0C              add esp,0C
  00413B84    0FB7F8               movzx edi,ax                        ; 这里大家很熟悉吧
  00413B87    56                   push esi
  00413B88    E8 C3291100          call 修改图标.00526550
  
  
  通过上面的分析,我们该找的给edi赋值的地方。向上看汇编代码。发现:
  EAX==EDX==6770,应该在此打补丁,让他们的值为,0ED3E
  
  
             
  
  找零区
  0054A928    0000                 add byte ptr ds:[eax],al            ;零区
  
  ===============补丁代码==============
  add    esp,0C
  mov    eax,0ED3E
  mov    edx,eax
  movzx  edi,ax 
  jmp    00413B87
  =====================================
  
  
  
  00413B81    83C4 0C              add esp,0C
  00413B84    0FB7F8               movzx edi,ax                        ; 这里大家很熟悉吧
  00413B87    56                   push esi
  
  修改为:
  00413B81   /E9 A26D1300          jmp 修改图标.0054A928
  00413B86   |90                   nop
  00413B87   |56                   push esi
  
  
  
  代码修改完毕,我们来保存一下。复制所有修改。保存为“修改图标-DIY-2.exe”关闭Ollydbg。
  
  运行 修改图标-DIY-2.exe ,oh my god! 终于看到我们熟悉的界面了。程序运行了。我们试录一个视频。看看你。哇!果然变成了修改的图标
  
  了。真高兴。呵呵。山重水复疑无路,柳暗花明又一村!
  
  
  修改了这么多。我还想要在山寨一下,现在不都是流行山寨版本的吗!
  
  我们知道,在录像播放的时候有一个 控制窗体,我们在控制窗体上面做点手脚吧!
  把自己的名字写上去。让每个看视频的人都能看见。
  
  
  
  说干就干
  
  先吧Play.dat修改为Play.exe,用PE Explorer载入Play.exe 点开rcdate前面的“+”在这个'TCONTROLFORM'资源里面,我们看见了“控制”这
  
  个就是在播放视频时候的控制窗体的标题。把它修改成“看雪论坛专用录像工具”,然后保存。
  
  再把Play.exe 修改为 Play.dat
  
  好了,测试一下,perfect!自我感觉很好。
  
  时间不早了,就说到这里吧。发个效果图给大家看看看:


--------------------------------------------------------------------------------
【经验总结】
  处理自校验的地方值得大家学习一下,尤其是第二次修改的那个自校验,我们修改成固定的值了。但是后面还有对这个值的
  多次校验。需要我们每次模拟正确的值来打补丁。其他的没什么技术含量了。主要是定位我们要修改的内容在那个文件。
  
--------------------------------------------------------------------------------
【版权声明】: 看雪论坛首发,转载请注明作者并保持文章的完整, 谢谢!


                                                       2009年08月06日 0:00:38