kongking
发表于 2008-6-7 19:44:26
这个不是自效验吗?
cxliang
发表于 2008-6-8 01:02:29
究竟怎么处理?我也遇到这个问题。。
iamok
发表于 2008-6-8 09:46:46
自校检,先去查下资料学习。。
playboysen
发表于 2008-6-9 21:47:59
脱壳后PEID查壳知道此程序编写语言是BC++,程序能运行但是有自校验,一般有以下两种方法解决:
1、运行程序并观察,若提示错误,则OD下断MessageBoxA/MessageBoxW,断下后在OD的反汇编窗口慢慢回溯,去找关键点;若程序一闪就退出,则OD下断ExitProcess,断下后依然是回溯去找关键点;
2、查看程序编写语言,若是Delphi或BC++的,就直接用DeDe反编,查找主窗口的FormCreate开始地址,然后OD载入F9运行中断后,F8单步走,很容易找到关键点;若是VB编写的,一般是下bp rtcFileLen断点(有可能是VB P-code,这种语言的自校验讨论帖不多,请自行查看http://bbs.pediy.com/showthread.php?t=66220这个帖子);对VC的程序一般是采取第一种方法或者是下bp CreateFileA断点慢慢F8单步,当然也可以分别用OD打开原程序和脱壳后的程序,两个窗口对比,F8单步找不同之处(比较傻,不到万不得已,不推荐^_^)。
此程序有自校验,我采用第二种方法来解除校验,这样更易懂更快速(当然我一开始是直接OD下断的,依然可行,不过有点麻烦)。
直接用DeDe反编,查找主窗口的FormCreate开始地址为00408414,此处下断F9运行中断后,F8单步走到此处
00408470 FF43 1C inc dword ptr
00408473 66:C743 10 1400 mov word ptr , 14
00408479 E8 22A2FFFF call 004026A0 *******************程序自校验***********
0040847E 84C0 test al, al
00408480 74 28 je short 004084AA *******************改成JMP即可**********
00408482 68 30000100 push 10030
00408487 8D97 A3090000 lea edx, dword ptr
0040848D 52 push edx
0040848E 8D8F 72090000 lea ecx, dword ptr
00408494 51 push ecx
00408495 8BC6 mov eax, esi
00408497 E8 74140900 call 00499910
0040849C 50 push eax
0040849D E8 96960D00 call <jmp.&USER32.MessageBoxA> ***************提示程序被修改************
004084A2 6A 0A push 0A
004084AA E8 B9BBFFFF call 00404068
004084AF 85C0 test eax, eax
004084B1 75 09 jnz short 004084BC
004084B3 E8 CC8F0D00 call <jmp.&kernel32.IsDebuggerPresent> **********检测是否被OD等调试********
004084B8 85C0 test eax, eax
004084BA 74 28 je short 004084E4 **********改成JMP即可***********
004084BC 68 30000100 push 10030
004084C1 8D97 CF090000 lea edx, dword ptr
004084C7 52 push edx
004084C8 8D8F A8090000 lea ecx, dword ptr
004084CE 51 push ecx
004084CF 8BC6 mov eax, esi
004084D1 E8 3A140900 call 00499910
004084D6 50 push eax
004084D7 E8 5C960D00 call <jmp.&USER32.MessageBoxA>
004084DC 6A 0A push 0A
修改后保存,自校验就完全解除了,另外此程序注册机制是明码比较,只要找到关键call就可以看到注册码
分享一组注册码:
用户名:playboysen
注册码:WG5WNmdRSVpQOWN6V0Y2M0ciKkRAV1dY
[ 本帖最后由 playboysen 于 2008-7-20 18:18 编辑 ]
yybns
发表于 2008-6-9 22:35:48
原帖由 playboysen 于 2008-6-9 21:47 发表 https://www.chinapyg.com/images/common/back.gif
脱壳后知道是BC++的程序,然后发现程序能运行但是有自校验,一般有两种方法解决:
1、程序并观察,若提示错误,则OD下断MessageBoxA/MessageBoxW,断下后回溯找到关键点;程序一闪就退出,则OD下断ExitProcess, ...
学习了,谢谢。
凡人1234
发表于 2008-6-13 17:20:58
原帖由 playboysen 于 2008-6-9 21:47 发表 https://www.chinapyg.com/images/common/back.gif
脱壳后知道是BC++的程序,然后发现程序能运行但是有自校验,一般有两种方法解决:
1、程序并观察,若提示错误,则OD下断MessageBoxA/MessageBoxW,断下后回溯找到关键点;程序一闪就退出,则OD下断ExitProcess, ...
强,让我们这些菜鸟受益匪浅啊!!!
playboysen
发表于 2008-6-13 21:27:04
大家都是兄弟,一家亲嘛,互相学习互相提高哦~~~:handshake 加油!!
心跳的惊喜
发表于 2008-6-18 11:02:28
学习了,解释的真不错
lzover
发表于 2008-6-18 13:11:11
原帖由 playboysen 于 2008-6-9 21:47 发表 https://www.chinapyg.com/images/common/back.gif
脱壳后知道是BC++的程序,然后发现程序能运行但是有自校验,一般有两种方法解决:
1、程序并观察,若提示错误,则OD下断MessageBoxA/MessageBoxW,断下后回溯找到关键点;程序一闪就退出,则OD下断ExitProcess, ...
很强大~~谢谢~~/:good
allcrz
发表于 2008-6-19 21:00:00
playboysen能够这么热心的回答,而且回答这么详细,是初学者的良师益友,谢谢!!!