能力值:
( LV4,RANK:50 )
|
-
-
2 楼
找到它,去掉自校验
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
将脱壳后的文件,在地址处:0041C094 /7F 52 jg 0041C0E8 nop掉就行了.
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
双开OD
双路齐跟
找到不同
爆破了帐
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
确实在这个地方跳过就可以了,不过这个地址是通过什么方法找到的呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
对kernel32.ExitProcess设断,往上追几步就到了:0041C08F 3D B8350800 cmp eax,0x835B8
这是比较文件大小的地方,大于835B8(换成十进制为538040Byte)即跳:0041C094 /7F 52 jg 0041C0E8
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
去校验的方法:
OD双开,都下bp CreateFileA断点,F9让程序跑起来,会在这里断下来
7C801A28 > 8BFF MOV EDI,EDI
7C801A2A 55 PUSH EBP
7C801A2B 8BEC MOV EBP,ESP
7C801A2D FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C801A30 E8 DFC60000 CALL kernel32.7C80E114
注意堆栈:
0012E914 73D11727 '裺 /CALL 到 CreateFileA 来自 73D11721
0012E918 73D019D8 ?衧 |FileName = "CONIN$"
0012E91C C0000000 ... |Access = GENERIC_READ|GENERIC_WRITE
0012E920 00000003 ... |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012E924 00000000 .... |pSecurity = NULL
0012E928 00000003 ... |Mode = OPEN_EXISTING
0012E92C 00000000 .... |Attributes = 0
0012E930 00000000 .... \hTemplateFile = NULL
再一次F9
0012E914 73D11743 C裺 /CALL 到 CreateFileA 来自 73D1173D
0012E918 73D019D0 ?衧 |FileName = "CONOUT$"
0012E91C 40000000 ...@ |Access = GENERIC_WRITE
0012E920 00000003 ... |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012E924 00000000 .... |pSecurity = NULL
0012E928 00000003 ... |Mode = OPEN_EXISTING
0012E92C 00000000 .... |Attributes = 0
0012E930 00000000 .... \hTemplateFile = NULL
0012E934 73D01014 衧
0012E938 73D02054 T 衧 返回到 73D02054
再一次F9
0012AFCC 7C820AEC ?倈 /CALL 到 CreateFileA 来自 kernel32.7C820AE7
0012AFD0 0012B134 4?. |FileName = "C:\\WINDOWS\\system32\\rsaenh.dll"
0012AFD4 80000000 ...€ |Access = GENERIC_READ
0012AFD8 00000003 ... |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012AFDC 00000000 .... |pSecurity = NULL
0012AFE0 00000003 ... |Mode = OPEN_EXISTING
0012AFE4 00000000 .... |Attributes = 0
0012AFE8 00000000 .... \hTemplateFile = NULL
0012AFEC 68031998 ?h ASCII "C:\\WINDOWS\\system32\\rsaenh.dll"
0012AFF0 68000000 ...h
再一次F9
0012ACC4 7C820AEC ?倈 /CALL 到 CreateFileA 来自 kernel32.7C820AE7
0012ACC8 0012AFD8 丿. |FileName = "C:\\WINDOWS\\system32\\rsaenh.dll"
0012ACCC 80000000 ...€ |Access = GENERIC_READ
0012ACD0 00000003 ... |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012ACD4 00000000 .... |pSecurity = NULL
0012ACD8 00000003 ... |Mode = OPEN_EXISTING
0012ACDC 00000000 .... |Attributes = 0
0012ACE0 00000000 .... \hTemplateFile = NULL
0012ACE4 0012B100 .?.
0012ACE8 7C834F04 O億 返回到 kernel32._lclose
再一次F9,注意这里,这里可以看到FileName是我们正在运行的程序
0012EF3C 004315E6 ?C. /CALL 到 CreateFileA 来自 Hiddukel.004315E0
0012EF40 0012F010 ?. |FileName = "J:\\破\xBD鈂\13\\13\xA1\xA2程序\xD7孕Q榈腬xBD獬齖xB7\xBD\xB7
\xA8\\Hiddukel_VII\\Hiddukel VII.exe"
0012EF44 80000000 ...€ |Access = GENERIC_READ
0012EF48 00000003 ... |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012EF4C 0012EF68 h?. |pSecurity = 0012EF68
0012EF50 00000003 ... |Mode = OPEN_EXISTING
0012EF54 00000080 €... |Attributes = NORMAL
0012EF58 00000000 .... \hTemplateFile = NULL
0012EF5C 0045ECAE E. Hiddukel.0045ECAE
Alt+F9返回,然后一步一步跟踪,注意两个OD的每次跳转
0041C086 . 56 PUSH ESI
0041C087 . E8 F0DF0000 CALL 1.0042A07C
0041C08C . 83C4 18 ADD ESP,18
0041C08F . 3D B8350800 CMP EAX,835B8 ;835B8这个数就是自校验的重要条件
0041C094 . 7F 52 JG SHORT 1.0041C0E8 ;发现在这里,源程序没有跳转,而脱壳程序却跳转了
0041C096 . 56 PUSH ESI
0041C097 . E8 E0DF0000 CALL 1.0042A07C
自校验的方式一般有文件大小、文件名字、文件时间、重启校验等等,我们这里自校验的条件是835B8h == 538040d
而我们的程序的大小是537600 字节,可见,程序使用的应该是文件大小自校验,因此我们将835B8修改成8EBE10,保存,再开程序就正常开启了。
|
|
|