IconEdit2 v2.4
IconEdit2
v2.4是Asprotec1.22加密的,脱壳请看我写的"IconEdit2脱壳实录",
与v2.3版不同的是,这次的注册码不是在源程序里进行比对的,而是利用了ASPR
壳的Key保护,在壳里面进行计算,并且根据Key使用SMC技术动态改变程序代码。
脱了壳的程序自然就没有了Key的计算部分,所以即使有正确的注册码也不可能
注册成功了。
当然可以跟踪壳里的计算代码,找到它的算法和SMC,可是这对我是太难了,我
跟了老半天,越过无数陷阱,可是还是连注册码该有多少位都没搞清楚,只好放
弃了。不知道有没有高人研究过,给咱菜鸟们传授传授吧!
对付这种程序真让人头疼,我原来汉化的一个HTMLZip1.04也是类似的,害的我
把个程序改的面目全非的(最后吕大哥说我汉化不完全没发表,^_^)
我想,对这种程序最好的办法是先用正确的注册码先注册成功,然后再脱壳修改
这样应该会比较顺利吧。可是咱们穷哥们是掏不起那注册费的呀,就来用暴暴暴
暴力的吧!
首先来看看脱壳后的程序,有个About,上面写着Unregister
Version,还有是
存盘的时候会蹦出注册对话框,不注册不能存盘!天哪,不能存盘这个软件简直
成了个废物了。
改About和弹出的注册框并不是很难,用TRW跟踪吧,不过最好能把程序反编译出
来,就可以看的更清晰了。顺便说一下,原来脱过壳的程序我用W32Dasm和DeDe
都不能反编译,不知道为什么。不在OEP处dump,而在后面的00493137处的CALL
后再dump,则可以用W32Dasm反编译,但DeDe还是不能反编,后来改了DeDe一个
字节,使其可以反编译了(没有Process了,只能RAV反编译,呵呵,不过也够了)
About和注册框先搞定它,下面是显示About的一段代码:
018F:0048D12A
LEA EAX,[EBP-48]
018F:0048D12D CALL
0048AFD4 <-- 这个CALL不要进去了,只要018F:0048D132
CMP DWORD [EBP-48],BYTE +00 使[EBP-48]不为零就行
018F:0048D136
JNZ 0048D16D <-- 这里一定要跳
:
:
:
018F:0048D16D MOV EAX,[EBP-04]
018F:0048D170
MOV EAX,[EAX+02F4]
018F:0048D176 MOV
DL,01
018F:0048D178 CALL 0042BFAC
018F:0048D17D
MOV EAX,[EBP-04]
018F:0048D180 MOV
EAX,[EAX+02D8]
018F:0048D186 XOR EDX,EDX
018F:0048D188
CALL 0042BFAC
018F:0048D18D LEA EAX,[EBP-4C]
018F:0048D190
CALL 0048AFD4 <-- 这个CALL也不进了,
018F:0048D195
MOV EDX,[EBP-4C] <-- EDX指向注册用户名
018F:0048D198
MOV EAX,[EBP-04]
018F:0048D19B MOV
EAX,[EAX+02F8]
018F:0048D1A1 CALL 0042C0C4
跳过存盘时的注册对话框和上面第一段的代码基本一样,同样改一下就行了。
这时程序看上去已经是一个注册版了,但最困难的是实现存盘功能,总不能虚有
其表吧。这个真的是很难,v2.3版中也有同样的问题,可以看我的"脱壳实录"中
的解决方法。但是v2.3是在注册成功的基础上而实现的,v2.4版却不行了,即使
将那三段都找出来加上可能也不行。我只加了一段看了看,发现根本不行,程序
和壳中SMC的地方太多,不注册成功不可能恢复出正确的代码来的。
为这个我可是苦恼了好几个小时,最后终于灵光一现(可能你早就想到了),v2.3
的我不是搞定了吗,估计v2.4版的存盘这部分的代码应该差不多吧,能不能用
v2.3版的正确的存盘代码来替换v2.4版的呢?想到这,马上行动,还记得我"脱壳
实录"中的这段吗:
018F:0048D1F5
PUSH DWORD 0048D5DB
018F:0048D1FA PUSH
DWORD [FS:EDX]
018F:0048D1FD MOV [FS:EDX],ESP
018F:0048D200
CALL 0048A2EC
018F:0048D205 JMP 0048D20B
<-- 变了!上面的CALL好厉害呀
018F:0048D20A NOP
<-- 这里原本是花指令,呵呵
018F:0048D20B MOV
EAX,[EBP+08]
018F:0048D20E MOV EAX,[EAX-04]
018F:0048D211
MOV EAX,[EAX+02E0]
018F:0048D217 MOV
AX,[EAX+0246]
018F:0048D21E SUB AX,BYTE
+10
018F:0048D222 JZ NEAR 0048D2C1
018F:0048D228
SUB AX,BYTE +10
018F:0048D22C JNZ
NEAR 0048D35C
018F:0048D232 LEA EAX,[EBP+FFFFF342]
018F:0048D238
MOV ECX,FF
018F:0048D23D MOV
EDX,0CBE
018F:0048D242 CALL 00402B70
我们现在不能用上面的CALL恢复出下面正确的代码,可是v2.3的不是已经出来了
吗,跟了一下,哈哈,存盘果然在这段代码中完成。好,把这段全dump出来,换
到v2.4版中去,下面就是替换后的代码(够长的呀):
018F:0048ECF0
E883C3FFFF CALL 0048B078 <-- 这个CALL没用了
018F:0048ECF5
E901000000 JMP 0048ECFB <--
下面是正确代码
018F:0048ECFA 90 NOP
018F:0048ECFB 8B4508 MOV
EAX,[EBP+08]
018F:0048ECFE 8B40FC
MOV EAX,[EAX-04]
018F:0048ED01 8B80E0020000
MOV EAX,[EAX+02E0]
018F:0048ED07 668B8046020000
MOV AX,[EAX+0246]
018F:0048ED0E 6683E810
SUB AX,BYTE +10
018F:0048ED12 0F8499000000
JZ NEAR 0048EDB1
018F:0048ED18 6683E810
SUB AX,BYTE +10
018F:0048ED1C
0F852A010000 JNZ NEAR 0048EE4C
018F:0048ED22
8D8542F3FFFF LEA EAX,[EBP+FFFFF342]
018F:0048ED28
B9FF000000 MOV ECX,FF
018F:0048ED2D
BABE0C0000 MOV EDX,0CBE
018F:0048ED32
E82959F7FF CALL 00404660 改>>>00402B70
018F:0048ED37
BB3E000000 MOV EBX,3E
018F:0048ED3C
8D8542F3FFFF LEA EAX,[EBP+FFFFF342]
018F:0048ED42
C60000 MOV BYTE [EAX],00
018F:0048ED45
40 INC EAX
018F:0048ED46
4B DEC EBX
018F:0048ED47
75F9 JNZ 0048ED42
018F:0048ED49
C68544F3FFFF01 MOV BYTE [EBP+FFFFF344],01
018F:0048ED50
C68546F3FFFF01 MOV BYTE [EBP+FFFFF346],01
018F:0048ED57
C68548F3FFFF20 MOV BYTE [EBP+FFFFF348],20
018F:0048ED5E
C68549F3FFFF20 MOV BYTE [EBP+FFFFF349],20
018F:0048ED65
C68550F3FFFFA8 MOV BYTE [EBP+FFFFF350],A8
018F:0048ED6C
C68551F3FFFF0C MOV BYTE [EBP+FFFFF351],0C
018F:0048ED73
C68554F3FFFF16 MOV BYTE [EBP+FFFFF354],16
018F:0048ED7A
C68558F3FFFF28 MOV BYTE [EBP+FFFFF358],28
018F:0048ED81
C6855CF3FFFF20 MOV BYTE [EBP+FFFFF35C],20
018F:0048ED88
C68560F3FFFF40 MOV BYTE [EBP+FFFFF360],40
018F:0048ED8F
C68564F3FFFF01 MOV BYTE [EBP+FFFFF364],01
018F:0048ED96
C68566F3FFFF18 MOV BYTE [EBP+FFFFF366],18
018F:0048ED9D
BB80000000 MOV EBX,80
018F:0048EDA2
8D4580 LEA EAX,[EBP-80]
018F:0048EDA5
C60000 MOV BYTE [EAX],00
018F:0048EDA8
40 INC EAX
018F:0048EDA9
4B DEC EBX
018F:0048EDAA
75F9 JNZ 0048EDA5
018F:0048EDAC
E99B000000 JMP 0048EE4C
018F:0048EDB1
8D8542F3FFFF LEA EAX,[EBP+FFFFF342]
018F:0048EDB7
B9FF000000 MOV ECX,FF
018F:0048EDBC
BABE0C0000 MOV EDX,0CBE
018F:0048EDC1
E89A58F7FF CALL 00404660 改>>>00402B70
018F:0048EDC6
BB3E000000 MOV EBX,3E
018F:0048EDCB
8D8542F3FFFF LEA EAX,[EBP+FFFFF342]
018F:0048EDD1
C60000 MOV BYTE [EAX],00
018F:0048EDD4
40 INC EAX
018F:0048EDD5
4B DEC EBX
018F:0048EDD6
75F9 JNZ 0048EDD1
018F:0048EDD8
C68544F3FFFF01 MOV BYTE [EBP+FFFFF344],01
018F:0048EDDF
C68546F3FFFF01 MOV BYTE [EBP+FFFFF346],01
018F:0048EDE6
C68548F3FFFF10 MOV BYTE [EBP+FFFFF348],10
018F:0048EDED
C68549F3FFFF10 MOV BYTE [EBP+FFFFF349],10
018F:0048EDF4
C68550F3FFFF68 MOV BYTE [EBP+FFFFF350],68
018F:0048EDFB
C68551F3FFFF03 MOV BYTE [EBP+FFFFF351],03
018F:0048EE02
C68554F3FFFF16 MOV BYTE [EBP+FFFFF354],16
018F:0048EE09
C68558F3FFFF28 MOV BYTE [EBP+FFFFF358],28
018F:0048EE10
C6855CF3FFFF10 MOV BYTE [EBP+FFFFF35C],10
018F:0048EE17
C68560F3FFFF20 MOV BYTE [EBP+FFFFF360],20
018F:0048EE1E
C68564F3FFFF01 MOV BYTE [EBP+FFFFF364],01
018F:0048EE25
C68566F3FFFF18 MOV BYTE [EBP+FFFFF366],18
018F:0048EE2C
BB3E030000 MOV EBX,033E
018F:0048EE31
C6841D42F3FFFF00 MOV BYTE [EBP+EBX+FFFFF342],00
018F:0048EE39
C6841D43F3FFFF00 MOV BYTE [EBP+EBX+FFFFF343],00
018F:0048EE41
83C304 ADD EBX,BYTE +04
018F:0048EE44
81FB7A030000 CMP EBX,037A
018F:0048EE4A 7EE5
JNG 0048EE31
018F:0048EE4C
B201 MOV DL,01
018F:0048EE4E
A198914100 MOV EAX,[00419198] 改>>>[00419130]
018F:0048EE53
E82422F9FF CALL 0042107C 改>>>0041F524
018F:0048EE58
898530F3FFFF MOV [EBP+FFFFF330],EAX
018F:0048EE5E
8B4508 MOV EAX,[EBP+08]
018F:0048EE61
8B40FC MOV EAX,[EAX-04]
018F:0048EE64
8B80E0020000 MOV EAX,[EAX+02E0]
018F:0048EE6A
E8E9A9FDFF CALL 00469858 改>>>00468AF0
018F:0048EE6F
8BD0 MOV EDX,EAX
018F:0048EE71
8B8530F3FFFF MOV EAX,[EBP+FFFFF330]
018F:0048EE77
8B08 MOV ECX,[EAX]
018F:0048EE79
FF5108 CALL NEAR [ECX+08]
018F:0048EE7C
33D2 XOR EDX,EDX
018F:0048EE7E
55 PUSH EBP
018F:0048EE7F
681FD54800 PUSH DWORD 0048D51F
018F:0048EE84
64FF32 PUSH DWORD [FS:EDX]
018F:0048EE87
648922 MOV [FS:EDX],ESP
018F:0048EE8A
C6853BF3FFFF00 MOV BYTE [EBP+FFFFF33B],00
018F:0048EE91
8B4508 MOV EAX,[EBP+08]
018F:0048EE94
8B40FC MOV EAX,[EAX-04]
018F:0048EE97
8B80E0020000 MOV EAX,[EAX+02E0]
018F:0048EE9D
668B8046020000 MOV AX,[EAX+0246]
018F:0048EEA4 6683E810
SUB AX,BYTE +10
018F:0048EEA8
741C JZ 0048EEC6
018F:0048EEAA
6683E810 SUB AX,BYTE +10
018F:0048EEAE
752A JNZ 0048EEDA
018F:0048EEB0
C7853CF3FFFFDE0B+MOV DWORD [EBP+FFFFF33C],0BDE
018F:0048EEBA
C78534F3FFFFBA0C+MOV DWORD [EBP+FFFFF334],0CBA
018F:0048EEC4
EB14 JMP SHORT 0048EEDA
018F:0048EEC6
C7853CF3FFFF0E03+MOV DWORD [EBP+FFFFF33C],030E
018F:0048EED0
C78534F3FFFF7A03+MOV DWORD [EBP+FFFFF334],037A
018F:0048EEDA
8B4508 MOV EAX,[EBP+08]
018F:0048EEDD
8B40FC MOV EAX,[EAX-04]
018F:0048EEE0
8B80E0020000 MOV EAX,[EAX+02E0]
018F:0048EEE6
0FB78048020000 MOVZX EAX,WORD [EAX+0248]
018F:0048EEED
48 DEC EAX
018F:0048EEEE
85C0 TEST EAX,EAX
018F:0048EEF0
0F8C00010000 JL NEAR 0048EFF6
018F:0048EEF6
40 INC EAX
018F:0048EEF7
89852CF3FFFF MOV [EBP+FFFFF32C],EAX
018F:0048EEFD
33FF XOR EDI,EDI
018F:0048EEFF
8B4508 MOV EAX,[EBP+08]
018F:0048EF02
8B40FC MOV EAX,[EAX-04]
018F:0048EF05
8B80E0020000 MOV EAX,[EAX+02E0]
018F:0048EF0B
0FB7B046020000 MOVZX ESI,WORD [EAX+0246]
018F:0048EF12
4E DEC ESI
018F:0048EF13
85F6 TEST ESI,ESI
018F:0048EF15
0F8CCE000000 JL NEAR 0048EFE9
018F:0048EF1B
46 INC ESI
018F:0048EF1C
33DB XOR EBX,EBX
018F:0048EF1E
8B8530F3FFFF MOV EAX,[EBP+FFFFF330]
018F:0048EF24
E8BF26F9FF CALL 004215E8 改>>>0041FA90
018F:0048EF29
8BCF MOV ECX,EDI
018F:0048EF2B
8BD3 MOV EDX,EBX
018F:0048EF2D
E852DDF8FF CALL 0041CC84 改>>>0041B12C
018F:0048EF32
8B5508 MOV EDX,[EBP+08]
018F:0048EF35
8B52FC MOV EDX,[EDX-04]
018F:0048EF38
8B92E0020000 MOV EDX,[EDX+02E0]
018F:0048EF3E
3B8228020000 CMP EAX,[EDX+0228]
018F:0048EF44
7512 JNZ 0048EF58
018F:0048EF46
55 PUSH EBP
018F:0048EF47
33C0 XOR EAX,EAX
018F:0048EF49
E8F2FCFFFF CALL 0048EC40 >>>不用改
018F:0048EF4E
59 POP ECX
018F:0048EF4F
55 PUSH EBP
018F:0048EF50
E837FDFFFF CALL 0048EC8C >>>不用改
018F:0048EF55
59 POP ECX
018F:0048EF56
EB1B JMP SHORT 0048EF73
018F:0048EF58
55 PUSH EBP
018F:0048EF59
8B8530F3FFFF MOV EAX,[EBP+FFFFF330]
018F:0048EF5F
E88426F9FF CALL 004215E8 改>>>0041FA90
018F:0048EF64
8BCF MOV ECX,EDI
018F:0048EF66
8BD3 MOV EDX,EBX
018F:0048EF68
E817DDF8FF CALL 0041CC84 改>>>0041B12C
018F:0048EF6D
E8CEFCFFFF CALL 0048EC40 >>>不用改
018F:0048EF72
59 POP ECX
018F:0048EF73
FE853BF3FFFF INC BYTE [EBP+FFFFF33B]
018F:0048EF79
80BD3BF3FFFF07 CMP BYTE [EBP+FFFFF33B],07
018F:0048EF80
760D JNA 0048EF8F
018F:0048EF82
C6853BF3FFFF00 MOV BYTE [EBP+FFFFF33B],00
018F:0048EF89
FF8534F3FFFF INC DWORD [EBP+FFFFF334]
018F:0048EF8F
83853CF3FFFF03 ADD DWORD [EBP+FFFFF33C],BYTE +03
018F:0048EF96
8B4508 MOV EAX,[EBP+08]
018F:0048EF99
8B40FC MOV EAX,[EAX-04]
018F:0048EF9C
8B80E0020000 MOV EAX,[EAX+02E0]
018F:0048EFA2
668B8046020000 MOV AX,[EAX+0246]
018F:0048EFA9 0FB7D0
MOVZX EDX,AX
018F:0048EFAC
4A DEC EDX
018F:0048EFAD
3BDA CMP EBX,EDX
018F:0048EFAF
7530 JNZ 0048EFE1
018F:0048EFB1
8B5508 MOV EDX,[EBP+08]
018F:0048EFB4
6683E810 SUB AX,BYTE +10
018F:0048EFB8
7419 JZ 0048EFD3
018F:0048EFBA
6683E810 SUB AX,BYTE +10
018F:0048EFBE
7521 JNZ 0048EFE1
018F:0048EFC0
81AD3CF3FFFFC000+SUB DWORD [EBP+FFFFF33C],C0
018F:0048EFCA
83AD34F3FFFF08 SUB DWORD [EBP+FFFFF334],BYTE +08
018F:0048EFD1
EB0E JMP SHORT 0048EFE1
018F:0048EFD3
83AD3CF3FFFF60 SUB DWORD [EBP+FFFFF33C],BYTE +60
018F:0048EFDA
83AD34F3FFFF06 SUB DWORD [EBP+FFFFF334],BYTE +06
018F:0048EFE1
43 INC EBX
018F:0048EFE2
4E DEC ESI
018F:0048EFE3
0F8535FFFFFF JNZ NEAR 0048EF1E
018F:0048EFE9
47 INC EDI
018F:0048EFEA
FF8D2CF3FFFF DEC DWORD [EBP+FFFFF32C]
018F:0048EFF0
0F8509FFFFFF JNZ NEAR 0048EEFF
018F:0048EFF6
33C0 XOR EAX,EAX
018F:0048EFF8
5A POP EDX
018F:0048EFF9
59 POP ECX
018F:0048EFFA
59 POP ECX
018F:0048EFFB
648910 MOV [FS:EAX],EDX
018F:0048EFFE
6826D54800 PUSH DWORD 0048D526 改>>>0048F016
018F:0048F003
8B8530F3FFFF MOV EAX,[EBP+FFFFF330]
018F:0048F009
E85259F7FF CALL 00404960 改>>>00402E70
018F:0048F00E
C3 RET
018F:0048F00F
E9AC60F7FF JMP 004050C0
018F:0048F014
EBED JMP SHORT 0048F003
018F:0048F016
8D95DCF1FFFF LEA EDX,[EBP+FFFFF1DC]
018F:0048F01C
8B4508 MOV EAX,[EBP+08]
018F:0048F01F
8B40FC MOV EAX,[EAX-04]
018F:0048F022
8B80DC020000 MOV EAX,[EAX+02DC]
018F:0048F028
E84F0BFCFF CALL 0044FB7C 改>>>0044F3B4
018F:0048F02D
8B95DCF1FFFF MOV EDX,[EBP+FFFFF1DC]
018F:0048F033
8D85E0F1FFFF LEA EAX,[EBP+FFFFF1E0]
018F:0048F039
E84089F7FF CALL 0040797E 改>>>00405E8E
018F:0048F03E
8B4508 MOV EAX,[EBP+08]
018F:0048F041
8B40FC MOV EAX,[EAX-04]
018F:0048F044
8B80E0020000 MOV EAX,[EAX+02E0]
018F:0048F04A
668B8046020000 MOV AX,[EAX+0246]
018F:0048F051 6683E810
SUB AX,BYTE +10
018F:0048F055
741D JZ 0048F074
018F:0048F057
6683E810 SUB AX,BYTE +10
018F:0048F05B
752C JNZ 0048F089
018F:0048F05D
BABE0C0000 MOV EDX,0CBE
018F:0048F062
8D85E0F1FFFF LEA EAX,[EBP+FFFFF1E0]
018F:0048F068
E8FB8BF7FF CALL 00407C68 改>>>00406178
018F:0048F06D
E86A52F7FF CALL 004042DC 改>>>004027EC
018F:0048F072
EB15 JMP SHORT 0048F089
018F:0048F074
BA7E030000 MOV EDX,037E
018F:0048F079
8D85E0F1FFFF LEA EAX,[EBP+FFFFF1E0]
018F:0048F07F
E8E48BF7FF CALL 00407C68 改>>>00406178
018F:0048F084
E85352F7FF CALL 004042DC 改>>>004027EC
018F:0048F089
6A00 PUSH BYTE +00
018F:0048F08B
8D9542F3FFFF LEA EDX,[EBP+FFFFF342]
018F:0048F091
B901000000 MOV ECX,01
018F:0048F096
8D85E0F1FFFF LEA EAX,[EBP+FFFFF1E0]
018F:0048F09C
E87F89F7FF CALL 00407A20 改>>>00405F30
018F:0048F0A1
E83652F7FF CALL 004042DC 改>>>004027EC
018F:0048F0A6
8D85E0F1FFFF LEA EAX,[EBP+FFFFF1E0]
018F:0048F0AC
E8D389F7FF CALL 00407A84 改>>>00405F94
018F:0048F0B1
E82652F7FF CALL 004042DC 改>>>004027EC
018F:0048F0B6
EB04 JMP SHORT 0048F0BC
018F:0048F0B8
886199 MOV [ECX-67],AH
018F:0048F0BB
49 DEC ECX
018F:0048F0BC
E843CDFFFF CALL 0048BE04 改>>>0048B0A0
018F:0048F0C1
33C0 XOR EAX,EAX
018F:0048F0C3
5A POP EDX
018F:0048F0C4
59 POP ECX
018F:0048F0C5
59 POP ECX
018F:0048F0C6
648910 MOV [FS:EAX],EDX
018F:0048F0C9
EB0A JMP SHORT 0048F0D5
018F:0048F0CB
E93C5DF7FF JMP 00404E0C
018F:0048F0D0
E89360F7FF CALL 00405168 改>>>00403678
018F:0048F0D5
33C0 XOR EAX,EAX
018F:0048F0D7
5A POP EDX
018F:0048F0D8
59 POP ECX
018F:0048F0D9
59 POP ECX
018F:0048F0DA
648910 MOV [FS:EAX],EDX
018F:0048F0DD
6805D64800 PUSH DWORD 0048D605 改>>>0048F0F5
018F:0048F0E2
8D85DCF1FFFF LEA EAX,[EBP+FFFFF1DC]
018F:0048F0E8
E83B65F7FF CALL 00405628 改>>>00403B38
018F:0048F0ED
C3 RET
018F:0048F0EE
E9CD5FF7FF JMP 004050C0
018F:0048F0F3
EBED JMP SHORT 0048F0E2
018F:0048F0F5
5F POP EDI
018F:0048F0F6
5E POP ESI
018F:0048F0F7
5B POP EBX
018F:0048F0F8
8BE5 MOV ESP,EBP
018F:0048F0FA
5D POP EBP
018F:0048F0FB
C3 RET
由于是从v2.3版中dump出来的,许多偏移量都不一样,上面标者"改"的均需要改
为后面的值,这是我用DeDe+HexWorkshop+偏移量转换器,慢慢的一个个找出来
的,有几十个之多,修改的过程是痛苦的。载入调试的时候可是心惊胆战,万一
没有效果,我可要吐血了,上天保佑,居然顺利的跑到RET了,看一下文件夹,哇
存好了!
大功告成,亲个嘴吧,呵呵呵^_^
