【文章标题】: 去除屏幕录像专家录制的exe的多开校验(高手飘过)
【文章作者】: wuhanqi
【作者邮箱】: wuhanqi@qq.com
【软件名称】: 天草的教程
【下载地址】: 自己搜索下载
【作者声明】: 小菜一个.高手别笑话我哦~嘿嘿.
--------------------------------------------------------------------------------
【详细过程】
今天闲来没事.没事加了个ACprotect壳子想练练手.谁知道.........不会脱= =.忘记了.汗.壳盲啊...
于是乎又打开天草老大的教程看...额,反正阴差阳错忘记关原来的进程又打开新的录像了...
谁知道...弹出这么一个框...
然后就告诉你读取声音失败咯..然后教程就没声音了...
把我吓了一大跳.还以为活见鬼了.好好的教程怎么就没声音了?
后来检查了一下才发现...原来是自己多开了= =...应该是为了防止翻录吧...才会设置这样一个校验...
看着挺不爽的.就想试试去除这个校验...
教程我拿到的没壳...od载入程序..
由于有failed2的提示.直接搜索字符串"failed2"
来到如下代码: 00408105 |. E8 82B10500 CALL 0046328C
0040810A |. C645 81 00 MOV BYTE PTR SS:[EBP-7F],0
0040810E |. 66:C785 7EFFF>MOV WORD PTR SS:[EBP-82],0
00408117 |. 68 78354800 PUSH 00483578 ; ASCII "wb"
0040811C |. FF75 0C PUSH DWORD PTR SS:[EBP+C]
0040811F |. E8 18CC0500 CALL 00464D3C
00408124 |. 83C4 08 ADD ESP,8
00408127 8985 74FFFFFF MOV DWORD PTR SS:[EBP-8C],EAX
0040812D |. 85C0 TEST EAX,EAX
0040812F |. 75 3F JNZ SHORT 00408170 <<<---有跳转哦~
00408131 |. 66:C745 94 08>MOV WORD PTR SS:[EBP-6C],8
00408137 |. BA 7B354800 MOV EDX,0048357B ; ASCII "failed2"
0040813C |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0040813F |. E8 74610600 CALL 0046E2B8
00408144 |. FF45 A0 INC DWORD PTR SS:[EBP-60]
00408147 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00408149 |. E8 36D10200 CALL 00435284
0040814E |. FF4D A0 DEC DWORD PTR SS:[EBP-60]
00408151 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00408154 |. BA 02000000 MOV EDX,2
00408159 |. E8 12620600 CALL 0046E370
0040815E |. 83C8 FF OR EAX,FFFFFFFF
00408161 |. 8B55 84 MOV EDX,DWORD PTR SS:[EBP-7C]
00408164 |. 64:8915 00000>MOV DWORD PTR FS:[0],EDX
0040816B |. E9 61090000 JMP 00408AD1
00408170 |> 837D 14 01 CMP DWORD PTR SS:[EBP+14],1
00408174 |. 0F85 9C020000 JNZ 00408416
0040817A |. FF75 10 PUSH DWORD PTR SS:[EBP+10]
不少人肯定会想...这还不简单...明显有个跳转能跳过去嘛!75→eb不就得了...
事实可没那么简单...修改了还是会有错的...我们注意一下下面的代码: 0040811F |. E8 18CC0500 CALL 00464D3C ; 3.这个call出来后EAX值变化咯.
00408124 |. 83C4 08 ADD ESP,8
00408127 8985 74FFFFFF MOV DWORD PTR SS:[EBP-8C],EAX ; 2.这里有个把EAX赋值到一个地址的.
0040812D |. 85C0 TEST EAX,EAX ; 1.比较EAX...
0040812F |. 75 3F JNZ SHORT 00408170
看起来EAX的值是关键了...于是乎先单独F9运行程序.看看寄存器的值:
EAX 00488280 ASCII "??
ECX 0048D19C 录像19.0048D19C
EDX 0048D19C 录像19.0048D19C
EBX 00A722C4
ESP 0012ACD4
EBP 0012F48C
ESI 0012FD2C
EDI 00000000
第二次先运行一个教程,再用od载入..到同样的位置查看一下寄存器的值: EAX 00000000
ECX 0048D19C 录像19.0048D19C
EDX 0048D19C 录像19.0048D19C
EBX 00A722C4
ESP 0012ACD4
EBP 0012F48C
ESI 0012FD2C
EDI 00000000
很明显吧.EAX的值如果是 00488280的话.程序就可以正常运行了..
那还不简单?找块空地.
修改 00408127 8985 74FFFFFF MOV DWORD PTR SS:[EBP-8C],EAX 为jmp 00482940
在00482940 处写: 00482940 > \B8 80824800 MOV EAX,00488280 ; 给 eax赋值.
00482945 . 8985 74FFFFFF MOV DWORD PTR SS:[EBP-8C],EAX ; 还原代码
0048294B .^ E9 DD57F8FF JMP 0040812D ; 跳回去..
这样的话.程序就可以正常多开了.想开多少个开多少个.哈哈~
--------------------------------------------------------------------------------
【经验总结】
个人感觉去除校验就是来回比较修改前后两个程序.不只只比较跳转之类的.还要比较寄存器关键的值.例如我最近玩的友益文书...就是这样的.
呵呵.算是多一种思路吧.小菜一个.多多指教了.
--------------------------------------------------------------------------------
【版权声明】: 还不是踩在巨人的肩膀上说话?哪里来的版权.随便怎么样.哈哈~
2009年06月30日 15:06:45 |