请问大神 zprotect1.6脱壳机 注册码 机器号6D3E-D52A-D3F4-5DE6

凌风设计 的BLOG
用户名:凌风设计
访问量:742
注册日期:
阅读量:3578
阅读量:6910
阅读量:2818
阅读量:1470
51CTO推荐博文
&对于ZProtect&1.4.x版本的系列软件,只要有其一个可用的机器码和key就可实现完美脱壳。
对于ZProtect&目前版本(ZP1.60)加壳的所有软件,只要有其一个可用的机器码和key就可实现完美脱壳。
假设已有一个可用的机器码和KEY:
机器码:AAAA-BBBB-CCCC-DDDD
序列号:B131FA844E0E9A7F3C4DC086EB
脚本流程:
1,寻找OEP断点。这个原理很简单,所谓的ESP平衡定律就是了。
2,对机器码进行补丁。zprotect用DeviceIoControl函数获取机器码相关,只要对该函数设置断点即可。当提示需输入机器号的前8位时,本例中,输入AAAABBBB,后8位即为CCCCDDDD。
3,修复IAT。本版本中IAT的起始和结束部分仍然需要手动填入。
4,用loadpe和IMR修复即可。
脚本内容:
call&VARSINIT
mov&EipForOep_1,&eip
mov&EipForOep_1,&[EipForOep_1]
and&EipForOep_1,&0ff
cmp&EipForOep_1,&60
jne&OEP_NEXT
mov&bpforoep,&esp
jmp&HWIDPatchStart
jmp&FIND_OEP
HWIDPatchStart:
////////////////////
HWID_PATCH:
bphws&DeviceIoControl,&&x&
bp&DeviceIoControl
bphws&VirtualAlloc,&&x&
bp&VirtualAlloc
////////////////////
HWID_PATCH_CHECK_NEXT:
cmp&eip,&VirtualAlloc
jne&HWID_PATCH_2
mov&A_SIZE,&[esp+08]
mov&A_ADDRESS,&eax
bphws&DeviceIoControl,&&x&
bp&DeviceIoControl
bphws&VirtualAlloc,&&x&
bp&VirtualAlloc
HWID_PATCH_CHECK_NEXT_ZHW:&//zenghw&add
////////////////////
FIND_STRING:
mov&tempdata,[esp]//zenghw&add
cmp&tempdata,77DA9559
je&HWID_PATCH_CHECK_NEXT_ZHW
cmp&eip,&DeviceIoControl
je&HWID_PATCH_2
find&A_ADDRESS,&#0FB?#
cmp&$RESULT,&00
je&HWID_PATCH_CHECK_NEXT
mov&A_ADDRESS,&$RESULT
inc&A_ADDRESS
mov&A_ADDRESS_BAK,&$RESULT
mov&dll,&01
add&A_ADDRESS,&04
gci&A_ADDRESS,&DESTINATION
cmp&$RESULT,&00
sub&A_ADDRESS,&04
je&FIND_STRING
mov&ABC,&$RESULT
cmp&[ABC+03],&1124,&02&
jne&FIND_STRING
add&ABC,&05
cmp&[ABC],&E8,&01
jne&FIND_STRING_B
mov&call,&01
////////////////////
FIND_STRING_B:
gci&ABC,&DESTINATION
cmp&$RESULT,&00
sub&ABC,&05
je&FIND_STRING
mov&ABC,&$RESULT
cmp&call,&01
je&FIND_STRING_C
cmp&[ABC],&30,&01
jne&FIND_STRING
////////////////////
FIND_STRING_C:
mov&A_ADDRESS,&A_ADDRESS_BAK
jmp&HWID_PATCH_2
jmp&HWID_PATCH
////////////////////
HWID_PATCH_2:
cmp&dll,&01
jne&HWID_PATCH_2_A
gmemi&A_ADDRESS,&MEMORYBASE
mov&VMBASE,&$RESULT
mov&$RESULT,&A_ADDRESS
////////////////////
HWID_PATCH_2_A:
mov&EXTRA,&[esp]
gmemi&EXTRA,&MEMORYBASE
mov&EXTRA,&$RESULT
gmemi&eip,&MEMORYBASE
cmp&EXTRA,&$RESULT
gmemi&eip,&MEMORYBASE
mov&EXTRA_2,&$RESULT
cmp&[EXTRA_2],&5A4D,&02
mov&baceip,&eip
////////////////////
cmp&eip,&baceip
je&SELFTEST
////////////////////
gmemi&eip,&MEMORYBASE
mov&VMBASE,&$RESULT
////////////////////
find&VMBASE,&#0FB?#
cmp&$RESULT,&00
find&A_ADDRESS,&#0FB?#
cmp&$RESULT,&00
je&SEARCH_3
////////////////////
mov&A_ADDRESS,&$RESULT
gmemi&A_ADDRESS,&MEMORYBASE
mov&VMBASE,&$RESULT
mov&$RESULT,&A_ADDRESS
////////////////////
findmem&&#0FB?#,&CODESECTION
cmp&$RESULT,&00
jne&SEARCH_3_A
////////////////////
SEARCH_3_A:
mov&A_ADDRESS,&$RESULT
gmemi&A_ADDRESS,&MEMORYBASE
mov&VMBASE,&$RESULT
mov&$RESULT,&A_ADDRESS
////////////////////
mov&FOUND,&$RESULT
add&PLUS_1,&FOUND
sub&PLUS_1,&VMBASE
mov&PLUS_1,&PLUS_1
log&PLUS_1
bphws&FOUND,&&x&
mov&ID,&&[esp+10]
mov&ID2,&[esp+14]
alloc&1000
mov&mem,&$RESULT
mov&baceip,&eip
////////////////////
ask&&输入可用机器码的前8个字节,如:AAAABBBB&
cmp&$RESULT,0
cmp&$RESULT,&-1
mov&ID_1,&$RESULT
////////////////////
ask&&输入可用机器码的后8个字节,如:CCCCDDDD&
cmp&$RESULT,0
cmp&$RESULT,&-1
mov&ID_2,&$RESULT
mov&temp2,eax
mov&test,&##+&00-0000&
mov&[mem],&test
mov&eax,&ID_1
shr&eax,&10
mov&I1,&ax
mov&eax,&ID_1
mov&I2,&ax
itoa&I1,&16.
mov&I1,&$RESULT
cmp&$RESULT,&04
////////////////////
cmp&$RESULT,&03
eval&&0{I1}&
mov&I1,&$RESULT
////////////////////
cmp&$RESULT,&02
eval&&00{I1}&
mov&I1,&$RESULT
////////////////////
cmp&$RESULT,&01
eval&&000{I1}&
mov&I1,&$RESULT
////////////////////
cmp&$RESULT,&00
mov&I1,&&0000&
////////////////////
////////////////////
itoa&I2,&16.
mov&I2,&$RESULT
cmp&$RESULT,&04
je&CW_GO_2
////////////////////
cmp&$RESULT,&03
eval&&0{I2}&
mov&I2,&$RESULT
jmp&CW_GO_2
////////////////////
cmp&$RESULT,&02
eval&&00{I2}&
mov&I2,&$RESULT
jmp&CW_GO_2
////////////////////
cmp&$RESULT,&01
eval&&000{I2}&
mov&I2,&$RESULT
jmp&CW_GO_2
////////////////////
cmp&$RESULT,&00
mov&I2,&&0000&
jmp&CW_GO_2
////////////////////
////////////////////
eval&&{I1}-{I2}&
mov&test,&##+$RESULT
mov&[mem],&test
mov&eax,&ID_2
shr&eax,&10
mov&I3,&ax
mov&eax,&ID_2
mov&I4,&ax
itoa&I3,&16.
mov&I3,&$RESULT
cmp&$RESULT,&04
je&CW_GO_3
////////////////////
cmp&$RESULT,&03
eval&&0{I3}&
mov&I3,&$RESULT
jmp&CW_GO_3
////////////////////
cmp&$RESULT,&02
eval&&00{I3}&
mov&I3,&$RESULT
jmp&CW_GO_3
////////////////////
cmp&$RESULT,&01
eval&&000{I3}&
mov&I3,&$RESULT
jmp&CW_GO_3
////////////////////
cmp&$RESULT,&00
mov&I3,&&0000&
jmp&CW_GO_3
////////////////////
////////////////////
itoa&I4,&16.
mov&I4,&$RESULT
cmp&$RESULT,&04
je&CW_GO_4
////////////////////
cmp&$RESULT,&03
eval&&0{I4}&
mov&I4,&$RESULT
jmp&CW_GO_4
////////////////////
cmp&$RESULT,&02
eval&&00{I4}&
mov&I4,&$RESULT
jmp&CW_GO_4
////////////////////
cmp&$RESULT,&01
eval&&000{I4}&
mov&I4,&$RESULT
jmp&CW_GO_4
////////////////////
cmp&$RESULT,&00
mov&I4,&&0000&
jmp&CW_GO_4
////////////////////
////////////////////
eval&&{I3}-{I4}&
mov&test,&##+$RESULT
mov&[mem+0A],&test
////////////////////
mov&CALC,&mem
////////////////////
BIG_LOOP_2:
cmp&[mem],&61,&01
cmp&[mem],&62,&01
cmp&[mem],&63,&01
cmp&[mem],&64,&01
cmp&[mem],&65,&01
cmp&[mem],&66,&01
////////////////////
BIG_LOOP_3:
inc&counta
cmp&counta,&13
jmp&BIG_LOOP_2
////////////////////
sub&[mem],&20
jmp&BIG_LOOP_3
////////////////////
mov&mem,&CALC
mov&counta,&00
cmp&SECOND_LOOP,&01
je&END_SECOND_LOOP
readstr&[mem],&13
mov&STRING,&$RESULT
str&STRING
mov&STRING,&STRING
mov&eax,&temp2
fill&mem,&100,&00
mov&temp2,&eax
mov&test,&##+&00-0000&
mov&[mem],&test
mov&eax,&[esp+10]
mov&I1,&ax
shr&eax,&10
mov&I2,&ax
mov&eax,&[esp+14]
mov&I3,&ax
shr&eax,&10
mov&I4,&ax
itoa&I1,&16.
mov&I1,&$RESULT
cmp&$RESULT,&04
je&CW_GO_5
////////////////////
cmp&$RESULT,&03
eval&&0{I1}&
mov&I1,&$RESULT
jmp&CW_GO_5
////////////////////
cmp&$RESULT,&02
eval&&00{I1}&
mov&I1,&$RESULT
jmp&CW_GO_5
////////////////////
cmp&$RESULT,&01
eval&&000{I4}&
mov&I1,&$RESULT
jmp&CW_GO_5
////////////////////
cmp&$RESULT,&00
mov&I1,&&0000&
jmp&CW_GO_5
////////////////////
////////////////////
itoa&I2,&16.
mov&I2,&$RESULT
cmp&$RESULT,&04
je&CW_GO_6
////////////////////
cmp&$RESULT,&03
eval&&0{I2}&
mov&I2,&$RESULT
jmp&CW_GO_6
////////////////////
cmp&$RESULT,&02
eval&&00{I2}&
mov&I2,&$RESULT
jmp&CW_GO_6
////////////////////
cmp&$RESULT,&01
eval&&000{I2}&
mov&I2,&$RESULT
jmp&CW_GO_6
////////////////////
cmp&$RESULT,&00
mov&I2,&&0000&
jmp&CW_GO_6
////////////////////
////////////////////
eval&&{I1}-{I2}&
mov&test,&##+$RESULT
mov&[mem],&test
itoa&I3,&16.
mov&I3,&$RESULT
cmp&$RESULT,&04
je&CW_GO_7
////////////////////
cmp&$RESULT,&03
eval&&0{I3}&
mov&I3,&$RESULT
jmp&CW_GO_7
////////////////////
cmp&$RESULT,&02
eval&&00{I3}&
mov&I3,&$RESULT
jmp&CW_GO_7
////////////////////
cmp&$RESULT,&01
eval&&000{I3}&
mov&I3,&$RESULT
jmp&CW_GO_7
////////////////////
cmp&$RESULT,&00
mov&I3,&&0000&
jmp&CW_GO_7
////////////////////
////////////////////
itoa&I4,&16.
mov&I4,&$RESULT
cmp&$RESULT,&04
je&CW_GO_8
////////////////////
cmp&$RESULT,&03
eval&&0{I4}&
mov&I4,&$RESULT
jmp&CW_GO_8
////////////////////
cmp&$RESULT,&02
eval&&00{I4}&
mov&I4,&$RESULT
jmp&CW_GO_8
////////////////////
cmp&$RESULT,&01
eval&&000{I4}&
mov&I4,&$RESULT
jmp&CW_GO_8
////////////////////
cmp&$RESULT,&00
mov&I4,&&0000&
jmp&CW_GO_8
////////////////////
////////////////////
eval&&{I3}-{I4}&
mov&test,&##+$RESULT
mov&[mem+0A],&test
mov&SECOND_LOOP,&01
jmp&BIG_LOOP
////////////////////
END_SECOND_LOOP:
readstr&[mem],&13
mov&STRING_2,&$RESULT
str&STRING_2
mov&STRING_2,&STRING_2
mov&eax,&temp2
fill&mem,&100,&00
mov&SECOND_LOOP,&00
mov&[mem],&ID_1
mov&[mem+04],&ID_2
mov&[mem+12],&[mem],&2
mov&[mem+10],&[mem+2],&2
mov&[mem+16],&[mem+4],&2
mov&[mem+14],&[mem+6],&2
mov&ID_1,&[mem+10]&
mov&ID_2,[mem+14]&
fill&mem,&100,&00
readstr&[eip],&0A
mov&place,&$RESULT
mov&test,eip
add&test,&05
gci&test,&DESTINATION
mov&ort,&$RESULT
eval&&jmp&{mem}&
asm&eip,&$RESULT
mov&[mem],&#81FAAAAAAAAA751A81F9AAAAAAAA7512BABBBBBBBBB9CCCCCCCCC#
cmp&$RESULT,&01
jmp&END_SECOND_LOOP_2
////////////////////
END_SECOND_LOOP_2:
add&mem,&22
mov&[mem],&place
sub&mem,&22
mov&[mem+02],ID
mov&[mem+0A],ID2
mov&[mem+11],ID_1
mov&[mem+16],ID_2
eval&&jmp&{ort}&
asm&mem+27,&$RESULT
add&PLUS_2,&ort
sub&PLUS_2,&VMBASE
mov&PLUS_2,&PLUS_2
readstr&[mem],&028
jmp&FULL_END
////////////////////
/////////////////ZENGHW&ADD&////////
var&tempdata&
var&vmaddr
var&apiaddr
var&IAT_Start
var&IAT_End
var&vmapiaddr
var&EipForOep_1
var&EipForOep_2
var&EipForOep_3
var&bpforoep
var&EXTRA_2
var&SECOND_LOOP
var&STRING_2
var&counta
var&STRING
var&PLUS_1
var&PLUS_2
var&TEMP_CHECK
var&CODESECTION
var&CODESECTION_SIZE
////////////////////
gpa&&DeviceIoControl&,&&kernel32.dll&
mov&DeviceIoControl,&&&&$RESULT
gpa&&VirtualAlloc&,&&&&&kernel32.dll&
mov&VirtualAlloc,&&&&&&&$RESULT
gpa&&VirtualProtect&,&&&kernel32.dll&
mov&VirtualProtect,&&&&&$RESULT
gpa&&MapViewOfFile&,&&&&&kernel32.dll&
mov&MapViewOfFile,&&&&&&$RESULT
////////////////////
cmp&TEMP_CHECK,&0
je&FULL_END_2
free&TEMP_CHECK
////////////////////
FULL_END_2:
BPHWS&bpforoep,&&r&
mov&EipForOep_2,&eip
mov&EipForOep_2,&[EipForOep_2]
and&EipForOep_2,&0ff
cmp&EipForOep_2,&E8
je&findoep2
mov&oep,&eip
pause&&//此处暂停后,可先查看IAT&START和IAT&END,然后修改fixiat里面的对应内容
msg&&此处暂停后,可先查看IAT的起始和终止地址,然后修改fixiat里面对应的IAT_Start和IAT_Start!&
jmp&fixiat
//msg&&修复后,请手动查找OEP!&
mov&oep,&eip
mov&IAT_Start,&0040306C&&////////////////////////////////////////
mov&IAT_End,&&&////////////////////////////////////////
mov&eip,&[IAT_Start]
mov&EipForOep_3,&eip
mov&EipForOep_3,&[EipForOep_3]
and&EipForOep_3,&0ff
cmp&EipForOep_3,&68
jne&skipfix2
mov&tmp1,&eip
find&eip,&#7C#
cmp&$RESULT,&0
mov&tmp2,&$RESULT
mov&[tmp2],&#EB#
mov&eip,&tmp1
mov&vmapiaddr,&eip
sub&vmapiaddr,&vmaddr
add&vmapiaddr,&kernel32base
mov&[IAT_Start],&vmapiaddr
add&IAT_Start,4
cmp&IAT_Start,&IAT_End
cmp&[IAT_Start],&0
je&skipfix
mov&eip,&[IAT_Start]
mov&EipForOep_3,&eip
mov&EipForOep_3,&[EipForOep_3]
and&EipForOep_3,&0ff
cmp&EipForOep_3,&68
jne&skipfix2
mov&tmp1,&eip
find&eip,&#7C#
cmp&$RESULT,&0
mov&tmp2,&$RESULT
mov&[tmp2],&#EB#
mov&eip,&tmp1
mov&apiaddr,&eip
mov&[IAT_Start],&apiaddr
add&IAT_Start,4
cmp&IAT_Start,&IAT_End
cmp&[IAT_Start],&0
je&skipfix
add&IAT_Start,4
cmp&[IAT_Start],&0
je&skipfix
add&IAT_Start,4
cmp&IAT_Start,&IAT_End
msg&&Fix&IAT&wrong!&
mov&eip,&oep
&本文出自 “” 博客,转载请与作者联系!
了这篇文章
类别:未分类┆阅读(0)┆评论(0)ZProtect脱壳无KEY解码总结
标 题:ZProtect脱壳无KEY解码总结
作 者:casgsn
时 间:<font color="#10-05-01 03:59:50 链 接:
【文章标题】:&ZProtect脱壳无KEY解码总结
【文章作者】:&A.D.
【软件名称】:&某ZP加壳的程序
【使用工具】:&OllyDBG&1.0原版&+&StrongOD&+&ODbgScript
【操作平台】:&WinXP&SP3
【作者声明】:&只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【首发论坛】:&一蓑烟雨&转帖请注明
【文章目的】:&ZProtect旧版加壳的程序,如果使用了注册框和试用功能,可以通过y3y3y3大大的LPK.DLL来绕过。但是如果是ZP&1.49或者企业版,又或者没有使用试用功能,程序本身虽然依然可以由LPK.DLL绕过,可绕过后的程序并不能正常运行。这是因为用ZP加壳时,程序的部分代码用密钥进行了加密,在绕过注册框后,必须正确地使这些代码解密,程序才可以正常运行。而本文的目的就是探讨如何在没有注册码的情况下使之正确解码,使程序可以正常运行,进而可以脱壳。&
【致谢人员】:&hyperchem、ximo、Hmily、ffzy
ZPROTECT加壳的程序&有些是需要用key来解码的。
这个用key解码的过程是通过从key中计算一个出一个dword,然后对它进行md5运算,得到的这个值用做解码的密钥(16个字节)。
解码的方法为:在全部代码解码完成以后,进入key解码阶段,
用这个密钥异或特定的区域(一般是程序原始区段的前0x400个字节),每0x10一个单位(以为这是密钥的长度。)
至于如何猜密钥就自己想吧。说了对你不好。
1.44以后的版本有两次异或,一次异或是一个常数的md5值,一次是从key中的到dword的md5。
注意区分。
hyperchem&发表于&&02:02&
【无KEY解码原理】
在正确理解上面hyperchem大大给出的提示的情况下,对ZP加壳的程序进行研究。
了解到ZProtect加壳程序的运行流程如下:
OD初始断点处=&待输入注册码的注册框=&程序代码整体解码=&特定区域KEY解码=&到达真正OEP
而特定区域KEY解码的流程,通过我之前的疑问贴ZProtect&1.4.9脱壳练习遇到的疑问二&10楼的帖子已经解释过了,如下:
第一次解码=&第二次解码=&第三次解码
事实上,我并不很确切地知道三次解码分别进行的是什么操作,是用的KEY的MD5,还是其他什么,我只是通过自己加壳的计算器的两种状态下的运行,知道了前两次解码的结果不管是输入正确注册码还是绕过注册框其结果都是一样的,而第三次解码的结果则不同。
之后我尝试在第三次解码前,把解码的对象XOR数值改成正确的数值,发现解码成功,到达真正OEP时程序可以运行。
所以要想实现无KEY解码,其原理就是在第三次解码前把用以解码的XOR数值改成正确的数值,而问题也转化为如何在没有注册码的情况下猜解出正确的解码XOR数值。
【无KEY解码流程】
============================
1、准备工作:
在整个猜解的过程当中,我们需要记录下一些信息,首先建立一个TXT文档,内容如下:
1、真正OEP:
2、IATSTART:
3、密钥位置:
4、解码代码段:
5、正确解码:
6、IATEND:
而整个猜解的流程,我通过自己编写的ODbgScript脚本来实现,首先建立一个脚本模板:
var&oep&&&&&&&&//ESP定律&用到的断点,并不是真正的OEP,只是用以判断已经到真正的OEP了
//清空断点
&&&&&&&&mov&oep,eip
&&&&&&&&cmp&[oep],60,1
&&&&&&&&je&GetOEP
&&&&&&&&sti
jmp&FoundOEP
&&&&&&&&GetOEP:
&&&&&&&&sti
&&&&&&&&mov&oep,esp
//绕过注册框
BypassRegist:
&&&&&&&&bphws&77D56D7D&&&&&&&&//注册对话框断点
&&&&&&&&run
&&&&&&&&mov&eax,232c
&&&&&&&&mov&eip,77D56D99
&&&&&&&&bphwcall
//到达真正OEP
&&&&&&&&bphws&oep,&r&
&&&&&&&&run
&&&&&&&&bphwcall
&&&&&&&&sti&&&&&&&&//这里有多少个sti在于ESP定律断点断下来后F7几次到达真正OEP
&&&&&&&&sti
//退出函数
&&&&&&&&ret
以上准备工作做好后,就可以正式开始无KEY解码。
============================
2、载入程序,运行上面的原始模板脚本。运行完后,程序停在真正OEP处。记录下来:
1、真正OEP:esp定律=&12FFA0=&46F610&//其中12FFA0就是脚本中的oep
============================
3、在真正OEP上下文中的CALL里找IAT表的位置。
&&&55&&&&&&&&&&&&&&&PUSH&EBP
&&&8BEC&&&&&&&&&&&&&MOV&EBP,ESP
&&&83C4&F0&&&&&&&&&&ADD&ESP,-10
&&&B8&B8F34600&&&&&&MOV&EAX,程序.
0046F61B&&&E8&D068F9FF&&&&&&CALL&程序.00405EF0&&☆跟进
00405EF0&&&53&&&&&&&&&&&&&&&PUSH&EBX
00405EF1&&&8BD8&&&&&&&&&&&&&MOV&EBX,EAX
00405EF3&&&33C0&&&&&&&&&&&&&XOR&EAX,EAX
00405EF5&&&A3&A4004700&&&&&&MOV&DWORD&PTR&DS:[4700A4],EAX
00405EFA&&&6A&00&&&&&&&&&&&&PUSH&0
00405EFC&&&E8&2BFFFFFF&&&&&&CALL&程序.00405E2C&&☆跟进
00405E2C&&-FF25&F8314700&&&&JMP&DWORD&PTR&DS:[4731F8]&&&&&&&&&&&&&&&&//这里的4731F8应该就是IAT表当中的一项了
00405E32&&&8BC0&&&&&&&&&&&&&MOV&EAX,EAX
00405E34&&-E9&8B470A00&&&&&&JMP&程序.004AA5C4
00405E39&&&90&&&&&&&&&&&&&&&NOP
00405E3A&&&8BC0&&&&&&&&&&&&&MOV&EAX,EAX
00405E3C&&-E9&FF430A00&&&&&&JMP&程序.004AA240
00405E41&&&90&&&&&&&&&&&&&&&NOP
然后就在数据窗口中去到4731F8,转成长型-地址看看,上下文如下:
00472FFC&&
0047300C&&343B2735
004731DC&&00D000EE
&&6447DD5C
&&00D000FC
004731EC&&
&&00D0010A
&&2818542D
&&00A73E10
通过这里可以判断出IATSTART的开始位置可能为&,记录如下:
2、IATSTART:473000=&&//因为可能所以先空着
============================
4、接下来,通过找到的IAT表,反过来找解码的时候。
在脚本模板中相应位置添加如下代码,使得在绕过注册框后,停在解码IAT表的时候。
//根据找到的IAT表首地址+1F,反找解码XOR数值位置
&&&&&&&&bphws&47301F,&w&
&&&&&&&&run
&&&&&&&&jmp&Exit
重载程序,运行脚本,脚本结束时,程序停在473000第一次解码的时候。
通过内存窗口找到473000所在区段401000,右键数据,HEX-16位,转到473000的地址。
这时,从内存窗口中,我们可以看到IAT表第一次解码的情况,按一下F9,到达第二次解码的时候,再按一下F9,到达第三次解码的时候,这时,按着F7不放,我们可以看到内存中IAT表正在一位一位地解码,而解码的汇编代码段如下:
00A745C3&&&8BD0&&&&&&&&&&&&&MOV&EDX,EAX
00A745C5&&&83E2&0F&&&&&&&&&&AND&EDX,0F
00A745C8&&&8A0C14&&&&&&&&&&&MOV&CL,BYTE&PTR&SS:[ESP+EDX]&&&&&&&&&&&&&&&&//XOR对象的位置
00A745CB&&&300C38&&&&&&&&&&&XOR&BYTE&PTR&DS:[EAX+EDI],CL
00A745CE&&&83C0&01&&&&&&&&&&ADD&EAX,1
00A745D1&&&3BC3&&&&&&&&&&&&&CMP&EAX,EBX
00A745D3&&^7C&EE&&&&&&&&&&&&JL&SHORT&00A745C3
通过反复观察,可以知道XOR对象的位置和XOR对象的数值,填表如下:
3、密钥位置:12FEE0~12FEEF
数值:0012FEE0&F1&D3&FF&84&43&29&77&32&86&2D&F2&1D&C4&E5&72&62
============================
5、在知道了解码时XOR对象的位置,和错误的解码数值是多少后,我们就可以反过来找有多少个区段被解码,以方便后文无KEY解码脚本的书写。
解码的时候,这个位置的数值必然是错误的解码XOR数值,所以我们只要在这个位置写入这个错误数值的时候把程序断下来,然后看看程序解码了哪里,就可以知道确切的区段数和每个区段的起始位置了。
在脚本模板里,把FoundXor函数段去掉,替换为:
FoundDecodeSection:
&&&&&&&&bphws&12FEEF,&w&&&&&&&&&&&&&&&&&//填写密钥终止位置
&&&&&&&&bphws&oep,&r&
FoundDecodeSection2:
&&&&&&&&run
&&&&&&&&cmp&eip,oep
&&&&&&&&je&FoundDecodeSection3
&&&&&&&&find&12FEE0,#F1D3FF2DF21DC4E57262#&&&&&&&&//填写密钥起始位置和错误密钥数值
&&&&&&&&cmp&$RESULT,0
&&&&&&&&je&FoundDecodeSection2
&&&&&&&&msg&&请对内存中的程序代码段按F2断点,F9一次后找到的操作的地址即为解码段起始处,再回到脚本按空格继续&
&&&&&&&&pause
&&&&&&&&jmp&FoundDecodeSection2
FoundDecodeSection3:
&&&&&&&&jmp&GoOEP
重载程序,运行脚本。
每当脚本弹出对话框的时候,按确定,然后在内存区段窗口,对加壳程序的代码段按F2,下内存访问断点,F9继续。
程序断在如下代码:
00A745CB&&&300C38&&&&&&&&&&&XOR&BYTE&PTR&DS:[EAX+EDI],CL
00A745CE&&&83C0&01&&&&&&&&&&ADD&EAX,1
00A745D1&&&3BC3&&&&&&&&&&&&&CMP&EAX,EBX
00A745D3&&^7C&EE&&&&&&&&&&&&JL&SHORT&00A745C3
00A745D5&&&83C4&14&&&&&&&&&&ADD&ESP,14
这时,可以看到
DS:[D&('-')
现在我们可以知道程序解码的第一个区段的起始处是了,记录下来。重新回到脚本窗口,空格让脚本继续运行。
反复进行以上步骤,直到脚本运行结束。把刚才所有的结果记录下来:
4、解码代码段:、F000
============================
6、在知道了解码段后,我们要做的就是把所有解码段在运行到第三次解码前的内容记录下来。每一个解码段的内容,大概只需要记录一个屏幕就够用了。我记录的长度是37F。如果解码段的长度不够长,就把这个长度改短点。记录这些内容的目的是用来猜解正确的解码XOR数值。
重新编辑模板脚本,把刚才的FoundDecodeSection&3个函数去掉,按解码段数量,添加下面代码,每个解码段一一对应:
//根据找到的解码地址+37F,反找二次解码后的结果,推最后结果
GuessXor1:
&&&&&&&&bphws&40137F,&w&&&&&&&&&//解码代码段F长
&&&&&&&&run
&&&&&&&&run
&&&&&&&&msg&&401000解码结果&
&&&&&&&&bphwcall
GuessXor2:
&&&&&&&&bphws&47037F,&w&&&&&&&&&//解码代码段F长
&&&&&&&&run
&&&&&&&&run
&&&&&&&&msg&&470000解码结果&
&&&&&&&&bphwcall
GuessXor3:
&&&&&&&&bphws&47337F,&w&&&&&&&&&//解码代码段F长
&&&&&&&&run
&&&&&&&&run
&&&&&&&&msg&&473000解码结果&
&&&&&&&&bphwcall
GuessXor4:&&&&&&&&&&&&&&&&&&&&&&&&//因为+37F断不下来,观察发现这个解码段很短,只能+1FF
&&&&&&&&bphws&4771FF,&w&&&&&&&&&//解码代码段FF长
&&&&&&&&run
&&&&&&&&run
&&&&&&&&msg&&477000解码结果&
&&&&&&&&bphwcall
GuessXor5:
&&&&&&&&bphws&47F37F,&w&&&&&&&&&//解码代码段47F000后37F长
&&&&&&&&run
&&&&&&&&run
&&&&&&&&msg&&47F000解码结果&
&&&&&&&&bphwcall
重载程序,运行脚本,每当程序运行到弹出对话框时,在内存窗口中去到相应的位置,把第二次解码后的结果记录下来,长度就是你选择的长度,然后点击确定继续运行脚本,直到脚本运行完毕。
分别以5个文件保存记录下来的信息,
文件一&.txt:
D&B1&B2&E0&A9&DF&67&75&0D&72&C0&14&F3&F4&4E&56&&-辈喋u.r?篝NV
&A1&F3&E0&AA&D8&25&0A&22&1E&A0&33&FC&99&3D&33&&)◇嗒?.&?=3
D&F5&80&95&CF&55&65&1A&4E&0E&E5&75&9F&F1&0D&3E&&-UeN.&
&D3&F3&E0&AA&D8&25&E5&62&1E&A5&E5&DD&E5&0E&56&&H芋嗒?ュ蒎V
&A6&BB&8E&DE&BD&42&7F&10&1A&A5&75&9D&75&B1&A9&&(暴
&&D6&DE&79&20&F2&C8&65&1A&63&1A&E7&0C&E9&90&4F&56&&洲y&蛉ec?OV
&A1&F2&1F&AA&D8&25&8A&0E&0E&E5&75&9C&F1&19&39&&)◎%?9
B&C5&F1&E0&AA&D8&25&E5&9D&1E&A5&E5&1D&E5&0E&56&&[篷嗒?ュ?V
&A9&B1&81&D8&BC&4C&74&03&72&A0&75&9D&F5&4E&A9&&(┍trN
&&D6&5E&0D&70&32&C8&65&1A&68&18&F6&01&EF&9C&20&31&&.p2h?&1
&&C5&B1&B2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&疟侧%bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&C5&B1&B2&E0&AE&D8&25&1A&62&1E&A5&75&59&C0&0E&56&&疟侧%bY?V
&&F9&94&B2&E0&7E&ED&65&1A&BA&2B&E5&75&51&C0&0E&56&&侧~?Q?V
&&3D&92&B2&E0&9A&EB&65&1A&0E&2D&E5&75&9A&A1&01&34&&=-4
&&43&C4&91&94&52&C8&65&1A&65&19&F1&3A&FF&9F&2B&35&&Ce?
D&4D&E2&A0&AA&D8&25&1A&62&1E&A5&73&CE&8C&3D&22&&]M%b=&
C&CC&F2&E0&B2&C9&65&1A&6D&14&EC&3C&F3&81&2B&24&&L舔嗖m?+$
F&C0&91&85&AA&D8&25&1A&63&1E&A5&75&9D&F5&4E&56&&O?cNV
&61&F2&E0&AA&D8&25&1A&24&18&F6&0C&EE&81&2B&3B&&)a蜞%$?+;
A&A1&0D&1F&66&5B&61&3E&66&E6&4C&A4&DB&F5&4E&D5&&*?f[a&fほ
D&85&F6&18&43&37&63&1A&62&9D&E1&51&99&0D&A7&AF&&mC7cbQ?Н
F&A1&F2&2C&66&9D&34&5A&62&51&B4&35&9D&AC&5F&16&&o◎,f?ZbQ?_
&A0&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&35&4E&56&&)嗒?b?NV
&A1&F2&E0&EC&BD&34&5A&62&16&A5&75&9D&F5&4E&56&&)◎囔?ZbNV
&2C&B2&E0&4A&C9&65&1A&13&0F&E5&75&9D&F5&4E&56&&),侧JNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&4A&C9&65&1A&6E&1E&A5&75&3D&E5&0E&56&&)◎n=?V
&&ED&94&B2&E0&5E&8F&65&1A&62&46&E5&75&45&C0&0E&56&&侧^bFE?V
&&E5&94&B2&E0&BA&80&65&1A&52&2D&E5&75&F1&C6&0E&56&&侧eR-衿V
&&38&F5&BB&8E&DE&BD&57&7C&03&7D&C0&11&D2&97&24&33&&8趸|}?$3
&&4A&D5&79&20&43&DB&B0&10&62&8E&2E&B5&74&76&C0&5C&&J&C郯b?v
&31&79&20&43&23&B7&10&62&8E&2E&B5&74&56&D9&5C&&)1y&C#?b?V
&31&79&20&43&BF&B7&10&62&8E&2E&B5&74&6E&C1&5C&&)1y&C糠b?n
&31&79&20&43&BF&B4&10&62&8E&2E&B5&74&5E&D1&5C&&)1y&C看b?^
&31&79&20&43&EB&B2&10&62&8E&2E&B5&74&16&D2&5C&&)1y&C氩b?
&31&79&20&43&97&BD&10&62&8E&2E&B5&74&76&DC&5C&&)1y&Cb?v
&31&79&20&43&77&B1&10&62&8E&2E&B5&74&A2&DD&5C&&)1y&Cw?b?⑤\
&31&79&20&55&FD&A5&2B&25&1E&2E&B5&74&DA&D2&5C&&)1y&U+%.谝\
&31&79&20&43&3B&BF&10&62&8E&2E&B5&74&EE&DF&5C&&)1y&C;?b?钸\
&31&79&20&43&AF&A8&10&62&8E&2E&B5&74&BE&DE&5C&&)1y&Cb?巨\
&31&79&20&43&EF&BA&10&62&8E&2E&B5&74&EA&DF&5C&&)1y&C锖b?赀\
&&29&31&79&20&43&5F&B3&10&62&8E&2E&B5&74&5E&C0&5C&&)1y&C_?b?^
&&29&31&79&20&43&0B&B2&10&62&8E&2E&B5&74&E2&D4&5C&&)1y&C&?b?庠\
&&29&31&79&20&43&4F&B5&10&62&8E&2E&B5&74&2A&DF&5C&&)1y&CO?b?*
&&29&31&79&20&43&53&BB&10&62&8E&2E&B5&74&56&D2&5C&&)1y&CS?b?V
&&29&31&79&20&43&1B&B0&10&62&8E&2E&B5&74&5E&D7&5C&&)1y&C?b?^
&&29&31&79&20&43&17&B8&10&62&8E&2E&B5&74&5A&C0&5C&&)1y&C?b?Z
&31&79&20&43&3B&AB&10&62&8E&2E&B5&CE&76&8A&EA&&)1y&C;?b?滴v
&AB&F2&E0&AA&8C&CD&43&9D&E1&5A&83&D9&D1&62&57&&蜞ZW
D&A4&FD&57&F6&FC&15&91&A1&9D&61&31&C6&36&C5&96&&]W鳇1?
&&C0&22&6A&EA&AA&48&AE&DA&8B&69&3C&7F&9D&65&C5&96&&?j戟H&
&&C0&42&6F&EA&AA&48&AE&DA&8B&65&3F&7F&9D&65&C5&96&&o戟H?
&&C0&76&6E&EA&AA&48&AE&DA&8B&35&37&7F&9D&65&C5&96&&n戟H?7
&&C0&AE&68&EA&AA&48&AE&DA&8B&6D&31&7F&9D&65&C5&96&&喇h戟H1
A&F7&4C&04&8F&9F&25&99&5C&1E&D0&4F&F5&B1&48&56&&z%醣HV
文件二&.txt:
&A1&F2&E0&AA&D8&25&1A&60&93&E5&75&9D&F5&4E&56&&)◎嗒?`uNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
B&B2&79&20&A8&D8&AE&DA&62&93&E5&75&9D&78&0E&56&&&ㄘbuV
&2C&B2&E0&AA&D8&25&1A&62&1E&A5&75&75&D5&0E&56&&),侧%bu?V
&83&B2&E0&52&FD&65&1A&62&D5&69&BD&54&22&81&9E&&Qb&
&&E4&6F&29&38&70&01&EF&C6&BF&C0&7A&95&7C&16&4E&B2&&)8p锲坷zN
&&CC&2C&B2&E0&AA&D8&25&1A&62&1E&81&35&D8&87&3C&39&&?侧%b?&9
B&A1&79&20&F8&AD&4B&6E&0B&73&C0&55&F8&87&3C&39&&[&Kn&s&9
B&81&D2&C0&8A&F8&44&6E&42&2E&95&45&AD&C5&7E&66&&[nB.~f
&A1&79&20&9A&E9&17&29&56&2B&93&42&A5&CC&0F&14&&&)V+ヌ
&&6A&E5&B7&A6&55&27&DA&E5&62&1E&A5&75&9D&F5&4E&56&&j宸'阱bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&1B&A1&79&20&B5&D8&39&1A&7D&1E&BB&75&82&F5&50&56&&&地9}PV
&&36&A1&ED&E0&B4&D8&3A&1A&7C&1E&BA&75&82&F5&53&56&&6№啻?|SV
&A1&EC&E0&B5&D8&3B&1A&7D&1E&BA&75&83&F5&51&56&&6§嗟?}QV
&A1&ED&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&7№嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&0E&A2&65&1A&62&1E&A5&75&9D&F5&4E&56&&)◎?bNV
&24&B2&E0&F6&5D&65&1A&62&1E&A5&F5&9D&F5&4E&16&&y$侧ebヵN
&A1&F2&20&AA&D8&25&1A&62&1E&A5&75&9C&F5&4E&56&&)◎&%bNV
B&A1&F2&E0&A9&D8&25&1A&AA&73&E5&75&4D&98&0E&56&&+◎喋?M?V
&A1&B2&96&90&B3&2E&C4&58&5E&2E&B5&97&F5&4E&56&&)〔?^.V
&B2&79&20&2A&13&81&56&62&42&83&70&B8&DB&64&32&&&*bB港d2
&CF&B2&E0&02&B6&65&1A&D2&70&E5&75&25&9B&0E&56&&侧%?V
&&E9&CF&B2&E0&62&B6&65&1A&B2&70&E5&75&45&9B&0E&56&&橄侧bE?V
&&C9&CF&B2&E0&42&B6&65&1A&92&70&E5&75&65&9B&0E&56&&上侧Be?V
&&29&CE&B2&E0&A2&B7&65&1A&72&71&E5&75&85&9A&0E&56&&)尾啖rqV
&&09&CE&B2&E0&82&B7&65&1A&52&71&E5&75&A5&9A&0E&56&&.尾RqV
&&69&CE&B2&E0&E2&B7&65&1A&32&71&E5&75&C5&9A&0E&56&&i尾噔2qV
&&49&CE&B2&E0&C2&B7&65&1A&12&71&E5&75&E5&9A&0E&56&&I尾嗦qV
&&A9&CE&B2&E0&22&B7&65&1A&F2&71&E5&75&05&9A&0E&56&&┪侧&?V
&CE&B2&E0&02&B7&65&1A&D2&71&E5&75&25&9A&0E&56&&侧%?V
&&E9&CE&B2&E0&62&B7&65&1A&60&1E&A5&75&9D&F5&4E&56&&槲侧b`NV
A&A1&F2&E0&AA&D8&25&1A&66&1E&A5&75&9D&F5&4E&56&&*◎嗒?fNV
C&A1&F2&E0&AA&D8&25&1A&06&1E&A5&75&9D&F5&4E&56&&,◎嗒?NV
C&A1&F2&E0&AA&D8&25&1A&08&1E&A5&75&9D&F5&4E&56&&L◎嗒?NV
&D2&B2&E0&AA&D8&25&1A&EA&6D&E5&75&9D&F5&4E&56&&也嗒?NV
&&C9&D2&B2&E0&AA&D8&25&1A&F6&6A&E5&75&9D&F5&4E&56&&梢侧%NV
&&C5&D5&B2&E0&AA&D8&25&1A&26&6B&E5&75&9D&F5&4E&56&&耪侧%&kNV
&&B5&D4&B2&E0&AA&D8&25&1A&32&68&E5&75&9D&F5&4E&56&&翟侧%2hNV
&&21&D6&B2&E0&AA&D8&25&1A&0A&69&E5&75&9D&F5&4E&56&&!植嗒?.iNV
&&35&D9&B2&E0&AA&D8&25&1A&A2&69&E5&75&9D&F5&4E&56&&5俨嗒?NV
&&5D&D9&B2&E0&AA&D8&25&1A&16&66&E5&75&9D&F5&4E&56&&]俨嗒?fNV
&&5D&D9&B2&E0&AA&D8&25&1A&16&66&E5&75&9D&F5&4E&56&&]俨嗒?fNV
&&5D&D9&B2&E0&AA&D8&25&1A&16&66&E5&75&9D&F5&4E&56&&]俨嗒?fNV
&&F9&D9&B2&E0&AA&D8&25&1A&1A&6C&E5&75&9D&F5&4E&56&&侧%lNV
&&A5&D8&B2&E0&AA&D8&25&1A&22&64&E5&75&9D&F5&4E&56&&ヘ侧%&dNV
&&E8&BF&AB&C0&AA&D8&25&1A&35&1E&A2&F5&9D&F5&4E&56&&杩%5ⅤNV
&2C&B2&E0&AA&D8&25&1A&63&93&E5&75&9D&78&0E&56&&(,侧%cuV
&&D6&5E&0D&1F&A9&D8&2F&1A&60&1E&B5&75&97&F5&5F&56&&.┴/`_V
B&A1&F8&E0&B9&D8&AE&DA&8E&1C&E4&75&61&F7&0F&56&&;▲喙禺a?V
&A2&B3&E0&8A&DB&64&1A&52&1D&E4&75&DD&F6&0F&56&&%⒊R蓥V
&A2&B3&E0&CE&DB&64&1A&16&1D&E4&75&19&F6&0F&56&&y⒊辔?V
&&B1&A2&B3&E0&02&DB&64&1A&DA&1D&E4&75&55&F6&0F&56&&雹赤?U?V
文件三&.txt:
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&F1&C2&49&56&&)◎嗒?b衤IV
&90&F5&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&嗒?bNV
&&CD&98&F5&E0&12&E9&22&1A&62&1E&A5&75&9D&F5&4E&56&&踵?bNV
&A1&F2&E0&80&E2&22&1A&AE&2F&A2&75&9D&F5&4E&56&&)◎??NV
&A1&F2&E0&AA&D8&25&1A&08&24&A2&75&41&C4&49&56&&)◎嗒?$AV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&2F&CF&49&56&&)◎嗒?b/V
&&C5&90&F5&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&踵%bNV
&&D7&9B&F5&E0&AA&EA&22&1A&62&1E&A5&75&9D&F5&4E&56&&踵&bNV
&A1&F2&E0&94&E3&22&1A&72&2C&A2&75&9D&F5&4E&56&&)◎?r,NV
&A1&F2&E0&AA&D8&25&1A&B4&21&A2&75&B9&C6&49&56&&)◎嗒??蛊IV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&B9&B5&49&56&&)◎嗒?b沟IV
&&1D&92&F5&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&嗒?bNV
&&85&E5&F5&E0&EA&EC&22&1A&62&1E&A5&75&9D&F5&4E&56&&踵觎&bNV
&&29&A1&F2&E0&B2&97&22&1A&B2&28&A2&75&9D&F5&4E&56&&)◎嗖??NV
&&29&A1&F2&E0&AA&D8&25&1A&4C&51&A2&75&45&C3&49&56&&)◎嗒?LQEV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&4D&BA&49&56&&)◎嗒?bMV
&&D5&97&F5&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&踵%bNV
&&E1&F0&F5&E0&F2&EF&22&1A&62&1E&A5&75&9D&F5&4E&56&&狃踵蝻&bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&7D&52&04&56&&)◎嗒?b}RV
D&0C&B8&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&].膏%bNV
&10&B8&E0&AA&D8&25&1A&62&1E&A5&75&71&54&04&56&&膏%bqTV
&00&B8&E0&62&68&6F&1A&FE&B2&EF&75&9D&F5&4E&56&&?膏bhoNV
&02&B8&E0&9A&71&6F&1A&A2&BD&EF&75&9D&F5&4E&56&&I膏o⒔NV
&A1&F2&E0&36&7B&6F&1A&62&1E&A5&75&3D&5B&04&56&&)◎?{ob=[V
&A1&F2&E0&AA&D8&25&1A&6A&B9&EF&75&9D&F5&4E&56&&)◎嗒?j癸uNV
&&B1&0B&B8&E0&8E&77&6F&1A&0E&B7&EF&75&0D&56&04&56&&?膏o凤u.VV
&&29&A1&F2&E0&AA&D8&25&1A&66&BB&EF&75&19&55&04&56&&)◎嗒?f伙uUV
&&29&A1&F2&E0&AA&D8&25&1A&FA&AE&EF&75&9D&F5&4E&56&&)◎嗒?NV
&&F5&10&B8&E0&16&79&6F&1A&62&1E&A5&75&9D&F5&4E&56&&?膏yobNV
&&29&A1&F2&E0&F6&79&6F&1A&62&1E&A5&75&9D&F5&4E&56&&)◎圉yobNV
&&AD&0E&B8&E0&AA&D8&25&1A&62&1E&A5&75&B1&51&04&56&&?膏%bV
&&29&A1&F2&E0&6E&7D&6F&1A&62&1E&A5&75&9D&F5&4E&56&&)◎}obNV
&A1&F2&E0&5E&73&6F&1A&32&B9&EF&75&9D&F5&4E&56&&)◎so2癸uNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&9E&70&6F&1A&42&AE&EF&75&9D&F5&4E&56&&)◎poBuNV
&A1&F2&E0&3E&7A&6F&1A&62&1E&A5&75&9D&F5&4E&56&&)◎?zobNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&79&56&04&56&&)◎嗒?byVV
&04&B8&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&9膏%bNV
&A1&F2&E0&DA&7D&6F&1A&62&1E&A5&75&FD&59&04&56&&)◎嘹}obV
&09&B8&E0&E2&78&6F&1A&66&AF&EF&75&9D&F5&4E&56&&5.膏ofuNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&85&56&04&56&&)◎嗒?bV
&07&B8&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&a膏%bNV
&&29&A1&F2&E0&D6&7A&6F&1A&8E&BA&EF&75&75&5D&04&56&&)◎嘀zou]V
&&F9&0A&B8&E0&AA&D8&25&1A&96&AF&EF&75&39&45&04&56&&?膏%9EV
&&B1&00&B8&E0&D2&71&6F&1A&26&B9&EF&75&D5&56&04&56&&?膏o&癸uV
&&A5&05&B8&E0&AA&77&6F&1A&62&1E&A5&75&9D&F5&4E&56&&?膏obNV
&&29&A1&F2&E0&D6&76&6F&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嘀vobNV
&&29&A1&F2&E0&AA&D8&25&1A&8E&B3&EF&75&D9&51&04&56&&)◎嗒?V
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&5C&04&56&&)◎嗒?bV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&15&5E&04&56&&)◎嗒?b^V
&A1&F2&E0&22&7A&6F&1A&62&1E&A5&75&65&51&04&56&&)◎?zobeQV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&B1&52&04&56&&)◎嗒?bV
&A1&F2&E0&06&7A&6F&1A&62&1E&A5&75&9D&F5&4E&56&&)◎?zobNV
&A1&F2&E0&AA&D8&25&1A&7E&AF&EF&75&9D&F5&4E&56&&)◎嗒?~uNV
&A1&F2&E0&12&76&6F&1A&F2&BE&EF&75&51&53&04&56&&)◎?vo蚓QSV
&&C1&0A&B8&E0&92&72&6F&1A&62&1E&A5&75&39&5F&04&56&&?膏ob9_V
文件四&.txt:
&C1&B5&E0&BA&B8&62&1A&C6&1E&E2&75&8D&85&09&56&&)恋嗪?.V
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&AA&D8&25&1A&62&1E&A5&75&9D&F5&4E&56&&)◎嗒?bNV
文件五&.txt:
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&46&56&&)◎啖IG!bFV
&A1&F2&E0&FA&D8&25&9A&60&1E&A5&75&05&F5&4E&D6&&(◎帔?
A&A1&F2&E0&AA&D9&25&9A&67&1E&A5&75&85&F4&4E&D6&&*◎嗒?N
F&A1&F2&E0&9A&D9&25&9A&68&1E&A5&75&4D&F4&4E&D6&&/◎?M
&A1&F2&E0&52&D9&25&9A&6C&1E&A5&75&DD&F7&4E&D6&&%◎?蓣N
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&49&56&&)◎啖IG!bIV
&A1&F2&E0&F2&DA&25&9A&60&1E&A5&75&ED&F7&4E&D6&&(◎囹?眵N
A&A1&F2&E0&22&DA&25&9A&66&1E&A5&75&3D&F7&4E&D6&&*◎??=
C&A1&F2&E0&12&DA&25&9A&64&1E&A5&75&4D&F7&4E&D6&&,◎??M
E&A1&F2&E0&42&DA&25&9A&62&1E&A5&75&95&64&2C&6D&&.◎?,m
&&29&A1&F2&E0&A1&D8&25&1A&62&14&A5&F5&9D&F6&4E&D6&&)◎唷?bヵN
&&39&AB&F2&60&B2&DB&25&9A&7E&14&A5&F5&AD&F6&4E&D6&&9`槽%ヵN
&&07&AB&F2&60&E2&DB&25&9A&5C&14&A5&F5&FD&F6&4E&D6&&`廑%ヵN
&&65&AB&F2&60&D2&DB&25&9A&3C&14&A5&F5&0D&F6&4E&D6&&e`役%?ヵ.
&&41&AB&F2&60&02&DB&25&9A&10&14&A5&F5&5D&F6&4E&D6&&A`??ヵ]
&&AB&AB&F2&60&72&DB&25&9A&EC&14&A5&F5&6D&F6&4E&D6&&r?ヵm
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&4F&56&&)◎啖IG!bOV
&A1&F2&E0&A2&DC&25&9A&62&1E&A5&75&95&64&2C&6D&&(◎啖?,m
&A1&F2&E0&AB&D8&25&1A&CA&14&A5&F5&BD&F1&4E&D6&&)◎喃??ヵ今N
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&5C&56&&)◎啖IG!b\V
&&C6&AE&F2&E0&92&DC&25&9A&92&11&A5&75&CD&F1&4E&D6&&飘蜞%婉N
&&D8&AE&F2&E0&C2&DC&25&9A&90&11&A5&75&1D&F1&4E&D6&&禺蜞萝%
&&DA&AE&F2&E0&32&DC&25&9A&96&11&A5&75&2D&F1&4E&D6&&诋蜞2?-
&&DC&AE&F2&E0&62&DC&25&9A&94&11&A5&75&7D&F1&4E&D6&&墚蜞b?}
&&DE&AE&F2&E0&52&DC&25&9A&9A&11&A5&75&8D&F0&4E&D6&&蕻蜞R?N
&&D0&AE&F2&E0&82&DD&25&9A&98&11&A5&75&DD&F0&4E&D6&&挟蜞%蒺N
&&D2&AE&F2&E0&F2&DD&25&9A&9E&11&A5&75&ED&F0&4E&D6&&耶蜞蜉%眇N
&&D4&AE&F2&E0&22&DD&25&9A&9C&11&A5&75&3D&F0&4E&D6&&援蜞&?=
&&D6&AE&F2&E0&12&DD&25&9A&62&0E&A5&75&4D&F0&4E&D6&&之蜞?M
&&29&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9E&F5&4E&56&&)◎啖IG!bNV
&&E9&AB&F2&60&42&DD&25&9A&AC&14&A5&F5&9D&F3&4E&D6&&楂B?ヵN
&&CF&AB&F2&60&B2&DE&25&9A&62&1E&A5&75&95&64&2C&6D&&汐厕%,m
&A1&F2&E0&AA&D8&22&1A&9B&61&A5&75&AD&F3&4E&D6&&)◎嗒?N
&&D3&DE&F2&E0&E2&DE&25&9A&99&61&A5&75&FD&F3&4E&D6&&愚蜞廪%aN
&&D5&DE&F2&E0&D2&DE&25&9A&9F&61&A5&75&0D&F3&4E&D6&&辙蜞肄%a.
&&D7&DE&F2&E0&02&DE&25&9A&9D&61&A5&75&5D&F3&4E&D6&&邹蜞?a]
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9C&F5&4E&56&&)◎啖IG!bNV
&&DD&AB&F2&60&72&DE&25&9A&62&1E&A5&75&95&64&2C&6D&&莴r?,m
&A1&F2&E0&AA&D8&24&1A&62&1E&A5&75&6D&F3&4E&56&&)◎嗒?bmV
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&4F&56&&)◎啖IG!bOV
&A1&F2&E0&AA&DF&25&1A&62&1E&A5&75&95&64&2C&6D&&)◎嗒?b,m
&A1&F2&E0&AA&D8&24&1A&62&1E&A5&75&8D&F2&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&4F&56&&)◎啖IG!bOV
&&29&A1&F2&E0&8A&DF&25&1A&62&1E&A5&75&95&64&2C&6D&&)◎?b,m
&&29&A1&F2&E0&AA&D8&24&1A&62&1E&A5&75&AD&F2&4E&56&&)◎嗒?bNV
&&29&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&4F&56&&)◎啖IG!bOV
&&29&A1&F2&E0&EA&DF&25&1A&62&1E&A5&75&95&64&2C&6D&&)◎嚓?b,m
&&29&A1&F2&E0&AA&D8&24&1A&62&1E&A5&75&CD&F2&4E&56&&)◎嗒?b万NV
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&4F&56&&)◎啖IG!bOV
&A1&F2&E0&CA&DF&25&1A&62&1E&A5&75&95&64&2C&6D&&)◎嗍?b,m
&A1&F2&E0&AA&D8&24&1A&62&1E&A5&75&ED&F2&4E&56&&)◎嗒?b眚NV
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&4F&56&&)◎啖IG!bOV
&A1&F2&E0&2A&DF&25&1A&62&1E&A5&75&95&64&2C&6D&&)◎??b,m
&A1&F2&E0&AA&D8&24&1A&62&1E&A5&75&0D&F2&4E&56&&)◎嗒?b.V
&A1&F2&E0&A2&49&47&21&62&1E&A5&75&9D&F5&4F&56&&)◎啖IG!bOV
&A1&F2&E0&0A&DF&25&1A&62&1E&A5&75&95&64&2C&6D&&)◎??b,m
============================
7、有了上面的每个解码区段第二次解码后的结果,我们就可以进行正确解码XOR数值的猜测了,猜测的方法在第8步细说。
在猜出了解码后,不管解码是否正确,我们都应该尝试解码,然后根据结果加以判断猜出来的是否正确,下面是解码脚本函数。
去掉上面的GuessXor各个函数,替换为如下代码:
//还原解码
RestoreDecode:
&&&&&&&&var&XorAddress
&&&&&&&&mov&XorAddress,12FEE0&&&&&&&&&&&&&&&&//解码XOR数值起始位置
&&&&&&&&var&XorAddressEnd
&&&&&&&&mov&XorAddressEnd,XorAddress
&&&&&&&&add&XorAddressEnd,F
&&&&&&&&var&XorNum
&&&&&&&&mov&XorNum,5&&&&&&&&&&&&&&&&&&&&&&&&//解码次数-即解码区段数
&&&&&&&&bphws&XorAddressEnd,&w&
RestoreDecodeLoop:
&&&&&&&&run
&&&&&&&&find&XorAddress,#F1D3FF2DF21DC4E57262#&&&&&&&&&&&&&&&&//错误解码XOR数值
&&&&&&&&cmp&$RESULT,XorAddress
&&&&&&&&jne&RestoreDecodeLoop
&&&&&&&&mov&XorValueFoundAddress,$RESULT
&&&&&&&&repl&XorValueFoundAddress,#F1D3FF2DF21DC4E57262#,#29A1F2E0AAD59DF54E56#,10&&&&&&&&//填入错误与正确的解码XOR数值
&&&&&&&&mov&XorValueFoundAddress,0
&&&&&&&&dec&XorNum
&&&&&&&&cmp&XorNum,0
&&&&&&&&jne&RestoreDecodeLoop
&&&&&&&&bphwcall
然后,重载程序,运行脚本,脚本完成后,如果按F9运行程序成功,则解码成功,如果不成功,则重新进行解码XOR数值的猜解。
============================
8、在完成第6步后,我们有了上面的每个解码区段第二次解码后的结果,我们就可以进行正确解码XOR数值的猜测了。
猜测过程省略,猜测方法有以下几个准则,请自行灵活应用:
a.解码XOR数值长度为0x10,然后循环往复地进行解码。所以每一行解码结果就是一个解码XOR数值调用的循环。如果是通过IAT表进行解码XOR数值的猜解,可以把0x10长度的解码XOR数值平均分成4段来猜解,每段4个十六进制数。
b.不管变量A等于多少,xor&A,A,结果A都是变为0的,这就是XOR的其中一种作用,用于清空某个数值。
已知:&A&xor&B&=&0
结论:&A=B。
所以如果第三次解码后结果该是00的地方,那么第二次解码时这个位置的数值是多少,其对应的解码XOR数值就该是多少。这是猜解码的核心原理。而在IAT所在区段后的几个区段中通常会有一个区段,一眼看过去,每一个列都有大量重复的数值,而这些数值就有可能正是正确的解码XOR数值。
同样的,如果知道了XOR结果应该为多少,而第二次解码后数值为多少,那么也是可以推断出解码XOR数值的。
已知:&A&xor&B&=&C,A和C已知
结论:&B=A&xor&C
c.IAT表的正确解码的结果应该是存在规律的,例如我这个程序的正确解码结果:
0047312C&&004AA7E0&&程序.004AA7E0
4AAD74&&程序.004AAD74
0047313C&&00D0001C
4AB128&&程序.004AB128
0047314C&&004AA1EC&&程序.004AA1EC
4AA1B0&&程序.004AA1B0
4AB0C8&&程序.004AB0C8
4AAC9C&&程序.004AAC9C
0047315C&&00D00046
4AA360&&程序.004AA360
4AA930&&程序.004AA930
4AA3C0&&程序.004AA3C0
0047316C&&00D00054
4AA39C&&程序.004AA39C
0047317C&&004AAEA0&&程序.004AAEA0
4AA708&&程序.004AA708
0047318C&&00D0008C
4AAA98&&程序.004AAA98
4AAF24&&程序.004AAF24
4AA96C&&程序.004AA96C
0047319C&&004AA390&&程序.004AA390
&&00D0009A
&&00D000A8
&&004AA504&&程序.004AA504
004731AC&&004AA084&&程序.004AA084
&&00D000B6
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//不同DLL间的间隔
&&004AB098&&程序.004AB098
004731BC&&00D000C4
我们可以从中看出,主要的结构有两种,004AXXXX和00D0XXXX,并且不同DLL间的间隔符号绝对是。
所以如果我们看到IAT表中一行结果有很多个0,那么我可以猜测这个数值应该是间隔符号,应该全部为0,而不为0的位则代表了猜测的那位XOR数值是错的,需要更改。
而另一种很容易通过IAT表判断的情况是这样:
00465FFC&&
50B468&&1_0zc.
50BA80&&1_0zc.0050BA80
0046600C&&0050BBAC&&1_0zc.0050BBAC
50BDC8&&1_0zc.0050BDC8
50B3C0&&1_0zc.
0046601C&&_0zc.
50B2E8&&1_0zc.
0046602C&&0050BDF8&&1_0zc.0050BDF8
50B330&&1_0zc.
50B8D0&&1_0zc.
0046603C&&&&1_0zc.
50B264&&1_0zc.
50B930&&1_0zc.
0046604C&&0050BD2C&&1_0zc.0050BD2C
50C218&&1_0zc.
解码后,我们发现IAT表中,每隔4行的数值都跟其他行的结构很不一致,那么证明猜测出来的解码XOR数值的那4位是有问题的,而其他12位至少开头两位是没问题的,因为他们的结构一致。
d.在除了IAT所在解码区段外的其他几个区段,一般有一些区段里在正确解码后是含有有意义的英文单词的。如下:
&00&8B&C0&52&75&6E&74&69&6D&65&20&65&72&72&6F&&r.Runtime&erro
&20&20&20&20&20&61&74&20&30&30&30&30&30&30&30&&r&&&&&at&0000000
&00&8B&C0&30&31&32&33&34&35&36&37&38&39&41&42&&0.AB
通过这些单词的正确与否,我们可以确认解码XOR数值的哪些位可能是正确的,哪些位是不正确的。上面的&Runtime&error&看起来是正确的,那么他们对应的第0、4~16位的解码XOR数值都是对的了。
e.判断解码是否正确的终极标准,就是程序可以正常运行。============================
9、在猜解完成后,我们要填写好我们的破解记录文件cracking.txt,这样才算是真正完成了破解。
1、真正OEP:esp定律=&12FFA0=&46F610
2、IATSTART:312C
3、密钥位置:12FEE0~12FEEF
数值:0012FEE0&F1&D3&FF&84&43&29&77&32&86&2D&F2&1D&C4&E5&72&62
4、解码代码段:、F000
5、正确解码:29A1F2E0AAD59DF54E56
6、IATEND:473768
PS:一些注意事项
a.在成功解码后,要进行脱壳,还必须要先修复IAT以及阻止模拟DLL,本文中的脚本并不提供这些功能,请自行解决。
具体的文章可以看hyperchem和ximo的文章。hyperchem大大的文章通过论坛搜索“ZPROTECT”可以找到,基本都是精华帖。
而ximo的文章主要在吾爱破解论坛,还有以下这篇:
b.第8步只是我所想出来的一些解码XOR数值的猜测技巧,上文中的未必能适用全部程序,请在理解原理的前提下,依葫芦画瓢,自己揣摩。
c.一般而言,阻止模拟DLL和正确解码后,IAT修复就可以正常进行,IAT修复的结果,正确的一般如下:
DA6C27&&ADVAPI32.RegCloseKey
DA7852&&ADVAPI32.RegOpenKeyExA
DAEAE7&&ADVAPI32.RegSetValueExA
0046600C&&77DCBB8D&&ADVAPI32.RegQueryValueA
DAE9F4&&ADVAPI32.RegCreateKeyExA
D1803D8&&COMCTL32.ImageList_Destroy
0046601C&&5D1765CF&&COMCTL32.InitCommonControls
EF8597&&GDI32.SetStretchBltMode
EF6AD6&&GDI32.GetClipRgn
0046602C&&77EFA8BA&&GDI32.CreatePolygonRgn
EF7AA0&&GDI32.SelectClipRgn
EF6BFA&&GDI32.DeleteObject
EFAD23&&GDI32.CreateDIBitmap
0046603C&&77EFBA9E&&GDI32.GetSystemPaletteEntries
EFB5EA&&GDI32.CreatePalette
EFB6D0&&GDI32.StretchBlt
如果里面还是存在没有直指系统DLL的API地址的存在。。那么通常都不可能脱壳成功。我也没弄懂,为什么么阻止了模拟DLL还是有这样的情况。

我要回帖

更多关于 zprotect1.6脱壳机 的文章

 

随机推荐