首页
社区
课程
招聘
[求助]关于asprotect 2.x,不知道这个问题如何解决,请大家指点,谢谢!
发表于: 2014-3-8 22:06 4855

[求助]关于asprotect 2.x,不知道这个问题如何解决,请大家指点,谢谢!

2014-3-8 22:06
4855
背景:本人从事软件行业,但对加壳解壳了解几乎没有。所以最近在研究这方面的东东。
---------------------------------------------------------

目标: nspack3.5主程序脱壳分析(Aspr SKE 2.X) 这个贴子的sample
参考文档: Asprotect SKE 2.2 的Advanced Import protection保护技术
              nspack3.5主程序脱壳分析(Aspr SKE 2.X)
              实践ASProtect 2.1x SKE脱壳【原创】
OS: windows sp2
tools: OD
---------------------------------------------------------

根据kanxue的文档,写出两个相应的patch脚本,可以正常运行,并能修复一些加密CALL,

需要修复的API 列表:
14 2C 40 00 10 37 40 00 58 67 40 00 6A 6A 40 00 A9 6A 40 00 B0 6A 40 00 B8 6A 40 00 4A 74 40 00
97 74 40 00 E7 74 40 00 77 75 40 00 9F 75 40 00 0A 76 40 00 4C 76 40 00 20 88 40 00 7B 89 40 00
A0 89 40 00 01 8C 40 00 87 8C 40 00 98 8C 40 00 DB 91 40 00 3A 92 40 00 74 98 40 00 97 A2 40 00
55 A3 40 00 D6 A7 40 00 EB A7 40 00 01 AA 40 00 E1 BC 40 00 06 C6 40 00 91 CA 40 00 79 D5 40 00
BB DB 40 00 08 DC 40 00 1A DC 40 00 06 DE 40 00 2E DE 40 00 57 DE 40 00 93 DE 40 00 13 DF 40 00
A7 E8 40 00 68 F9 40 00 D6 F9 40 00 07 FA 40 00 85 FD 40 00 16 FE 40 00 81 FF 40 00 75 0B 41 00
AA 1E 41 00 58 27 41 00 E5 27 41 00 4A 2F 41 00 AC 30 41 00 B7 30 41 00 CC 30 41 00 49 31 41 00
6B 31 41 00 C9 31 41 00 11 3B 41 00 42 3B 41 00 8C 3B 41 00 6B 3C 41 00 FB 3C 41 00 09 3E 41 00
1B 40 41 00 42 40 41 00 49 41 41 00 82 42 41 00 86 48 41 00 AE 48 41 00 DB 48 41 00 A2 49 41 00
D2 49 41 00 87 5D 41 00 3D 5F 41 00 48 5F 41 00 5C 5F 41 00 15 60 41 00 24 60 41 00 3C 6D 41 00
6F 6D 41 00 B0 6D 41 00 D5 6D 41 00 DE 6D 41 00 AA E1 41 00 A2 E2 41 00 E7 E3 41 00 04 E4 41 00
0C E4 41 00 88 E4 41 00 90 EC 41 00 D7 F5 41 00 15 F9 41 00 09 FA 41 00 FB FB 41 00 18 FC 41 00
E1 17 42 00 38 18 42 00 A6 19 42 00 DC 20 42 00 E4 E8 42 00 CA 57 43 80 29 5C 43 80 75 92 43 00
97 92 43 80 A7 92 43 80 A2 D2 47 80 B4 DF 47 80 CB EE 47 80 1E F0 47 80 18 0B 48 80 7F 4E 48 80
8F 4E 48 80 7E 5C 48 80 D3 5C 48 00 1D 6E 48 80 24 6E 48 80 3D 81 48 80 A9 81 48 80 2D 82 48 80
A6 84 48 00 8D 88 48 80 03 8A 48 00 18 8A 48 00 A3 8A 48 80 AB 9A 48 80 18 9B 48 80 08 A6 48 00
98 B7 48 80 FD B7 48 80 55 C0 48 80 00 C1 48 80 63 C1 48 00 71 C1 48 80 A8 C1 48 80 99 C4 48 80
CD C4 48 80 B4 C8 48 80 FD CB 48 80 B6 CC 48 80 8C CD 48 80 93 CD 48 80 64 CE 48 00 28 D7 48 80
71 D7 48 80 94 DC 48 80 A8 DC 48 80 2B DD 48 00 BF DD 48 80 5C EB 48 80 78 EB 48 80 90 EB 48 00
7A F6 48 80 F9 F6 48 00 B9 F9 48 80 FC 15 49 80 08 1C 49 80 19 1F 49 80 F2 1F 49 80 70 25 49 80
A2 27 49 80 B4 27 49 00 97 49 49 80 9E 49 49 80 55 4B 49 80 D0 4C 49 80 FE 53 49 80 17 56 49 80
C6 6D 49 80 26 6E 49 00 F7 7D 49 00 F9 7E 49 00 FE 7F 49 80 A3 80 49 80 C6 84 49 80 12 8B 49 80
E6 8B 49 80 F5 8B 49 80 64 8C 49 80 91 8D 49 00 9C 8D 49 80 B0 8D 49 80 C0 8D 49 80 2E 98 49 00
D8 99 49 80 69 9A 49 80 F1 9A 49 80 1A 9B 49 80 45 9B 49 80 B5 9B 49 80 F8 9B 49 00 2B 9C 49 00
6D 9D 49 00 FC 9E 49 80 0B 9F 49 80 C9 9F 49 80 23 B3 49 80 5A B3 49 80 59 C0 49 00 C7 C0 49 80
11 C7 49 80 1F C7 49 80 DE CB 49 80 E7 CB 49 80 1C CC 49 80 EF E1 49 80 6C E2 49 80 4A 0A 4A 80
53 0A 4A 80 3E 0D 4A 80 D4 0D 4A 00 DB 0D 4A 80 7A 0E 4A 80 D4 0E 4A 80 76 0F 4A 80 C0 17 4A 80
19 19 4A 80 7C 19 4A 80 83 19 4A 80 6F 1B 4A 80 92 1C 4A 00 62 22 4A 80 96 29 4A 80 13 2E 4A 80
54 34 4A 80 B5 35 4A 80 D0 3A 4A 80

