首页
论坛
课程
招聘
[原创]ZProtect脱壳无KEY解码总结
2010-5-1 03:59 27442

[原创]ZProtect脱壳无KEY解码总结

2010-5-1 03:59
27442
【文章标题】: ZProtect脱壳无KEY解码总结
【文章作者】: A.D.
【软件名称】: 某ZP加壳的程序
【使用工具】: OllyDBG 1.0原版 + StrongOD + ODbgScript
【操作平台】: WinXP SP3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【首发论坛】: 一蓑烟雨www.unpack.cn 转帖请注明
【文章目的】: 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 发表于 2010-4-14 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了
 
//清空断点
bphwcall
bpmc
 
//获取OEP
FoundOEP:
        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
GoOEP:
        bphws oep,"r"
        run
        bphwcall
        sti        //这里有多少个sti在于ESP定律断点断下来后F7几次到达真正OEP
        sti
 
//退出函数
Exit:
        ret

以上准备工作做好后,就可以正式开始无KEY解码。
============================
2、载入程序,运行上面的原始模板脚本。运行完后,程序停在真正OEP处。记录下来:
1、真正OEP:esp定律=>12FFA0=>46F610 //其中12FFA0就是脚本中的oep
============================
3、在真正OEP上下文中的CALL里找IAT表的位置。
0046F610   55               PUSH EBP
0046F611   8BEC             MOV EBP,ESP
0046F613   83C4 F0          ADD ESP,-10
0046F616   B8 B8F34600      MOV EAX,程序.0046F3B8
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,转成长型-地址看看,上下文如下:
00472FF0  00000000
00472FF4  00000000
00472FF8  00000000
00472FFC  00000000
00473000  640D72D8
00473004  2852F1E9
00473008  685733E4
0047300C  343B2735
...
004731D8  685733E4
004731DC  00D000EE
004731E0  6447DD5C
004731E4  00D000FC
004731E8  685733E4
004731EC  3476B475
004731F0  00D0010A
004731F4  2818542D
004731F8  00A73E10


通过这里可以判断出IATSTART的开始位置可能为00473000 ,记录如下:
2、IATSTART:473000=> //因为可能所以先空着
============================
4、接下来,通过找到的IAT表,反过来找解码的时候。
在脚本模板中相应位置添加如下代码,使得在绕过注册框后,停在解码IAT表的时候。
//根据找到的IAT表首地址+1F,反找解码XOR数值位置
FoundXor:
        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,#F1D3FF8443297732862DF21DC4E57262#        //填写密钥起始位置和错误密钥数值
        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


这时,可以看到
CL=F1
DS:[00401000]=2D ('-')


现在我们可以知道程序解码的第一个区段的起始处是00401000了,记录下来。重新回到脚本窗口,空格让脚本继续运行。
反复进行以上步骤,直到脚本运行结束。把刚才所有的结果记录下来:
4、解码代码段:401000、470000、473000、477000、47F000
============================
6、在知道了解码段后,我们要做的就是把所有解码段在运行到第三次解码前的内容记录下来。每一个解码段的内容,大概只需要记录一个屏幕就够用了。我记录的长度是37F。如果解码段的长度不够长,就把这个长度改短点。记录这些内容的目的是用来猜解正确的解码XOR数值。
重新编辑模板脚本,把刚才的FoundDecodeSection 3个函数去掉,按解码段数量,添加下面代码,每个解码段一一对应:
//根据找到的解码地址+37F,反找二次解码后的结果,推最后结果
GuessXor1:
        bphws 40137F,"w"        //解码代码段401000后37F长
        run
        run
        msg "401000解码结果"
        bphwcall
GuessXor2:
        bphws 47037F,"w"        //解码代码段470000后37F长
        run
        run
        msg "470000解码结果"
        bphwcall
GuessXor3:
        bphws 47337F,"w"        //解码代码段473000后37F长
        run
        run
        msg "473000解码结果"
        bphwcall
GuessXor4:                        //因为+37F断不下来,观察发现这个解码段很短,只能+1FF
        bphws 4771FF,"w"        //解码代码段477000后1FF长
        run
        run
        msg "477000解码结果"
        bphwcall
GuessXor5:
        bphws 47F37F,"w"        //解码代码段47F000后37F长
        run
        run
        msg "47F000解码结果"
        bphwcall

