casgsn 发表于 2010-5-1 03:38

ZProtect脱壳无KEY解码总结

本帖最后由 casgsn 于 2010-5-1 03:40 编辑

五一开放注册了~~初来乍到,发文一篇。
=======================================
【文章标题】: 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 http://www.unpack.cn/images/common/back.gif

【无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 ,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:,EAX
00405EFA   6A 00            PUSH 0
00405EFC   E8 2BFFFFFF      CALL 程序.00405E2C☆跟进
00405E2C-FF25 F8314700    JMP DWORD PTR DS:                //这里的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,转成长型-地址看看,上下文如下:00472FF000000000
00472FF400000000
00472FF800000000
00472FFC00000000
00473000640D72D8
004730042852F1E9
00473008685733E4
0047300C343B2735
...
004731D8685733E4
004731DC00D000EE
004731E06447DD5C
004731E400D000FC
004731E8685733E4
004731EC3476B475
004731F000D0010A
004731F42818542D
004731F800A73E10通过这里可以判断出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:                //XOR对象的位置
00A745CB   300C38         XOR BYTE PTR DS:,CL
00A745CE   83C0 01          ADD EAX,1
00A745D1   3BC3             CMP EAX,EBX
00A745D3^7C EE            JL SHORT 00A745C3
通过反复观察,可以知道XOR对象的位置和XOR对象的数值,填表如下:
      3、密钥位置:12FEE0~12FEEF
               数值:0012FEE0F1 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:,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:=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:004010002D B1 B2 E0 A9 DF 67 75 0D 72 C0 14 F3 F4 4E 56-辈喋遟u.r?篝NV