olldbgscript 脚本:
mov eip,00b973a1  (我的patch开始地址为00b97380)
run

刚开始还可以正常运行和修复,但运行到地址 29 5C 43 80,就抛出异常提示
    不知道如何继续,因为址0000006A不可读,请尝试更改EIP或忽略程序异常

相关程序:
00435C29    E8 D6A3C900     CALL 010D0004

010D0004    FF0424          INC DWORD PTR SS:[ESP]
010D0007    EB 01           JMP SHORT 010D000A
010D0009    9A 6800000C 01C>CALL FAR C301:0C000068                   ; 远调用

请大家帮忙看下,提示一下就可以了,然后我自己慢慢再摸索摸索。谢谢!

另外还有个疑问:
这个时候还在解壳阶段,是不是所有的API修复完成了,再运行到OEP处进行DUMP就可以了?
还是直接将原始版本的程序运行到OEP再用PATCH修复API再DUMP?(因为这种方法我用PACTH没有成功)。
请提示一下。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
2
直接用脱壳机就好了
2014-3-13 11:54
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上,自己想手脱一下,熟悉一下流程以及原理。

这几天我又试了一下。请帮忙 看看问题所在,谢谢!。

重新理了一下。
请帮忙看看步骤是否有问题,谢谢!
1,先找到OEP(00486c68),两次INT3+两次访问异常。
2,根据先前找到的IAT加密表,在 00402c14处新建EIP。
  14 2C 40 00 10 37 40 00 58 67 40 00 6A 6A 40 00 A9 6A 40 00 B0 6A 40 00 B8 6A 40 00 4A 74 40 00
  97 74 40 00 E7 74 40 00 77 75 40 00 9F 75 40 00 0A 76 40 00 4C 76 40 00 20 88 40 00 7B 89 40 00
  .....
  .....

3,在 00b8a7ff,00b8b819 两处新建硬件执行断点, 按F9,(停在 00b8a7ff 处)