重载程序,运行脚本,每当程序运行到弹出对话框时,在内存窗口中去到相应的位置,把第二次解码后的结果记录下来,长度就是你选择的长度,然后点击确定继续运行脚本,直到脚本运行完毕。
分别以5个文件保存记录下来的信息,
文件一 00401000.txt:
00401000  2D B1 B2 E0 A9 DF 67 75 0D 72 C0 14 F3 F4 4E 56  -辈喋遟u.r?篝NV
00401010  29 A1 F3 E0 AA D8 25 0A 22 1E A0 33 FC 99 3D 33  )◇嗒?."?鼨=3
00401020  2D F5 80 95 CF 55 65 1A 4E 0E E5 75 9F F1 0D 3E  -鮻曄UeN鍀燅.>
00401030  48 D3 F3 E0 AA D8 25 E5 62 1E A5 E5 DD E5 0E 56  H芋嗒?錬ュ蒎V
00401040  28 A6 BB 8E DE BD 42 7F 10 1A A5 75 9D 75 B1 A9  (庌紹漸暴
00401050  D6 DE 79 20 F2 C8 65 1A 63 1A E7 0C E9 90 4F 56  洲y 蛉ec?閻OV
00401060  29 A1 F2 1F AA D8 25 8A 0E 0E E5 75 9C F1 19 39  )◎%?鍀滖9
00401070  5B C5 F1 E0 AA D8 25 E5 9D 1E A5 E5 1D E5 0E 56  [篷嗒?鍧ュ?V
00401080  28 A9 B1 81 D8 BC 4C 74 03 72 A0 75 9D F5 4E A9  (┍佖糒tr爑濙N
00401090  D6 5E 0D 70 32 C8 65 1A 68 18 F6 01 EF 9C 20 31  謂.p2萫h?餃 1
004010A0  C5 B1 B2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  疟侧%b濙NV
004010B0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004010C0  C5 B1 B2 E0 AE D8 25 1A 62 1E A5 75 59 C0 0E 56  疟侧%bY?V
004010D0  F9 94 B2 E0 7E ED 65 1A BA 2B E5 75 51 C0 0E 56  鶖侧~韊?鍀Q?V
004010E0  3D 92 B2 E0 9A EB 65 1A 0E 2D E5 75 9A A1 01 34  =挷鄽雃-鍀殹4
004010F0  43 C4 91 94 52 C8 65 1A 65 19 F1 3A FF 9F 2B 35  C膽擱萫e?
00401100  5D 4D E2 A0 AA D8 25 1A 62 1E A5 73 CE 8C 3D 22  ]M鉅%b螌="
00401110  4C CC F2 E0 B2 C9 65 1A 6D 14 EC 3C F3 81 2B 24  L舔嗖蒭m?髞+$
00401120  4F C0 91 85 AA D8 25 1A 63 1E A5 75 9D F5 4E 56  O缿叒?c濙NV
00401130  29 61 F2 E0 AA D8 25 1A 24 18 F6 0C EE 81 2B 3B  )a蜞%$?顏+;
00401140  2A A1 0D 1F 66 5B 61 3E 66 E6 4C A4 DB F5 4E D5  *?f[a>f鍸ほ鮊
00401150  6D 85 F6 18 43 37 63 1A 62 9D E1 51 99 0D A7 AF  m咑C7cb濁Q?Н
00401160  6F A1 F2 2C 66 9D 34 5A 62 51 B4 35 9D AC 5F 16  o◎,f?ZbQ?潿_
00401170  29 A0 F2 E0 AA D8 25 1A 62 1E A5 75 9D 35 4E 56  )狉嗒?b?NV
00401180  29 A1 F2 E0 EC BD 34 5A 62 16 A5 75 9D F5 4E 56  )◎囔?Zb濙NV
00401190  29 2C B2 E0 4A C9 65 1A 13 0F E5 75 9D F5 4E 56  ),侧J蒭鍀濙NV
004011A0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004011B0  29 A1 F2 E0 4A C9 65 1A 6E 1E A5 75 3D E5 0E 56  )◎郕蒭n=?V
004011C0  ED 94 B2 E0 5E 8F 65 1A 62 46 E5 75 45 C0 0E 56  頂侧^廵bF鍀E?V
004011D0  E5 94 B2 E0 BA 80 65 1A 52 2D E5 75 F1 C6 0E 56  鍞侧簚eR-鍀衿V
004011E0  38 F5 BB 8E DE BD 57 7C 03 7D C0 11 D2 97 24 33  8趸庌絎|}?覘$3
004011F0  4A D5 79 20 43 DB B0 10 62 8E 2E B5 74 76 C0 5C  J誽 C郯b?祎v繺
00401200  29 31 79 20 43 23 B7 10 62 8E 2E B5 74 56 D9 5C  )1y C#?b?祎V賊
00401210  29 31 79 20 43 BF B7 10 62 8E 2E B5 74 6E C1 5C  )1y C糠b?祎n羂
00401220  29 31 79 20 43 BF B4 10 62 8E 2E B5 74 5E D1 5C  )1y C看b?祎^裓
00401230  29 31 79 20 43 EB B2 10 62 8E 2E B5 74 16 D2 5C  )1y C氩b?祎襖
00401240  29 31 79 20 43 97 BD 10 62 8E 2E B5 74 76 DC 5C  )1y C椊b?祎v躙
00401250  29 31 79 20 43 77 B1 10 62 8E 2E B5 74 A2 DD 5C  )1y Cw?b?祎⑤\
00401260  29 31 79 20 55 FD A5 2B 25 1E 2E B5 74 DA D2 5C  )1y U+%.祎谝\
00401270  29 31 79 20 43 3B BF 10 62 8E 2E B5 74 EE DF 5C  )1y C;?b?祎钸\
00401280  29 31 79 20 43 AF A8 10 62 8E 2E B5 74 BE DE 5C  )1y Cb?祎巨\
00401290  29 31 79 20 43 EF BA 10 62 8E 2E B5 74 EA DF 5C  )1y C锖b?祎赀\
004012A0  29 31 79 20 43 5F B3 10 62 8E 2E B5 74 5E C0 5C  )1y C_?b?祎^繺
004012B0  29 31 79 20 43 0B B2 10 62 8E 2E B5 74 E2 D4 5C  )1y C ?b?祎庠\
004012C0  29 31 79 20 43 4F B5 10 62 8E 2E B5 74 2A DF 5C  )1y CO?b?祎*運
004012D0  29 31 79 20 43 53 BB 10 62 8E 2E B5 74 56 D2 5C  )1y CS?b?祎V襖
004012E0  29 31 79 20 43 1B B0 10 62 8E 2E B5 74 5E D7 5C  )1y C?b?祎^譢
004012F0  29 31 79 20 43 17 B8 10 62 8E 2E B5 74 5A C0 5C  )1y C?b?祎Z繺
00401300  29 31 79 20 43 3B AB 10 62 8E 2E B5 CE 76 8A EA  )1y C;?b?滴v婈
00401310  92 AB F2 E0 AA 8C CD 43 9D E1 5A 83 D9 D1 62 57  挮蜞獙虲濁Z冑裝W
00401320  5D A4 FD 57 F6 FC 15 91 A1 9D 61 31 C6 36 C5 96  ]W鳇憽漚1?艝
00401330  C0 22 6A EA AA 48 AE DA 8B 69 3C 7F 9D 65 C5 96  ?j戟H媔<漞艝
00401340  C0 42 6F EA AA 48 AE DA 8B 65 3F 7F 9D 65 C5 96  繠o戟H媏?漞艝
00401350  C0 76 6E EA AA 48 AE DA 8B 35 37 7F 9D 65 C5 96  纕n戟H?7漞艝
00401360  C0 AE 68 EA AA 48 AE DA 8B 6D 31 7F 9D 65 C5 96  喇h戟H媘1漞艝
00401370  7A F7 4C 04 8F 9F 25 99 5C 1E D0 4F F5 B1 48 56  z鱈彑%橽蠴醣HV

