首页
社区
课程
招聘
[求助]脱壳之后程序自校验怎么破?
发表于: 2014-7-3 00:37 8538

[求助]脱壳之后程序自校验怎么破?

2014-7-3 00:37
8538
自学脱壳新手,遇到一个UPX的变形壳,脱壳之后运行程序发现一闪而过,百度搜索之后,说是程序有自校验,不知道怎么破。求高手指点迷津。源程序在附件中。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 118
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
找到它,去掉自校验
2014-7-3 08:28
0
雪    币: 255
活跃值: (367)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
将脱壳后的文件,在地址处:0041C094   /7F 52       jg  0041C0E8  nop掉就行了.
2014-7-3 10:42
0
雪    币: 16420
活跃值: (1670)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
双开OD
双路齐跟
找到不同
爆破了帐
2014-7-3 11:36
0
雪    币: 97
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
确实在这个地方跳过就可以了,不过这个地址是通过什么方法找到的呢?
2014-7-3 12:45
0
雪    币: 255
活跃值: (367)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对kernel32.ExitProcess设断,往上追几步就到了:0041C08F    3D B8350800     cmp eax,0x835B8
这是比较文件大小的地方,大于835B8(换成十进制为538040Byte)即跳:0041C094   /7F 52           jg 0041C0E8
2014-7-3 13:36
0
雪    币: 97
活跃值: (10)
能力值: ( 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,保存,再开程序就正常开启了。
2014-7-5 21:13
0
游客
登录 | 注册 方可回帖
返回
//