4,加个patch,起始地址为 00b97380

    00B97380    A1 4074B900     MOV EAX,DWORD PTR DS:[B97440]
    00B97385    8B18            MOV EBX,DWORD PTR DS:[EAX]
    00B97387    81E3 FFFFFF7F   AND EBX,7FFFFFFF
    00B9738D    FFE3            JMP EBX
    00B9738F    0000            ADD BYTE PTR DS:[EAX],AL
    00B97391    0000            ADD BYTE PTR DS:[EAX],AL
    00B97393    0000            ADD BYTE PTR DS:[EAX],AL
    00B97395    0000            ADD BYTE PTR DS:[EAX],AL
    00B97397    0000            ADD BYTE PTR DS:[EAX],AL
    00B97399    0000            ADD BYTE PTR DS:[EAX],AL
    00B9739B    0000            ADD BYTE PTR DS:[EAX],AL
    00B9739D    0000            ADD BYTE PTR DS:[EAX],AL
    00B9739F    0000            ADD BYTE PTR DS:[EAX],AL
    00B973A1    BF 4074B900     MOV EDI,0B97440
    00B973A6    8B07            MOV EAX,DWORD PTR DS:[EDI]
    00B973A8    8B18            MOV EBX,DWORD PTR DS:[EAX]
    00B973AA    81FB FFFFFF7F   CMP EBX,7FFFFFFF
    00B973B0    79 4A           JNS SHORT 00B973FC
    00B973B2    837D D4 FF      CMP DWORD PTR SS:[EBP-2C],-1
    00B973B6    74 0F           JE SHORT 00B973C7
    00B973B8    8B47 04         MOV EAX,DWORD PTR DS:[EDI+4]
    00B973BB    8B1F            MOV EBX,DWORD PTR DS:[EDI]
    00B973BD    8B1B            MOV EBX,DWORD PTR DS:[EBX]
    00B973BF    8918            MOV DWORD PTR DS:[EAX],EBX
    00B973C1    83C0 04         ADD EAX,4
    00B973C4    8947 04         MOV DWORD PTR DS:[EDI+4],EAX
    00B973C7    8B5D FC         MOV EBX,DWORD PTR SS:[EBP-4]
    00B973CA    E8 41000000     CALL 00B97410
    00B973CF    B0 AF           MOV AL,0AF
    00B973D1    66:B9 FF15      MOV CX,15FF
    00B973D5    3A45 EF         CMP AL,BYTE PTR SS:[EBP-11]
    00B973D8    74 05           JE SHORT 00B973DF
    00B973DA    66:81C1 0010    ADD CX,1000
    00B973DF    8B07            MOV EAX,DWORD PTR DS:[EDI]
    00B973E1    8B18            MOV EBX,DWORD PTR DS:[EAX]
    00B973E3    81E3 FFFFFF7F   AND EBX,7FFFFFFF
    00B973E9    83C0 04         ADD EAX,4
    00B973EC    8907            MOV DWORD PTR DS:[EDI],EAX
    00B973EE    66:890B         MOV WORD PTR DS:[EBX],CX
    00B973F1    83C3 02         ADD EBX,2
    00B973F4    8933            MOV DWORD PTR DS:[EBX],ESI
    00B973F6  ^ EB 88           JMP SHORT 00B97380
    00B973F8    0000            ADD BYTE PTR DS:[EAX],AL
    00B973FA    0000            ADD BYTE PTR DS:[EAX],AL
    00B973FC    8B5D B4         MOV EBX,DWORD PTR SS:[EBP-4C]
    00B973FF    E8 0C000000     CALL 00B97410
    00B97404    B0 AF           MOV AL,0AF
    00B97406    66:B9 FF15      MOV CX,15FF
    00B9740A    3AC2            CMP AL,DL
    00B9740C  ^ 74 D1           JE SHORT 00B973DF
    00B9740E  ^ EB CA           JMP SHORT 00B973DA
    00B97410    BE 00704A00     MOV ESI,4A7000
    00B97415    391E            CMP DWORD PTR DS:[ESI],EBX
    00B97417    90              NOP
    00B97418    90              NOP
    00B97419    74 0F           JE SHORT 00B9742A
    00B9741B    90              NOP
    00B9741C    90              NOP
    00B9741D    83C6 04         ADD ESI,4
    00B97420    81FE 88764A00   CMP ESI,4A7688
    00B97426    77 03           JA SHORT 00B9742B
    00B97428  ^ EB EB           JMP SHORT 00B97415
    00B9742A    C3              RETN
    00B9742B  - EB FE           JMP SHORT 00B9742B

5, OllyScript 内容:

    mov eip,00b973a1
    run
    mov eip,00b973a1
    run
    mov eip,00b973a1
    run
    ......
    ......
   
6,以上可以修正一些IAT, 但执行到 0048a803 时, ebp-4 = 7C80262C, 这个地址不在  输入表中,查询不到,所以就一直停在 00B9742B,帮忙 解释一下,谢谢。
   运行到 00488a18  这个输入表时,也是一样,但这个输入函数 在DUMP之后的文件中,通过修改单步调试,找到相应的API(GetACP),并修正.
   
7,执行完成,就step 6 中的两个没有修复,其余全部修复, loadPE 修正,DUMP

8,ImportREC 修正。 OEP=00086C68, IAT RVA=000A7000,size = 0000068C,修改DUMP文件。

9,双击修复后的文件,无法执行。

10, OD重新加载 step 9中的文件,单步跟踪

执行到:
004A1664  |.  FF5424 0C     CALL DWORD PTR SS:[ESP+C]                ;  Dumped61.0049FFA2

转到:
0049FFA2      B8            DB B8
0049FFA3      BD604A00      DD Dumped61.004A60BD
0049FFA7      E8            DB E8
0049FFA8      4C            DB 4C                                    ;  CHAR 'L'
0049FFA9      7A            DB 7A                                    ;  CHAR 'z'
0049FFAA      FE            DB FE
0049FFAB      FF            DB FF
0049FFAC   .  51            PUSH ECX
0049FFAD   .  68 18010000   PUSH 118
0049FFB2   .  E8 1F120000   CALL Dumped61.004A11D6

004879F8   $- E9 03869700   JMP 00E00000

抛出异常。

查询原始文件:
0049FFA2    B8 BD604A00     MOV EAX,nSpack.004A60BD
0049FFA7    E8 4C7AFEFF     CALL nSpack.004879F8
0049FFAC    51              PUSH ECX
0049FFAD    68 18010000     PUSH 118
0049FFB2    E8 1F120000     CALL nSpack.004A11D6

004879F8    68 0000E000     PUSH 0E00000
004879FD    C3              RETN

没发现什么两样。请帮忙解释一下,谢谢。
   
在kanxue的Advanced Import protection 文章最后,他说到了一些“变形代码”的问题,我跟踪的时候,是有这样的代码出现,这些我不怎么懂,没有修复,难道上面的这些问题跟这个“变形代码”有关系吗?
谢谢指导。
2014-3-14 23:36
0
游客
登录 | 注册 方可回帖
返回