文件二 00470000.txt:
00470000  29 A1 F2 E0 AA D8 25 1A 60 93 E5 75 9D F5 4E 56  )◎嗒?`撳u濙NV
00470010  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00470020  1B B2 79 20 A8 D8 AE DA 62 93 E5 75 9D 78 0E 56  瞴 ㄘb撳u漻V
00470030  29 2C B2 E0 AA D8 25 1A 62 1E A5 75 75 D5 0E 56  ),侧%bu?V
00470040  51 83 B2 E0 52 FD 65 1A 62 D5 69 BD 54 22 81 9E  Q儾郣齟b読絋"仦
00470050  E4 6F 29 38 70 01 EF C6 BF C0 7A 95 7C 16 4E B2  鋙)8p锲坷z晐N
00470060  CC 2C B2 E0 AA D8 25 1A 62 1E 81 35 D8 87 3C 39  ?侧%b?貒<9
00470070  5B A1 79 20 F8 AD 4B 6E 0B 73 C0 55 F8 87 3C 39  [ Kn s繳鴩<9
00470080  5B 81 D2 C0 8A F8 44 6E 42 2E 95 45 AD C5 7E 66  [佉缞鳧nB.旹~f
00470090  19 A1 79 20 9A E9 17 29 56 2B 93 42 A5 CC 0F 14   氶)V+揃ヌ
004700A0  6A E5 B7 A6 55 27 DA E5 62 1E A5 75 9D F5 4E 56  j宸'阱b濙NV
004700B0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004700C0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004700D0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004700E0  1B A1 79 20 B5 D8 39 1A 7D 1E BB 75 82 F5 50 56   地9}籾傰PV
004700F0  36 A1 ED E0 B4 D8 3A 1A 7C 1E BA 75 82 F5 53 56  6№啻?|簎傰SV
00470100  36 A1 EC E0 B5 D8 3B 1A 7D 1E BA 75 83 F5 51 56  6§嗟?}簎凊QV
00470110  37 A1 ED E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  7№嗒?b濙NV
00470120  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00470130  29 A1 F2 E0 0E A2 65 1A 62 1E A5 75 9D F5 4E 56  )◎?b濙NV
00470140  79 24 B2 E0 F6 5D 65 1A 62 1E A5 F5 9D F5 4E 16  y$侧鯹ebヵ濙N
00470150  29 A1 F2 20 AA D8 25 1A 62 1E A5 75 9C F5 4E 56  )◎ %b滜NV
00470160  2B A1 F2 E0 A9 D8 25 1A AA 73 E5 75 4D 98 0E 56  +◎喋?猻鍀M?V
00470170  29 A1 B2 96 90 B3 2E C4 58 5E 2E B5 97 F5 4E 56  )〔枑?腦^.禇鮊V
00470180  16 B2 79 20 2A 13 81 56 62 42 83 70 B8 DB 64 32  瞴 *乂bB僷港d2
00470190  89 CF B2 E0 02 B6 65 1A D2 70 E5 75 25 9B 0E 56  壪侧秂襭鍀%?V
004701A0  E9 CF B2 E0 62 B6 65 1A B2 70 E5 75 45 9B 0E 56  橄侧b秂瞤鍀E?V
004701B0  C9 CF B2 E0 42 B6 65 1A 92 70 E5 75 65 9B 0E 56  上侧B秂抪鍀e?V
004701C0  29 CE B2 E0 A2 B7 65 1A 72 71 E5 75 85 9A 0E 56  )尾啖積rq鍀厷V
004701D0  09 CE B2 E0 82 B7 65 1A 52 71 E5 75 A5 9A 0E 56  .尾鄠積Rq鍀V
004701E0  69 CE B2 E0 E2 B7 65 1A 32 71 E5 75 C5 9A 0E 56  i尾噔積2q鍀艢V
004701F0  49 CE B2 E0 C2 B7 65 1A 12 71 E5 75 E5 9A 0E 56  I尾嗦積q鍀鍤V
00470200  A9 CE B2 E0 22 B7 65 1A F2 71 E5 75 05 9A 0E 56  ┪侧"積騫鍀?V
00470210  89 CE B2 E0 02 B7 65 1A D2 71 E5 75 25 9A 0E 56  壩侧積襮鍀%?V
00470220  E9 CE B2 E0 62 B7 65 1A 60 1E A5 75 9D F5 4E 56  槲侧b積`濙NV
00470230  2A A1 F2 E0 AA D8 25 1A 66 1E A5 75 9D F5 4E 56  *◎嗒?f濙NV
00470240  2C A1 F2 E0 AA D8 25 1A 06 1E A5 75 9D F5 4E 56  ,◎嗒?濙NV
00470250  4C A1 F2 E0 AA D8 25 1A 08 1E A5 75 9D F5 4E 56  L◎嗒?濙NV
00470260  19 D2 B2 E0 AA D8 25 1A EA 6D E5 75 9D F5 4E 56  也嗒?阭鍀濙NV
00470270  C9 D2 B2 E0 AA D8 25 1A F6 6A E5 75 9D F5 4E 56  梢侧%鰆鍀濙NV
00470280  C5 D5 B2 E0 AA D8 25 1A 26 6B E5 75 9D F5 4E 56  耪侧%&k鍀濙NV
00470290  B5 D4 B2 E0 AA D8 25 1A 32 68 E5 75 9D F5 4E 56  翟侧%2h鍀濙NV
004702A0  21 D6 B2 E0 AA D8 25 1A 0A 69 E5 75 9D F5 4E 56  !植嗒?.i鍀濙NV
004702B0  35 D9 B2 E0 AA D8 25 1A A2 69 E5 75 9D F5 4E 56  5俨嗒?鍀濙NV
004702C0  5D D9 B2 E0 AA D8 25 1A 16 66 E5 75 9D F5 4E 56  ]俨嗒?f鍀濙NV
004702D0  5D D9 B2 E0 AA D8 25 1A 16 66 E5 75 9D F5 4E 56  ]俨嗒?f鍀濙NV
004702E0  5D D9 B2 E0 AA D8 25 1A 16 66 E5 75 9D F5 4E 56  ]俨嗒?f鍀濙NV
004702F0  F9 D9 B2 E0 AA D8 25 1A 1A 6C E5 75 9D F5 4E 56  侧%l鍀濙NV
00470300  A5 D8 B2 E0 AA D8 25 1A 22 64 E5 75 9D F5 4E 56  ヘ侧%"d鍀濙NV
00470310  E8 BF AB C0 AA D8 25 1A 35 1E A2 F5 9D F5 4E 56  杩%5Ⅴ濙NV
00470320  28 2C B2 E0 AA D8 25 1A 63 93 E5 75 9D 78 0E 56  (,侧%c撳u漻V
00470330  D6 5E 0D 1F A9 D8 2F 1A 60 1E B5 75 97 F5 5F 56  謂.┴/`祏楑_V
00470340  3B A1 F8 E0 B9 D8 AE DA 8E 1C E4 75 61 F7 0F 56  ;▲喙禺趲鋟a?V
00470350  25 A2 B3 E0 8A DB 64 1A 52 1D E4 75 DD F6 0F 56  %⒊鄪踕R鋟蓥V
00470360  79 A2 B3 E0 CE DB 64 1A 16 1D E4 75 19 F6 0F 56  y⒊辔踕鋟?V
00470370  B1 A2 B3 E0 02 DB 64 1A DA 1D E4 75 55 F6 0F 56  雹赤踕?鋟U?V

文件三 00473000.txt:
00473000  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 F1 C2 49 56  )◎嗒?b衤IV
00473010  05 90 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  愼嗒?b濙NV
00473020  CD 98 F5 E0 12 E9 22 1A 62 1E A5 75 9D F5 4E 56  蜆踵?b濙NV
00473030  29 A1 F2 E0 80 E2 22 1A AE 2F A2 75 9D F5 4E 56  )◎鄝??濙NV
00473040  29 A1 F2 E0 AA D8 25 1A 08 24 A2 75 41 C4 49 56  )◎嗒?$A腎V
00473050  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 2F CF 49 56  )◎嗒?b/螴V
00473060  C5 90 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  艕踵%b濙NV
00473070  D7 9B F5 E0 AA EA 22 1A 62 1E A5 75 9D F5 4E 56  讻踵"b濙NV
00473080  29 A1 F2 E0 94 E3 22 1A 72 2C A2 75 9D F5 4E 56  )◎鄶?r,濙NV
00473090  29 A1 F2 E0 AA D8 25 1A B4 21 A2 75 B9 C6 49 56  )◎嗒??蛊IV
004730A0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 B9 B5 49 56  )◎嗒?b沟IV
004730B0  1D 92 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  掯嗒?b濙NV
004730C0  85 E5 F5 E0 EA EC 22 1A 62 1E A5 75 9D F5 4E 56  呭踵觎"b濙NV
004730D0  29 A1 F2 E0 B2 97 22 1A B2 28 A2 75 9D F5 4E 56  )◎嗖??濙NV
004730E0  29 A1 F2 E0 AA D8 25 1A 4C 51 A2 75 45 C3 49 56  )◎嗒?LQE肐V
004730F0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 4D BA 49 56  )◎嗒?bM篒V
00473100  D5 97 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  諚踵%b濙NV
00473110  E1 F0 F5 E0 F2 EF 22 1A 62 1E A5 75 9D F5 4E 56  狃踵蝻"b濙NV
00473120  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 7D 52 04 56  )◎嗒?b}RV
00473130  5D 0C B8 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  ].膏%b濙NV
00473140  01 10 B8 E0 AA D8 25 1A 62 1E A5 75 71 54 04 56  膏%bqTV
00473150  99 00 B8 E0 62 68 6F 1A FE B2 EF 75 9D F5 4E 56  ?膏bho飖濙NV
00473160  49 02 B8 E0 9A 71 6F 1A A2 BD EF 75 9D F5 4E 56  I膏歲o⒔飖濙NV
00473170  29 A1 F2 E0 36 7B 6F 1A 62 1E A5 75 3D 5B 04 56  )◎?{ob=[V
00473180  29 A1 F2 E0 AA D8 25 1A 6A B9 EF 75 9D F5 4E 56  )◎嗒?j癸u濙NV
00473190  B1 0B B8 E0 8E 77 6F 1A 0E B7 EF 75 0D 56 04 56  ?膏巜o凤u.VV
004731A0  29 A1 F2 E0 AA D8 25 1A 66 BB EF 75 19 55 04 56  )◎嗒?f伙uUV
004731B0  29 A1 F2 E0 AA D8 25 1A FA AE EF 75 9D F5 4E 56  )◎嗒?飖濙NV
004731C0  F5 10 B8 E0 16 79 6F 1A 62 1E A5 75 9D F5 4E 56  ?膏yob濙NV
004731D0  29 A1 F2 E0 F6 79 6F 1A 62 1E A5 75 9D F5 4E 56  )◎圉yob濙NV
004731E0  AD 0E B8 E0 AA D8 25 1A 62 1E A5 75 B1 51 04 56  ?膏%b盦V
004731F0  29 A1 F2 E0 6E 7D 6F 1A 62 1E A5 75 9D F5 4E 56  )◎鄋}ob濙NV
00473200  29 A1 F2 E0 5E 73 6F 1A 32 B9 EF 75 9D F5 4E 56  )◎郶so2癸u濙NV
00473210  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00473220  29 A1 F2 E0 9E 70 6F 1A 42 AE EF 75 9D F5 4E 56  )◎酁poBu濙NV
00473230  29 A1 F2 E0 3E 7A 6F 1A 62 1E A5 75 9D F5 4E 56  )◎?zob濙NV
00473240  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 79 56 04 56  )◎嗒?byVV
00473250  39 04 B8 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  9膏%b濙NV
00473260  29 A1 F2 E0 DA 7D 6F 1A 62 1E A5 75 FD 59 04 56  )◎嘹}ob齓V
00473270  35 09 B8 E0 E2 78 6F 1A 66 AF EF 75 9D F5 4E 56  5.膏鈞ofu濙NV
00473280  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 85 56 04 56  )◎嗒?b匳V
00473290  61 07 B8 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  a膏%b濙NV
004732A0  29 A1 F2 E0 D6 7A 6F 1A 8E BA EF 75 75 5D 04 56  )◎嘀zo幒飖u]V
004732B0  F9 0A B8 E0 AA D8 25 1A 96 AF EF 75 39 45 04 56  ?膏%柉飖9EV
004732C0  B1 00 B8 E0 D2 71 6F 1A 26 B9 EF 75 D5 56 04 56  ?膏襮o&癸u誚V
004732D0  A5 05 B8 E0 AA 77 6F 1A 62 1E A5 75 9D F5 4E 56  ?膏獁ob濙NV
004732E0  29 A1 F2 E0 D6 76 6F 1A 62 1E A5 75 9D F5 4E 56  )◎嘀vob濙NV
004732F0  29 A1 F2 E0 AA D8 25 1A 8E B3 EF 75 D9 51 04 56  )◎嗒?幊飖貿V
00473300  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D 5C 04 56  )◎嗒?b漒V
00473310  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 15 5E 04 56  )◎嗒?b^V
00473320  29 A1 F2 E0 22 7A 6F 1A 62 1E A5 75 65 51 04 56  )◎?zobeQV
00473330  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 B1 52 04 56  )◎嗒?b盧V
00473340  29 A1 F2 E0 06 7A 6F 1A 62 1E A5 75 9D F5 4E 56  )◎?zob濙NV
00473350  29 A1 F2 E0 AA D8 25 1A 7E AF EF 75 9D F5 4E 56  )◎嗒?~u濙NV
00473360  29 A1 F2 E0 12 76 6F 1A F2 BE EF 75 51 53 04 56  )◎?vo蚓飖QSV
00473370  C1 0A B8 E0 92 72 6F 1A 62 1E A5 75 39 5F 04 56  ?膏抮ob9_V

文件四 00477000.txt:
00477000  29 C1 B5 E0 BA B8 62 1A C6 1E E2 75 8D 85 09 56  )恋嗪竍?鈛崊.V
00477010  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477020  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477030  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477040  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477050  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477060  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477070  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477080  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477090  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004770A0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004770B0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004770C0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004770D0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004770E0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004770F0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477100  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477110  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477120  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477130  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477140  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477150  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477160  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477170  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477180  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
00477190  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004771A0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004771B0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004771C0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004771D0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004771E0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV
004771F0  29 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56  )◎嗒?b濙NV

文件五 0047F000.txt:
0047F000  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 46 56  )◎啖IG!b濙FV
0047F010  28 A1 F2 E0 FA D8 25 9A 60 1E A5 75 05 F5 4E D6  (◎帔?歚鮊
0047F020  2A A1 F2 E0 AA D9 25 9A 67 1E A5 75 85 F4 4E D6  *◎嗒?歡咊N
0047F030  2F A1 F2 E0 9A D9 25 9A 68 1E A5 75 4D F4 4E D6  /◎鄽?歨M鬘
0047F040  25 A1 F2 E0 52 D9 25 9A 6C 1E A5 75 DD F7 4E D6  %◎郣?歭蓣N
0047F050  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 49 56  )◎啖IG!b濙IV
0047F060  28 A1 F2 E0 F2 DA 25 9A 60 1E A5 75 ED F7 4E D6  (◎囹?歚眵N
0047F070  2A A1 F2 E0 22 DA 25 9A 66 1E A5 75 3D F7 4E D6  *◎??歠=鱊
0047F080  2C A1 F2 E0 12 DA 25 9A 64 1E A5 75 4D F7 4E D6  ,◎??歞M鱊
0047F090  2E A1 F2 E0 42 DA 25 9A 62 1E A5 75 95 64 2C 6D  .◎郆?歜昫,m
0047F0A0  29 A1 F2 E0 A1 D8 25 1A 62 14 A5 F5 9D F6 4E D6  )◎唷?bヵ濚N
0047F0B0  39 AB F2 60 B2 DB 25 9A 7E 14 A5 F5 AD F6 4E D6  9`槽%殈ヵN
0047F0C0  07 AB F2 60 E2 DB 25 9A 5C 14 A5 F5 FD F6 4E D6  `廑%歕ヵN
0047F0D0  65 AB F2 60 D2 DB 25 9A 3C 14 A5 F5 0D F6 4E D6  e`役%?ヵ.鯪
0047F0E0  41 AB F2 60 02 DB 25 9A 10 14 A5 F5 5D F6 4E D6  A`??ヵ]鯪
0047F0F0  AB AB F2 60 72 DB 25 9A EC 14 A5 F5 6D F6 4E D6  騚r?氺ヵm鯪
0047F100  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56  )◎啖IG!b濙OV
0047F110  28 A1 F2 E0 A2 DC 25 9A 62 1E A5 75 95 64 2C 6D  (◎啖?歜昫,m
0047F120  29 A1 F2 E0 AB D8 25 1A CA 14 A5 F5 BD F1 4E D6  )◎喃??ヵ今N
0047F130  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 5C 56  )◎啖IG!b濙\V
0047F140  C6 AE F2 E0 92 DC 25 9A 92 11 A5 75 CD F1 4E D6  飘蜞捾%殥婉N
0047F150  D8 AE F2 E0 C2 DC 25 9A 90 11 A5 75 1D F1 4E D6  禺蜞萝%殣馧
0047F160  DA AE F2 E0 32 DC 25 9A 96 11 A5 75 2D F1 4E D6  诋蜞2?殩-馧
0047F170  DC AE F2 E0 62 DC 25 9A 94 11 A5 75 7D F1 4E D6  墚蜞b?殧}馧
0047F180  DE AE F2 E0 52 DC 25 9A 9A 11 A5 75 8D F0 4E D6  蕻蜞R?殮嶐N
0047F190  D0 AE F2 E0 82 DD 25 9A 98 11 A5 75 DD F0 4E D6  挟蜞傒%殬蒺N
0047F1A0  D2 AE F2 E0 F2 DD 25 9A 9E 11 A5 75 ED F0 4E D6  耶蜞蜉%殲眇N
0047F1B0  D4 AE F2 E0 22 DD 25 9A 9C 11 A5 75 3D F0 4E D6  援蜞"?殰=餘
0047F1C0  D6 AE F2 E0 12 DD 25 9A 62 0E A5 75 4D F0 4E D6  之蜞?歜M餘
0047F1D0  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9E F5 4E 56  )◎啖IG!b烏NV
0047F1E0  E9 AB F2 60 42 DD 25 9A AC 14 A5 F5 9D F3 4E D6  楂騚B?毈ヵ濗N
0047F1F0  CF AB F2 60 B2 DE 25 9A 62 1E A5 75 95 64 2C 6D  汐騚厕%歜昫,m
0047F200  29 A1 F2 E0 AA D8 22 1A 9B 61 A5 75 AD F3 4E D6  )◎嗒?沘N
0047F210  D3 DE F2 E0 E2 DE 25 9A 99 61 A5 75 FD F3 4E D6  愚蜞廪%殭aN
0047F220  D5 DE F2 E0 D2 DE 25 9A 9F 61 A5 75 0D F3 4E D6  辙蜞肄%殶a.驨
0047F230  D7 DE F2 E0 02 DE 25 9A 9D 61 A5 75 5D F3 4E D6  邹蜞?殱a]驨
0047F240  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9C F5 4E 56  )◎啖IG!b滜NV
0047F250  DD AB F2 60 72 DE 25 9A 62 1E A5 75 95 64 2C 6D  莴騚r?歜昫,m
0047F260  29 A1 F2 E0 AA D8 24 1A 62 1E A5 75 6D F3 4E 56  )◎嗒?bm驨V
0047F270  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56  )◎啖IG!b濙OV
0047F280  29 A1 F2 E0 AA DF 25 1A 62 1E A5 75 95 64 2C 6D  )◎嗒?b昫,m
0047F290  29 A1 F2 E0 AA D8 24 1A 62 1E A5 75 8D F2 4E 56  )◎嗒?b嶒NV
0047F2A0  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56  )◎啖IG!b濙OV
0047F2B0  29 A1 F2 E0 8A DF 25 1A 62 1E A5 75 95 64 2C 6D  )◎鄪?b昫,m
0047F2C0  29 A1 F2 E0 AA D8 24 1A 62 1E A5 75 AD F2 4E 56  )◎嗒?bNV
0047F2D0  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56  )◎啖IG!b濙OV
0047F2E0  29 A1 F2 E0 EA DF 25 1A 62 1E A5 75 95 64 2C 6D  )◎嚓?b昫,m
0047F2F0  29 A1 F2 E0 AA D8 24 1A 62 1E A5 75 CD F2 4E 56  )◎嗒?b万NV
0047F300  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56  )◎啖IG!b濙OV
0047F310  29 A1 F2 E0 CA DF 25 1A 62 1E A5 75 95 64 2C 6D  )◎嗍?b昫,m
0047F320  29 A1 F2 E0 AA D8 24 1A 62 1E A5 75 ED F2 4E 56  )◎嗒?b眚NV
0047F330  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56  )◎啖IG!b濙OV
0047F340  29 A1 F2 E0 2A DF 25 1A 62 1E A5 75 95 64 2C 6D  )◎??b昫,m
0047F350  29 A1 F2 E0 AA D8 24 1A 62 1E A5 75 0D F2 4E 56  )◎嗒?b.騈V
0047F360  29 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56  )◎啖IG!b濙OV
0047F370  29 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,#F1D3FF8443297732862DF21DC4E57262#                //错误解码XOR数值
        cmp $RESULT,XorAddress
        jne RestoreDecodeLoop
        mov XorValueFoundAddress,$RESULT
        repl XorValueFoundAddress,#F1D3FF8443297732862DF21DC4E57262#,#29A1F2E0AAD8251A621EA5759DF54E56#,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
00473130  004AAD74  程序.004AAD74
00473134  00D00000
00473138  00D0000E
0047313C  00D0001C
00473140  004AB128  程序.004AB128
00473144  00D0002A
00473148  00D00038
0047314C  004AA1EC  程序.004AA1EC
00473150  004AA1B0  程序.004AA1B0
00473154  004AB0C8  程序.004AB0C8
00473158  004AAC9C  程序.004AAC9C
0047315C  00D00046
00473160  004AA360  程序.004AA360
00473164  004AA930  程序.004AA930
00473168  004AA3C0  程序.004AA3C0
0047316C  00D00054
00473170  00D00062
00473174  004AA39C  程序.004AA39C
00473178  00D00070
0047317C  004AAEA0  程序.004AAEA0
00473180  00A73E10
00473184  00D0007E
00473188  004AA708  程序.004AA708
0047318C  00D0008C
00473190  004AAA98  程序.004AAA98
00473194  004AAF24  程序.004AAF24
00473198  004AA96C  程序.004AA96C
0047319C  004AA390  程序.004AA390
004731A0  00D0009A
004731A4  00D000A8
004731A8  004AA504  程序.004AA504
004731AC  004AA084  程序.004AA084
004731B0  00D000B6
004731B4  00000000                                        //不同DLL间的间隔
004731B8  004AB098  程序.004AB098
004731BC  00D000C4

我们可以从中看出,主要的结构有两种,004AXXXX和00D0XXXX,并且不同DLL间的间隔符号绝对是00000000。
所以如果我们看到IAT表中一行结果有很多个0,那么我可以猜测这个数值应该是间隔符号,应该全部为0,而不为0的位则代表了猜测的那位XOR数值是错的,需要更改。
而另一种很容易通过IAT表判断的情况是这样:
00465FFC  00000000
00466000  0050B468  1_0zc.0050B468
00466004  7EFCF878
00466008  0050BA80  1_0zc.0050BA80
0046600C  0050BBAC  1_0zc.0050BBAC
00466010  0050BDC8  1_0zc.0050BDC8
00466014  7EAC4350
00466018  0050B3C0  1_0zc.0050B3C0
0046601C  0050B984  1_0zc.0050B984
00466020  00000000
00466024  7EFCF2BC
00466028  0050B2E8  1_0zc.0050B2E8
0046602C  0050BDF8  1_0zc.0050BDF8
00466030  0050B330  1_0zc.0050B330
00466034  7EFCF424
00466038  0050B8D0  1_0zc.0050B8D0
0046603C  0050B4C8  1_0zc.0050B4C8
00466040  0050B264  1_0zc.0050B264
00466044  7EFCF7B0
00466048  0050B930  1_0zc.0050B930
0046604C  0050BD2C  1_0zc.0050BD2C
00466050  0050C218  1_0zc.0050C218
00466054  7EFCFF5C

解码后,我们发现IAT表中,每隔4行的数值都跟其他行的结构很不一致,那么证明猜测出来的解码XOR数值的那4位是有问题的,而其他12位至少开头两位是没问题的,因为他们的结构一致。
d.在除了IAT所在解码区段外的其他几个区段,一般有一些区段里在正确解码后是含有有意义的英文单词的。如下:

00470070  72 00 8B C0 52 75 6E 74 69 6D 65 20 65 72 72 6F  r.嬂Runtime erro
00470080  72 20 20 20 20 20 61 74 20 30 30 30 30 30 30 30  r     at 0000000
00470090  30 00 8B C0 30 31 32 33 34 35 36 37 38 39 41 42  0.嬂0123456789AB

通过这些单词的正确与否,我们可以确认解码XOR数值的哪些位可能是正确的,哪些位是不正确的。上面的"Runtime error"看起来是正确的,那么他们对应的第0、4~16位的解码XOR数值都是对的了。
e.判断解码是否正确的终极标准,就是程序可以正常运行。============================
9、在猜解完成后,我们要填写好我们的破解记录文件cracking.txt,这样才算是真正完成了破解。
1、真正OEP:esp定律=>12FFA0=>46F610
2、IATSTART:473000=>47312C
3、密钥位置:12FEE0~12FEEF
数值:0012FEE0 F1 D3 FF 84 43 29 77 32 86 2D F2 1D C4 E5 72 62
4、解码代码段:401000、470000、473000、477000、47F000
5、正确解码:29A1F2E0AAD8251A621EA5759DF54E56
6、IATEND:473768
PS:一些注意事项
a.在成功解码后,要进行脱壳,还必须要先修复IAT以及阻止模拟DLL,本文中的脚本并不提供这些功能,请自行解决。
具体的文章可以看hyperchem和ximo的文章。hyperchem大大的文章通过论坛搜索“ZPROTECT”可以找到,基本都是精华帖。
而ximo的文章主要在吾爱破解论坛,还有以下这篇:
简单分析下ZProtect 1.4.9的DLL模拟
b.第8步只是我所想出来的一些解码XOR数值的猜测技巧,上文中的未必能适用全部程序,请在理解原理的前提下,依葫芦画瓢,自己揣摩。
c.一般而言,阻止模拟DLL和正确解码后,IAT修复就可以正常进行,IAT修复的结果,正确的一般如下:
00466000  77DA6C27  ADVAPI32.RegCloseKey
00466004  77DA7852  ADVAPI32.RegOpenKeyExA
00466008  77DAEAE7  ADVAPI32.RegSetValueExA
0046600C  77DCBB8D  ADVAPI32.RegQueryValueA
00466010  77DAE9F4  ADVAPI32.RegCreateKeyExA
00466014  00000000
00466018  5D1803D8  COMCTL32.ImageList_Destroy
0046601C  5D1765CF  COMCTL32.InitCommonControls
00466020  00000000
00466024  77EF8597  GDI32.SetStretchBltMode
00466028  77EF6AD6  GDI32.GetClipRgn
0046602C  77EFA8BA  GDI32.CreatePolygonRgn
00466030  77EF7AA0  GDI32.SelectClipRgn
00466034  77EF6BFA  GDI32.DeleteObject
00466038  77EFAD23  GDI32.CreateDIBitmap
0046603C  77EFBA9E  GDI32.GetSystemPaletteEntries
00466040  77EFB5EA  GDI32.CreatePalette
00466044  77EFB6D0  GDI32.StretchBlt

如果里面还是存在没有直指系统DLL的API地址的存在。。那么通常都不可能脱壳成功。我也没弄懂,为什么么阻止了模拟DLL还是有这样的情况。

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
casgsn 活跃值 1 2010-5-1 04:01
2
0
留一楼进行总结。。
原来因为复制内存时里面的乱码导致部分文章发不出来,现在已经改好了。。
==========================================
本文起源于。。下面的三个论坛悬赏帖:
ZProtect 1.4.9脱壳练习遇到的疑问
主要疑问的是IAT修复后,脱壳,文件无法运行。
ZProtect 1.4.9脱壳练习遇到的疑问二
主要讨论的是无KEY解码和反ANTI-HOOK。
ZProtect 1.4.9脱壳练习遇到的疑问三
厄……这个没什么好说的,是我太菜了,连很多脱壳基本技巧都不懂所以问的。
==========================================
2010-04-29 20:16
重新检查了一遍,把部分错字及可能产生误解的句子,进行了修订。
最后补充一下,我是在各位朋友的帮助下,有所学习与长进的。我并不强,觉得不错可以说声“谢谢”,如此足矣。
厄,这个帖子采用的试验程序,是由Storm1980提供的,虽然不是1.4.9的版本,但也要猜XOR数值解码,据说是什么企业版~~我只能猜解码,不能脱壳,因为无法修复IAT,很有意思的一种情况。
而XIMO大大的脚本,我是在吾爱论坛找到的,而上文中,XIMO大大的帖子,是昨天chyx告诉我的,原来我也不知道。当时,对XIMO大大的脚本的某些地方,还是很不解的。
这里也要谢谢storm1980和chyx~~
==========================================
2010-05-01 03:31
忘记说明了。。最开始的脚本模板,大体上是仿Ximo大大的脚步写的,譬如获取OEP~~
也是第一次学写OD脚本~感觉上还是蛮容易的。
除了repl命令不支持变量这点外。。已经在OD脚本插件的官方论坛留下意见了,希望可以更新。
==========================================

不过怎么还是觉得有些东西忘了写。。。等我想起来再回来补上。
雪    币: 2516
活跃值: 活跃值 (519)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
风随雨行 活跃值 1 2010-5-1 14:25
3
0
很详细
很好很强大……
雪    币: 204
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hxqlky 活跃值 2010-5-9 00:59
4
0
的确很详细 thanks

share
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
水之潋 活跃值 2010-5-9 15:58
5
0
好文章,对我这样的新手来,实在是太详细了,谢谢楼主
雪    币: 273
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
hack一生 活跃值 1 2010-5-9 16:00
6
0
mark..
雪    币: 1731
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
komnb 活跃值 2010-5-16 01:34
7
0
强悍啊!!支持
雪    币: 1731
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
komnb 活跃值 2010-9-1 17:33
8
0
膜拜下!!高手!!
雪    币: 166
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zphdt 活跃值 2010-9-8 11:59
9
0
很不错的文章,收藏起来慢慢味吧、
游客
登录 | 注册 方可回帖
返回