0040101029 A1 F3 E0 AA D8 25 0A 22 1E A0 33 FC 99 3D 33)◇嗒?."?鼨=3
004010202D F5 80 95 CF 55 65 1A 4E 0E E5 75 9F F1 0D 3E-鮻曄UeN鍀燅.>
0040103048 D3 F3 E0 AA D8 25 E5 62 1E A5 E5 DD E5 0E 56H芋嗒?錬ュ蒎V
0040104028 A6 BB 8E DE BD 42 7F 10 1A A5 75 9D 75 B1 A9(庌紹漸暴
00401050D6 DE 79 20 F2 C8 65 1A 63 1A E7 0C E9 90 4F 56洲y 蛉ec?閻OV
0040106029 A1 F2 1F AA D8 25 8A 0E 0E E5 75 9C F1 19 39)◎%?鍀滖9
004010705B C5 F1 E0 AA D8 25 E5 9D 1E A5 E5 1D E5 0E 56[篷嗒?鍧ュ?V
0040108028 A9 B1 81 D8 BC 4C 74 03 72 A0 75 9D F5 4E A9(┍佖糒tr爑濙N
00401090D6 5E 0D 70 32 C8 65 1A 68 18 F6 01 EF 9C 20 31謂.p2萫h?餃 1
004010A0C5 B1 B2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56疟侧%b濙NV
004010B029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004010C0C5 B1 B2 E0 AE D8 25 1A 62 1E A5 75 59 C0 0E 56疟侧%bY?V
004010D0F9 94 B2 E0 7E ED 65 1A BA 2B E5 75 51 C0 0E 56鶖侧~韊?鍀Q?V
004010E03D 92 B2 E0 9A EB 65 1A 0E 2D E5 75 9A A1 01 34=挷鄽雃-鍀殹4
004010F043 C4 91 94 52 C8 65 1A 65 19 F1 3A FF 9F 2B 35C膽擱萫e?
004011005D 4D E2 A0 AA D8 25 1A 62 1E A5 73 CE 8C 3D 22]M鉅%b螌="
004011104C CC F2 E0 B2 C9 65 1A 6D 14 EC 3C F3 81 2B 24L舔嗖蒭m?髞+$
004011204F C0 91 85 AA D8 25 1A 63 1E A5 75 9D F5 4E 56O缿叒?c濙NV
0040113029 61 F2 E0 AA D8 25 1A 24 18 F6 0C EE 81 2B 3B)a蜞%$?顏+;
004011402A A1 0D 1F 66 5B 61 3E 66 E6 4C A4 DB F5 4E D5*?f[a>f鍸ほ鮊
004011506D 85 F6 18 43 37 63 1A 62 9D E1 51 99 0D A7 AFm咑C7cb濁Q?Н
004011606F A1 F2 2C 66 9D 34 5A 62 51 B4 35 9D AC 5F 16o◎,f?ZbQ?潿_
0040117029 A0 F2 E0 AA D8 25 1A 62 1E A5 75 9D 35 4E 56)狉嗒?b?NV
0040118029 A1 F2 E0 EC BD 34 5A 62 16 A5 75 9D F5 4E 56)◎囔?Zb濙NV
0040119029 2C B2 E0 4A C9 65 1A 13 0F E5 75 9D F5 4E 56),侧J蒭鍀濙NV
004011A029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004011B029 A1 F2 E0 4A C9 65 1A 6E 1E A5 75 3D E5 0E 56)◎郕蒭n=?V
004011C0ED 94 B2 E0 5E 8F 65 1A 62 46 E5 75 45 C0 0E 56頂侧^廵bF鍀E?V
004011D0E5 94 B2 E0 BA 80 65 1A 52 2D E5 75 F1 C6 0E 56鍞侧簚eR-鍀衿V
004011E038 F5 BB 8E DE BD 57 7C 03 7D C0 11 D2 97 24 338趸庌絎|}?覘$3
004011F04A D5 79 20 43 DB B0 10 62 8E 2E B5 74 76 C0 5CJ誽 C郯b?祎v繺
0040120029 31 79 20 43 23 B7 10 62 8E 2E B5 74 56 D9 5C)1y C#?b?祎V賊
0040121029 31 79 20 43 BF B7 10 62 8E 2E B5 74 6E C1 5C)1y C糠b?祎n羂
0040122029 31 79 20 43 BF B4 10 62 8E 2E B5 74 5E D1 5C)1y C看b?祎^裓
0040123029 31 79 20 43 EB B2 10 62 8E 2E B5 74 16 D2 5C)1y C氩b?祎襖
0040124029 31 79 20 43 97 BD 10 62 8E 2E B5 74 76 DC 5C)1y C椊b?祎v躙
0040125029 31 79 20 43 77 B1 10 62 8E 2E B5 74 A2 DD 5C)1y Cw?b?祎⑤\
0040126029 31 79 20 55 FD A5 2B 25 1E 2E B5 74 DA D2 5C)1y U+%.祎谝\
0040127029 31 79 20 43 3B BF 10 62 8E 2E B5 74 EE DF 5C)1y C;?b?祎钸\
0040128029 31 79 20 43 AF A8 10 62 8E 2E B5 74 BE DE 5C)1y Cb?祎巨\
0040129029 31 79 20 43 EF BA 10 62 8E 2E B5 74 EA DF 5C)1y C锖b?祎赀\
004012A029 31 79 20 43 5F B3 10 62 8E 2E B5 74 5E C0 5C)1y C_?b?祎^繺
004012B029 31 79 20 43 0B B2 10 62 8E 2E B5 74 E2 D4 5C)1y C ?b?祎庠\
004012C029 31 79 20 43 4F B5 10 62 8E 2E B5 74 2A DF 5C)1y CO?b?祎*運
004012D029 31 79 20 43 53 BB 10 62 8E 2E B5 74 56 D2 5C)1y CS?b?祎V襖
004012E029 31 79 20 43 1B B0 10 62 8E 2E B5 74 5E D7 5C)1y C?b?祎^譢
004012F029 31 79 20 43 17 B8 10 62 8E 2E B5 74 5A C0 5C)1y C?b?祎Z繺
0040130029 31 79 20 43 3B AB 10 62 8E 2E B5 CE 76 8A EA)1y C;?b?滴v婈
0040131092 AB F2 E0 AA 8C CD 43 9D E1 5A 83 D9 D1 62 57挮蜞獙虲濁Z冑裝W
004013205D A4 FD 57 F6 FC 15 91 A1 9D 61 31 C6 36 C5 96]W鳇憽漚1?艝
00401330C0 22 6A EA AA 48 AE DA 8B 69 3C 7F 9D 65 C5 96?j戟H媔<漞艝
00401340C0 42 6F EA AA 48 AE DA 8B 65 3F 7F 9D 65 C5 96繠o戟H媏?漞艝
00401350C0 76 6E EA AA 48 AE DA 8B 35 37 7F 9D 65 C5 96纕n戟H?7漞艝
00401360C0 AE 68 EA AA 48 AE DA 8B 6D 31 7F 9D 65 C5 96喇h戟H媘1漞艝
004013707A F7 4C 04 8F 9F 25 99 5C 1E D0 4F F5 B1 48 56z鱈彑%橽蠴醣HV文件二 00470000.txt:0047000029 A1 F2 E0 AA D8 25 1A 60 93 E5 75 9D F5 4E 56)◎嗒?`撳u濙NV
0047001029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004700201B B2 79 20 A8 D8 AE DA 62 93 E5 75 9D 78 0E 56瞴 ㄘb撳u漻V
0047003029 2C B2 E0 AA D8 25 1A 62 1E A5 75 75 D5 0E 56),侧%bu?V
0047004051 83 B2 E0 52 FD 65 1A 62 D5 69 BD 54 22 81 9EQ儾郣齟b読絋"仦
00470050E4 6F 29 38 70 01 EF C6 BF C0 7A 95 7C 16 4E B2鋙)8p锲坷z晐N
00470060CC 2C B2 E0 AA D8 25 1A 62 1E 81 35 D8 87 3C 39?侧%b?貒<9
004700705B A1 79 20 F8 AD 4B 6E 0B 73 C0 55 F8 87 3C 39[ Kn s繳鴩<9
004700805B 81 D2 C0 8A F8 44 6E 42 2E 95 45 AD C5 7E 66[佉缞鳧nB.旹~f
0047009019 A1 79 20 9A E9 17 29 56 2B 93 42 A5 CC 0F 14 氶)V+揃ヌ
004700A06A E5 B7 A6 55 27 DA E5 62 1E A5 75 9D F5 4E 56j宸'阱b濙NV
004700B029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004700C029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004700D029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004700E01B A1 79 20 B5 D8 39 1A 7D 1E BB 75 82 F5 50 56 地9}籾傰PV
004700F036 A1 ED E0 B4 D8 3A 1A 7C 1E BA 75 82 F5 53 566№啻?|簎傰SV
0047010036 A1 EC E0 B5 D8 3B 1A 7D 1E BA 75 83 F5 51 566§嗟?}簎凊QV
0047011037 A1 ED E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 567№嗒?b濙NV
0047012029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047013029 A1 F2 E0 0E A2 65 1A 62 1E A5 75 9D F5 4E 56)◎?b濙NV
0047014079 24 B2 E0 F6 5D 65 1A 62 1E A5 F5 9D F5 4E 16y$侧鯹ebヵ濙N
0047015029 A1 F2 20 AA D8 25 1A 62 1E A5 75 9C F5 4E 56)◎ %b滜NV
004701602B A1 F2 E0 A9 D8 25 1A AA 73 E5 75 4D 98 0E 56+◎喋?猻鍀M?V
0047017029 A1 B2 96 90 B3 2E C4 58 5E 2E B5 97 F5 4E 56)〔枑?腦^.禇鮊V
0047018016 B2 79 20 2A 13 81 56 62 42 83 70 B8 DB 64 32瞴 *乂bB僷港d2
0047019089 CF B2 E0 02 B6 65 1A D2 70 E5 75 25 9B 0E 56壪侧秂襭鍀%?V
004701A0E9 CF B2 E0 62 B6 65 1A B2 70 E5 75 45 9B 0E 56橄侧b秂瞤鍀E?V
004701B0C9 CF B2 E0 42 B6 65 1A 92 70 E5 75 65 9B 0E 56上侧B秂抪鍀e?V
004701C029 CE B2 E0 A2 B7 65 1A 72 71 E5 75 85 9A 0E 56)尾啖積rq鍀厷V
004701D009 CE B2 E0 82 B7 65 1A 52 71 E5 75 A5 9A 0E 56.尾鄠積Rq鍀V
004701E069 CE B2 E0 E2 B7 65 1A 32 71 E5 75 C5 9A 0E 56i尾噔積2q鍀艢V
004701F049 CE B2 E0 C2 B7 65 1A 12 71 E5 75 E5 9A 0E 56I尾嗦積q鍀鍤V
00470200A9 CE B2 E0 22 B7 65 1A F2 71 E5 75 05 9A 0E 56┪侧"積騫鍀?V
0047021089 CE B2 E0 02 B7 65 1A D2 71 E5 75 25 9A 0E 56壩侧積襮鍀%?V
00470220E9 CE B2 E0 62 B7 65 1A 60 1E A5 75 9D F5 4E 56槲侧b積`濙NV
004702302A A1 F2 E0 AA D8 25 1A 66 1E A5 75 9D F5 4E 56*◎嗒?f濙NV
004702402C A1 F2 E0 AA D8 25 1A 06 1E A5 75 9D F5 4E 56,◎嗒?濙NV
004702504C A1 F2 E0 AA D8 25 1A 08 1E A5 75 9D F5 4E 56L◎嗒?濙NV
0047026019 D2 B2 E0 AA D8 25 1A EA 6D E5 75 9D F5 4E 56也嗒?阭鍀濙NV
00470270C9 D2 B2 E0 AA D8 25 1A F6 6A E5 75 9D F5 4E 56梢侧%鰆鍀濙NV
00470280C5 D5 B2 E0 AA D8 25 1A 26 6B E5 75 9D F5 4E 56耪侧%&k鍀濙NV
00470290B5 D4 B2 E0 AA D8 25 1A 32 68 E5 75 9D F5 4E 56翟侧%2h鍀濙NV
004702A021 D6 B2 E0 AA D8 25 1A 0A 69 E5 75 9D F5 4E 56!植嗒?.i鍀濙NV
004702B035 D9 B2 E0 AA D8 25 1A A2 69 E5 75 9D F5 4E 565俨嗒?鍀濙NV
004702C05D D9 B2 E0 AA D8 25 1A 16 66 E5 75 9D F5 4E 56]俨嗒?f鍀濙NV
004702D05D D9 B2 E0 AA D8 25 1A 16 66 E5 75 9D F5 4E 56]俨嗒?f鍀濙NV
004702E05D D9 B2 E0 AA D8 25 1A 16 66 E5 75 9D F5 4E 56]俨嗒?f鍀濙NV
004702F0F9 D9 B2 E0 AA D8 25 1A 1A 6C E5 75 9D F5 4E 56侧%l鍀濙NV
00470300A5 D8 B2 E0 AA D8 25 1A 22 64 E5 75 9D F5 4E 56ヘ侧%"d鍀濙NV
00470310E8 BF AB C0 AA D8 25 1A 35 1E A2 F5 9D F5 4E 56杩%5Ⅴ濙NV
0047032028 2C B2 E0 AA D8 25 1A 63 93 E5 75 9D 78 0E 56(,侧%c撳u漻V
00470330D6 5E 0D 1F A9 D8 2F 1A 60 1E B5 75 97 F5 5F 56謂.┴/`祏楑_V
004703403B A1 F8 E0 B9 D8 AE DA 8E 1C E4 75 61 F7 0F 56;▲喙禺趲鋟a?V
0047035025 A2 B3 E0 8A DB 64 1A 52 1D E4 75 DD F6 0F 56%⒊鄪踕R鋟蓥V
0047036079 A2 B3 E0 CE DB 64 1A 16 1D E4 75 19 F6 0F 56y⒊辔踕鋟?V
00470370B1 A2 B3 E0 02 DB 64 1A DA 1D E4 75 55 F6 0F 56雹赤踕?鋟U?V
文件三 00473000.txt:0047300029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 F1 C2 49 56)◎嗒?b衤IV
0047301005 90 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56愼嗒?b濙NV
00473020CD 98 F5 E0 12 E9 22 1A 62 1E A5 75 9D F5 4E 56蜆踵?b濙NV
0047303029 A1 F2 E0 80 E2 22 1A AE 2F A2 75 9D F5 4E 56)◎鄝??濙NV
0047304029 A1 F2 E0 AA D8 25 1A 08 24 A2 75 41 C4 49 56)◎嗒?$A腎V
0047305029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 2F CF 49 56)◎嗒?b/螴V
00473060C5 90 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56艕踵%b濙NV
00473070D7 9B F5 E0 AA EA 22 1A 62 1E A5 75 9D F5 4E 56讻踵"b濙NV
0047308029 A1 F2 E0 94 E3 22 1A 72 2C A2 75 9D F5 4E 56)◎鄶?r,濙NV
0047309029 A1 F2 E0 AA D8 25 1A B4 21 A2 75 B9 C6 49 56)◎嗒??蛊IV
004730A029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 B9 B5 49 56)◎嗒?b沟IV
004730B01D 92 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56掯嗒?b濙NV
004730C085 E5 F5 E0 EA EC 22 1A 62 1E A5 75 9D F5 4E 56呭踵觎"b濙NV
004730D029 A1 F2 E0 B2 97 22 1A B2 28 A2 75 9D F5 4E 56)◎嗖??濙NV
004730E029 A1 F2 E0 AA D8 25 1A 4C 51 A2 75 45 C3 49 56)◎嗒?LQE肐V
004730F029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 4D BA 49 56)◎嗒?bM篒V
00473100D5 97 F5 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56諚踵%b濙NV
00473110E1 F0 F5 E0 F2 EF 22 1A 62 1E A5 75 9D F5 4E 56狃踵蝻"b濙NV
0047312029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 7D 52 04 56)◎嗒?b}RV
004731305D 0C B8 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56].膏%b濙NV
0047314001 10 B8 E0 AA D8 25 1A 62 1E A5 75 71 54 04 56膏%bqTV
0047315099 00 B8 E0 62 68 6F 1A FE B2 EF 75 9D F5 4E 56?膏bho飖濙NV
0047316049 02 B8 E0 9A 71 6F 1A A2 BD EF 75 9D F5 4E 56I膏歲o⒔飖濙NV
0047317029 A1 F2 E0 36 7B 6F 1A 62 1E A5 75 3D 5B 04 56)◎?{ob=[V
0047318029 A1 F2 E0 AA D8 25 1A 6A B9 EF 75 9D F5 4E 56)◎嗒?j癸u濙NV
00473190B1 0B B8 E0 8E 77 6F 1A 0E B7 EF 75 0D 56 04 56?膏巜o凤u.VV
004731A029 A1 F2 E0 AA D8 25 1A 66 BB EF 75 19 55 04 56)◎嗒?f伙uUV
004731B029 A1 F2 E0 AA D8 25 1A FA AE EF 75 9D F5 4E 56)◎嗒?飖濙NV
004731C0F5 10 B8 E0 16 79 6F 1A 62 1E A5 75 9D F5 4E 56?膏yob濙NV
004731D029 A1 F2 E0 F6 79 6F 1A 62 1E A5 75 9D F5 4E 56)◎圉yob濙NV
004731E0AD 0E B8 E0 AA D8 25 1A 62 1E A5 75 B1 51 04 56?膏%b盦V
004731F029 A1 F2 E0 6E 7D 6F 1A 62 1E A5 75 9D F5 4E 56)◎鄋}ob濙NV
0047320029 A1 F2 E0 5E 73 6F 1A 32 B9 EF 75 9D F5 4E 56)◎郶so2癸u濙NV
0047321029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047322029 A1 F2 E0 9E 70 6F 1A 42 AE EF 75 9D F5 4E 56)◎酁poBu濙NV
0047323029 A1 F2 E0 3E 7A 6F 1A 62 1E A5 75 9D F5 4E 56)◎?zob濙NV
0047324029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 79 56 04 56)◎嗒?byVV
0047325039 04 B8 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 569膏%b濙NV
0047326029 A1 F2 E0 DA 7D 6F 1A 62 1E A5 75 FD 59 04 56)◎嘹}ob齓V
0047327035 09 B8 E0 E2 78 6F 1A 66 AF EF 75 9D F5 4E 565.膏鈞ofu濙NV
0047328029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 85 56 04 56)◎嗒?b匳V
0047329061 07 B8 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56a膏%b濙NV
004732A029 A1 F2 E0 D6 7A 6F 1A 8E BA EF 75 75 5D 04 56)◎嘀zo幒飖u]V
004732B0F9 0A B8 E0 AA D8 25 1A 96 AF EF 75 39 45 04 56?膏%柉飖9EV
004732C0B1 00 B8 E0 D2 71 6F 1A 26 B9 EF 75 D5 56 04 56?膏襮o&癸u誚V
004732D0A5 05 B8 E0 AA 77 6F 1A 62 1E A5 75 9D F5 4E 56?膏獁ob濙NV
004732E029 A1 F2 E0 D6 76 6F 1A 62 1E A5 75 9D F5 4E 56)◎嘀vob濙NV
004732F029 A1 F2 E0 AA D8 25 1A 8E B3 EF 75 D9 51 04 56)◎嗒?幊飖貿V
0047330029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D 5C 04 56)◎嗒?b漒V
0047331029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 15 5E 04 56)◎嗒?b^V
0047332029 A1 F2 E0 22 7A 6F 1A 62 1E A5 75 65 51 04 56)◎?zobeQV
0047333029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 B1 52 04 56)◎嗒?b盧V
0047334029 A1 F2 E0 06 7A 6F 1A 62 1E A5 75 9D F5 4E 56)◎?zob濙NV
0047335029 A1 F2 E0 AA D8 25 1A 7E AF EF 75 9D F5 4E 56)◎嗒?~u濙NV
0047336029 A1 F2 E0 12 76 6F 1A F2 BE EF 75 51 53 04 56)◎?vo蚓飖QSV
00473370C1 0A B8 E0 92 72 6F 1A 62 1E A5 75 39 5F 04 56?膏抮ob9_V
文件四 00477000.txt:0047700029 C1 B5 E0 BA B8 62 1A C6 1E E2 75 8D 85 09 56)恋嗪竍?鈛崊.V
0047701029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047702029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047703029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047704029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047705029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047706029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047707029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047708029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047709029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004770A029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004770B029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004770C029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004770D029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004770E029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004770F029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047710029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047711029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047712029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047713029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047714029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047715029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047716029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047717029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047718029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
0047719029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004771A029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004771B029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004771C029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004771D029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004771E029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
004771F029 A1 F2 E0 AA D8 25 1A 62 1E A5 75 9D F5 4E 56)◎嗒?b濙NV
文件五 0047F000.txt:0047F00029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 46 56)◎啖IG!b濙FV
0047F01028 A1 F2 E0 FA D8 25 9A 60 1E A5 75 05 F5 4E D6(◎帔?歚鮊
0047F0202A A1 F2 E0 AA D9 25 9A 67 1E A5 75 85 F4 4E D6*◎嗒?歡咊N
0047F0302F A1 F2 E0 9A D9 25 9A 68 1E A5 75 4D F4 4E D6/◎鄽?歨M鬘
0047F04025 A1 F2 E0 52 D9 25 9A 6C 1E A5 75 DD F7 4E D6%◎郣?歭蓣N
0047F05029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 49 56)◎啖IG!b濙IV
0047F06028 A1 F2 E0 F2 DA 25 9A 60 1E A5 75 ED F7 4E D6(◎囹?歚眵N
0047F0702A A1 F2 E0 22 DA 25 9A 66 1E A5 75 3D F7 4E D6*◎??歠=鱊
0047F0802C A1 F2 E0 12 DA 25 9A 64 1E A5 75 4D F7 4E D6,◎??歞M鱊
0047F0902E A1 F2 E0 42 DA 25 9A 62 1E A5 75 95 64 2C 6D.◎郆?歜昫,m
0047F0A029 A1 F2 E0 A1 D8 25 1A 62 14 A5 F5 9D F6 4E D6)◎唷?bヵ濚N
0047F0B039 AB F2 60 B2 DB 25 9A 7E 14 A5 F5 AD F6 4E D69`槽%殈ヵN
0047F0C007 AB F2 60 E2 DB 25 9A 5C 14 A5 F5 FD F6 4E D6`廑%歕ヵN
0047F0D065 AB F2 60 D2 DB 25 9A 3C 14 A5 F5 0D F6 4E D6e`役%?ヵ.鯪
0047F0E041 AB F2 60 02 DB 25 9A 10 14 A5 F5 5D F6 4E D6A`??ヵ]鯪
0047F0F0AB AB F2 60 72 DB 25 9A EC 14 A5 F5 6D F6 4E D6騚r?氺ヵm鯪
0047F10029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56)◎啖IG!b濙OV
0047F11028 A1 F2 E0 A2 DC 25 9A 62 1E A5 75 95 64 2C 6D(◎啖?歜昫,m
0047F12029 A1 F2 E0 AB D8 25 1A CA 14 A5 F5 BD F1 4E D6)◎喃??ヵ今N
0047F13029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 5C 56)◎啖IG!b濙\V
0047F140C6 AE F2 E0 92 DC 25 9A 92 11 A5 75 CD F1 4E D6飘蜞捾%殥婉N
0047F150D8 AE F2 E0 C2 DC 25 9A 90 11 A5 75 1D F1 4E D6禺蜞萝%殣馧
0047F160DA AE F2 E0 32 DC 25 9A 96 11 A5 75 2D F1 4E D6诋蜞2?殩-馧
0047F170DC AE F2 E0 62 DC 25 9A 94 11 A5 75 7D F1 4E D6墚蜞b?殧}馧
0047F180DE AE F2 E0 52 DC 25 9A 9A 11 A5 75 8D F0 4E D6蕻蜞R?殮嶐N
0047F190D0 AE F2 E0 82 DD 25 9A 98 11 A5 75 DD F0 4E D6挟蜞傒%殬蒺N
0047F1A0D2 AE F2 E0 F2 DD 25 9A 9E 11 A5 75 ED F0 4E D6耶蜞蜉%殲眇N
0047F1B0D4 AE F2 E0 22 DD 25 9A 9C 11 A5 75 3D F0 4E D6援蜞"?殰=餘
0047F1C0D6 AE F2 E0 12 DD 25 9A 62 0E A5 75 4D F0 4E D6之蜞?歜M餘
0047F1D029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9E F5 4E 56)◎啖IG!b烏NV
0047F1E0E9 AB F2 60 42 DD 25 9A AC 14 A5 F5 9D F3 4E D6楂騚B?毈ヵ濗N
0047F1F0CF AB F2 60 B2 DE 25 9A 62 1E A5 75 95 64 2C 6D汐騚厕%歜昫,m
0047F20029 A1 F2 E0 AA D8 22 1A 9B 61 A5 75 AD F3 4E D6)◎嗒?沘N
0047F210D3 DE F2 E0 E2 DE 25 9A 99 61 A5 75 FD F3 4E D6愚蜞廪%殭aN
0047F220D5 DE F2 E0 D2 DE 25 9A 9F 61 A5 75 0D F3 4E D6辙蜞肄%殶a.驨
0047F230D7 DE F2 E0 02 DE 25 9A 9D 61 A5 75 5D F3 4E D6邹蜞?殱a]驨
0047F24029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9C F5 4E 56)◎啖IG!b滜NV
0047F250DD AB F2 60 72 DE 25 9A 62 1E A5 75 95 64 2C 6D莴騚r?歜昫,m
0047F26029 A1 F2 E0 AA D8 24 1A 62 1E A5 75 6D F3 4E 56)◎嗒?bm驨V
0047F27029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56)◎啖IG!b濙OV
0047F28029 A1 F2 E0 AA DF 25 1A 62 1E A5 75 95 64 2C 6D)◎嗒?b昫,m
0047F29029 A1 F2 E0 AA D8 24 1A 62 1E A5 75 8D F2 4E 56)◎嗒?b嶒NV
0047F2A029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56)◎啖IG!b濙OV
0047F2B029 A1 F2 E0 8A DF 25 1A 62 1E A5 75 95 64 2C 6D)◎鄪?b昫,m
0047F2C029 A1 F2 E0 AA D8 24 1A 62 1E A5 75 AD F2 4E 56)◎嗒?bNV
0047F2D029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56)◎啖IG!b濙OV
0047F2E029 A1 F2 E0 EA DF 25 1A 62 1E A5 75 95 64 2C 6D)◎嚓?b昫,m
0047F2F029 A1 F2 E0 AA D8 24 1A 62 1E A5 75 CD F2 4E 56)◎嗒?b万NV
0047F30029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56)◎啖IG!b濙OV
0047F31029 A1 F2 E0 CA DF 25 1A 62 1E A5 75 95 64 2C 6D)◎嗍?b昫,m
0047F32029 A1 F2 E0 AA D8 24 1A 62 1E A5 75 ED F2 4E 56)◎嗒?b眚NV
0047F33029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56)◎啖IG!b濙OV
0047F34029 A1 F2 E0 2A DF 25 1A 62 1E A5 75 95 64 2C 6D)◎??b昫,m
0047F35029 A1 F2 E0 AA D8 24 1A 62 1E A5 75 0D F2 4E 56)◎嗒?b.騈V
0047F36029 A1 F2 E0 A2 49 47 21 62 1E A5 75 9D F5 4F 56)◎啖IG!b濙OV
0047F37029 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表的正确解码的结果应该是存在规律的,例如我这个程序的正确解码结果:
0047312C004AA7E0程序.004AA7E0
00473130004AAD74程序.004AAD74
0047313400D00000
0047313800D0000E
0047313C00D0001C
00473140004AB128程序.004AB128
0047314400D0002A
0047314800D00038
0047314C004AA1EC程序.004AA1EC
00473150004AA1B0程序.004AA1B0
00473154004AB0C8程序.004AB0C8
00473158004AAC9C程序.004AAC9C
0047315C00D00046
00473160004AA360程序.004AA360
00473164004AA930程序.004AA930
00473168004AA3C0程序.004AA3C0
0047316C00D00054
0047317000D00062
00473174004AA39C程序.004AA39C
0047317800D00070
0047317C004AAEA0程序.004AAEA0
0047318000A73E10
0047318400D0007E
00473188004AA708程序.004AA708
0047318C00D0008C
00473190004AAA98程序.004AAA98
00473194004AAF24程序.004AAF24
00473198004AA96C程序.004AA96C
0047319C004AA390程序.004AA390
004731A000D0009A
004731A400D000A8
004731A8004AA504程序.004AA504
004731AC004AA084程序.004AA084
004731B000D000B6
004731B400000000                                        //不同DLL间的间隔
004731B8004AB098程序.004AB098
004731BC00D000C4
我们可以从中看出,主要的结构有两种,004AXXXX和00D0XXXX,并且不同DLL间的间隔符号绝对是00000000。
所以如果我们看到IAT表中一行结果有很多个0,那么我可以猜测这个数值应该是间隔符号,应该全部为0,而不为0的位则代表了猜测的那位XOR数值是错的,需要更改。
而另一种很容易通过IAT表判断的情况是这样:00465FFC00000000
004660000050B4681_0zc.0050B468
004660047EFCF878
004660080050BA801_0zc.0050BA80
0046600C0050BBAC1_0zc.0050BBAC
004660100050BDC81_0zc.0050BDC8
004660147EAC4350
004660180050B3C01_0zc.0050B3C0
0046601C0050B9841_0zc.0050B984
0046602000000000
004660247EFCF2BC
004660280050B2E81_0zc.0050B2E8
0046602C0050BDF81_0zc.0050BDF8
004660300050B3301_0zc.0050B330
004660347EFCF424
004660380050B8D01_0zc.0050B8D0
0046603C0050B4C81_0zc.0050B4C8
004660400050B2641_0zc.0050B264
004660447EFCF7B0
004660480050B9301_0zc.0050B930
0046604C0050BD2C1_0zc.0050BD2C
004660500050C2181_0zc.0050C218
004660547EFCFF5C解码后,我们发现IAT表中,每隔4行的数值都跟其他行的结构很不一致,那么证明猜测出来的解码XOR数值的那4位是有问题的,而其他12位至少开头两位是没问题的,因为他们的结构一致。
d.在除了IAT所在解码区段外的其他几个区段,一般有一些区段里在正确解码后是含有有意义的英文单词的。如下:
0047007072 00 8B C0 52 75 6E 74 69 6D 65 20 65 72 72 6Fr.嬂Runtime erro
0047008072 20 20 20 20 20 61 74 20 30 30 30 30 30 30 30r   at 0000000
0047009030 00 8B C0 30 31 32 33 34 35 36 37 38 39 41 420.嬂0123456789AB
通过这些单词的正确与否,我们可以确认解码XOR数值的哪些位可能是正确的,哪些位是不正确的。上面的"Runtime error"看起来是正确的,那么他们对应的第0、4~16位的解码XOR数值都是对的了。
e.判断解码是否正确的终极标准,就是程序可以正常运行。
============================
9、在猜解完成后,我们要填写好我们的破解记录文件cracking.txt,这样才算是真正完成了破解。
      1、真正OEP:esp定律=>12FFA0=>46F610
      2、IATSTART:473000=>47312C
      3、密钥位置:12FEE0~12FEEF
               数值:0012FEE0F1 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修复的结果,正确的一般如下:
0046600077DA6C27ADVAPI32.RegCloseKey
0046600477DA7852ADVAPI32.RegOpenKeyExA
0046600877DAEAE7ADVAPI32.RegSetValueExA
0046600C77DCBB8DADVAPI32.RegQueryValueA
0046601077DAE9F4ADVAPI32.RegCreateKeyExA
0046601400000000
004660185D1803D8COMCTL32.ImageList_Destroy
0046601C5D1765CFCOMCTL32.InitCommonControls
0046602000000000
0046602477EF8597GDI32.SetStretchBltMode
0046602877EF6AD6GDI32.GetClipRgn
0046602C77EFA8BAGDI32.CreatePolygonRgn
0046603077EF7AA0GDI32.SelectClipRgn
0046603477EF6BFAGDI32.DeleteObject
0046603877EFAD23GDI32.CreateDIBitmap
0046603C77EFBA9EGDI32.GetSystemPaletteEntries
0046604077EFB5EAGDI32.CreatePalette
0046604477EFB6D0GDI32.StretchBlt
如果里面还是存在没有直指系统DLL的API地址的存在。。那么通常都不可能脱壳成功。我也没弄懂,为什么么阻止了模拟DLL还是有这样的情况。

casgsn 发表于 2010-5-1 03:39

本帖最后由 casgsn 于 2010-6-11 21:44 编辑

留一楼进行总结。。
原来因为复制内存时里面的乱码导致部分文章发不出来,现在已经改好了。。
==========================================
本文起源于。。下面的三个论坛悬赏帖:
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脚本插件的官方论坛留下意见了,希望可以更新。
==========================================

不过怎么还是觉得有些东西忘了写。。。等我想起来再回来补上。

bg4mpf 发表于 2010-5-1 12:18

学习下。。。。。。第一贴给你。

310608900 发表于 2010-5-1 11:41

要是能做个视频好了。。。。。

heing 发表于 2010-5-1 11:19

强大~我慢慢学~

vjet 发表于 2010-5-1 13:55

视频还是比较方便,这个对新手有点复杂。

gongni88 发表于 2010-5-1 13:35

有这个视频 视频我看了 作者的目的就是出售那个lpk.dll补丁。

casgsn 发表于 2010-5-1 16:22

本帖最后由 casgsn 于 2010-5-1 16:24 编辑

有这个视频 视频我看了 作者的目的就是出售那个lpk.dll补丁。
gongni88 发表于 2010-5-1 13:35 http://www.52pojie.cn/images/common/back.gif


呵呵。。这个帖子解决的就是LPK.DLL无效的情况。。而且LPK.DLL是无法实现脱壳的,解码是为了脱壳,不是为了简单地绕过注册框。

另外本贴是原创。。只不过首发在一蓑烟雨。。casgsn=A.D.=我~

Hmily 发表于 2010-5-1 23:53

感谢分享经验,第一篇主题帖加精鼓励,继续努力!

心跳為你 发表于 2010-5-2 00:15

额,能结合个 实例 说下就更好 了
页: [1] 2 3 4 5
查看完整版本: ZProtect脱壳无KEY解码总结